这两天一直在搞CTF,焦头烂额,这玩意脑洞不够大,思域不够开阔简直分分钟急哭,到现在还有几个没做完,先把做好的附上思路+流程,本人小白一个,大牛遇到不喜勿喷,有其他思路可以帮忙评论教育!谢谢!

第一个

CTF-WriteUp
看到题目,提示为robot,打开链接地址
CTF-WriteUp
沃特法克?这呆萌的机器人究竟隐藏着什么秘密?九旬老太为何裸死街头?数百头母驴为何半夜惨叫? 小卖部安全套为何屡遭黑手? 女生宿舍内裤为何频频失窃? 连环强奸母猪案,究竟是何人所为? 老尼姑的门夜夜被敲,究竟是人是鬼? 数百只小母狗意外身亡的背后又隐藏着什么? 这一切的背后, 是人性的扭曲还是道德的沦丧? 难道玄机在图片里?根据CTF的尿性,一切都不是表面上看起来那么简单!
但事实真的经不起推敲,很遗憾复制图片到本地一看啥也没有,它真的就只是一张图片!!!
So,在这个有问题就搜搜搜的时代,这等问题是难不倒我广大人民群众的,经过一番错综复杂,丧心病狂的“狂轰乱炸”,360终于扛不住如此酷刑如实招供,这一切都跟机器人协议有关,也就是robots。下面是robots协议的词条解释
CTF-WriteUp
看到这我只能心里默念几十万遍“666”,大牛估计看到robot这个词立马就联想到了吧,只有我等小白还需要上网查询,此等耻辱必将是我今后称霸互联网的不朽动力!

接着,根据得到的信息,在URL后面拼接上robots.txt,得到完整URL=http://106.75.86.18:1111/robots.txt,访问一下
CTF-WriteUp
那么,有如此明显的路径如果还懵逼那我真的可以撞死在豆腐西施怀里了!将/admin/3hell.php拼接在http://106.75.86.18:1111后面,得到完整URL=http://106.75.86.18:1111/admin/3he11.php,再访问一下
CTF-WriteUp
Umm...如此一片洁白如镜,让我想起了北方的雪。。。没有任何显示证明这玩意已经被解析了,根据小白经验,凡是被解析的要么看源码,要么抓包,先看源码试试
CTF-WriteUp
黄天不负有心人,只要心想事竟成!(虽然前后也就花了几分钟时间。。。)这么简单就拿到了flag的我在风中凌乱,这尼玛跟我想象中的不一样好么,说好的套路呢???说好的一辈子呢???好吧,心理活动到此结束,深吸一口气,将flag放在答案框里吧,过程虽然简单,但我知道了什么是robot协议,也明白了它的用法
  • 1、robots.txt可以告诉百度您网站的哪些页面可以被抓取,哪些页面不可以被抓取。
  • 2、您可以通过Robots工具来创建、校验、更新您的robots.txt文件,或查看您网站robots.txt文件在百度生效的情况。
  • 3、Robots工具暂不支持https站点。
  • 4、Robots工具目前支持48k的文件内容检测,请保证您的robots.txt文件不要过大,目录最长不超过250个字符。

最后顺便附上360对于robot协议的词条解释https://baike.so.com/doc/4854891-5072162.html。

第二个

CTF-WriteUp
上面提示ipspoofing,也就是IP欺骗,不管其他,先访问看看
CTF-WriteUp
这个网页看起来很舒服,随便点点发现没有任何可跳转的地方,但是拉到最下方可发现一个奇怪的东西

CTF-WriteUp
前两个没什么luan用,但是看到administrator的人都会有下意识点击的反应,我也不例外,结果

