20145207李祉昂《网络对抗》第1周学习总结
实验一:逆向及Bof基础实践
实践目的(不会改用户名,只好复制文件夹。。。超尴尬)
(此图查看其机器指令与源代码的图)
1.手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
2.利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
3.复制pwn1这个linux可执行文件到自己学号。并将其反汇编。 第一列是内存中的地址,第二列是机器指令,第三列是汇编指令。右下角的"call 8048491 ",这是一条汇编指令,是说这条指令将调用位于地址8048491处的foo函数;其对应机器指令为“e8 d7ffffff”,e8即跳转之意。main函数调用foo,对应机器指令为“ e8 d7ffffff”,那我们想让它调用getShell,只要修改“d7ffffff”为,"getShell-80484ba"对应的补码就行。算出来结果是c3ffffff。将其中的call指令的目标地址由d7ffffff变为c3ffffff。
4.vi它之后,改了里面的d7和c3没想到直接退出来了。。。运行结果就从上面的显示相同内容的功能更改成ls了。
5.尴尬了,vi之后的一套操作并没有在图中体现出来。。所以就有进行更改回来的操作,把功能变回来。以体现实验过程。
(1)因为vi是一种文本编辑器,打开后显示的是ASCⅡ码。按下ESC键,输入“:%!xxd”,将显示模式换为16进制模式,(由于asc码看上去是乱码,没啥营养,就不截了。并不会告诉你其实是我忘了。)
(2)然后输入“/e8 d7”,找到后还要将前后的内容和反汇编的对比下,确认找的这地方是正确的。然后按下a键,进入编辑模式。将d7改为c3。
4.用“:%!xxd -r”将16进制转换为原格式,再用“:wq”存盘推出vi。
实现功能:变回复制了
实验一就这了。写的贼简洁,不知写点啥,感觉要体现的点应该都有。
实验二(通过构造输入参数,造成BOF攻击,改变程序执行流。)
反汇编,了解程序的基本功能。确认输入字符串哪几个字符会覆盖到返回地址。选择了“1111111122222222333333334444444455555555”来测试
如图"0x35353535 0x35353535",由于十六进制的35换算成ASCⅡ码是5.于是我将“55555555”改成“12345678”。
如图“0x34333231 0x34333231”,换算成ASCⅡ码刚好是1234。也就是说如果输入字符串1111111122222222333333334444444412345678,那 1234 那四个数最终会覆盖到堆栈上的返回地址,进而CPU会尝试运行这个位置的代码。那只要把这四个字符替换为 getShell 的内存地址,输给pwn1,pwn1就会运行getShell。
构造输入字符串
由于我们没法通过键盘输入x7dx84x04x08这样的16进制值,所以先生成包括这样字符串的一个文件。x0a表示回车,如果没有的话,在程序运行时就需要手工按一下回车键。可以使用16进制查看指令xxd查看input文件的内容是否如预期。然后将input的输入,通过管道符“|”,作为pwn1的输入。结果如图所示。
!!!注:中间不知怎么用文件夹,所以打个字证明自己身份。。。
博客内容有参考同学的部分,实验都自己弄得。
可以了,没什么想说的了。。