目录
[一、[SWPUCTF 2021 新生赛]jicao](#一、[SWPUCTF 2021 新生赛]jicao)
[[SWPUCTF 2021 新生赛]jicao](#[SWPUCTF 2021 新生赛]jicao)
[二、[SWPUCTF 2021 新生赛]easy_md5](#二、[SWPUCTF 2021 新生赛]easy_md5)
[[SWPUCTF 2021 新生赛]easy_md5](#[SWPUCTF 2021 新生赛]easy_md5)
一、[SWPUCTF 2021 新生赛]jicao
什么是JSON?
JSON是什么?对JSON的简单理解_josn是什么-CSDN博客
JSON(全称JavaScript)是一种存储数据的方式,使用键值对e.g.{"key":"value"}的形式表示数据。
JSON中,键是一个字符串。
值可以是字符串、数字、布尔值、数组、嵌套的JSON对象或null。
JSON语法:
使用花括号**{}** 表示一个JSON对象。
键和值之间使用冒号 : 分隔。
每个键值对之间使用逗号**,** 分隔。
示例:
{ //键
"usename":"admin", //值为 //字符串
"id":123, //数字
"password":123,
"interests": ["reading", "traveling"], //数组
"addrees":
{
"campus":"moudaxue",
"zhuanye":"computer" //嵌套的JSON
},
"beizhu":null //空
}
[SWPUCTF 2021 新生赛]jicao
打开环境,php代码说明了flag.php文件包含于index.php中,设定了一个POST请求的id和GET请求的json。当id,json分别等于字符串时,返回flag。
故 GET传参?json={"x":"wllm"} POST传参 id=wllmNB
得到flag。
二、[SWPUCTF 2021 新生赛]easy_md5
PHP弱类型和强类型
php是一种弱类型语言,对数据的类型要求并不严格,可以让数据类型互相转换。
php其中的两种比较符号:
==:先将字符串类型转换相同,再比较。(松散比较)(只比较值,不比较数据类型)
===:先判断两种字符串的类型是否相等,再比较。(进行严格的类型和值比较)
1.弱类型比较(==)
若字符型值开头为数字,转为数字;
若开头不为数字,为 null 弱比较,与 0 相等。
"123abc"==123 => true
''abc123''==123 => false
''abc123''==0 => true
2.强类型比较(===)
当两个操作数的类型和值完全相等时,才会返回true,否则返回false。
"123abc"==="123abc" => true
[SWPUCTF 2021 新生赛]easy_md5
打开环境,php代码说明了flag.php文件包含于FILE中,设定了一个POST请求的password和GET请求的name。当name不等于password,但它们通过MD5加密后相等时,返回flag。
解法一:使用md5绕过
php中存在== 弱类型比较,可通过hash比较的缺陷绕过
hash比较的缺陷:
两个数的md5加密后的值以0e开头就可以绕过
因为以0e开头的数会被认为是科学计数法,0e+任何数 在科学计数法中都是0,故两数相等
常见的MD5碰撞:md5值为0e开头_md5 0e开头-CSDN博客
找了两个0e开头的MD5原值(QNKCDZO、240610708)分别作为name,password传参
得到flag。
解法二:使用数组绕过
由于md5()函数存在缺陷,加密[]的时候返回值如果是NULL,就能成功的绕过
可使用[]类型比较的方法, GET传参?name[]=1 POST传参 password[]=2