python3 php审计敏感函数

# coding=utf-8

import os
import csv

# 1、首先遍历所有的目录,将其中的php的文件路径进行保存到数组中
# 2、对数组中的每个php文件进行读取,扫描敏感函数的路径并且进行打印
# 3、写入到csv文件中进行保存
# 4、统计每个函数出现的个数

# D:\phpstudy_pro\WWW\huka


php_files = list()
func_num = dict()
funcs = [' eval(',
         ' create_function(',
         ' system(',
         'ob_start(',
         ' exec(',
         ' array_map(',
         ' array_filter(',
         'extract(',
         'unserialize(',
         ' simplexml_load_string(',
         ' file_put_contents(',
         ' usort(',
         ' uasort(',
         'foreach($_POST',
         'foreach($_GET',
         'foreach($_REQUEST',
         'foreach($_COOKIE',
         'parse_str(',
         ''
         ]
for i in funcs:
    func_num[i.strip('(').strip(' ')] = 0

for root, dirs, files in os.walk("D:\phpstudy_pro\WWW\huka", topdown=False):
    for name in files:
        file = str(os.path.join(root, name))
        if file.endswith('.php'):
            php_files.append(file)

with open('C:\\Users\\dell\\Desktop\\自己练手脚本\\代码审计敏感函数\\dov.csv', 'w', encoding='utf-8', newline='') as q:
    csv_writer = csv.writer(q)
    csv_writer.writerow(['漏洞代码行', '敏感函数', '漏洞文件', '漏洞当前内容'])
    for file in php_files:
        with open(file, 'r', encoding='UTF-8', errors='ignore') as f:
            data = f.readlines()
            for aline in data:
                aline = aline.encode('utf-8').decode('utf-8')
                code_line = int((data.index(aline) + 1))  # 代码行数
                for func in funcs:
                    clear_func = func.strip('(').strip(' ')
                    if func in aline:
                        func_num[clear_func] += 1
                        print("第 %d 行发现敏感函数 %s ,文件位置位于 %s,当前数据内容为 %s" % (code_line, func.strip('(').strip(' '), file, aline))
                        csv_writer.writerow([code_line, func, file, aline])
    for func in funcs:
        clear_func = func.strip('(').strip(' ')
        csv_writer.writerow([clear_func, func_num[clear_func]])

posted @ 2020-04-18 10:37  zpchcbd  阅读(183)  评论(0)    收藏  举报