记一次thinkphp上传漏洞

0x01 背景

今天刚回到宿舍,就被同学叫去讨论一个后台的上传漏洞(经过某公司授权,该公司好像被搞过了)。
我们知道,上传文件漏洞能利用要有3个条件:

  1. 能绕过文件类型限制
  2. 知道文件路径
  3. 文件夹能解析代码 本次主要在白盒测试过程,发现漏洞上传主要是利用thinkphp开发文档探测到上传漏洞文件路径,从而漏洞利用。(以前做上传的过程中,上传成功后,由于不知道上传路径,长传文件名而放弃,本次也给自己一个经验可以根据相应开发框架开发文档来探测命名规律)

0x02 过程

在某后台有个长传xlsx文件入口

在管理后台发现有一个文件上传点,通过上传,发现做了限制,只能上传xlsx. csv等后缀文件。

上传正确的xlsx文件显示,并且能解析出来对应xlsx表格对应字段文字显示到网页中。

通过bp拦截重发,修改文件后缀.php。发现成功了系统system error提示错误。而不是返回false。猜测可能是服务器无法解析php文件,提取出相应的文字,而造成系统错误。
因为白盒测试,直接去服务器查看目录,发现真的上传传成功。

显示已经长传成功了,但我们怎么知道服务器长传具体路径了。
由于采用thinkphp框架,有相应的开发手册。我们就查看了对应开发手册关于文件上传开发

官方文档提供了多种的机制来命名文件–>TinkPHP开发手册5.1-上传

  1. 会在上传目录下面生成以当前日期为子目录,微秒时间的md5编码为文件名的文件(上图)
  2. 自定义命名规则,可以在rule方法中传入函数或者方法
  3. 保留原文件名称
  4. 上传文件的哈希散列值

通过对第三种和第四中情况猜测,发现保留原文件名这种方式文件不存在。

md5处理也不存在

sha1处理也不存在

则现在只是第一种,第二种方式。如果采用第二种方式,我们就很难猜到命名规则了。
第一条规则总结两点

  • 上传目录下面生成以当前日期为子目录,
  • 微秒时间的md5编码为文件名的文件

通常查找php中microtime(),构造一个php语句。

1
2
3
<?php
echo(microtime(ture));
?>


通过本地测试,如上图,每次刷新,各位上数刚好是秒,小数点后面应该就是秒一下单位,毫秒或者微秒。发现以上规律我们就可以通过脚本生产一段时间内所有的md5编码
于是,我们刚上传的时候,记下microtime的时间,然后大概间隔1-5秒,通过脚本生成这1-5秒钟生成的所有md5编码的微秒时间

1
2
3
4
5
6
7
8
9
10
11
12
13
import hashlib
import os
if os.path.exists('b.txt'):
os.remove('b.txt')
for i in range(393832, 500000):
temp = str(i)
temp1 = temp[0:2]
temp2 = temp[2:6]
# temp3 = int("{}.{}".format(temp1, temp2))
temp3 = "{}{}.{}".format(15536954, temp1, temp2)
a = hashlib.md5(temp3.encode()).hexdigest()
with open('b.txt', 'a') as f:
f.write(a + '\n')

因为白盒测试,直接在系统钟找到相应文件名字,通过搜索发现一样。

通过与相关人员沟通,发现采取的也是这个命名规则

结果直接搜索相应目录文件也解析成功了phpinfo()(图忘截了,漏洞也修复了)

0x03 结论

通过这次部分在白盒情况下测试,成功看到上传漏洞,通过开源框架开发文档猜解到用户上传的文档系统保存的文件名。也给自己在以后上传文件利用提供了一种方法。这也给开发人员提了个醒,不要一味地按照官方开发文档推荐重命名规则,就会给攻击者留下利用规律,如果按照开发文档
第二条,自定义命名规则,就会加大攻击者猜解系统命名的难度,也大大降低了漏洞被利用的风险。
对于上传漏洞防护策略总结有如下几点:

  1. 可以使用黑名单以及白名单结合的方式限制文件上传
  2. 文件的上传目录设为不可执行
  3. 使用JS对文件的大小、拓展名进行剑测
  4. 使用取随机文件名,可以是md5也可以是时间(对于开源框架,尽量自定义文件随机名)

本文标题:记一次thinkphp上传漏洞

文章作者:Tea_Mh

发布时间:2019年03月16日 - 23:24

最后更新:2019年04月15日 - 17:12

原始链接:blog.manhao6.cn/2019/03/16/记一次thinkphp上传漏洞(白盒审计)/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

Tea_Mh wechat
欢迎加我微信,交流交流
-------------    本文结束  感谢您的阅读    -------------