知识点
解题流程
方法一
查看文件类型:
32位文件
查看保护机制
只开启了NX
32位IDA打开
伪码:
0x70=112
0x64=100
发现该题目为典型的格式字符串漏洞。
解题思路
此题的大概思路如下:
1、找到libc_start_main在栈内的偏移,使用%p暴露该地址
2、利用LibcSearcher猜测使用的libc,算出libc基址
3、计算出此libc的system地址
4、把prinf的got表改为system地址
5、执行system(’/bin/sh’)
具体调试
执行gdb pwn7调试程序
使用b printf在printf处下断点
输入r执行程序
程序提示用户输入
输入123456回车
此时程序运行到printf语句停止
pwndbg调试
输入stack 60命令查看栈情况
可以看到,在0xffffcf18处为之前输入的123456
在0xffffcf8c处为libc_start_main+247
使用fmtarg 0xffffcf8c算出偏移,此处知道了为%35$p
使用fmtarg属于懒人做法,需安装在gdb里。
具体方法
exp:
#coding=utf-8
from pwn import *
import sys
#不清楚libc可以用这个
from LibcSearcher import *
context.log_level="debug"
context.terminal = ['gnome-terminal','-x','sh','-c']
#本机环境
if sys.argv[1] == '0':
p = process('./pwn7')