2024_BaseCTF_webmisc_week1_wp

ctfshow写麻了写写新生赛,学习并记录。

web

喵喵喵´•ﻌ•`

简单的命令执行,先ls一下看看flag在哪

发现目标,对他使用喵喵喵(cat)!!!

md5绕过欸

话不多说,直接审计一下代码

第一层if

        是否存在get上传的name和name2参数,和post上传的password和password2参数

存在的话就进入下一层循环(中间都是些赋值啥的东西,不用管)

不存在输出‘没看到参数啊’

第二层if

        要使name和password不相等,还要确保他们的md5值弱相等

对了就下一层

不对就输出‘错啦错啦’

第三层if

        使name2与password2相等,还要确保他们的md5值强相等

对了就输出flag

不对就输出‘再看看啊,马上就绕过勒’

就这么个意思,其实也很简单,md5绕过嘛

MD5绕过知识点

 md5弱类型有两种绕过方法

1.数组绕过

md5不能加密数组,所以会返回null,当然强类型也可以通过这个方法绕过

2.科学计数法绕过

当md5加密过后的值为开头为0e时,php会当成0,从而绕过

md5强类型有也有两种绕过方法

1.数组绕过

2.md5碰撞

在网上找找工具,可以真的碰撞出两个不同的字符串,他们的md5值相等。

这里题目很简单,没有约束你使用数组,那么很简单,构造一下pylaod

难一点的题目会加一层循环,不让你传字符串。

HTTP 是什么呀

这道题为了了解一下这么些东西是啥

get,post就不多说

不过注意一下%要用%25来表示

cookie,user agent,Referer也可以用HackBar上传

最后一个ip需要打开bp抓包

在数据包里加上

Client-IP: 127.0.0.1
Forwarded-For: 127.0.0.1
Forwarded: 127.0.0.1
Forwarded-For: localhost
X-Forwarded-For-Original:127.0.0.1
X-Forwarded-For-Original: localhost
X-Forwarded-For: 127.0.0.1
X-Forwarded-For: localhost
X-Forwarded-Server: 127.0.0.1
X-Forwarded-Server: localhost
X-Forwarded: 127.0.0.1
X-Host:127.0.0.1
X-Host: localhost
X-HTTP-Host-Override:127.0.0.1
X-Originating-IP:127.0.0.1
X-Real-IP:127.0.0.1
X-Remote-Addr: 127.0.0.1
X-Remote-Addr: localhost
X-Remote-IP: 127.0.0.1

这些都是表示本地ip的,咱也不知道哪个会被绕过,就直接一起梭哈

最后base64一下即可

A Dark Room

小游戏,看源码就行

Upload

文件上传类题目,简单来说就是依靠一些绕过手法,上传一个.php文件,里面有我们提前写好的php代码,然后在网页里读取这个文件,就可以进行文件执行了。

这里没有过滤,直接上传成功了

接下来需要找到路径,也很明显,就是uploads/.php

这里可以post进行命令执行,也可以蚁剑进行链接(密码就是接收post的值,这里是a)

根目录下找到flag

之后会写文件上传专题,会详细讲讲关于文件上传的绕过姿势

Aura 酱的礼物

第一关是读文件,需要读到Aura,这里看到file_get_contents()函数,这个可以通过data伪协议进行文件包含。

可以看到过关了,第二关是需要让challenge的值为http://jasmineaura.github.io

三关要在http://jasmineaura.github.io里读到已经收到Kengwang的礼物啦

第这里可以通过@隔断,使@前面的http://jasmineaura.github.io变成用户名。

然后接上127.0.0.1,就可以利用当前的这个页面来确保有“已经收到Kengwang的礼物啦”

最后就是一个include,对他使用伪协议把

这里data协议好像不行,也不知道后端过滤了啥,这里就用filter了

web小结

week1的题目都挺简单,要打好base。

Misc

Base

base32(都试试)一下

QmFzZUNURnt3ZTFjMG1lX3RvX2I0c2VjdGZ9

根本进不去啊!

看起来是DNS解析域名的题目,去阿里云看看(解析不出来的话可以在高级配置里选上txt的选项)

阿里云网站运维检测平台给个链接

倒计时? 海报!

这道题还挺没意思的,flag分别藏在十张海报里,通过photoshop改色彩来看到水印,即费眼又耗时。后面出题组也直接给了flag,这里就不多讲。

海上遇到了鲨鱼

附件是.pcapng文件,我们用wireshark打开

里面有很多条流量,在网页中发送请求报文,接受回应报文的时候被截取的流量。

先搜搜flag,很容易就可以找到flag.php,flag.jpg的字样

可以从导出看看是什么内容

也可以看看http回应了啥

可以找到反写的flag,网上找个工具逆向了就行

正着看还是反着看?

附件用010打开

观察后发现好像是反过来的?

FFD8FFE0是jpg的文件头

看来需要想办法把这个反向输出一下。

这边写一个脚本,倒数两位两位输出就行

不想写脚本也可以去cyberchef文本逆向一下

然后得到的东西新建一个十六进制文本放进去(改成.jpg文件)

得到了图片,接下来就是图片隐写环节。

看看010里有什么东西

发现了PK和flag.txt文件隐写没跑了

binwalk或foremost分离一下

人生苦短,我用Python

import base64
import hashlib

def abort(id):
    print('You failed test %d. Try again!' % id)
    exit(1)

print('Hello, Python!')
flag = input('Enter your flag: ')

if len(flag) != 38:
    abort(1)

if not flag.startswith('BaseCTF{'):
    abort(2)

if flag.find('Mp') != 10:
    abort(3)

if flag[-3:] * 8 != '3x}3x}3x}3x}3x}3x}3x}3x}':
    abort(4)

if ord(flag[-1]) != 125:
    abort(5)

if flag.count('_') // 2 != 2:
    abort(6)

if list(map(len, flag.split('_'))) != [14, 2, 6, 4, 8]:
    abort(7)

if flag[12:32:4] != 'lsT_n':
    abort(8)

if '😺'.join([c.upper() for c in flag[:9]]) != 'B😺A😺S😺E😺C😺T😺F😺{😺S':
    abort(9)

if not flag[-11].isnumeric() or int(flag[-11]) ** 5 != 1024:
    abort(10)

if base64.b64encode(flag[-7:-3].encode()) != b'MG1QbA==':
    abort(11)

if flag[::-7].encode().hex() != '7d4372733173':
    abort(12)

if set(flag[12::11]) != {'l', 'r'}:
    abort(13)

if flag[21:27].encode() != bytes([116, 51, 114, 95, 84, 104]):
    abort(14)

if sum(ord(c) * 2024_08_15 ** idx for idx, c in enumerate(flag[17:20])) != 41378751114180610:
    abort(15)

if not all([flag[0].isalpha(), flag[8].islower(), flag[13].isdigit()]):
    abort(16)

if '{whats} {up}'.format(whats=flag[13], up=flag[15]).replace('3', 'bro') != 'bro 1':
    abort(17)

if hashlib.sha1(flag.encode()).hexdigest() != 'e40075055f34f88993f47efb3429bd0e44a7f479':
    abort(18)

print('🎉 You are right!')
import this

给了很多if判断,只要满足所有的条件,最后得出的就是flag

这边借鉴一下官方的wp

  • 检查flag长度是否为38

  • 检查flag是否以BaseCTF{开头

  • 检查flag的下标为10和11的字符是否为Mp(下标是从0开始的)

  • 检查flag的最后三个字符是否为3x}并重复8次

  至此可得BaseCTF{**Mp***********************3x}

  • 检查flag的最后一个字符的ASCII值是否为125(即}

  • 检查flag中_字符的数量是否为4

  • 检查flag按_分割后的每部分长度是否为[14, 2, 6, 4, 8]

  • 检查flag的第13到32个字符,每隔4个字符是否为lsT_n(Python用左闭右开区间)

  至此可得BaseCTF{**Mpl*_*s_**T***_***n_*****3x}

  • 检查flag前9个字符的大写形式用😺连接是否为B😺A😺S😺E😺C😺T😺F😺{😺S

  • 检查flag倒数第11个字符是否为数字且其五次方是否为1024(如果不是数字,整个表达式一定为假,就不会转为整数计算了,这叫“逻辑短路”;Python中**是乘方,^是异或)

  • 检查flag倒数第7到第3个字符的Base64编码是否为MG1QbA==

  至此可得BaseCTF{**Mpl*_*s_**T***_**4n_*0mPl3x}

  • 检查flag每隔7个字符倒序后的十六进制编码是否为7d4372733173(开个新文件试一下flag = 'abcdefghijklmnopq'; print(flag[::-7])就知道是最后一个字符,倒数第8个字符,……)

  至此可得BaseCTF{*1Mpl*_*s_**T**r_**4n_C0mPl3x}

  • 检查flag从第13个字符开始每隔11个字符是否为lr

  • 检查flag的第22到27个字符的ASCII编码是否为[116, 51, 114, 95, 84, 104](Python3中字符串str(可以用Unicode表示的)和字节串bytes(一列取值是0~255的整数)是不一样的,但可以转化)

  至此可得BaseCTF{*1Mpl*_*s_**Tt3r_Th4n_C0mPl3x}

  • 检查flag的第18个字符的ASCII值乘以20240815的0次方,第19个字符的ASCII值乘以20240815的1次方,第20个字符的ASCII值乘以20240815的2次方,加起来是否为41378751114180610(Python很适合大数运算)(虽然你可以爆破,但是这里可以写逆运算的,用除以20240815的商和余数)

  至此可得BaseCTF{*1Mpl*_*s_BeTt3r_Th4n_C0mPl3x}

  • 检查flag的第1个字符是否为字母,第9个字符是否为小写字母,第14个字符是否为数字(结合上面😺那步)

  • 检查{whats} {up}格式化后的字符串是否为bro 1

  至此可得BaseCTF{s1Mpl3_1s_BeTt3r_Th4n_C0mPl3x}

  • 检查flag的SHA1哈希值是否为e40075055f34f88993f47efb3429bd0e44a7f479

你也喜欢圣物吗

打开附件发现一个png一个压缩包,压缩包里面需要密码

png丢进随波逐流里看看

这个是lsb隐写,发现key

打开之后里面的压缩包it is fake.zip也需要key

看看010,既然是fake的zip,那么试试伪加密

但是都是0900,不过还是试试把两个0900都改掉

之后用bandzip解压打开,这里不是bandzip等软件的话好像还要改一下压缩方式的字段,STORED (0) 表示仅存储,我们改回 DEFLATE (8) 表示已压缩,这样就能正常解压了

然后两次base64解码

捂住X只耳

题目是个音频,标题是捂住什么什么耳朵,那么肯定跟什么波形图无关。

先放进Audacity

捂住x只耳,左耳右耳,也许是左右声道不同

我们先把音频拆成左右耳的

然后选其中一个轨道调成反向

然后全选混音

明显看到有断点,说明方向对了,

把音量调大一点试试

这不就是摩斯嘛,手动记录一下解码即可

答案为BaseCTF{FOLLOWYOURHEART}

Misc小结

week1里Misc题量和难度都比web高一些,不过也还都是简单题,学习并记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值