WEB安全

Web for Pentester 靶场 SQL注入部分解题指南

基于回显的手工注入

基本思路

WAF视角关键点
需要支持and关键字

本节内容依赖数据库的写作方式如下,用户可控id。

  1. 判断是否存在注入点
  2. 判断 column的 数量。 select * from stub_table order by 1
  3. 确定回显的列。 select 1,2,3,4,5
  4. 查询数据库基本信息
  5. 其他利用构造
  6. 查询数据

判断是否存在注入点

最简单的方式

判断 用户输入的代码 是否确实进入了 SQL 执行。
如果确实我们构造的代码进入了SQL的执行流程。
那么,
第一种情况应返回和正常查询数量一致的记录。
第二种情况应返回0条记录。
作为用户的视角则是
第一种情况浏览器显示的结果不变。
第二种情况浏览器显示的网页内容的结果数变为0,或者直接出错。

判断 column 的数量

用类似于此的语句测试

直到数据库执行出错。
假设在order by 5时出错,那么列的数量应该是4

确定回显的列

假设该表有6列。

查询数据库基本信息

假设该表有6列,回显的是第2列。

查询用户及数据库名称

查询表的数量

查询表名

查询列数量

查询列名

查询行数量

其他高级利用

查询数据

基于布尔值的手工注入

在一些情况下,页面上是没有回显的。也就是说,不显示任何数据库中的信息。我们只能根据输出判断是否成功、失败、或者错误。这种情况就叫做盲注。

盲注的常见构造

查询用户及数据库名称

先确定数据库名称长度,根据 response 的长度的区别来判断是否正确

查询名称

查询表的数量

查询表名

查询列数量

查询列名称

查询行数量

查询记录

文本型注入点

假设源程序的SQL查询处的代码

那么在测试的时候就会出现1=11=2都存在的情况。

这时我们就不知道它是过滤了还是真的有注入点。所以我们可以修改参数,用一个单引号闭合前面的引号,再用一个注释符号(#或者--)来注释掉后面的引号:

SQLi write up

判断注入点

是否存在注入点
字符串型 or 数字型
字符串型是以单引号分割还是以双引号分割

Example 1

想象中的后端,可控是 root 部分

核心payload

Example 2

测试发现不能输入空格。

思路,用无空格粘连,%20,+%2B\t(URL encode),\n(URL encode),/**/ 的形式。

无空格粘连 (成功)

%20 空格的URL编码 (失败,触发空格过滤)
%20替代空格

+分割 (失败,触发空格过滤)
+替代空格

%2B 加号的URL编码 (失败,执行出错)
%2B替代空格

\t 简写 HT (Horizontal Tab) , %09 (成功)
HT替代空格

\n 简写 LF (Line Feed, New Line), %0A
LF替代空格

/**/ 注释符替代空格 (成功)

可以进一步实验测试ASCII中所有的字符(尤其是不可见字符),看看还有哪些字符可能存在替代空格的可能性。

Example 3

使用\t\n的在此处也失效了,但使用注释和无粘连依然可以通过。

Example 4

数字型注入
想象一下后端

payload

Example 5

考察正则表达式,防御端要求输入的参数必须以数字开头,不能是字符。

Example 6

根据正则表达式,参数的结尾必须以数字结尾,不能是字符

Example 7

根据正则表达式,参数的开头和结尾都很好的检测,关键在于/m,只是判断在同一行的参数

Example 8

order型注入判断源码结构

有两种order方式

我们可以这么测试 %23 是 #注释符

比如 payload 101 执行出错,payload 102 和 payload 103 执行成功。
说明后端采用的方式应该为

利用

order型需要盲注,利用时最好依赖 sqlmap
关键在于构造url

sqlmap命令

Example 9

与 Example 8 相似的方式判断
发现后端的结构应该是

构造方式

参考资料

Web for pentester I part 1
http://www.atomsec.org/%E5%AE%89%E5%85%A8/web_for_pentester_i-part-1/

米斯特白帽讲义 SQL注入
https://wizardforcel.gitbooks.io/mst-sec-lecture-notes/content/%E6%BC%8F%E6%B4%9E%E7%AF%87%20SQL%E6%B3%A8%E5%85%A5.html

The SQL Injection Knowledge Base
http://www.websec.ca/kb/sql_injection

新手指南:DVWA-1.9全级别教程之SQL Injection
http://www.freebuf.com/articles/web/120747.html

新手指南:DVWA-1.9全级别教程之SQL Injection(Blind)
http://www.freebuf.com/articles/web/120985.html

SQLMap用户手册
http://blog.csdn.net/wizardforcel/article/details/50695931
http://blog.csdn.net/mydriverc2/article/details/41390319

MySQL 手工注入常用语句
http://blog.csdn.net/wizardforcel/article/details/59480461

Kali Linux Web 渗透测试秘籍 第六章 利用 – 低悬的果实
http://www.jianshu.com/p/bd3daa312fe5

Kali Linux Web 渗透测试秘籍 第七章 高级利用
http://www.jianshu.com/p/f671bc45b7f1

(0)

本文由 安全周 作者:空心 发表,转载请注明来源!

热评文章

发表评论