CTF-WriteUp
嗯哼,这就找到后台了。。。但是很多人看到这玩意发现没验证码,所以。。。赶紧**啊!!!等毛线啊!!!看我不几万吨TNT轰它个海枯石烂!!!但是,在大多数人都化身董存瑞手扶炸药抗碉堡的时候,我认为CTF的套路不一般,它教会了我们不按套路出牌,那么,我还是看一下源码,在翻到最下面的时候发现了这个东西
CTF-WriteUp
。。。。。。在这里我再次嘲讽那些蛮干冒进的伙伴们一番,等你们**出来,我们就老了!这赤裸裸的帐号密码写在眼前真的是对你们莫大的侮辱!不过,我喜欢!那么,众乐乐不如独乐乐,偷偷地将帐号密码输入登录,有提示
CTF-WriteUp
成功获得flag,事实证明我大天朝部分同学简单事情复杂化的思维模式是不可取的,凡是只看表面是要吃很大亏的,嗯,少说两句,免得来年坟头草三尺高。。。

第三个

CTF-WriteUp
访问显示
CTF-WriteUp
网页提示,本展示内部网站,非请勿入!很直接,这就是个内网网站,关于内网的渗透思路各路大神可以自行百度,这里应该没有想象那么复杂,而且根据提示,seelog,顾名思义就是看日志,日志怎么看呢,很多网站,在根目录后面跟上log就好了,这里附上服务器日志的百科https://baike.baidu.com/item/%E7%BD%91%E7%AB%99%E6%97%A5%E5%BF%97/8933494?fr=aladdin,那么试试看
CTF-WriteUp
由此看到有两种log,先看看第一个
CTF-WriteUp
谁来扶我一下,有点晕。。。辣么多怎么看的过来,怪不得朋友一被拉去看日志就会发出几声类似杀猪般的惨叫。。。不过这些难不倒我,每一条日志后面都有响应值,比如404啊403什么的,我只要有用的,有用的是什么?200响应啊!所以查找呗,不过此处有个小技巧,只需要输入HTTP/1.1" 200就可以,不要问我为什么,找规律而已,点了多少次就出来了我想要的东西

CTF-WriteUp
WTF??!!对,你没有看错!wojiushihoutai!!!我就是后台!!!只有我大天朝群众才看得懂,让老外懵逼去吧!!!把它拼接在根目录后面访问

CTF-WriteUp
CTF-WriteUpCTF-WriteUpCTF-WriteUpCTF-WriteUp

第四个

CTF-WriteUp
提示为phpinfo,访问之
CTF-WriteUp
哟,这下好了,所有东西这里面都有了,我距离成功只有一步之遥!首先注意到连接地址后面多出来个index.php?path=phpinfo.php,看到这个很多人不淡定了,条件反射般的四个字脱口而出“文件包含”!!!对没错,就是文件包含,喊道这里还想着用其他办法搞的就太傻了,不过文件包含是有先决条件的-需要allow_url_include=On,那么看一下是否符合条件

CTF-WriteUp
凉凉夜色为你思念成河,化作春泥呵护着我。。。但这首旋律在我心底响起时,我知道我和它已经没可能了,深深的绝望涌出伴随泪流成河。但是我不死心,我不甘心这样输给命运,我们命由我不由天!allow_url_include=Off?不存在的!想到之前研究过的php文件流的用法,将“?path=php://filter/read=convert.base64-encode/resource=flag.php”拼接在根目录(具体用法不再赘述,请自行百度)
CTF-WriteUp
这戏剧性一幕释放了我心头的“十万天兵(caonima)”,说好的规则呢?究竟谁对谁错?条件不满足竟然还可以得出如此结果,百撕不得骑姐!有懂的大神可以评论指教!!!将base64编码解密后
CTF-WriteUp

第五个

CTF-WriteUp
提示为VID,关于VID的解释有很多,就不一一赘述,不懂的请自行百度,访问网址

CTF-WriteUp
你知道火神逻辑翻车???这句话不是我说的,是百度翻译告诉我的,什么鬼?懵逼了。。。除此之外,再无其他有用信息,看看源码

CTF-WriteUp
发现红字部分信息,拼接之,出现如下代码
Finding entry points
Branch analysis from position: 0
Jump found. Position 1 = 23, Position 2 = 38
Branch analysis from position: 23
Jump found. Position 1 = 26, Position 2 = 35
Branch analysis from position: 26
Jump found. Position 1 = 29, Position 2 = 32
Branch analysis from position: 29
Jump found. Position 1 = 34
Branch analysis from position: 34
Jump found. Position 1 = 37
Branch analysis from position: 37
Jump found. Position 1 = 40
Branch analysis from position: 40
Return found
Branch analysis from position: 32
Jump found. Position 1 = 37
Branch analysis from position: 37
Branch analysis from position: 35
Jump found. Position 1 = 40
Branch analysis from position: 40
Branch analysis from position: 38
Return found
filename:       C:\ctf\index.php
function name:  (null)
number of ops:  44
compiled vars:  !0 = $a, !1 = $b, !2 = $c
line     # *  op                           fetch          ext  return  operands
---------------------------------------------------------------------------------
   2     0  >   EXT_STMT
         1      ECHO                                                     'do+you+know+Vulcan+Logic+Dumper%3F%3Cbr%3E'
   3     2      EXT_STMT
         3      BEGIN_SILENCE                                    ~0
         4      FETCH_R                      global              $1      '_GET'
         5      FETCH_DIM_R                                      $2      $1, 'flag1'
         6      END_SILENCE                                              ~0
         7      ASSIGN                                                   !0, $2
   4     8      EXT_STMT
         9      BEGIN_SILENCE                                    ~4
        10      FETCH_R                      global              $5      '_GET'
        11      FETCH_DIM_R                                      $6      $5, 'flag2'
        12      END_SILENCE                                              ~4
        13      ASSIGN                                                   !1, $6
   5    14      EXT_STMT
        15      BEGIN_SILENCE                                    ~8
        16      FETCH_R                      global              $9      '_GET'
        17      FETCH_DIM_R                                      $10     $9, 'flag3'
        18      END_SILENCE                                              ~8
        19      ASSIGN                                                   !2, $10
   6    20      EXT_STMT
        21      IS_EQUAL                                         ~12     !0, 'fvhjjihfcv'
        22    > JMPZ                                                     ~12, ->38
   7    23  >   EXT_STMT
        24      IS_EQUAL                                         ~13     !1, 'gfuyiyhioyf'
        25    > JMPZ                                                     ~13, ->35
   8    26  >   EXT_STMT
        27      IS_EQUAL                                         ~14     !2, 'yugoiiyhi'
        28    > JMPZ                                                     ~14, ->32
   9    29  >   EXT_STMT
        30      ECHO                                                     'the+next+step+is+xxx.zip'
  10    31    > JMP                                                      ->34
  11    32  >   EXT_STMT
        33      ECHO                                                     'false%3Cbr%3E'
  13    34  > > JMP                                                      ->37
  14    35  >   EXT_STMT
        36      ECHO                                                     'false%3Cbr%3E'
  16    37  > > JMP                                                      ->40
  17    38  >   EXT_STMT
        39      ECHO                                                     'false%3Cbr%3E'
  19    40  >   NOP
  22    41      EXT_STMT
        42      ECHO                                                     '%3C%21--+index.php.txt+%3F%3E%0D%0A%0D%0A'
        43    > RETURN                                                   1


branch: #  0; line:     2-    6; sop:     0; eop:    22; out1:  23; out2:  38
branch: # 23; line:     7-    7; sop:    23; eop:    25; out1:  26; out2:  35
branch: # 26; line:     8-    8; sop:    26; eop:    28; out1:  29; out2:  32
branch: # 29; line:     9-   10; sop:    29; eop:    31; out1:  34
branch: # 32; line:    11-   13; sop:    32; eop:    33; out1:  34
branch: # 34; line:    13-   13; sop:    34; eop:    34; out1:  37
branch: # 35; line:    14-   16; sop:    35; eop:    36; out1:  37
branch: # 37; line:    16-   16; sop:    37; eop:    37; out1:  40
branch: # 38; line:    17-   19; sop:    38; eop:    39; out1:  40
branch: # 40; line:    19-   22; sop:    40; eop:    43
path #1: 0, 23, 26, 29, 34, 37, 40,
path #2: 0, 23, 26, 32, 34, 37, 40,
path #3: 0, 23, 35, 37, 40,
path #4: 0, 38, 40,
do you know Vulcan Logic Dumper?<br>false<br><!-- index.php.txt ?>


