实战host碰撞到代码审计

适用场景:大型渗透项目单个IP指向多个域名,通过信息收集到内网域名。

先决条件:目标是真实IP

工具:burp爆破或者Fuff工具

后续渗透

修改hosts文件指向内网域名,发现用的opensnsV2框架,基于thinkphp3的,搜了一下网上并没有什么漏洞便拿来审计。

因为比较老,又是基于thinkphp3的,在前台找到一处任意文件上传getshell
1

拓展

顺便拿过来审计了v3版本的漏洞,有个RCE和文件包含

漏洞出发点位于weibo控制器下,shareController下
2

assign对模板变量进行赋值设置为模板变量,调用基类的display方法将模板输出到页面

获取参数–>转换为数组–>输出至模板,查看模板文件Application\Weibo\View\default\Widget\share\sharebox.html

3

调用了W方法 传入参数Weibo/Share/fetchShare以及我们传入的get请求数组
追进一下W方法

4

渲染输出widger并且调用了R方法,跟进

5

通过A方法实例化控制器,调用$class的$action. C(‘ACTION_SUFFIX’)方法,也就是调用\Application\Weibo\Widget\ShareWidget.class.php中的fetchShare方法

6

接着会调用assginFetch方法,进而调用getinfo()方法,传入的参数就是我们传入的数组

7
最后通过调用D方法实例化模型类,传入一个参数,并且我们都可控,实现了调用任意模型类的方法,但是只接受一个参数
最后找了所有模型类的方法,符合的也就是网上公开的Application\Common\Model\ScheduleModel.class.php类

8

如果可行,这里将会传入一个id[]参数,并且需要满足if条件也就是id[status]=1,其他参数为id[0],id[1]
然后这里又调用了D方法,参数也可控,找到thinkphp自己写的一个类
9
参数可控最后实现RCE

1
2
?s=weibo/share/shareBox&query=
app=Common%26model=Schedule%26method=runSchedule%26id[method]=-%3E_validationFieldItem%26id[status]=1%26id[4]=function%26id[1]=assert%26id[args]=jiang=phpinfo()%26id[0]=jiang

10

文件包含

11

assign第一个变量可控导致的任意文件包含

1
2
Url:http://localhost:86/index.php?s=/home/index/search.html
POST:keywords[_filename]=./1.txt

全局搜assign($

反序列化

https://mp.weixin.qq.com/s/S3Un1EM-cftFXr8hxG4qfA

审计thinkphp3框架注意的点

  1. sql注入
  2. assign文件包含
  3. 反序列化
  4. https://xz.aliyun.com/t/2630 关注函数
  5. https://www.chabug.org/audit/1035.html 错误使用上传类