今天oj里边的level2和level3的32位和64位四道题 写一下32位 其中包含libc
写题解之前 先补充两个内容
1.checksec
是用来检查可执行文件属性的。
Arch:说明这个文件的属性是什么,说明是32位的程序。
Stack:canary,这个主要是说栈保护的东西,所利用的东西就是相当于网站的cookie,linux中把这种cookie信息称为canary,所以如果开启了这个,就一般不可以执行shellcode了。
RELRO:设置符号重定向表格为只读,或在程序启动时就解析并绑定所有动态符号,从而减少对GOT(Global Offset Table)攻击。如果RELRO为” Partial RELRO”,说明我们对GOT表具有写权限。
NX(DEP)即No-eXecute(不可执行)的意思,同样的,如果NX开启后,溢出转到shellcode以后,由于开启了不可执行,所以cpu就会抛出异常,而不去执行恶意指令。
PIE(ASLR)地址分布随机化。
2.ROP
level2:
先用IDA反汇编 查看一下溢出点
很明显 88位就满了但是push了100位 是一个栈溢出题
而且这次system函数又出现了。于是想着是否可以通过控制调用system(“/bin/sh”)得到shell,将返回地址用system的地址覆盖,将传入参数设置成”/bin/sh”,用ida查找了一下字符串,发现了”/bin/sh”,于是记录下地址(或者使用pwntools的elf工具)。