• 提前享受肯定会逐步成为美谈呢。 2019-10-13
  • 山西省委召开常委会议 骆惠宁主持 2019-10-11
  • 【聚焦】介休上了农民日报 看看厕所革命的介休故事 2019-10-11
  • 一图看懂丨拉林铁路藏木特大桥 2019-10-05
  • 朔城警方抓获一名故意伤害致死犯罪嫌疑人 2019-09-26
  • 网约车谨防四类风险 小心遗落手机被司机私自转账 2019-09-25
  • 【高清组图】新疆巴里坤草原千亩油菜花竞相绽放美不胜收 2019-09-19
  • 海内外央企人收听收看十九大开幕直播(组图) 2019-09-09
  • 民众应对二维码的安全性加以警惕,注意防范街头的扫码推广,不要轻易去扫码。 2019-08-26
  • 美媒评选全球五大最危险核潜艇 中国无一入选 2019-08-26
  • 新华社评论员:向着伟大梦想阔步前进——写在“中国梦”提出五周年之际 2019-08-20
  • 端午3天8910万人次出游 你是怎么过节的? 2019-08-20
  • 王国平应邀赴金华市调研并作专题讲座 2019-08-12
  • 电视剧抱团出海 又有哪些作品走出了国门 2019-08-12
  • 新疆喀纳斯湖再现不明水生物 2019-07-31
  • 黑龙江11选5前三直选走势图:网站制作12年

    利用Thinkphp 5缓存漏洞实现前台Getshell

    数学家破解11选5骗局 www.mu-ti.com 2018-08-11 17:12:13


    0×00 背景

    网站为了实现加速访问,会将用户访问过的页面存入缓存来减小数据库查询的开销。而Thinkphp5框架的缓存漏洞使得在缓存中注入代码成为可能。(漏洞详情见参考资料)

    本文将会详细讲解:

    1. 如何判断缓存漏洞存在的可能性

    2. 如何利用Thinkphp5的框架漏洞结合网站的一些配置实现前台getshell

    希望可以给予读者一些关于漏洞应用的启发。

    0×01 环境

    测试环境

    1.某基于Thinkphp5.0.10搭建的论坛类测试网站

     

    2.apache2

     

    3.php5.6及以上版本,相关php组件

     

    4.mysql

    工具

    1.dirsearch (github上的一个用python编写的网站路径扫描工具)

    0×02 实现

    判断缓存漏洞存在的可能性

    1.查看网页的cookie,发现存在thinkphp_show_page_trace字段,确定网页基于thinkphp框架。 

    1.png

    2.使用 dirsearch 扫描目标网站。python3 dirsearch.py -u site_ip_here -e php发现可以访问 cache目录,说明可能存在缓存漏洞。 

    2.png

    实施攻击

    1.考虑到这是一个论坛类网站,尝试发帖注入缓存。

    3.png

    2.这是最困难的一步,猜解缓存中的php文件名。根据框架实现,文件名是一个唯一字符串的md5码(此处的md5要用php的函数计算,测试发现和网上的一些在线平台计算结果不同)??悸堑铰厶忱嗤居写罅康奶?,需要用数据库存储,而帖子的索引应该为很有可能为id 。

    再结合url的路径名,猜测为article_id

    echo(md5(“article_52″));

    12a51218427a2df68e54e8f4c8b10109 

    4.png

    通过访问缓存成功getshell 

    5.png

    0×03 原理分析:

    框架

    在thinkphp框架中,/thinkphp/library/think/cache/driver/File.php中定义了缓存的实现。其中,getCacheKey($name)函数实现了cache文件路径的计算,为获得缓存文件名称提供了可能。

    6.png

    而set()与get()函数以序列化对象的方式无过滤地实现了缓存数据的写入与读出,为代码注入缓存提供可能。

    7.png

    8.png

    通过测试,可以发现帖子中的内容可以直接写入缓存文件。

    9.png

    由于缓存文件是一个php文件,可以进行代码注入。在代码前加一个回车,使代码行独立于前面的注释行。再在末尾加上注释符号//,注释剩余内容。

     

    网页实现

    在处理帖子的代码中,读取帖子首先查询cache文件,通过调用thinkphp5框架中的cache接口实现。

    11.png

    0×04 防御:

    1. 从框架入手,在/thinkphp/library/think/cache/driver/File.php 中的set()函数中对于$value参数进行过滤,去除换行符号。(具体代码见参考资料)缺点: 可能会导致缓存文件在展示时文本布局的改变。

    2. 从网页实现入手,读取缓存时的使用的唯一索引可以设置的比较复杂,让攻击者无法猜到。如: 3ae282ad69314d68_article_id

    3. 从服务器的配置入手,关闭从外部对于cache文件夹的直接访问。

    4. 从php的配置入手,关闭eval等危险函数。

  • 提前享受肯定会逐步成为美谈呢。 2019-10-13
  • 山西省委召开常委会议 骆惠宁主持 2019-10-11
  • 【聚焦】介休上了农民日报 看看厕所革命的介休故事 2019-10-11
  • 一图看懂丨拉林铁路藏木特大桥 2019-10-05
  • 朔城警方抓获一名故意伤害致死犯罪嫌疑人 2019-09-26
  • 网约车谨防四类风险 小心遗落手机被司机私自转账 2019-09-25
  • 【高清组图】新疆巴里坤草原千亩油菜花竞相绽放美不胜收 2019-09-19
  • 海内外央企人收听收看十九大开幕直播(组图) 2019-09-09
  • 民众应对二维码的安全性加以警惕,注意防范街头的扫码推广,不要轻易去扫码。 2019-08-26
  • 美媒评选全球五大最危险核潜艇 中国无一入选 2019-08-26
  • 新华社评论员:向着伟大梦想阔步前进——写在“中国梦”提出五周年之际 2019-08-20
  • 端午3天8910万人次出游 你是怎么过节的? 2019-08-20
  • 王国平应邀赴金华市调研并作专题讲座 2019-08-12
  • 电视剧抱团出海 又有哪些作品走出了国门 2019-08-12
  • 新疆喀纳斯湖再现不明水生物 2019-07-31
  • 玩极速快3的群 甘肃十一选五遗漏查询 曾道人一句话 时时彩官方网投注平台 江西15选五走势图 网络ag上赌博就是假的 贵州11选5前3组选 6十1开奖结果 2018白菜网彩金不限id 百人牛牛怎么才能赢 三分赛车的免费计划 网络版捕鱼 北京pk赛车官网下载 两码中特期了准免费 彩之家七乐彩走势图