我承认自己菜,但是这点东西还是看的懂得,大概意思就是get参数flag1,flag2,flag3对应的字符串,在URL里拼接起来就是了,所以URL=http://106.75.26.211:1111/?flag1=fvhjjihfcv&flag2=gfuyiyhioyf&flag3=yugoiiyhi,访问

CTF-WriteUp
将提示信息1chunqiu.zip拼接在根目录后面,会有一个压缩包下载,下载后打开,看到几个分别为
“register.php”

<?php


require_once 'dbmysql.class.php';
require_once 'config.inc.php';


if(isset($_POST['number']) && isset($_POST['username']) && isset($_POST['password'])){
    if (strlen($_POST['username']) > 10){
        echo "<script>
                alert('用户名长度超出限制!');
                function jumpurl(){
                    location='register.html';
                }
                setTimeout('jumpurl()',1000);
            </script>";
        exit();
    }else{
        $db = new mysql_db();


        $number = is_numeric($_POST['number']) ? $_POST['number'] : 1;
        $username = $db->safe_data($_POST['username']);
        $password = $db->my_md5($_POST['password']);


        $sql = "insert into"."`".table_name."`"."values('$username', '$password', $number)";
        if($db->select($sql)){
            echo "<script>
                    alert('注册成功!1秒钟以后页面将自动跳转');
                    function jumpurl(){
                        location='login.html';
                    }
                    setTimeout('jumpurl()',1000);
                </script>";
        }else{
            die('该用户名已被注册!');
        }
    }
}






 ?>

“login.php”

<?php


require_once 'dbmysql.class.php';
require_once 'config.inc.php';


if(isset($_POST['username']) && isset($_POST['password']) && isset($_POST['number'])){
    $db = new mysql_db();
    $username = $db->safe_data($_POST['username']);
    $password = $db->my_md5($_POST['password']);
    $number = is_numeric($_POST['number']) ? $_POST['number'] : 1;


    $username = trim(str_replace($number, '', $username));


    $sql = "select * from"."`".table_name."`"."where username="."'"."$username"."'";
    $row = $db->query($sql);
    $result = $db->fetch_array($row);
    if($row){
        if($result["number"] === $number && $result["password"] === $password){
            echo "<script>alert('nothing here!')</script>";
        }else{
            echo "<script>
            alert('密码错误,老司机翻车了!');
            function jumpurl(){
                location='login.html';
            }
            setTimeout('jumpurl()',1000);
            </script>";
        }
    }else{
        exit(mysql_error());
    }
}else{
    echo "<script>
            alert('用户名密码不能为空!');
            function jumpurl(){
                location='login.html';
            }
            setTimeout('jumpurl()',1000);
        </script>";
}




 ?>

“dbmysql.class.php”

<?php


class mysql_db{


    public static $link = null;


    public function __construct(){
        if(self::$link == null){
            self::$link = self::connect();
        }
    }


    /*
    数据库连接
    */


    public static function connect(){
        self::$link = @mysql_connect(DB_HOST, DB_USER, DB_PASS);


        if(self::$link == false) exit("数据库链接失败!");


        $db = mysql_select_db(DB_NAME, self::$link);


        if($db == false)  exit("数据库选择失败!");


        mysql_query('SET names utf8');


        return self::$link;
    }


    /*
    数据库执行语句
    */


    public function query($sql){
        $res = mysql_query($sql) or die("数据库执行错误!".mysql_error());


        return $res;
    }


    public function select($sql){
        if(!mysql_query($sql)){
            return false;
        }
        return true;
    }


    /*
    自定义数据库密码存储时候的加密函数
    */


    public function my_md5($string){
        return md5(substr(md5($string),5,24));
    }


    /*
    一个数据库查询的返回值,返回值是一个维数组
    */


    public function fetch_array($query) {
        return mysql_fetch_array($query, MYSQL_ASSOC);
    }


    /*
    入库前的安全处理函数
    */


    public function safe_data($value){
        if( MAGIC_QUOTES_GPC ){
            stripcslashes($value);
        }
        return addslashes($value);
    }
}



 ?>

“config.inc.php”

<?php


header("Content-type: text/html; charset=utf-8");


define('IS_MASTER', true);


define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc() ? true : false);


define('DB_HOST','localhost');
define('DB_USER','test');
define('DB_PASS','test1234');
define('DB_NAME','test');
define("table_name", 'users');


?>

根据以上几个源码,看到login.php里面,这里接收三个POST过来的参数 username password number,username会进行一次转义,password会经过dbmysql.class.php里的自定义的md5处理,接着会⽤username吧number替换为空。问题就出在username和numbe这⾥,这⾥⽤0可以替换掉%00转义后\0中的0从⽽产⽣第⼀个\ ,然后username中如果是'变成了\'跟前⾯连在⼀起就是\\' ,刚好单引号可以逃逸出来闭合前⾯的单引号然后利用报错注入,参考链接http://www.cnblogs.com/xishaonian/p/6243497.html,concat的第二个参数换成substring把flag分成两段截取出来。
CTF-WriteUp
这个有点复杂,但是细心点,耐心点还是可以得出答案!SQL注入不过关的我愣是在上面纠结了小半天CTF-WriteUpCTF-WriteUp

第六个

CTF-WriteUp
看到提示为fuzzing,表示可能要用到基于缺陷注入的自动软件测试技术,访问网站看看
CTF-WriteUp
嗯。。。饱受打击的我已经对此少见不怪了。。。先抓个包。。。
CTF-WriteUp
丢到Repeater里Go一下

CTF-WriteUp

有提示!Large internal network,译为大内网,看来这是大内密探的官网了(哈哈哈哈)。根据提示,我们肯定需要伪造IP了,这里我直接用XFF或者client-ip,大内网就用A段10.0.0.1

CTF-WriteUp

当我在这个页面停留了近十分钟都没有发现任何反应之后我发现我失去耐心了,在暴走之际,突然想起火狐有个XFF的插件,果断放弃burp,该用火狐的XFF重新尝试

CTF-WriteUp

刷新页面

CTF-WriteUp

发现页面提示有变化,show me your key,随便传个key值666,发现没反应,换成POST方式试试

CTF-WriteUp

告诉我这个key的md5值是5a2a7d385fdaad3fabbe7b11c28bd48e,key值前面是ichunqiu开头,后面三位要我从a到z0到9**,怎么办?burp**?别搞那么复杂,写个python脚本啊!据说python是世界上最好的计算机语言,有不同意见的可以在评论里发表(静待各位互撕嘻嘻嘻),python脚本内容如下

#!/bin/bash
import hashlib
def md5(data):
    m = hashlib.md5()
    m.update(data)
    a = m.hexdigest()
    return a
 
a = 'ichunqiu'
b = 'abcdefghijklmnopqrstuvwxyz1234567890'
for i in b:
    for j in b:
        for k in b:
            if md5(a+i+j+k)=='5a2a7d385fdaad3fabbe7b11c28bd48e':
        print a+i+j+k

**出key值为ichunqiu618ok,将key值传给网站

CTF-WriteUp

让我继续访问xx00xxoo.php,将之拼接到URL中,URL=http://106.75.108.111:2222/xx00xxoo.php,访问之

CTF-WriteUp

