靶机地址
难度:简单
工具及漏洞信息#
- netdiscover
- nmap
- dirb
- dirsearch
- gobuster
- 命令执行
- SUID 权限 find 命令提权
0x00 信息收集#
扫描靶机信息#
使用netdiscover
扫描当前网段,看见主机名是PCS Systemtechnik GmbH
的一般就是靶机了:
nmap -sS -sV -n -T4 -p- 192.168.1.8
- -sS: TCP 同步扫描,也称为半开放扫描
- -sV: 探测开放端口以确定服务 / 版本信息
- -n: 不进行 dns 解析节约时间
- -T4: 时序模板设置为 4 级
- -p-: 扫描所有端口
- -A: 启用操作系统检测,版本检测,脚本扫描和跟踪路由,-A 选项包含 - sV 选项
可以看到只开了一个apache
服务和ssh
扫描路径#
dirb 默认扫描了只显示返回状态码为 200 的地址,还是很不错的:
dirb http://192.168.1.8 -X .php,.txt,.zip,.html
相比之下,dirsearch
默认显示所有返回的状态码的路径,使用-x
执行不显示的状态码:
python3 dirsearch.py -t 50 -e .php,.txt,.zip,.html -x 400,403,404,500,503,514,564 -u http://192.168.1.8
扫描工具还有gobuster
,字典我们可以使用star
了 2w 多星的一个安全字典
kali
可直接使用命令apt install seclists -y
安装,安装完默认字典位置在
/usr/share/seclists
然后我们扫描一下
gobuster dir -u http://192.168.1.8 -s 200,301,302 -t 50 -w /usr/share/seclists/Discovery/Web-Content/big.txt -x .php,.txt,.html,.zip
这个工具也挺好用的
0x01 反弹 shell#
接着访问一下robots.txt
,发现是一串base64
编码的字符,解码后发现靶机作者在开玩笑
访问主页,源代码最后有一行注释
尝试使用base64
解码三次,得到一个文件名字workinginprogress.php
:
访问该路径:
提示让我们执行ping
命令,尝试多次后发现是cmd
命令注入:
这也就意味着这里能执行shell
命令
在kali
上执行nc
监听:
nc -lvp 4444
在刚才的命令注入处反弹 shell:
获取到shell
后从python
的pty.spawn
获取标准 pty,从 python 命令提示符到交互式 shell
python -c 'import pty;pty.spawn("/bin/bash")'
可以看到我们现在以当前命令注入的身份www-data
获取到了的网站根目录下的一个shell
find 命令本身具有此权限。 这使我们的工作变得容易一些。
使用find
命令查找居于 SUID 权限可执行文件,我们使用命令
find / -perm -u=s -type f 2>/dev/null
- /: 在根目录下查找
- perm: 查找指定权限的文件,/u=s 或者 - u=s 参数列出系统中所有
SUID
的档案 - type: 找符合指定的文件类型的文件,-type f: 查找指定目录下所有普通文件
- 2>/dev/null: 2 > 部分的意思是 “重定向文件通道号 2”- 映射到标准错误文件通道 stderr,这是程序经常将错误写入其中的位置,/dev/null 是一种特殊字符设备,只允许向其中写入任何内容;阅读时,它不会返回任何内容,因此 2>/dev/null 让 shell 将标准错误从正在运行的程序重定向到 /dev/null,从而有效地将其忽略。
- SUID: SUID (Set owner User ID up on execution) 简单来说。suid,它会出现在文件拥有者权限的执行位上,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。所以我们去找一个文件拥有者为 root,而且其执行位上有 s 的执行文件,那么即使我们用普通用户运行这个文件时,这个文件的执行权限就是 root
- 为什么使用 find 命令呢?原因:在 find 的后面,是可以带入命令的,而我们要的就是执行其他命令。也就是说,当我们调用 find 命令时,因为 find 命令有 s 权限,所以 find 在执行时的权限就是 root 命令,而在 find 后面的带入的命令也就是在 root 权限下执行的命令了
参考文章:
发现/usr/bin/find
,也就是当前我们正在使用的find
命令是具有SUID
权限的
0x02 find 命令提权#
尝试使用 find 命令调用 /bin/sh 执行 shell
find . -exec /bin/sh -p \; -quit
- exec: 来对每一个找到的文件或目录执行特定命令。它的终止是以
;
为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠转义。 - quit: 表示命令执行完了就退出
成功获得root
的shell
,查看/root
目录下的root.txt
文件,完成!
本文完。
参考文章: