nssctf(Web刷题)

ops/2024/12/15 17:46:17/

[SWPUCTF 2021 新生赛]gift_F12

打开题目是一个时间页面,不过看了一会儿发现没有什么用

直接F12打开网页源代码

Ctrl+F搜索flag

找到了flag

NSSCTF{We1c0me_t0_WLLMCTF_Th1s_1s_th3_G1ft}

[第五空间 2021]签到题

NSSCTF{welcometo5space}

[SWPUCTF 2021 新生赛]jicao

打开题目发现是一段代码

解读:

包含了flag.php文件,设定了一个POST请求的id和GET请求的json

语句会对GET请求的数据进行json解码

如果id和json变量的值都等于设定字符串,那么就打印flag

JSON

JSON对象是一种存储数据的方式,它使用键值对的形式表示数据

在JSON中,键是一个字符串,值可以是字符串、数字、布尔值、数组、嵌套的JSON对象或null。JSON对象的语法规则如下:

使用花括号 {} 表示一个JSON对象。
键和值之间使用冒号 : 分隔。
每个键值对之间使用逗号 , 分隔。
键必须是一个字符串,需要用双引号或单引号括起来。
值可以是字符串、数字、布尔值、数组、嵌套的JSON对象或null。

下面是一个JSON对象的示例:

{"name": "John","age": 30,"isStudent": false,"interests": ["reading", "traveling"],"address": {"city": "New York","country": "USA"},"phoneNumber": null
}

在上面的示例中,name、age、isStudent、address、phoneNumber都是键,对应的值分别是字符串、数字、布尔值、嵌套的JSON对象、null。

你可以使用各种编程语言(如JavaScript、Python、PHP等)来创建、访问和操作JSON对象。

所以我们传入

GET json={"x":"wllm"}

POST id= wllmNB

NSSCTF{43cc5241-889f-4ca6-b9b5-1cf4641510e6}

关于MD5绕过

一:强类型与弱类型比较

松散比较也就是弱类型比较,严格比较就是强类型比较
a==b:弱类型比较会将a和b转成统一数据类型在进行比较,而强类型比较会先判断a和b是不是相同类型,不是,则返回false,是,再比较a和b的值。

也就是== 和 ===的区别

php中其中两种比较符号:

==:先将字符串类型转化成相同,再比较
===:先判断两种字符串的类型是否相等,再比较

二:类型

1)弱比较(==):

例子:

<?php
highlight_file(__FILE__);
error_reporting(0);
$flag = "flag{H3rmesk1t_is_a_loser}";
$val1 = $_GET['val1'];
$val2 = $_GET['val2'];
if (isset($_GET['val1']) and isset($_GET['val2']))
{if ($_GET['val1'] != $_GET['val2']){if ((md5($_GET['val1']) == md5($_GET['val2'])))echo $flag;elseecho "you can't get flag";}
}
?>
<?php
highlight_file(__FILE__);
error_reporting(0);
$flag = "flag{H3rmesk1t_is_a_loser}";
$val1 = $_GET['val1'];
$val2 = $_GET['val2'];
if (isset($_GET['val1']) and isset($_GET['val2']))
{if ($_GET['val1'] != $_GET['val2']){if ((md5($_GET['val1']) == md5($_GET['val2'])) and (md5(md5($_GET['val2'])) == md5(md5($_GET['val1']))))echo $flag;elseecho "you can't get flag";}
}
?>
PHP转换规则

字符串和数字比较使用==时,字符串会先转换为数字类型再比较,若字符串以数字开头,则取开头数字作为转换结果,不能转换为数字的字符串(例如"aaa"是不能转换为数字的字符串,而"123"或"123aa"就是可以转换为数字的字符串)或null,则转换为0。

 

方法一:数组绕过

上面的例题:

payload:?val1[]=1&val2[]=2

md5不能加密数组,会返回null

例如:

$a=$_GET['a'];
 
$b=$_GET['b'];
 
md5($a)==md5($b) 

payload:?a[]=1&b[]=2

方法二:科学计数法绕过(0e)

在php中,0e开头的数字会当作科学计数法解析,不管后面的值为任何东西,0的任何次幂都为0