源代码在x0.txt,发现是discuz加密函数,回显的加密字符是flag加密的结果,我们需要调用这个函数本地写个PHP跑一下就出flag了,下面是自己拼接的PHP文件内容

<?php 
function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) {
$ckey_length = 4;


$key = md5($key ? $key : UC_KEY);
$keya = md5(substr($key, 0, 16));
$keyb = md5(substr($key, 16, 16));
$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length) : substr(md5(microtime()), -$ckey_length)) : '';


$cryptkey = $keya . md5($keya . $keyc);
$key_length = strlen($cryptkey);


$string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0) . substr(md5($string . $keyb), 0, 16) . $string;
$string_length = strlen($string);


$result = '';
$box = range(0, 255);


$rndkey = array();
for ($i = 0; $i <= 255; $i++) {
$rndkey[$i] = ord($cryptkey[$i % $key_length]);
}


for ($j = $i = 0; $i < 256; $i++) {
$j = ($j + $box[$i] + $rndkey[$i]) % 256;
$tmp = $box[$i];
$box[$i] = $box[$j];
$box[$j] = $tmp;
}


for ($a = $j = $i = 0; $i < $string_length; $i++) {
$a = ($a + 1) % 256;
$j = ($j + $box[$a]) % 256;
$tmp = $box[$a];
$box[$a] = $box[$j];
$box[$j] = $tmp;
$result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
}


if ($operation == 'DECODE') {
if ((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26) . $keyb), 0, 16)) {
return substr($result, 26);
} else {
return '';
}
} else {
return $keyc . str_replace('=', '', base64_encode($result));
}


}
echo authcode($string='5558r8JQYwfDM89zyttHVaMLg2NRDiGRetV65PBi7Zsj6mJ3kYTo5QIcKVooQoPEVKLMgPvH6Z/bo8GoNPL2Os63qiUYk4Q',$operation = 'DECODE', $key = 'ichunqiu618ok', $expiry = 0);
?>

下面是跑得结果

CTF-WriteUp

第七个

CTF-WriteUp
天下武功,无坚不破,唯快不破!这句话想必大家都已耳熟能详,邪神大大可不是说着玩,还专门给斧头帮一干大佬们亲自表演空手套白狼。。。啊不!是子弹!场面震撼,几乎失控!看到提示就知道我们动作必须快,但是要在那里快呢?先访问网站看看

CTF-WriteUp
有乱码不必纠结,改脚本语言就行,本人很懒,这里就不再演示了。这段代码的意思就是我们访问网页会生成一个txt文件,这个文件里就有我们要的flag信息;这个文件的命名方式是由1到999随机生成的数字经过MD5加密之后拼接的;而且只存在10秒,所以我们需要一个python脚本来跑一下,并获得响应包中的flag信息,十秒真男人就这么诞生了!贴出py代码
#coding:utf-8
import time,hashlib,thread,requests
def ww(url):
    a=requests.get(url)
    #print url
    if a.status_code==200:
        a.encoding="utf-8"
        print a.text
        return
for i in range(1,1001):
    a=hashlib.md5(str(i)).hexdigest()
    url="http://106.75.26.211:3333/u/"+a+".txt";
    thread.start_new_thread(ww,(url,))
    time.sleep(0.1)
因为时间只有10s,所以需要多试几次。。。
CTF-WriteUp

至此,除了两个还没搞之外其他CTF全部搞定,真心很累,但是很充实,在这个过程中学到了很多知识,也知道了自己的诸多不足,总之一句话,革命尚未成功,同志还需努力!大家共勉!


相关文章:

  • 2021-12-21
  • 2022-12-23
  • 2022-12-23
  • 2021-09-21
  • 2022-01-14
  • 2021-09-24
  • 2021-06-05
  • 2021-11-10
猜你喜欢
  • 2021-06-05
  • 2021-07-07
  • 2021-06-02
  • 2021-05-30
  • 2021-11-05
  • 2021-07-21
  • 2021-06-05
相关资源
相似解决方案