文件包含本地利用方式
前提:
1、存在一个文件包含漏洞点
2、我们有其他可控点可以写入到本地文件
3、写入的本地文件路径可知或可预测
1、包含web日志
前期通过信息搜集,得到了相关的服务器信息,比如得知中间件是apache。
apche记录web日志的文件有 access.log和error.log
这时候我们访问服务器的时候,通过burp修改我们的请求,将恶意代码写在请求内,这时候web日志就会将我们的恶意代码写入到日志文件中。由于日志文件一般来说都说默认的路径,比较容易猜测,这样就满足了我们的本地包含getshell的条件。
比如get请求 get <?php phpinfo();?>
2、包含session文件
通过cookie可以得知sessionID,session文件默认在服务器中存放的格式是sess_(sessID),而路径也是固定的,大多存在tmp目录下。因此只要找到一个可以控制session文件写入的点,就能利用包含漏洞getshell
3、包含登录日志
如果发现一个linux系统,开放了22端口,同时存在文件包含漏洞。那么我们可以构造恶意登录在ssh登录日志中写入恶意代码。
linux默认登录日志路径:/var/log/auth.log
使用xshell或scrt进行ssh登录: ssh "<?php phpinfo();?>"@192.168.100.200
肯定是登录失败的,但是在ssh登录日志中,会把这条给记录下来。那么就可以给我们包含提供getshell的机会。
4、包含mysql日志
包含mysql一般是在phpmyadmin中实现的。攻击者进入phpmyadmin后台后,可以通过后台的数据库查询接口,实现恶意代码的写入mysql日志。方法和原理与包含web日志相同。
查看日志文件状态:show variables like 'general_log'
开启日志文件:set global general_log=on
查看日志文件位置:show variables like 'general_log_file'
修改日志文件位置:set global general_log_file='tmp/log';
写入恶意代码:select "<? phpinfo();?>"
根据日志文件路径即可包含
5、包含上传文件
上传的话因为会检查后缀名,导致直接上传可执行文件失败。如果存在文件包含,就可以上传符合服务器的后缀名文件,但是在文件中写入恶意代码。常见的就是图片马,shell.jpg,shell.gif。
6、包含临时文件
临时文件指的是服务器会短暂存储,但是后续很快删除的文件。比如上传检测的时候,某些检测机制会先把上传的文件保存到一个临时文件夹里或沙盒里,临时文件要看具体业务逻辑,而且包含临时文件需要利用条件竞争的方式。动静比较大,容易被发现。
竞争条件的使用方法:
a、使用burpsuite不停的发送上传包
b、我们在文件包含页面不停的尝试包含上传文件,期望恶意文件在被服务器删除之前访问到。
c、一旦包含成功,即使文件被删除,只要shell不断,就可以保持连接