Recon
Nmap

目标开放了 22 和 80 端口。
查看一下网页。

有个 login 页面。
我先尝试了一下 sql injection,但是没有成功,无法登录。
截取了请求,也没有什么特别的。

Dirbuster

很快找到了换个 /login 目录是可以访问的。

重点是 config.php 和 .swp 两个文件。但是 config.php 没有什么内容,看一下 .swp 。
我尝试 vi -r login.php.sqp,但是无法恢复。
扩展阅读
VIM Recovery Mode
直接 vi 打开之后,是个乱码。


但是下面有字符串,那就用 strings 看一下。

这里看到了比较用户名密码的登录逻辑。
那么问题肯定在这里,只是我还不知道。
搜索一下 php strcmp exploit

很多 bypass,那这个肯定就是有漏洞可以利用了。
扩展阅读
PHP String Comparison Vulnerability
Bypass PHP Strcmp
PHP Type Juggling
这个漏洞是 type juggling 这个语言特征造成的。大家阅读一下文档,php 应该用 === 比较相等,而不应该用 ==。
Bypass PHP == Operator

在第二篇文章中能找到我想要的答案。也就是说,给这个 strcmp 方法一个对象,或者一个数组,那么结果会返回 0,也就能绕过登录逻辑。


我用了 admin 做用户名,结果还真是 admin 登录。
看了下源码这是写死的,忽略即可。

Foothold
php 文件上传测试


上传成功,没有限制。
下面就是常规套路了,上传 reverse shell,连接本地。

修改 ip 和端口,上传,然后本地监听 9903端口,找到 /uploads 目录执行。

找不到文件。

Directory Enumeration
用 dirsearch 找一下上传目录。

没有结果。
换 dirbuster。

也没有结果。再换 gobuster。也没有结果。
我现在特别喜欢 dirbuster,因为可以右键直接在浏览器打开。
我换回 dirbuster,然后换了一个 /dirb/big.txt 的字典,就有结果出来了。

上传目录是 /_uploaded/。


Privilege Escalation

/etc/passwd 显示有一个用户名 john。
config.php 中有一个登录信息。

没有用户叫 admin ,显然不会直接给我 root 的密码,所以一定是 john 的。


我登录到一个 linux 用户账户之后,前几个个命令一定是 id,cat /etc/passwd,sudo -l (如果有密码的话)。
现在我有 john 的密码,看一下他的 sudo 权限。

之前在一篇文章中看到 sudo -l -l,试了一下,好像多一点点内容。
线索来了,find 命令可以使用。
find 可以配合 exec 执行命令。

就找一下当前目录的文件就好了,然后执行 /bin/bash,获得 root shell
I'm in...