Skip to content

Commit dbb81c6

Browse files
author
exploit
committed
Finished readme
1 parent 0d11be5 commit dbb81c6

6 files changed

+68
-20
lines changed

CFGGenerator.php

+8-10
Original file line numberDiff line numberDiff line change
@@ -1067,16 +1067,15 @@ public function sinkTracebackBlock($argName,$block,$flowsNum){
10671067
// echo "<pre>" ;
10681068

10691069

1070-
// // //从用户那接受项目路径
1071-
// // $project_path = 'E:/School_of_software/information_security/PHPVulScanner_project/simple-log_v1.3.12/upload/';
1072-
// // $project_path = "D:/MySoftware/wamp/www/code/phpvulhunter/test/test.php" ;
1073-
// // $project_path = "E:/School_of_software/information_security/PHPVulScanner_project/74cms_3.3/" ;
1074-
// // $allFiles = FileUtils::getPHPfile($project_path);
1075-
1076-
// // //初始化
1077-
// // $initModule = new InitModule() ;
1078-
// // $initModule->init($project_path, $allFiles) ;
1070+
// //从用户那接受项目路径
1071+
// $project_path = 'E:/School_of_software/information_security/PHPVulScanner_project/simple-log_v1.3.12/upload/';
1072+
// $project_path = "D:/MySoftware/wamp/www/code/phpvulhunter/test" ;
1073+
// //$project_path = "E:/School_of_software/information_security/PHPVulScanner_project/74cms_3.3/" ;
1074+
// $allFiles = FileUtils::getPHPfile($project_path);
10791075

1076+
// //初始化
1077+
// $initModule = new InitModule() ;
1078+
// $initModule->init($project_path, $allFiles) ;
10801079

10811080
// $cfg = new CFGGenerator() ;
10821081
// $visitor = new MyVisitor() ;
@@ -1094,7 +1093,6 @@ public function sinkTracebackBlock($argName,$block,$flowsNum){
10941093
// $pEntryBlock->is_entry = true ;
10951094
// $ret = $cfg->CFGBuilder($nodes, NULL, NULL, NULL) ;
10961095

1097-
// echo '456';
10981096

10991097

11001098
?>

FileSummaryGenerator.php

+1-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ class FileSummaryGenerator {
88
* @return array(fileSummarys)
99
*/
1010
public static function getIncludeFilesDataFlows($fileSummary){
11-
if (is_object($fileSummary)){
11+
if (!is_object($fileSummary)){
1212
return;
1313
}
1414
//1.得到include files
@@ -29,7 +29,6 @@ public static function getIncludeFilesDataFlows($fileSummary){
2929
//查看此文件是否有include文件
3030
$pRetFiles = self::getIncludeFilesDataFlows($ret);
3131
$retFileSummary = array_merge($pRetFiles, $retFileSummary);
32-
3332
$retFileSummary = array_merge(array($ret), $retFileSummary);
3433
}else{
3534
$includeFileSummary = self::getFileSummary($absPath);

README.md

+42-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,45 @@
11
# phpvulhunter
2-
A tool that can scan php vulnerabilities automatically using static analysis methods
3-
------
4-
##Email
2+
phpvulhunter是一款PHP源码自动化审计工具,通过这个工具,可以对一些开源CMS进行自动化的代码审计,并生成漏洞报告。
3+
##安装
4+
首先从github上进行获取:
5+
6+
```
7+
git clone https://github.com/OneSourceCat/phpvulhunter
8+
```
9+
10+
下载完成后,将工程目录放置于WAMP等PHP-Web运行环境中即可访问`main.php`
11+
12+
```
13+
http://127.0.0.1/phpvulhunter/main.php
14+
```
15+
##使用
16+
搭建好环境,访问main.php后,效果如下:
17+
![](http://7xjb22.com1.z0.glb.clouddn.com/mainpage.png)
18+
19+
有几个参数需要填写:
20+
> * Project Path:需要扫描的工程绝对路径(文件夹)
21+
> * File Path:需要扫描的文件绝对路径(文件或者文件夹)
22+
> * Vuln Turp:扫描的漏洞类型,默认为ALL
23+
> * Encoding:CMS的编码类型
24+
25+
如果需要扫描整个工程,则`Project Path``File Path`填写一致即可。对于大的工程,由于代码量较多且内部引用复杂,所以可能会占用较多的CPU资源、花费较长的时间才能扫描完成。
26+
27+
配置好参数之后,点击`scan`按钮即可进行扫描,扫描中效果如下:
28+
![](http://7xjb22.com1.z0.glb.clouddn.com/scanning.png)
29+
##扫描报告
30+
扫描完成后,就会生成扫描报告,具体如下:
31+
![](http://7xjb22.com1.z0.glb.clouddn.com/report1.png)
32+
相关参数含义如下:
33+
> * File Path:出现漏洞的文件绝对路径
34+
> * Vlun Type:漏洞的类型
35+
> * Sink Call:危险函数调用的位置
36+
> * Sensitive Arg:最后跟踪到的危险参数
37+
38+
查看代码时,点击`Code Viewer`即可:
39+
![](http://7xjb22.com1.z0.glb.clouddn.com/report2.png)
40+
##关于Bug和维护
41+
由于作者马上面临实习,单靠个人精力已无力继续维护下去,因此可能会在扫描中出现bug。如果你有兴趣和足够的精力继续扩展与修正,并有信心能够应对大量繁琐的调试与扩展工作,请联系下面的邮箱索要详细的设计与实现文档。
42+
543
Exploit:exploitcat@foxmail.com
44+
645
xyw55:xyw5255@163.com

analyser/TaintAnalyser.class.php

+7-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
<?php
2+
23
require_once 'SqliAnalyser.class.php';
34
require_once 'XssAnalyser.class.php';
45
require_once 'FileAffectAnalyser.class.php';
@@ -9,7 +10,9 @@
910
require_once 'IncludeAnalyser.class.php';
1011
require_once 'LDPAAnalyser.class.php';
1112
require_once 'XPathAnalyser.class.php';
13+
1214
use PhpParser\Node ;
15+
1316
/**
1417
* 用于污点分析的类
1518
* 污点分析的任务:
@@ -217,14 +220,17 @@ public function currBlockTaintHandler($block,$node,$argName,$fileSummary, $flowN
217220
$varName = $this->getVarName($var) ;
218221
//如果var右边有source项
219222
if(in_array($varName, $this->sourcesArr)){
223+
// $ret = $this->multiFileHandler($block, $varName, $node, $fileSummary) ;
224+
// if($ret == 'safe'){
225+
// continue ;
226+
// }
220227
//报告漏洞
221228
$path = $fileSummary->getPath() ;
222229
$this->report($path, $path, $node, $flow->getLocation(), $type) ;
223230
continue ;
224231
}else{
225232
//首先进行文件夹的分析
226233
$this->multiFileHandler($block, $varName, $node, $fileSummary) ;
227-
228234
//文件间分析失败,递归
229235
$this->currBlockTaintHandler($block, $node, $varName, $fileSummary, $flowNum) ;
230236
}
@@ -515,7 +521,6 @@ public function multiFileHandler($block, $argName, $node, $fileSummary,$flowNum=
515521
$type = TypeUtils::getTypeByFuncName(NodeUtils::getNodeFunctionName($node)) ;
516522
$encodingArr = $target->getEncoding() ;
517523
$saniArr = $target->getSanitization() ;
518-
519524
$res = $this->isSanitization($type, $target, $saniArr, $encodingArr) ;
520525
if($res == true){
521526
return "safe" ;

context/InitModule.class.php

-2
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,8 @@ class InitModule {
1212
* @param string $project_path
1313
*/
1414
public function init($project_path, $allFiles){
15-
1615
$this->initContext($project_path);
1716
$context = Context::getInstance() ;
18-
1917
$this->initFileSummaryContext($project_path, $allFiles) ;
2018
}
2119
/**

context/ResultContext.class.php

+10-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,16 @@ public function getResArr() {
6262
return $this->resArr;
6363
}
6464

65-
//--------------------单例模式---------------------------------
65+
66+
/**
67+
* @param multitype: $resArr
68+
*/
69+
public function setResArr($resArr)
70+
{
71+
$this->resArr = $resArr;
72+
}
73+
74+
//--------------------单例模式---------------------------------
6675
private function __construct(){}
6776

6877
private function __clone(){}

0 commit comments

Comments
 (0)