靶机地址
难度:简单
工具及漏洞信息
- 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
文件,完成!
本文完。
参考文章: