文章目录

  • 解题部分
  • 总结:

解题部分

题目来源
攻防世界web高手进阶区ics-05(XCTF 4th-CyberEarth)
1.拿到题目以后,发现是一个index.php的页面,并且设备…没有显示完全,此位置可疑。
2.源代码中发现?page=index,出现page这个get参数,联想到可能存在文件包含读源码的漏洞,尝试读取index.php的页面源码

通过php内置协议直接读取代码
/index.php?page=php://filter/read=convert.base64-encode/resource=index.php

LFI漏洞的黑盒判断方法:
单纯的从URL判断的话,URL中path、dir、file、pag、page、archive、p、eng、语言文件等相关关键字眼的时候,可能存在文件包含漏洞。
此处,因为源码中有提示?page=index,所以读一下index.php中的源码
3.进行base64解密

<?php
error_reporting(0);@session_start();
posix_setuid(1000);?>
<!DOCTYPE HTML>
<html><head><meta charset="utf-8"><meta name="renderer" content="webkit"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"><link rel="stylesheet" href="layui/css/layui.css" media="all"><title>设备维护中心</title><meta charset="utf-8">
</head><body><ul class="layui-nav"><li class="layui-nav-item layui-this"><a href="?page=index">云平台设备维护中心</a></li></ul><fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;"><legend>设备列表</legend></fieldset><table class="layui-hide" id="test"></table><script type="text/html" id="switchTpl"><!-- 这里的 checked 的状态只是演示 --><input type="checkbox" name="sex" value="{{d.id}}" lay-skin="switch" lay-text="开|关" lay-filter="checkDemo" {{ d.id==1 0003 ? 'checked' : '' }}></script><script src="layui/layui.js" charset="utf-8"></script><script>layui.use('table', function() {var table = layui.table,form = layui.form;table.render({elem: '#test',url: '/somrthing.json',cellMinWidth: 80,cols: [[{ type: 'numbers' },{ type: 'checkbox' },{ field: 'id', title: 'ID', width: 100, unresize: true, sort: true },{ field: 'name', title: '设备名', templet: '#nameTpl' },{ field: 'area', title: '区域' },{ field: 'status', title: '维护状态', minWidth: 120, sort: true },{ field: 'check', title: '设备开关', width: 85, templet: '#switchTpl', unresize: true }]],page: true});});</script><script>layui.use('element', function() {var element = layui.element; //导航的hover效果、二级菜单等功能,需要依赖element模块//监听导航点击element.on('nav(demo)', function(elem) {//console.log(elem)layer.msg(elem.text());});});</script><?php$page = $_GET[page];if (isset($page)) {if (ctype_alnum($page)) {
?><br /><br /><br /><br /><div style="text-align:center"><p class="lead"><?php echo $page; die();?></p><br /><br /><br /><br /><?php}else{?><br /><br /><br /><br /><div style="text-align:center"><p class="lead"><?phpif (strpos($page, 'input') > 0) {die();}if (strpos($page, 'ta:text') > 0) {die();}if (strpos($page, 'text') > 0) {die();}if ($page === 'index.php') {die('Ok');}include($page);die();?></p><br /><br /><br /><br /><?php
}}//方便的实现输入输出的功能,正在开发中的功能,只能内部人员测试if ($_SERVER['HTTP_X_FORWARDED_FOR'] === '127.0.0.1') {echo "<br >Welcome My Admin ! <br >";$pattern = $_GET[pat];$replacement = $_GET[rep];$subject = $_GET[sub];if (isset($pattern) && isset($replacement) && isset($subject)) {preg_replace($pattern, $replacement, $subject);}else{die();}
}
?>
</body>
</html>

得到源码后开始审计

//方便的实现输入输出的功能,正在开发中的功能,只能内部人员测试
if ($_SERVER['HTTP_X_FORWARDED_FOR'] === '127.0.0.1') {echo "<br >Welcome My Admin ! <br >";$pattern = $_GET[pat];$replacement = $_GET[rep];$subject = $_GET[sub];if (isset($pattern) && isset($replacement) && isset($subject)) {preg_replace($pattern, $replacement, $subject);}else{die();}
}

此处存在preg_replace函数,尝试测试是否存在命令注入漏洞
函数作用:搜索subject中匹配pattern的部分, 以replacement进行替换。
此处明显考察的是preg_replace 函数使用 /e 模式,导致代码执行的问题。也就是说,pat值和sub值相同,rep的代码就会执行。
XFF改成127.0.0.1之后,GET进来三个参数。这里调用了preg_replace函数。并且没有对pat进行过滤,所以可以传入"/e"触发漏洞,触发后replacement的语句是会得到执行的,首先执行一下phpinfo
执行成功
然后使用system(“ls”)尝试获取文件目录
使用cd进入目标文件
system(“cd+s3chahahaDir/flag+%26%26+ls”)
为了避免编码问题,此处不能使用空格隔开,而是使用+,%26%26为&&,意思是当前面命令执行成功时,继续执行后面的命令。
最后使用cat命令获取flag.php中的文件
成功获取flag。

总结:

思路建立:
1.由?page=index联想到可能存在文件包含读源码的漏洞,使用/index.php?page=php://filter/read=convert.base64-encode/resource=index.php获取index.php中源码
2.读取源码后,进行代码审计。发现存在preg_replace函数,尝试利用命令执行漏洞,获取到文件目录,最终找到目标文件
3.读取存在flag的文件,得到flag。
主要技能点:
文件包含漏洞
PHP伪协议中的 php://filter
preg_replace函数引发的命令执行漏洞

攻防世界web高手进阶区ics-05(XCTF 4th-CyberEarth)WriteUp相关推荐

  1. 攻防世界 web高手进阶区 9分题 favorite_number

    前言 继续ctf的旅程 开始攻防世界web高手进阶区的9分题 本文是favorite_number的writeup 解题过程 进入界面 简单的代码审计 首先是个判断,既要数组强等于,又要首元素不等 然 ...

  2. 攻防世界 web高手进阶区 10分题 weiphp

    前言 继续ctf的旅程 开始攻防世界web高手进阶区的10分题 本文是weiphp的writeup 解题过程 进入界面 点击 进入一个登陆界面 没有注册 那肯定得找源码了 惯例源码+御剑 发现git泄 ...

  3. 攻防世界 web高手进阶区 8分题 Web_python_block_chain

    前言 继续ctf的旅程 开始攻防世界web高手进阶区的8分题 本文是Web_python_block_chain的writeup 解题过程 这是个区块链题 这..裂开了啊 没搞过区块链 从零开始学习 ...

  4. 攻防世界 web高手进阶区 9分题 bilibili

    前言 继续ctf的旅程 开始攻防世界web高手进阶区的9分题 本文是bilibili的writeup 解题过程 进来界面 这尼玛出题人是黑还是粉啊 笑死 看题目意思是买lv6 惯例源码+御剑 没发现什 ...

  5. 攻防世界 web高手进阶区 7分题Confusion1

    前言 继续ctf的旅程 开始攻防世界web高手进阶区的7分题 本文是Confusion1的writeup 解题过程 进来的界面如下 (后来知道是php vs python的意思,也就是给提示跟pyth ...

  6. 攻防世界-web高手进阶区

    文章目录 攻防世界-web高手进阶区 1.baby_web 2.Training-WWW-Robots 3.Web_php_include (文件包含+伪协议) 1.方法 2.方法 4.ics-06( ...

  7. 攻防世界WEB高手进阶区warmup,NewsCenter,NaNNaNNaNNaN-Batman

    前言 作者简介:不知名白帽,网络安全学习者. 博客主页:https://blog.csdn.net/m0_63127854?type=blog 攻防世界专栏:https://blog.csdn.net ...

  8. XCTF 攻防世界 web 高手进阶区

    文章目录 ics-07 shrine( flask + jinja2 的 SSTI) easytornado(模板注入) upload(文件名注入) supersqli(堆叠注入) php_rce(T ...

  9. 攻防世界——web高手进阶区题解

    目录 1,cat (Django,cURL漏洞) 2,ics-05(XCTF 4th-CyberEarth)(文件包含  +  preg_replace函数漏洞) 3,ics-06(爆破id) 4,l ...

最新文章

  1. html 占位文本,跨浏览器的HTML5占位文本(PlaceHolder)方案
  2. 数据告诉你史上最年轻35000分先生到底有多强?
  3. [BZOJ4033][HAOI2015]树上染色(树形DP)
  4. python从指定文件夹导入模块_python – 从特定文件夹导入模块
  5. React中的state和props有什么区别?
  6. UDP协议和socketserver以及文件上传
  7. css-使不同大小的图片在固定大小的容器中居中
  8. 22. DOM 简介
  9. python 打印三维数据_Python中的面向对象编程(二):数据隐藏和对象打印
  10. sql server 2005_全文目录
  11. Java相关脚本-排查最消耗CPU的线程\Jar冲突
  12. 计算机网络 | 划分子网
  13. MySQL根据idb文件恢复数据
  14. 深入理解java虚拟机第一第二部分(周志明第三版)
  15. 快速查询每个快递单号物流详情,支持国内常用的快递公司
  16. mysql出现LF怎么办,MySQL的LF_HASH
  17. AC/DC电源适配器科普
  18. 马尔科夫链Markov以及空间Markov Matlab代码
  19. ❤️❤️HarmonyOS(鸿蒙)全网最全资源汇总,吐血整理,赶紧收藏!❤️❤️
  20. Mind the GAP: A Balanced Corpus of Gendered Ambiguous Pronouns--论文笔记

热门文章

  1. STM32:红外传感器代码部分(内含实物图+外部信号流程,编写代码思路+代码+解析代码和扩展应用)
  2. out of office ,out of the office,OOO的区别和联系
  3. 2018年最全微专业之前端开发工程师:零基础完成MIni项目开发
  4. 地质勘查土质分类图片_一种地质勘查用土壤样本采集装置的制作方法
  5. 对抗样本之CW原理coding
  6. 沈阳市举行盛大剪纸节 民间艺人现场传承工艺
  7. PADS——PCB的制作
  8. 辽宁省重大装备中心船舶与核产业部部长胡新文一行莅临云创
  9. MyBatis使用PageHelper排序分页
  10. 手游sdk难道只是个简单的悬浮球吗?