thinkphp3.2.3-5.0.10前台缓存写shell

0x00 简介

漏洞简述就不多说,这里将分别介绍tp3.2.3、tp5.0.10和onethink缓存写入getshell。

tp3.2.3:

缓存文件路径:/Application/Runtime/Temp
可能缓存文件名:b068931cc450442b63f5b3d276ea4297.php

onethink1.0:

thinkphp3开发
缓存文件路径:/Runtime/Temp/
默认缓存文件名:2bb202459c30a1628513f40ab22fa01a.php
缓存名基本不变

tp5.0.10:

缓存文件路径:/runtime/cache
可能规则命名的md5值:b068931cc450442b63f5b3d276ea4297
那么缓存文件名为:/runtime/cache/b0/68931cc450442b63f5b3d276ea4297.php

写入的php语句开头需要换行,结尾需要注释掉后面的垃圾数据:

换行利用url编码:%0d%0a或者%0a
注释用 //
例如写入phpinfo(); 那么应该为:%0d%0aphpinfo();//

0x01 利用条件

  • 开启缓存功能;
  • 能够猜解出缓存文件名(文件名生成有一定规律)
  • 缓存内容可控或部分可控,即找到写入的位置(一般与数据库交互的地方)

缓存文件名可由泄露的源码已知,或者可猜测,规律为使用常见的名词,如user、news、goods、article,然后对这些名称md5编码。

例如:一个论坛类网站

1.发帖处可与数据库交互,即可在这儿写入php内容到缓存文件;

2.那么发帖处的url为:http://xxx/index/article/showarticle/articleld/52,猜测缓存名词为article_52

对名词进行md5,echo(md5("article_52")); 输出md5值 12a51218427a2df68e54e8f4c8b10109 ;

那么如果是tp3,缓存名则为12a51218427a2df68e54e8f4c8b10109 .php,如tp5,则是/12/a51218427a2df68e54e8f4c8b10109.php

0x02 thinkphp3.2.3缓存写shell关键

1.找到与数据库交互的地方,一般是提交post数据的地方,写入php语句,例如:

%0d%0aphpinfo();//

 

 2.访问查看post数据提交过后的记录来触发数据缓存。

3.访问缓存文件。

0x03 onethink1.0缓存写shell

注意:换行利用%0d%0a,如遇长度限制可去掉%0d尝试。
构造的php语句不能直接在页面表单写入提交,需要在burp里面进行操作

onethink1.0缓存写shell漏洞是固定的,在注册用户的地方,且进行登录触发缓存数据。

先注册,再登录成功才能写入
写两条语句:
%0a$a=$_POST[1];//
%0d%0aeval($a);//

1.注册写入php语句到缓存文件:

抓包,在注册包post数据里面的username变量写入%0a$a=$_POST[1];//,然后其他信息正常添好提交注册;

2.登录成功来触发数据缓存:

登录页面抓包,username处填入%0a$a=$_POST[1];//,然后正常填写刚刚注册的密码,成功登录代表第一条语句写入成功;

3.第二条语句再次进行上面两步操作;

4.访问缓存文件。

0x04 tp5.0.10缓存写shell

1.找到数据交互的地方,burp抓包修改post数据,写入php语句,例如:

 

 2.访问触发缓存数据,例如这里访问cache方法:

 

 3.访问缓存文件。

总结:

其实thinkphp缓存写shell的漏洞的利用主要分三个步骤:数据交互写入恶意php语句,触发缓存数据,访问缓存文件。

 

posted @ 2020-03-29 18:21  ctrl_TT豆  阅读(4962)  评论(0编辑  收藏  举报