前言
本篇文章属于自己验证,如有错误之处,请大佬指正。
如需转载请注明
一、环境介绍
本次验证涉及的工具有:
1 Sqlmap 版本为1.7.2
2 Phpstudy 版本为8.1.1.3(Apache+Php(5.4)+Mysql(5.7))
3 Burpsuite 2021专业版
4 Notedpad++
5 Navicat
6 中国蚁剑
7 靶场环境为Pikachu
工具都是常见工具,如需要请网上自行下载
二、原理简介
1.Sqlmap写shell条件
1. 知晓网站的绝对路径
原因是因为在指定--os-shell参数时,期间会让你输入要写入木马的web路径,不然
蚁剑如何连接
获取方式有:(1)网页报错信息 (2)phpinfo等探针信息 (3)猜测常见web目录
2. 对web目录有可写权限
即secure_file_priv = ''配置为空
原因是--os-shell参数写入shell使用的是select xx into outfile而secure_file_priv此配置
控制着是否允许通过 LOAD DATA INFILE 和 SELECT ... INTO OUTFILE 等方式来
读取或写入本地文件。如果为NULL则不允许,为空允许,但是默认情况是一个路径
表示对此路径有读写权限
3. 魔术引号关闭
原因是因为防止路径被魔术引号转义,导入sql语句执行失败 但魔术引号在php稍高版本
被弃用
2.Sqlmap写shell过程简介
在上述条件满足后,执行Sqlmap,设置对应的语言、web目录,Sqlmap会通过outfile函数
将在指定目录生成两个php文件,一个文件用于文件上传,一个文件用于接受命令参数执行系统命令
三、验证过程
1.验证准备
(1)访问靶场漏洞页面,通过Burp抓取应用层数据包,并将请求包保存为txt文件
右击拦截包选择复制到文件即可
(2)开启Mysql的访问日志,主要用于验证Sqlmap的请求
默认情况Phpstudy没有开启日志记录,需要打开配置文件添加后重启相关服务
重启后在目录生成了mysql.log,此时并没有访问,因此可以看见是没有记录的
2.验证
在Sqlmap目录打开命令行并启动
由于是测试,知晓有漏洞就直接使用–os-shell了
sqlosshell.txt为burp保存的数据包
启动命令:python3 sqlmap.py -r sqloshell.txt --os-shell
运行后跑出了相关注入点及其它信息
根据要求选择后获取到os-shell
执行Ipconfig后获取回显
此时打开网站根目录发现多了两个php文件
查看后文件内容如下
大致功能就是上述提到的,一个文件用于文件上传、一个用于接受参数执行系统命令
此时你可能有疑惑这两个文件怎么来的?
此时我们找到刚才开启日志记录的文件,这个文件记录了所做的查询等操作,你会发现这样的数据
其中的十六进制解码就是上述文件中上传文件的源码
由于我不是很会Sql语句就很好奇为什么会将内容写入到文件,于是搜索了 LINES TERMINATED BY的用法,其作用是用于指定分隔符,
对你没看错,把所有的php代码进行十六进制转换然后当作了分隔符,因此上述文件的查询结果和php代码是连接在一起的,此处还是有
点巧妙之处。
访问上传页面上传shell,也可以用蚁剑连接
总结
此处有个奇怪的点是上传的命令执行文件我并没有在mysql日志中找到记录,猜测是通过有上传功能的那个php文件上传的,因为access.log中有访问记录,但由于是POST提交只记录了请求行,并没有请求内容。如果有大佬知晓,麻烦告知一二。