ctfshow 爆破 web21-28
web21
打开发现要登录用户名和密码,随机输入admin 111
Burp抓包,奇怪的是没有看到username 和 password参数,但是发现有一个请求头Authorization
Authorization
用于提供服务器验证用户代理身份的凭据,允许访问受保护的资源。该标头表示哪些身份验证的方案可用于访问资源(以及客户端使用它们时需要的额外的信息)。
简要概括,就是检查输入的身份能不能访问接下来的内容
将Basic后面的那串字符发送到decoder, 用Base64解码刚好是我们输入的内容
这下就好办了,直接对这串内容进行爆破
值得注意的是,解码后的格式是admin:111, 对应的是 -> admin:password
所以爆破的时候要用 自定义迭代器Custom iterator 类型的payload
选择这串字符,发送到爆破模块
选中,添加payload位置
选择自定义迭代器, 在位置1输入admin,点击添加
在位置2输入 : 点击添加 (因为上文推断出的解码后的格式)
位置3是需要爆破的部分,导入字典
下面的payload处理,由上面可知需要进行base64编码,点“添加”选择Base64-encode
由于是header里的,没有url编码,所以把payload编码的√取消
所有设置完成, 点击右上角的开始攻击,结果太多一个个看得虾:( 直接在过滤中选择成功的
爆破完毕,响应包中直接就有flag啦~
web22
域名已经更换了,所以写不了。但就是正常的dns爆破
web23
源码:
1 |
|
substr(1,2,3)函数
类似于切片,
1 -> 要处理的字符串
2 -> 开始处,如果是负就表示从最后开始,默认为0
3 -> 规定要返回的字符串的长度,默认到结尾
需要token的md5值的第1位=第14位=第17位
且md5值的(第1位转成整数+第14位转成整数+第17位)/第1位 = 第31位转成整数
直接爆破
exp1: python数字+字母
1 |
|
exp2: python纯数字
1 |
|
exp3: php直接爆破
1 |
|
传入token的值,3j或422 得到flag
在 PHP 中不区分字符串和字节字符串的概念
web 24
源码:
1 |
|
随机数生成mt_rand()和播种mt_srand()
mt_srand()
播下一个更好的随机数种子,当有了随机数种子的时候,那么每次运行得到的随机数也是固定的
比如种子372619038
得到固定随机数为1155388967
mt_rand()
生成随机数,如果前面播了随机数种子,那么my_rand()的值固定,否则随机
由源码mt_srand(372619038); -> 已播种,则后面mt_rand()生成的随机数是固定的,本地测试一下固定的随机数是什么
1 |
|
直接传入r=1155388967,得到flag
web25
源码:
1 |
|
hexdec()
将十六进制转为十进制
hint
- 种子固定,所以每次生成的随机数相同
- r=0时,rand = -mt_rand(), 由输出的rand可以得到mt_rand(), 由php_mt_seed4.0逆序推出种子
- 获取该随机种子的第二个、第三个随机数进行相加得到token
exp:
-
get传入r=0, 得到固定的随机数mt_rand()
mt_rand = 1052183770 -
kali中使用php_mt_seed4.0
1 |
|
查看php版本
PHP/7.3.11
所以对应的种子也应该是PHP/7.3.11
- 分别计算3个种子生成的随机数,然后计算叫token的cookie的值,带入进去,看能不能出flag
1 |
|
为什么每一次的mt_rand()+mt_rand()不是第一次的随机数相加?? 因为生成的随机数可以说是一个线性变换(实际上非常复杂)的每一次的确定的但是每一次是不一样的,所以不能 进行第一次*2就得到mt_rand()+mt_rand()
web26
题目打不开…
web27
打开题目,是一个网站的登录系统
分别查看录取名单和查询系统
查询系统需要输入姓名和身份证号,录取名单中的身份证号码缺失出生的年月日,挑个喜欢的输入,缺失部分随机填,直接爆破
由于姓名是确定的,只需要爆破身份证号码
缺失部分是年月日,所有这里采用日期payload, 时间跨度适中
注意格式为20060807这种,设置为yyyyMMdd
爆破出好多200的结果,一个个看又要虾,
tips
将长度从大到小排
输入正确的身份证号码,弹窗给出学号和密码
回到登录页面,输入信息,得到flag
web28
目录里有0和1,尝试对它们进行爆破,爆破的时候需要将2.txt给删了
集束炸弹
- 多个攻击点:与其他攻击类型不同,集束炸弹允许在单个请求中设置多个攻击点。
- 有效载荷集的组合:为每个攻击点定义一个有效载荷集。Intruder 会组合这些有效载荷,以生成不同的请求。
- 遍历所有组合:Intruder 遍历每个有效载荷集中的每个项,为所有可能的组合创建请求。
payload类型为数值,爆破0-100
在响应里找到flag