LFI2Shell

Diffrent Way to Expl0it LFI!

1.如果允许上传,且可以得到路径,那么直接传shell,再LFI即可

2.不允许上传的情况下

(1)包含access.log
 通过在user-agent里写入shell,然后再LFI access.log即可
 原理:access.log 是访问日志文件,你的访问里如果有php代码也会记录到里面,但是有个缺点,如果这个文件大小超过php的限制,你就包含不了了!
 提示:access.log里面会记录 IP,URL,User-Agent
 IP不可能改,URl里面写shell代码<>会被url编码,无法执行,只有在user-agent里改才能成功写入php代码

(2)包含error.log
 原理:原理和上面基本一致,但这个是保存错误记录的
 提示:error.log里面包含IP,报错
 IP不可改,只有在报错里下功夫,直接LFI一个<?phpinfo();?>就可以执行了,这里不会被URL编码,直接报文件不存在的错

(3)包含/proc/self/environ
 个人在centos6 x64上测试失败,可以去看下成功的例子 传送门
 原理:这个文件里面装的是当前的环境变量,你php去请求就会把你当前请求的东东列出来,那么直接在user-agent里面写shell再包含就可以了
 但是包含本地文件都要考虑一个权限问题,你如果对文件无read权限,是包含不了的。
 还有(1)(2)都是以apache的为例,不同的web服务或不同的操作系统都有可能不同,但思路还是一样的。

(4)利用php协议 [传送门1] [传送门2]

http://192.168.68.51/lfitest.php?path=php://filter/read=convert.base64-encode/resource=test.php

解说:读取当前目录下的test.php,然后用base64加密。这样可以防止代码被执行,解密后就是test.php的源代码了
提醒:如果是包含的里面在php://之前就有了字符,那样是无法利用的,必须以php://开始,如果后一部分有字符,可以尝试null截断,但是null截断在php5.3.4版本就被修复了,所以请注意版本问题

Others

#绕过对../../../的过滤

使用file://协议: http://192.168.68.51/lfitest.php?path=file:///etc/passwd

posted on 2013-12-01 10:31  =_=!  阅读(345)  评论(0编辑  收藏  举报

导航