本靶机的思路侧重点分为三部分:
1.fuzz
2.信息收集
3.审计
user部分
可以跳转web
发现’单引号可以跳200,我认为这里存在某种闭合被执行
依照外部github链接https://github.com/ArjunSharda/Searchor,确定为py,并且类似传入语句执行;此处因会被’闭合,疑似此处query传入的为py语句str类型传参,如果是str的话那后面还会有一个单引号需要闭合,当前状态justlike
query='1''
所以判断是因为没有被正常闭合,所以为空白,故进一步验证
验证成功,此处query值为
query='1'+''
进一步验证插入print语句判断执行回显
发现报错,将print进行作为str传入,查看是否存在过滤,以及验证。
确定没有过滤,判断可能存在转码报错,尝试切换转url写入执行。
成功执行命令,并返回。
因插入在语句中,需要在一句话内写入执行命令,这里我选择调用内置函数执行命令。
我用__import__引入了os,执行查看当前所在目录。
成功回显,不过因为这句返回的值是str所以直接被拼接在后面了,问题不大,不过为了方便观看,我还是用print触发报错回显。
讲一下为啥print会为啥单独显示出来,举个例子。
print输出不认后面print的类型所以无法拼接输出,但是命令还是可以执行。
这段讲的差不多了,于是随便构造个shell过去
玩个花的!
![在这里插入图片描述](https://img-blog.csdnimg.cn/0284d84980704623be9007f10780443b.png)
![请添加图片描述](https://img-blog.csdnimg.cn/1d84972d833940caa98895c85d32e57c.gif)
有丶花式(x
内网信息收集部分,我的习惯是先看sudo -l,再看是否存在未知域名,然后再看web文件夹。
sudo -l这边提示要密码,我没有。
于是看一下hosts
果不其然这里有个gitea.searcher.htb
进行一个访问看看
(建议还是除了部分一眼就能看出疑点的小问题之外,其他疑点的都做好记录在收集完主机信息之后再对存疑的挨个进行分支确认,不建议在信息收集过程中深入某个功能点或审计)
看到有俩用户,cody和aministrator。
看一眼passwd文件筛选一下有bash权限的用户,和是否存在图上用户。
bash-5.1$ cat /etc/passwd
cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin
systemd-network:x:101:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:102:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
messagebus:x:103:104::/nonexistent:/usr/sbin/nologin
systemd-timesync:x:104:105:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
pollinate:x:105:1::/var/cache/pollinate:/bin/false
sshd:x:106:65534::/run/sshd:/usr/sbin/nologin
syslog:x:107:113::/home/syslog:/usr/sbin/nologin
uuidd:x:108:114::/run/uuidd:/usr/sbin/nologin
tcpdump:x:109:115::/nonexistent:/usr/sbin/nologin
tss:x:110:116:TPM software stack,,,:/var/lib/tpm:/bin/false
landscape:x:111:117::/var/lib/landscape:/usr/sbin/nologin
usbmux:x:112:46:usbmux daemon,,,:/var/lib/usbmux:/usr/sbin/nologin
svc:x:1000:1000:svc:/home/svc:/bin/bash
lxd:x:999:100::/var/snap/lxd/common/lxd:/bin/false
fwupd-refresh:x:113:119:fwupd-refresh user,,,:/run/systemd:/usr/sbin/nologin
dnsmasq:x:114:65534:dnsmasq,,,:/var/lib/misc:/usr/sbin/nologin
_laurel:x:998:998::/var/log/laurel:/bin/false
筛选用户
cat /etc/passwd|grep /bin/bash
root:x:0:0:root:/root:/bin/bash
svc:x:1000:1000:svc:/home/svc:/bin/bash
只有root和svc,并无其他用户存在,可以确定下一个要提权的就是root。
继续收集主机信息。
看一下自己用户目录下所有的文件
自家隐藏文件中发现一个.gitconfig文件,里面有cody的名字。
懒得翻了,丢个linpeas进去_(:з」∠)_
筛选了一下内容,分别得到
其实我一开始shell进来是看了下web目录,发现里面基本没啥,但是突然想起来还有第二个域名,找了一会没找到对应的web目录,就给忘了。
这边linpeas扫描发现原来的web目录下还有个隐藏的目录.git
接着收集信息
第二个administrator的前面那段疑似sha-1
hashcat跑rockyou没跑出来,应该不是突破点。
于是返回来看第一段的
因为svc的家目录下有cody的文件,可知大概率svc就是cody。
先尝试登陆一下web
翻了一顿,一点有用的都没有
于是尝试用这个密码看一下sudo -l
成功看到,这个密码确实是svc的密码。
可以sudo执行的是个脚本,跑一下看看
是个执行docker命令的,先看下都有哪些容器在跑。
一个db一个gitea,inspect看下俩容器的详细信息。
gitea
mysql_db
提炼一下有效信息
gitea
[22/tcp:{} 3000/tcp:{}]
GITEA__database__DB_TYPE=mysql
GITEA__database__HOST=db:3306
GITEA__database__NAME=gitea
GITEA__database__USER=gitea
GITEA__database__PASSWD=yuiu1hoiu4i5ho1uh
USER=git
mysql_db
3306/tcp:{} 33060/tcp:{}
MYSQL_ROOT_PASSWORD=jI86kGUuj87guWr3RyF
MYSQL_USER=gitea
MYSQL_PASSWORD=yuiu1hoiu4i5ho1uh
MYSQL_DATABASE=gitea
GOSU_VERSION=1.14
MYSQL_MAJOR=8.0
MYSQL_VERSION=8.0.31-1.el8
MYSQL_SHELL_VERSION=8.0.31-1.el8
这里拿到数据库密码尝试登陆一下33060的数据库
上不去
试一下gitea用户,也拉胯了
尝试拿着这两个密码去fuzz一下web的administrator和系统的root
root上不去
yuiu1hoiu4i5ho1uh上了web的administrator账号
账号内有四个脚本,其中system-chekup.py就是我们sudo可以执行的。
审计部分
system-chekup.py
#!/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)
这边我想用docker-inspect触发执行argv[2]argv[3]和web时候一样的利用,发现不行,也可能是我利用方式有问题。
于是只能用审出来另一个更简单的方式…
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.sh脚本的选项…
结束,其实对自己有点失望,难度真的非常低的一个靶机,但是这个靶机非常偏向fuzz,打的时候尽管拿到两个数据库密码,仍然卡登录administrator那边很长时间,所以越是简单越容易暴露自己不足的地方…要好好钻研一哈fuzz