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...