谷安靶机:172.16.33.43
靶机官网:Potato: 1[1]
实战思路:
-
主机发现 -
端口发现(服务、组件、版本) -
漏洞发现(获取权限) -
2112端口/FTP服务 -
组件漏洞 -
口令漏洞 -
80端口/HTTP服务 -
组件漏洞 -
URL漏洞1(目录、文件) -
URL漏洞2(目录、文件) -
22端口/SSH服务 -
组件漏洞 -
口令漏洞 -
提升权限 -
01、suid -
02、cron -
03、sudo
一、主机发现
本次攻击指定IP,不涉及主机发现过程。
二、端口发现(服务、组件、版本)
使用命令sudo -u root nmap 172.16.33.43 -n -Pn -p- --reason -sV -sC -O
,获得主机开放的端口、提供的服务、使用的组件、组件的版本。
开放的端口 |
提供的服务 |
使用的组件 |
组件的版本 |
22/tcp |
ssh |
OpenSSH |
8.2p1 |
80/tcp |
http |
Apache httpd |
2.4.41 |
2112/tcp |
ftp |
ProFTPD |
? |
- |
os |
Ubuntu Linux |
? |
三、漏洞发现(获取权限)
2112端口/FTP服务
组件漏洞
因为nmap探测出FTP服务可以匿名登录,所以优先查看。使用命令searchsploit ProFTPD
,发现ProFTPD组件有不少Nday漏洞。但因为没有具体版本,每个EXP试一遍的成本较高,所以暂时先不盲打EXP。
口令漏洞
使用命令ftp 172.16.33.43
连接FTP服务,使用匿名账号anonymous
和空口令
登录,使用命令ls -la
查看文件情况,发现两个文件。使用命令get index.php.bak
和get welcome.msg
下载文件后,使用命令quit
退出FTP服务。
welcome.msg文件没啥价值,使用命令vim index.php.bak
查看备份文件,获得账号admin
和密码potato
,以及两个网站URL:登录页/index.php
、登录成功后的跳转页/dashboard.php
。
访问两个网站URL,/index.php
不是预想中的登录页面,说是还在开发中。dashboard.php
更是直接就404了,而不是提示未授权访问之类。
基于index.php.bak
代码构造登录请求,也无法登录,看来网站没用这套代码。
80端口/HTTP服务
组件漏洞
01、中间件组件:使用命令searchsploit Apache httpd 2.4.
,未发现Apache httpd 2.4.41组件的Nday漏洞。
02、应用组件:使用Wappalyzer、FindSomething等插件自动识别网站组件,使用BurpSuite等工具手动识别网站组件,无特别的收获。
URL漏洞1(目录、文件)
01、直接访问:使用浏览器打开http://172.16.33.43/
,发现只有一张图片,还说网站正在开发中。
把图片下载下来,使用命令steghide --info potato.jpg
发现图片使用了隐写技术,但需要密码才能提取隐写的内容,使用前面拿到的密码potato
都无法提取。
使用命令stegcracker potato.jpg
也无法爆破出隐写术的密码。
02、目录扫描:使用命令dirb http://172.16.33.43/
对网站进行目录和文件扫描,发现/admin/
目录、/admin/logs/
目录、/admin/index.php
文件。
访问发现/admin/
目录其实就是/admin/index.php
文件,而且是之前源代码拿到的登录页面,但是使用前面拿到的账号admin
和密码potato
无法登录。
访问/admin/logs/
目录,发现有3个日志文件,是admin
账号的密码修改日志,这是暗示我们之前拿到的密码没用,需要爆破一下?
但是使用Burp Suite爆破密码,也以失败告终。
查看大佬的Potato 1 Vulnhub Walkthrough[2],发现可以利用PHP的类型转换机制,绕过身份验证,登录任意账号。查看PHP类型转换机制的漏洞风险PHP Magic Tricks: Type Juggling[3],发现第33-36页的实战案例,和index.php.bak
的登录代码一模一样,疑似靶机作者抄的这个案例。
index.php.bak
中身份验证的主要代码是if (strcmp($_POST['username'], "admin") == 0 && strcmp($_POST['password'], $pass) == 0)
,前半段验证账号,后半段验证密码。strcmp函数[4] 是比较两个字符串,相同返回0,前面大就返回正数,后面大就返回负数。最关键的代码是strcmp结果与0的比较, 这里用的==
会在比较前进行类型转换[5],使得==
两边的数据类型相同以便比较,从而导致了NULL==0
或false==0
等意料之外的情况出现,即:业务逻辑是账号和密码都是0==0才能登录,绕过逻辑是账号和密码都是NULL==0也能登录。
因此只要构造出strcmp($_POST['password'], $pass)
的结果是NULL
就能绕过身份验证,PHP Magic Tricks: Type Juggling[6] 第33-36页的实战案例是让($_POST['password']
变成数组,即strcmp(数组,字符串)
的结果是NULL,具体做法是:将登录请求中的password
参数改成password[]
,然后单击右键选择在浏览器中打开响应结果。
看来,strcmp函数不适合用在身份验证功能等用户能够控制参数的场景呀。
03、模糊测试:基于目前已知信息,没有对网站的目录和文件进行FUZZ的必要。
04、信息收集:前面在Firefox翻找网站的流量全都走Burp Suite代理,在Burp Suite中使用HaE插件,但未发现敏感信息泄露。
URL漏洞2(目录、文件)
01、直接访问:浏览器打开http://172.16.33.43/admin/dashboard.php
,发现有几个功能,其中 Ping
功能是获取PING 8.8.8.8
的结果,尝试了几个命令执行漏洞的payload都是失败。
Logs
功能是获取日志文件,尝试本地任意文件读取漏洞的payload,确认存在漏洞。
使用BurpSuite的Intruder功能,利用本地文件读取漏洞,读取/usr/share/seclists/Fuzzing/LFI/LFI-gracefulsecurity-linux.txt
字典中的文件,并无特别的收获。
22端口/SSH服务
组件漏洞
使用命令searchsploit OpenSSH 8.2
和 searchsploit OpenSSH 8.
,未发现OpenSSH 8.2p1组件的Nday漏洞。
口令漏洞
基于本地文件读取漏洞拿到的/etc/passwd
文件中有SHELL环境的SSH账号,使用命令hydra -L user.txt -P /usr/share/seclists/Passwords/500-worst-passwords.txt 172.16.33.43 ssh
爆破弱口令,获得账号webadmin
和密码dragon
。
四、提升权限
01、suid
使用命令find / -perm -u=s -ls 2>/dev/null
,发现不少可以用于提权的系统命令。
在GTFOBins[7]搜索这些系统命令的提权命令,均尝试失败。
02、cron
使用命令find /var/spool/cron -type f -ls 2>/dev/null
没有获得输出,使用命令find /var/spool/cron -type f -ls
确认是当前用户没有read权限。
使用命令find /etc/*cron* -type f -ls 2>/dev/null
发现不少计划任务,使用命令find /etc/*cron* -type f -ls -exec cat {} ; 2>/dev/null > cron.txt
转存这些计划任务,然后使用命令less cron.txt
查看,没发现有引用可以写入提权代码的脚本文件。
03、sudo
使用命令sodo -l
查看当前用户能以哪些用户的权限执行哪些命令,发现能以任意用户的权限执行/bin/nice /notes/*
命令。使用命令 find /notes/ -ls
查看/notes/*
目录下有什么文件,发现/notes/id.sh
和/notes/clear.sh
文件。
以root权限执行命令sudo -u root /bin/nice /notes/id.sh
,发现是显示id。以root权限执行命令sudo -u root /bin/nice /notes/clear.sh
,发现是清空屏幕,都没什么特别。
在GTFOBins[8]搜索nice命令的提权命令,但是当前用户没有权限执行。
留意到sodo -l
查到的/bin/nice /notes/*
是通配符,能否像任意文件读取那样穿越路径呢?一试还真行,看来通配符*
不适合用在/etc/sudoers
、/etc/crontab
等配置文件中呀。
参考资料
Potato: 1: https://www.vulnhub.com/entry/potato-1,529/
[2]Potato 1 Vulnhub Walkthrough: https://www.infosecarticles.com/potato-1-vulnhub-walkthrough/
[3]PHP Magic Tricks: Type Juggling: https://owasp.org/www-pdf-archive/PHPMagicTricks-TypeJuggling.pdf
[4]strcmp函数: https://www.php.net/manual/zh/function.strcmp.php
[5]类型转换: https://www.php.net/manual/zh/language.types.type-juggling.php
[6][PHP Magic Tricks: Type Juggling: https://owasp.org/www-pdf-archive/PHPMagicTricks-TypeJuggling.pdf
[7]GTFOBins: https://gtfobins.github.io/#
[8]GTFOBins: https://gtfobins.github.io/#
原文始发于微信公众号(OneMoreThink):靶机实战(7):OSCP备考之谷安172.16.33.43
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论