web21
题目是个登录框附件里面有一个爆破密码
应该是就用这个爆破了 抓个数据包先
这里的用户名和密码是通过:连接,然后base64加密的
第一个放admin第二个放:
第三个放下载的密码包
然后还需要进行加密
开始爆破,得到成功登录的信息
哦,设置错了……,应该是encode
……经过了漫长的等待,谁知道竟然把密码放在最后面几百个里面
web22
“域名也可以爆破的,试试爆破这个ctf.show的子域名”
找工具爆破了半个小时,啥也没出来,看了下hint气死
果然这个子域名失效了……
web23
<?php error_reporting(0); include('flag.php'); if(isset($_GET['token'])){ $token = md5($_GET['token']); if(substr($token, 1,1)===substr($token, 14,1) && substr($token, 14,1) ===substr($token, 17,1)){ if((intval(substr($token, 1,1))+intval(substr($token, 14,1))+substr($token, 17,1))/substr($token, 1,1)===intval(substr($token, 31,1))){ echo $flag; } } }else{ highlight_file(__FILE__); } ?>
intval — 获取变量的整数值 substr — 返回字符串的子串
应该是要求token的md5值的,第二位、第十五位和第十八位相等。还限制,三者的和除以第二位的值,等于第三十二位的值。
三者的和除以第二位,三者相等,等于任何一位的值,除以任一位的商应为3,即第三十二位的整数值应该是3
需要求一个md5值,当作token传值过去
import hashlib a = "0123456789qwertyuiopasdfghjklzxcvbnm" for i in a: for j in a: b = (str(i) + str(j)).encode("utf-8") m = hashlib.md5(b).hexdigest() if(m[1:2] == m[14:15] and m[14:15] == m[17:18]): if ((int(m[1:2]) + int(m[14:15]) + int(m[17:18])) / int(m[1:2])) == int(m[31:32]): print('原字符串为:',b) print('加密后字符串为:',m)
跑出来的结果为,3j 加密后的值为,f12882fc7cde8e1ba1cadec10e3e9393
满足题目限制
web24
<?php error_reporting(0); include("flag.php"); if(isset($_GET['r'])){ $r = $_GET['r']; mt_srand(372619038); if(intval($r)===intval(mt_rand())){ echo $flag; } }else{ highlight_file(__FILE__); echo system('cat /proc/version'); } ?>
mt_rand() 使用 Mersenne Twister 算法返回随机整数。
mt_srand() 播种 Mersenne Twister 随机数生成器。
当随机数的种子是个确定值时(如本题),mt_rand()所得到的随机数也是确定的,所以运行后发现mt_rand()=1155388967,传参r=1155388967即可
web25
<?php error_reporting(0); include("flag.php"); if(isset($_GET['r'])){ $r = $_GET['r']; mt_srand(hexdec(substr(md5($flag), 0,8))); $rand = intval($r)-intval(mt_rand()); if((!$rand)){ if($_COOKIE['token']==(mt_rand()+mt_rand())){ echo $flag; } }else{ echo $rand; } }else{ highlight_file(__FILE__); echo system('cat /proc/version'); }
分析代码可以发现,先令r=0,可以得到mt_rand()的随机值 2119447047
得到mt_rand()的值后,需要推算种子seed的值,利用工具
然后计算mt_rand()的第二、三次的随机值之和。php在线工具
这里的第一个值与r=0的值相等,所有后面就是第二三个随机值的和令r为mt_rand()的值,令cookie为token=第二、三个随机值的和 (不行就试试后面的seed的值、这是最后一个才有flag的)
web26
打开后是个安装的界面
然后就没有了,根据题目说可以爆破,那有可能是爆破安装的这个密码,用到web21题给的字典库等好久,终于等到了个不同length的响应
这个题还有一种非预期解 https://oatmeal.vip/writeup/ctfshow/ctfshow-web/
web27
是个教务系统登录,有录取名单和学籍查询
录取名单:
学籍查询:
猜测应该是用录取名单的姓名+身份证号登录,查询录取信息 在登陆查询页面查看源代码
hackbar工具POST提交
设置好日期范围,开始爆破
成功爆破,返回的是unicode编码后的,解码一下
得到学号和密码,去刚开始的教务系统登录
web28
看到这地址之后,应该是去爆破目录
payload1和2一样设置,从0到100
开始爆破
终于在两千多次后成功了