type
status
date
slug
summary
tags
category
icon
password
😀
 

📝 主旨内容

 

[SWPUCTF 2021 新生赛]jicao———josn格式

代码审计
考察josn格式
josn格式
JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,常用于Web应用中将数据从服务器传输到客户端。它基于 JavaScript 语言的一个子集,由两种数据结构组成:
  1. 名称/值对:一组键值对集合,键和值之间使用冒号(:)分隔,每组名称/值对之间使用逗号(,)分隔,整个集合使用大括号({})包裹。
例如:
  1. 值列表:一组有序的值集合,使用方括号([])进行包裹,每个值之间使用逗号(,)分隔。
例如:
在 JSON 中,允许使用以下数据类型:
  • 字符串(在双引号中)
  • 数字
  • 对象(使用大括号包裹)
  • 数组(使用方括号包裹)
  • 布尔值(true 或 false)
  • 空值(null)
JSON 格式具有易于阅读和编写的优势,且能很好地与多种编程语言进行交互,因此被广泛应用于 Web 开发中。
解题思路
burpsuite抓包修改请求
重放获取flag

[SWPUCTF 2021 新生赛]easy_md5——php弱类型比较

代码审计
分析题目要求:
$name = $_GET['name']; //get传入name
$password = $_POST['password']; //post传入passowrd
if ($name != $password && md5($name) == md5($password)){
echo $flag; //name和password的md5值相同
 
根据php弱类型比较,MD5加密后为0e开头的数字的字符串有:QNKCDZO,s878926199a。
对应md5加密分别为:
0e830400451993494058024219903391
(PHP会将其看作0^830400451993494058024219903391,即0的xxx次方,结果是0)
0e545993274517709034328855841020
(同理,看作0的xxx次方,仍为0)
 
get post传给name与password后得到flag。
notion image
php弱类型比较
两个字符串 "0e830400451993494058024219903391" 和 "0e545993274517709034328855841020" 都包含前导的 "0e",这会导致 PHP 将其解释为科学计数法中的 "0 × 10^1",然后将其转换为整数类型进行比较。由于这两个字符串的整数值都为零,因此在使用弱类型比较(如 ==)时,PHP 会将它们视为相等的值。
例如,以下代码将使用弱类型比较比较这两个字符串:
该代码会输出 "The two MD5 values are equal"。需要注意的是,即使这两个字符串都被解释为 "0",它们的真实 MD5 值并不相等,因此在比较 MD5 值时,仍然建议使用字符串的比较函数,如 strcmp()strcasecmp() 等。
php字符串转换为整数
在 PHP 中,当一个字符串以数字 0 开头时,如果将其转换为整数类型,则该字符串会被解释为十进制的整数 0。例如,以下代码演示了如何将一个以 0 开头的字符串转换为整数类型:
因此,在使用弱类型比较时,如 $md5Value1 == $md5Value2,PHP 会将这两个字符串分别转换为整数类型 0,然后进行比较。如果两个字符串都可以被解释为数字 0,则它们的整数值都为 0。
在本例中,由于字符串 "0e830400451993494058024219903391" 和 "0e545993274517709034328855841020" 都以 "0e" 开头,因此它们在转换为整数类型时都会被解释为数字 0。因此,这两个字符串的整数值都为 0,所以在使用弱类型比较时,PHP 将它们视为相等的值。需要注意的是,这并不意味着这两个字符串的真实 MD5 值相等,而仅仅是因为它们在转换为整数时,被解释为相同的数字 0。
php对科学计数法比较的特点
对于使用科学计数法字符串表示的数字,PHP 在比较它们的大小时,只比较它们的尾数部分(2x10^3,2是尾数,3是指数),而忽略指数部分。也就是说,PHP 会将这些字符串转换为科学计数法形式的数字,然后比较它们的尾数部分来确定它们的相对大小,而不考虑指数部分。
 
 

🤗 总结归纳

收获满满。。。

📎 参考文章

  • 一些引用
  • 引用文章
 
💡
有关Notion安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
Apache Log4j2 CVE-2021-44228复现记录wir3s靶机—vulnhub靶场