只要是以0e开头,后面为数字的字符串和字符串0比较值都是相等的,因为不管0不论和多少相乘都是0

QNKCDZO
0e830400451993494058024219903391
 
s878926199a
0e545993274517709034328855841020
 
s155964671a
0e342768416822451524974117254469
 
s214587387a
0e848240448830537924465865611904
 
s214587387a
0e848240448830537924465865611904
 
s878926199a
0e545993274517709034328855841020

例如:

(1)

$a=$_GET['a'];
 
$b=$_GET['b'];
 
md5($a)==md5($b)

payload:?a=QNKCDZO&b=240610708

(2)

$a=$_GET['a'];
 
$a==md5($a);

payload:?a=0e215962017

(3)

if ($_GET['a'] != $_GET['b'])
    {
        if (md5($_GET['a']) == md5($_GET['b']))
            echo '1';
        else
            echo '0';
    }
    else echo "请输入不同的a,b值";

payload:?a=QNKCDZO&b=240610708

代码审计:要求get获取的a和b的值要求不相等,但要求其md值相同

  • 以下是一些字符串md5值以0e开头
    QNKCDZO
    240610708
    s878926199a
    s155964671a
    s21587387a

 

2)强比较(===):

注意:强比较不能使用0e来绕过

(因为强类型比较,不仅比较值,还比较类型,0e会被当做字符串,所以不能用0e来进行,但是我们可以用MD值完全相同的字符来进行绕过)

方法一:数组绕过

与弱比较的方法相同

方法二:使用md5加密后两个完全相等的两个字符串绕过

例如:

$a=$_GET['a'];
 
$b=$_GET['b'];
 
md5($a)===md5($b)

payload:?a=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2&b=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2
 

二进制md5加密 ecd33e3e09ff2a58e1d9ed7189dc186b
url编码 abc%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%D6%16y%AC%CE%C5%A1LrY5fn%94%10%D9%01%C3%AC%F8%AAN%21%D0%27%BE%3Ej%A7%22%0C%D08%D3%AF%DFRo%2F%A4%8B%E8%EB45j%E4h%9C%21%22%AB%7E%BC%8E%7C%17%9E%C3Xg%D7%A8%CDHt%BE%AB.%2FWb%3Eb%EA%FC%261%0F_%3D%AFo%3F%1E%DE%E8i%86%7D%BF%C7_Q%CDA%B4%CF%B8n%06Ir%7F%5C%A3k%F9%2AO%DFF%2A%F3%8BcH%FF%85%3F%0D%D0%9B%C7%C8-%12%92
二进制md5加密 ecd33e3e09ff2a58e1d9ed7189dc186b
url编码 abc%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%D6%16y%AC%CE%C5%A1LrY5fn%94%10%D9%01%C3%ACx%AAN%21%D0%27%BE%3Ej%A7%22%0C%D08%D3%AF%DFRo%2F%A4%8B%E8%EB45%EA%E4h%9C%21%22%AB%7E%BC%8E%7C%17%9E%C3%D8g%D7%A8%CDHt%BE%AB.%2FWb%3Eb%EA%FC%261%0F_%3D%AFo%BF%1E%DE%E8i%86%7D%BF%C7_Q%CDA%B4%CF%B8n%06Ir%7F%5C%A3k%F9%2A%CF%DEF%2A%F3%8BcH%FF%85%3F%0D%D0%9BG%C8-%12%92

 3)特定条件下的MD验证绕过:ffifdyop

Select * from ’admin’ where password=md5($pass,true)

首先要知道md($pass,true)的含义:

MD5报文将以原始 16字符二进制格式返回

ffifdyop 字符串经过MD5加密后为276f722736c95d99e921722cf9ed621c
在转换成字符串为’or’6乱码

Select * from ’admin’ where password=‘or’6乱码
相当于万能密码

例题:

一:[SWPUCTF 2021 新生赛]easy_md5(Nssctf)

进入题目,有一段代码

代码审计:这里需要让password 不等于 name ,但是又需要让他们的md5值相等,所以我们需要md5绕过

我们使用hackbar传入参数

法一:数组绕过

可以使用[]类型比较的方法,由于md5()函数存在缺陷,加密[]的时候返回值是NULL这样子的话就能够成功的绕过

