ctfshow-web-爆破(web21-web28)

Toretto·2022-06-13 20:14·135 次阅读

ctfshow-web-爆破(web21-web28)

web21

主要是了解tomcat认证爆破中的custom iterator使用,主要看

tomcat 认证爆破之custom iterator使用 - 007NBqaq - 博客园 (cnblogs.com)

用户名为admin,密码为shark63

web22

子域名爆破,网上很多在线的,也可以用工具如Layer等。

web23

Copy
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__); }

爆破代码:

Copy
<?php for($i=0;$i<100000;$i++) { $token=md5($i); 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 $i; } } } ?>

这个范围内有两个值,422和1202,输入/?422或/?1202可以得到flag。

web24

Copy
<?php mt_srand(372619038); $a=mt_rand(); echo $a; ?>

找了很多php版本跑出来都是999695185,最后是在这个菜鸟工具这个网站:PHP 在线工具 | 菜鸟工具 (runoob.com)

得到1155388967,访问url/?r=1155388967,即可得到flag。

web25

Copy
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; }

输入?r=1,得到-430003685,输入?r=2,得到-430003684,发现输出的是rand的值,想要满足输出flag条件需要让rand为0,那么使r=430003686即可,但是后面怎么试token等于两倍的r都不对,看hint明白:

mt_scrand(seed)这个函数的意思,是通过分发seed种子,然后种子有了后,靠mt_rand()生成随机 数。 在之前自己还以为需要暴力破解cookie,最后师傅们给我介绍了一个脚本,专门用来跑mt_srand()种子和 mt_rand()随机数的 这里自己解释一下为什么每一次的mt_rand()+mt_rand()不是第一次的随机数相加?? 因为生成的随机数可以说是一个线性变换(实际上非常复杂)的每一次的确定的但是每一次是不一样的,所以不能 进行第一次*2就得到mt_rand()+mt_rand() 使用说只要我们得到种子就可以在本地进行获得自己想要的值 解题:通过随机数来寻找种子 我们让 ?r=0 得到随机数。这里我得到的是 183607393 每一次不一样(因为flag值在变化) 然后下载 php_mt_seed4.0 我们在linux下面使用 gcc进行编译 gcc php_mt_seed.c -o php_mt_seed 之后运行脚本添加随机数 ./php_mt_seed 183607393

找到对应的版本这里自己的运气好第一个出来的自己验证了一下发现就是这个 注:可能存在多个种子需要自己进行判断 通过种子找到第一个随机数就是上面的随机数。

看网上的解答了解需要用脚本跑出最初的seed,这个seed分版本,用burp抓包可以发现php版本是7.3的那么跑出来的seed版本也应该是这个,然后再用给出的mt_rand()+mt_rand()求解出token,利用burp将r和cookie传入得到flag。

web26

Copy
POST /checkdb.php HTTP/1.1 Host: e343cdcc-9349-44d3-9500-1a7f24d52039.challenge.ctf.show User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0 Accept: application/json, text/javascript, */*; q=0.01 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Content-Type: application/x-www-form-urlencoded; charset=UTF-8 X-Requested-With: XMLHttpRequest Content-Length: 17 Origin: http://e343cdcc-9349-44d3-9500-1a7f24d52039.challenge.ctf.show Connection: close Referer: http://e343cdcc-9349-44d3-9500-1a7f24d52039.challenge.ctf.show/install.php? a=&p=&d=&u=&pass=

均传空即得到flag,但是觉得是非预期。

Copy
HTTP/1.1 200 OK Server: nginx/1.21.1 Date: Sun, 05 Jun 2022 12:43:46 GMT Content-Type: text/html; charset=UTF-8 Connection: close X-Powered-By: PHP/7.3.11 Content-Length: 122 {"success":true,"msg":"\u6570\u636e\u5e93\u8fde\u63a5\u6210\u529f","flag":"ctfshow{3040a9b2-d1a0-4589-a1a8-8aa4dc56d627}"}

正常解法:利用burp爆破pass。

web27

点击下面的录取名单和学生学籍信息查询系统,分别给出了一个学生信息的excel表和一个查询学生信息的登录界面,使用burp抓包,发现需要向check.php中POST数据,这里汉字需要先进行urlencode,然后身份证号是不全的,需要进行爆破。

发现:

Copy
{"0":"success","msg":"恭喜您,您已被我校录取,你的学号为02015237 初始密码为身份证号码"}

web28

根据hint,爆破目录,要进行如下设置:

posted @   bingbingge  阅读(135)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示