phpmyadmin各种姿势写入一句话木马的思路总结
首先声明一下,我的这几篇文章主要是关于如何写入一句话木马的,而非关于讲bypass的。关于bypass的内容我会在以后的文章中写到。
在我的上一篇文章中,是通过向general_log日志文件中写入一句话木马,将日志文件移到网站根目录下,用菜刀连上拿shell的。在短短的几天时间内就拿了大量的阿里云服务器上网站的shell。但凡遇到phpmyadmin是弱口令,而且又是windows主机的,几乎无一幸免,进一步渗透又拿到了服务器的shell。而对于linux服务器却有些束手无策,主要是linux对用户权限的划分非常严格,无法移动日志文件的位置。
虽然这个方法屡试不爽,但是这几天我还是在思考除了general_log来写入之外,是否还有其他的办法呢?经过在自己服务器上试验之后,发现确实可以,不过可能利用的姿势会有些不同。
- slow_query_log(慢查询日志)(默认关闭)
慢查询日志的用途是为了改善数据库性能的,服务器维护定义“慢”查询(默认10秒)的long_query_time变量(从mysql5.1.21版本开始以微秒记录sql的时间,之前版本时候秒记录)慢查询日志可以帮助我们找出需要改写以改善其执行性能的查询,不过,在解读它的内容时,还应该把系统的正常工作负载考虑在内,“慢”是以实际时间(不是CPU时间)度量的,如果服务器的负载在某个时间段里突然增加,就可能后有许多查询误判为是“慢”查询,而它们在系统负载处于正常情况时也许根本谈不上“慢”。
这个与general_log非常类似,不过它是记录过慢的sql语句。不过利用它来写入一句话木马也是可行的,不过与general_log相比会稍复杂些。
SET GLOBAL slow_query_log=ON (开启慢查询日志)
接着也是将slow_query_log_file的值修改到网站的根目录下,因为我是用linux服务器演示的,直接在phpmyadmin下操作权限是不够,但是windows是可以的,所以我就不修改了,只是讲原理。
但这是一个慢查询日志,顾名思义要想让你的SQL语句被记录进去就得让这个sql语句“慢”起来!为什么要这么说呢?因为所谓的快慢都是相对的,因为服务器维护定义“慢”查询(默认10秒)。这可以从两个角度来思考。
- 构造一个真的很慢的SQL语句再拼接一句话木马进去,写入到慢查询日志中
- 修改慢查询时间的阈值,默认10秒。我们将其改得非常小,设为最小值0.000001 s,那么即使普通的SQL语句也会被判定为慢查询从而写入到日志中去。
SET GLOBAL long_query_time=0.000001
我思考的时候,同时想到了这两种办法,不过我更倾向于第二种。思路需要灵活变通,从本质来讲就是让slow_query_log转变成general_log!
此时再去查看慢查询的日志文件
发现一句话木马已经成功写进去了,之后就是用菜刀连上去拿shell就行了!
2.log_error(错误日志)
这个日志记载着服务器启动和关闭的情况,还记载着关于服务器故障或异常状况信息,如果服务器无法启动,首先应该查看该日志,在数据库意外发生时,服务器会在结束之前把一条信息写入错误日志以表明发生了什么问题。通过命令show variables like ‘log_error’;查看错误日志名称和存存放的位置。
其实这个方式写入一句话木马是我偶然发现。我当时是在看每个日志记录的内容,发现这个文件会记录mysql的登录情况。
root是指用户名,localhost是指本地登录。看到这里的时候突然灵感一闪,既然用户名会被记录进来,而且又是可控的字段,那么我构造一句话木马当作用户名是否也会被写进来呢?于是直接尝试一波。
查看错误日志,发现一句话木马被成功写进去了!
虽然感觉挺不错的,但是这个日志本身是只读文件,无法直接修改目录位置。所以要想直接利用就很困难。但在实际的渗透测试过程中,如果恰好又有本地文件包含漏洞,那么去包含这个日志文件,也是一个很好的姿势拿shell。可以当作是经验积累了。
如果还有更好的思路,欢迎共同探讨!我会继续补充在这篇文章中。
赞赏
微信赞赏支付宝赞赏
目前为止有一条评论