法二:使用0e(科学计数法绕过)

同样的使用hacker工具进行传参

二:[SWPUCTF 2022 新生赛]奇妙的MD5(Nssctf)

神秘的字符串就是ffifdyop,根据函数md5加密后,再次转换为字符串时,会变成’or’6 。进入第二关。源码里面有东西。 

输入ffifdyop,点击提交查询

进入了这个界面

查看源代码:

代码审计:就是要x和y的值不相等,但是MD5值要相等

payload:?x[]=1&y[]=2

在url中输入这个payload

发现Url多出一个后台,访问一下

继续数组绕过

这次是post传参方式

paylaod:?wqh[]=1&dsy[]=2

NSSCTF{83d24a46-9206-4793-afa3-f92aab660de7} 


http://www.ppmy.cn/ops/42463.html

相关文章

MySQL —— 复合查询

一、基本的查询回顾练习 前面两章节整理了许多关于查询用到的语句和关键字&#xff0c;以及MySQL的内置函数&#xff0c;我们先用一些简单的查询练习去回顾之前的知识 1. 前提准备 同样是前面用到的用于测试的表格和数据&#xff0c;一张学生表和三张关于雇员信息表 雇员信息…

Modbus-RTU/TCP规约 | 报文解析 | 组织报文与解析报文(C++)

文章目录 一、MODBUS规约1.MODBUS-RTU规约2.MODBUS-TCP规约 二、报文解析1.MODBUS-RTU报文帧解析2.MODBUS-TCP报文帧解析 三、C代码实现组织报文与解析报文 一、MODBUS规约 Modbus规约是一种广泛使用的串行通信协议&#xff08;应用层报文传输协议&#xff09;&#xff0c;用于…

科技引领未来:高速公路可视化

高速公路可视化监控系统利用实时视频、传感器数据和大数据分析&#xff0c;通过图扑 HT 可视化展示交通流量、车速、事故和路况信息。交通管理人员可以实时监控、快速响应突发事件&#xff0c;并优化交通信号和指挥方案。这一系统不仅提高了道路安全性和车辆通行效率&#xff0…

开源网页视频会议,WebRTC音视频功能比较

1. 概述 OpenAI 发布了新一代旗舰生成模型 GPT-4o,这是一款真正的多模态大模型,可以「实时对音频、视觉和文本进行推理」。 支持与 AI 实时语音对话,且响应时间达到毫秒级;交互中可识别人类情绪并以相应的情感做出回应;多语言能力的提升,WebRTC 成为大模型关键能力。 视频会议…

C++ | Leetcode C++题解之第108题将有序数组转换为二叉搜索树

题目&#xff1a; 题解&#xff1a; class Solution { public:TreeNode* sortedArrayToBST(vector<int>& nums) {return helper(nums, 0, nums.size() - 1);}TreeNode* helper(vector<int>& nums, int left, int right) {if (left > right) {return nu…

如何解读伊朗发布的直升机事故调查报告?一般事故调查报告应怎么写?

如何解读伊朗发布的直升机事故调查报告&#xff1f;一般事故调查报告应怎么写&#xff1f; 据央视新闻客户端消息&#xff1a;当地时间5月23日&#xff0c;伊朗武装部队总参谋部发布首份已故总统莱希及其随行人员乘坐的直升机事故调查报告。以下是#李秘书讲写作#对报告内容的解…

【算法训练 day38 无重叠区间、长度最小的子数组、合并区间】

目录 一、无重叠区间-LeetCode 435思路实现代码1.双指针 个人问题总结 二、划分字母区间-LeetCode 763思路实现代码快慢指针(滑动窗口) 个人问题总结 三.合并区间-LeeCode 56思路实现代码个人代码简介代码 个人问题总结 一、无重叠区间-LeetCode 435 Leecode链接: leetcode 43…

聚鼎科技:现在做装饰画好做吗

随着人们生活水平的提高和审美需求的多样化&#xff0c;家居装饰行业迎来了新的发展机遇。装饰画作为点缀空间、提升室内氛围的重要元素&#xff0c;受到了越来越多消费者的青睐。那么&#xff0c;在这个充满竞争与机遇并存的市场环境中&#xff0c;从事装饰画的创作与销售是否…