0x00 前言
vulhub是一个集成好漏洞环境的开源项目
接下来,将跟着环境进行复现调试。
0x01 thinkphp/2-rce/
index.php?s=/index/index/name/${@phpinfo()}
顺便研究下框架
先是去加载thinkphp,thinkphp会记录一些加载时间和变量环境定义,如tp2要求php大于5,然后去加载runtime
PHPSTORM格式化代码快捷键:
windows平台:Ctrl+Alt+L
runtime,然后定义一些变量,加载一些方法。
ThinkPHP的util里放了一些类方法,里面有一些处理session等的类
可以看到经过一波瞎jb调试后我来到了漏洞点,他是在处理路由的时候发生的,经过C方法一大堆配置后,调用dispatch方法,
又检查了一大堆路由的配置,然后默认规则调度URL,在
$res = preg_replace('@(\w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2";', implode($depr,$paths));
正则是@(\w+)/([^/\/]+)@e
匹配路由的paths也就是name/${@phpinfo()}
有点奇怪,一般用的是/作为分隔符但这里由于表达式里有/所以用@分割而且式子中匹配${@phpinfo()}的是[^//]也就是只要不是/就可以了,那为何写俩?
然后就会执行命令
可以看出,tp的方法是先用thinkphp去初始化模块,再用runtime去调用一些类方法如app类,先init配置路由等信息,再exec调用对应的model和action
if (!preg_match('/^[A-Za-z_0-9]+$/', MODULE_NAME)) {
throw_exception(L('_MODULE_NOT_EXIST_'));
}
先是匹配module name,必须要是英文和数字
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!