2024Dragon Knight CTF复现web

发布于:2024-06-01 ⋅ 阅读:(145) ⋅ 点赞:(0)

穿梭隐藏的密钥

首先看看页面的源代码,但是发现f12和鼠标右键都被禁用了

用ctrl+u查看,发现一个可疑页面

访问看看,发现还是只有一张图,查看源代码发现提示

扩展:

Fuzz:Fuzz是一种基于黑盒的自动化软件模糊测试技术,简单的说一种懒惰且暴力的技术融合了常见的以及精心构建的数据文本进行网站、软件安全性测试。

通过字典爆破向目标发送随机或精心构造的数据作为计算机输入,来触发非常规反馈以达到检测漏洞的目的。

Fuzz的核心思想:

  • 目录Fuzz(漏洞点)
  • 参数Fuzz(可利用参数)
  • PayloadFuzz(bypass)

常用工具:御剑、dirsearch、Arjun等

通过提示我们可以得知可能需要参数爆破,但是发现页面为图片,bp抓包也没发现能够爆破的位置 。猜测可能是需要爆破url,用御剑扫描

访问secret.php,发现需要本地(127.0.0.1)才能通过

用bp抓包,构造xff、client_ip、referer发现都不行

尝试ssrf伪造

?参数=http://127.0.0.1/secret.php

但是这里不知道参数是啥所以用Arjun爆破url

得到参数为shell

构造payload:

c3s4f.php?shell=http://127.0.0.1/secret.php

发现虽然成功了但是发现127.0.0.1并不行,可能是被正则禁用了

查看了一下官方的wp得知可以通过sudo.cc绕过

扩展:

sudo.cc指向IP地址127.0.0.1。A记录就是域名指向ip地址,然后可以通过A记录转向访问
类似的还有safe.taobao.com,114.taobao.com,test.xiaodi8.com等

成功得到key和下一关的入口

访问challeng3.php并且POST传参key=MSIBLG

成功进入下一关

// Challenge 1
if (isset($_GET['DrKn'])) {
    $text = $_GET['DrKn'];
    if(@file_get_contents($text) == $key) {
        echo "有点东西呢"."</br>".$key1."</br>";
    } else {
        die("貌似状态不在线啊(╯_╰)</br>");
    }
} 
//GET传参入一个Drkn=MSIBLG,得到key1

 构造payload:

cha11eng3.php?DrKn=data:text/plain,MSIBLG

key1=M_ore.8

// Challenge 2
if (isset($_GET[$key1])) {
    $damei = $_GET[$key1];
    if (hash("md4", $damei) == $damei) {
        echo "又近了一步呢,宝~"."</br>".$key2."</br>".$key3;
    } else {
        die("达咩哟~");
    }
} 
//md4弱比较得到key2

参考链接:[第四届-强网杯]:Funhash

科学计数法:

plaintext : 0e001233333333333334557778889
md4 hash : 0e434041524824285414215559233446

构造payload:

cha11eng3.php?DrKn=data:text/plain,MSIBLG&M_ore.8=0e001233333333333334557778889

 发现并没有第二层的回显猜测有可能是_划线被禁用了,用[绕过

payload:

cha11eng3.php?DrKn=data:text/plain,MSIBLG&M[ore.8=0e001233333333333334557778889

key2=wtf,key3=mC

// Challenge 3
if (isset($_POST[$key2]) && isset($_POST[$key3])) {
    $user = $_POST[$key2];
    $pass = $_POST[$key3];
  
    if (strlen($user) > 4 || strlen($pass) > 5) {
          die("还得练");
      }
     if ($user !== $pass && md5($user) === md5($pass)) {  
          echo "还不错哦"."$flag";
      }
      else {
          die("nonono") ;
      }
    }
//POST传入的key2的值的长度超过4或key3的值的长度超过5则输入"还得练"
//进行md5强比较得到flag

构造payload:

wtf[]=1&mC[]=2

得到flag

EzLogin

打开源代码查看发现提示有一个注册页面

访问

输入admin,123456尝试发现用户已存在

说明有一个admin用户,回到登入界面用bp抓包爆破密码发现用啥字典都爆不出来,猜测可能不是弱口令爆破换个思路。

cookie中一般会有用户的重要信息,用Hackbar查看一下网页的cookie

发现TOKEN=TOKEN=65794a3163325679626d46745a534936496d78706269497349434a306232746c62694936496d4d354d7a45324f5759785a574935596d55334d6a51325a6a6b354d4459354d4749315a545932596a4a6b49697767496d6c7a5832466b62576c75496a6f7766513d3d

放入Cyberchef里解密一下

可以看到注册的用户lin(在注册界面尝试时注册的)已经被放入cookie中,token的值是用md5加密的用户名,is_admin是判断用户是否为admin为0时登入则会显示“you are not admin!!!”

这里我们将0改为1并重新加密后添加到TOKEN中(先base64后16进制转换)

TOKEN=65794a3163325679626d46745a534936496d78706269497349434a306232746c62694936496d4d354d7a45324f5759785a574935596d55334d6a51325a6a6b354d4459354d4749315a545932596a4a6b49697767496d6c7a5832466b62576c75496a6f7866513d3d

再次登入,登入成功

尝试注册新的用户名但是发现登入还是这个界面,TOKEN值没变

改变TOKEN值,将用户名改变加密后再次带入TOKEN再次访问,发现页面变了

再尝试几次都是一样的,只有改变TOKEN里的用户名界面才会改变

猜测这题可能需要sql盲注(只有正确和错误界面),注入点在TOKEN里的用户名里

所以我们可以写个脚本注入(这里直接用官方wp里的脚本了)


网站公告

今日签到

点亮在社区的每一天
去签到