安恒杯12月月赛解题报告

WEB

easy

  • 题目描述
file)) //检测变量是否已设置并且非 NULL
        {
            $filename = "./{$this->file}";        
            if (file_get_contents($filename))  //file_get_contents — 将整个文件读入一个字符串,返回文件内容或者在失败时返回 FALSE.     
            {              
                return file_get_contents($filename); 
            } 
        }     
    }  
}  
if (isset($_GET['data']))  
{ 
    $data = $_GET['data'];
    preg_match('/[oc]:\d+:/i',$data,$matches);  //$matches填充为搜索结果。 $matches[0]将包含完整模式匹配到的文本, $matches[1] 将包含第一个捕获子组匹配到的文本,以此类推。
    if(count($matches))
    {
        die('Hacker!');
    }
    else
    {
        $good = unserialize($data);
        echo $good;
    }     
} 
else 
{ 
    highlight_file("./index.php"); 
} 
?>
  • 考点

    1. WEB序列化知识
    2. 基础正则绕过
    3. 序列化读文件
  • 解题步骤
    1.阅读源码,发现关键匹配函数

preg_match('/[oc]:\d+:/i',$data,$matches);

说明:[ 符号标记一个中括号表达式的开始,表达式的结尾处的不区分大小写 i 标记指定不区分大小写。
匹配规则:匹配了[oc]:
绕过匹配参考资料:https://blog.spoock.com/2016/11/03/php-wakeup/

所以只需要只需要在对象长度前添加一个+号,即o:14->o:+14,这样就可以绕过正则匹配。

O:+4:"baby":1:{s:4:"file";s:8:"flag.php";}

但如果直接传值的话会,服务器接收到+号会被自动解码为空格,所以要对加号url编码:

O:%2b4:"baby":1:{s:4:"file";s:8:"flag.php";}

访问:
即可得到flag:http://101.71.29.5:10007/index.php?data=O:%2b4:"baby":1:{s:4:"file";s:8:"flag.php";}

安恒杯12月月赛解题报告_第1张图片
flag.png

  • exp
  • 补充:

当对一个对象序列化时,php就会调用__sleep方法(如果存在的话),在反序列化时,php就会调用__wakeup方法(如果存在的话),以此可以判断是否序列化成功
魔术方法__sleep(),__wakeup() - kacha886 - 博客园 https://www.cnblogs.com/kacha886/p/9115503.html
特别注意php7和php5的区别,php7用+号绕过时会报错无法反序列化,只有php5可以这样。

WEB2

  • 解题步骤

    扫一下目录,发现了一个admin.php,但是进去却回显You are not admin...,同时访问发现cookie中存在user项,然后解码base64 ,发现是user ,于是构造admin的base64 编码
    安恒杯12月月赛解题报告_第2张图片
    请求头.png

    替换进入管理员页面:
    安恒杯12月月赛解题报告_第3张图片
    admin.png

    进入后台,应该是个命令执行漏洞,但是过滤了很多符号:
    安恒杯12月月赛解题报告_第4张图片
    ls命令.png

    发现通过命令cat
    安恒杯12月月赛解题报告_第5张图片
    cat

    尝试读取源代码如下:
  • admin.php
  • config.php
|}|{|%|#|!|\?|@|\+| )/i";
        $str = preg_replace($black_str, "",$str);
        return $str;
    }

解题关键是如何绕过这个黑名单去读到flag,这里过滤了;&>{}%#?!@+还有空格都过滤了,但是$以及/都没被过滤,可以很好地执行命令,使用$IFS绕过空格,然后可以使用ls$IFS/查看上一级目录,最终cat$IFS/ffLAG_404命令得到flag

安恒杯12月月赛解题报告_第6张图片
flag.png

知识点补充:
1.cookie和session :http://www.k0rz3n.com/2017/07/30/cookie/
2.bash命令执行常见绕过:https://www.jianshu.com/p/000a4ad1b933

MISC

签到题

  • 解题步骤
    按照提示回复关键词即可


    安恒杯12月月赛解题报告_第7张图片
    签到题.png

JUJU

  • 题目描述


    安恒杯12月月赛解题报告_第8张图片
    image.png
  • 解题步骤
  1. 题目中提到11只juju,但是实际只有7只
    安恒杯12月月赛解题报告_第9张图片
    JUJU.png

    因此考虑图片显示不完全,16进制打开,修改长宽,02 38 改为04 38 显示完全
    安恒杯12月月赛解题报告_第10张图片
    winhex.png

    安恒杯12月月赛解题报告_第11张图片
    image.png

    得到字符串MZWGCZ33GQZTQMTEM5SGMMTEPU======,其中6等于号特征推测为base32(等于号在base编码中是补位的作用)
    通过解码得到flag:a213072327f762855e475779eb081ca3

学习资料

  • 解题步骤
  1. 附件有两个,且其中一个和压缩文件中同名
  2. 压缩文件存在密码,考虑明文攻击


    安恒杯12月月赛解题报告_第12张图片
    image.png
  3. 压缩后crc32一致,可以进行明文攻击,使用AZPR进行破解,拿到压缩密码:1qazmko098
    安恒杯12月月赛解题报告_第13张图片
    image.png

特别说明:有些没爆破出来可能是用ARCHPR4.5.4进行的爆破,该版本进行明文攻击会有问题,建议使用ARCHPR4.5.3 ,另外使用不同的压缩软件压缩备忘录.txt也会导致最后无法找到明文

4.解压打开word,发现没啥东西,但是想到题目描述学习资料下的真实的东西,可能在图片下;移除图片还是没东西,考虑word的字符串设置了隐藏,因此在word设置中,勾线显示隐藏字符串即可看到flag
安恒杯12月月赛解题报告_第14张图片
Word.png

安恒杯12月月赛解题报告_第15张图片
flag.png

也可以把docx的改后缀为zip,解压后在/word/document.xml里可见flag.

参考资料:CTF中压缩包解密的几种常见方式 - blus - CSDN博客 https://blog.csdn.net/q851579181q/article/details/84944900
ZIP明文攻击获得加密压缩包内文件_百度经验 https://jingyan.baidu.com/article/0f5fb0990bba086d8334eaf6.html
破解压缩包的几种方式(zip伪加密 爆破 CRC32碰撞 已知明文攻击) - 淚笑 - 博客园 https://www.cnblogs.com/leixiao-/p/9824557.html

变换的指纹

下载到社工库:ed2k://|file|www.csdn.net.sql|287238395|7C81CC2A2B57411BD107ACFF2BA8DDEE|/
提取密码进行爆破,正确密码是双引号中的内容:“!(()!@)6125dou ”,注意密码结尾有个空格。

安恒杯12月月赛解题报告_第16张图片
指纹.gif

通过图片获得字符串:
23685 28276158 52365 72716835687172857481317
23685528276158852365572716835687172857481317
因为提示8进制:
[23,70,55,30,27,61,60,105,23,65,57,27,16,103,56,107,17,30,57,50,13,17]
后面还差一步,未完待续

你可能感兴趣的:(安恒杯12月月赛解题报告)