CTF-SHOW 刷题记录Web2
CTF SHOW
Web 21~28
Web21
使用bp进行抓包,在Authorization里发现奇怪的东西
base64解密后获得以下东西
发现是我们输入的账号和密码。题目已经说了账号是admin,所以我们需要爆破得出密码即可。密码本题目已经给了。
使用自定义迭代器
格式是:用户名:密码,分为三部分
第一部分是:admin
第二部分是:“ : ”
第三部分就是密码了。这里密码一个个替换成字典中的密码(记得用题目给的附件,不然时间太久了),然后看是否返回一个有效页面(200OK)
接着,需要对发送的内容进行base64加密
最后记得把payload encoding关掉,避免影响base64密文
开始攻击
得到一个成功的
我们查看返回的页面即可获得flag
Web22
域名爆破
Web23
题目
1 |
|
前置基础知识
substr函数
1 | substr(string, start, length) |
string:必需。规定要返回其中一部分的字符串
start:必需。规定在字符串的何处开始
- 正数:在字符串的指定位置开始
- 负数:在从字符串结尾的指定位置开始
- 0:在字符串的第一个字符处开始
length:可选。规定要返回的字符串长度。默认是直到字符串的结尾
- 正数:从start参数所在的位置返回
- 负数:从字符串末端返回
isset函数
用于检测变量是否已设置并且非 NULL
1 | bool isset(mixed $var [, mixed $...] ) |
- $var:要检测的变量
如果一次传入多个参数,那么 isset() 只有在全部参数都被设置时返回 TRUE,计算过程从左至右,中途遇到没有设置的变量时就会立即停止。
intval函数
用于获取变量的整数值
1 | int intval( mixed $var [, int $base = 10] ) |
- $var:要转换成integer的数量值
- $base:转化所使用的进制
如果base是0,则通过检测var的格式来决定使用的进制:
- 如果字符串包含了“0x”,使用16进制
- 如果字符串以“0”开头,使用八进制
- 否则使用十进制
md5加密
信息摘要算法,用于认证。将任意长信息生成128比特的(0,1)串。
题目分析
抓包得到以下内容
根据题目分析,需要手动设置token。其中:
token通过md5加密
token[1]=[14]=[17]
(token[1]+[14]+[17]) / token[1] = token[31]
脚本
1 | import hashlib |
将得到的符合要求的token加到url后即可,如:
1 | https://f3489a03-f66f-418a-996e-8ad7d1ec9ac6.challenge.ctf.show/?token=422 |
其他思路
使用burp爆破得到token
Web24
题目
1 |
|
前置基础知识
mt_srand函数
函数播种MErsenne Twister随机数生成器
1 | mt_srand(seed); |
seed: 可选。规定播种值
种子确定的随机数生成器生成序列相同
题目分析
题目给了种子:372619038
同时发现了下方有时间戳等等信息
是以哦那个随机数生成器,要求r和指定种子生成的随机数相同才能给flag
脚本
1 |
|
结果得到:
标准输出:1155388967
故只需要在url后加上r=1155388967
即可
Web25
题目
1 |
|
前置基础知识
hexdec函数
把十六进制转化为十进制
1 | hexdec(hex_string) |
hex_string: 必需。规定要转换的十六进制字符串
php_mt_seed工具
随机数的产生基于种子。但是可以通过产生的随机数来猜测种子,进而猜测后续的随机数
需要指明的是,不同版本的php,同一个种子产生的随机数有可能不同
1 | ./php_mt_seed [number] |
后续会得到不同版本php下对应可能的种子
题目分析
需要GET请求发送r的值
- 设置种子。种子为
hexdec(substr(md5($flag), 0,8))
- 将flag进行md5加密(得到长度为32的16进制串)
- 截取flag_md5的0~8子串
- 将子串转化为十进制数
得到rand。rand为:
输入的r转化为int - 生成的第一个随机数
要求结果为0,即输入数等于生成的随机数
需要设置cookie,cookie为生成的第二个随机数 + 第三个随机数
脚本
首先通过分析,得出输入0可以得到生成的第一个随机数的相反数
也就是说,生成的第一个随机数是1059248734
这个时候需要使用到php_mt_seed
工具进行爆破
最后通过尝试,得出php的版本是7.1.0+
后续省略了(因为赶时间懒不做了)
Web26
我就抓了个点击同意安装后的包后,重发,就找到flag了???
还真是这样做的,不知道和爆破有什么关系
Web27
这个题我感觉是很有感觉的
打开是一个教务管理系统的登录页面
注意到下方还有两个链接
一个打开后下载了名单
另一个打开后是录取查询
由于名单中给出了姓名和部分身份证号码,所以我们可以进行爆破
我选择爆一下这个党员,因为主播觉得要严查一下这个党员
首先抓包
密码并没有进行加密,所以直接对生日这一块进行爆破就可以
而如何缩短爆破的条数是我们需要考虑的
这里需要设置payload
格式为date
,且date
自定义格式为yyyyMMdd
得到有一个回复特别长的
一般这种就是成功的了
得到以下内容
1 | {"0":"success","msg":"\u606d\u559c\u60a8\uff0c\u60a8\u5df2\u88ab\u6211\u6821\u5f55\u53d6\uff0c\u4f60\u7684\u5b66\u53f7\u4e3a10167653 \u521d\u59cb\u5bc6\u7801\u4e3a\u8eab\u4efd\u8bc1\u53f7\u7801"} |
这中文使用给的Unicode编码,解密一下就好了
得到以下内容
1 | 恭喜您,您已被我校录取,你的学号为10167653 初始密码为身份证号码 |
大功告成了
身份证号码即为:360730199110167653
Web28
乍看有点像信息搜索
所以我就使用信息搜索三件套试试看
都没有成果
接着看这个网址有点蹊跷
1 | https://26e2702c-3e14-4f64-a9f7-631273587e0b.challenge.ctf.show/0/1/2.txt |
试试直接访问flag.txt没有成功
访问1/被拦在外面了
乍一看能入手的地方只有这个url了,完全没有思路啊
前置基础知识
302跳转
待编写
题目分析
用bp抓包后,发现原url是进行了302跳转才进入了原url /0/1/2.txt
如果直接访问 /0/1,会进行302跳转,然后跳转就会进入死循环,最后打不开
根据题目提示需要爆破,那么爆破点只能是原url后面这两个目录了
如何设置payload这里就不详细解释了