[SWPUCTF 2021 新生赛]easy_md5

题目链接:NSSCTF | 在线CTF平台

涉及工具:hackbar

涉及知识点:md5绕过

解题思路:

1.打开靶机,代码审计:

审计代码:

①highlight_file(__FILE__);

将自身的源代码以HTML的形式输出到浏览器中,这样我们可以直接查看代码。

②include ‘flag2.php’;

它包含了一个名为 flag2.php 的文件,这可能是一个包含了敏感信息(比如flag)的文件。

if(isset($_GET['name']) && isset($_POST['password'])){
    $name = $_GET['name'];
    $password = $_POST['password'];

a.代码通过 $_GET['name'] 和 $_POST['password'] 获取了两个用户输入的值;

b.$_GET 用于从URL中获取参数,$_POST 用于从表单中获取参数,这里的 $_GET['name'] 表示从URL中获取名为 "name" 的参数,而 $_POST['password'] 表示从表单提交中获取名为 "password" 的参数;

c.满足条件进入内层(下一层判断).

注:

isset函数:isset() 是一个 PHP 函数,用于检查变量是否已经设置并且非 NULL。

if($name != $password && md5($name) == md5($password)){
        echo $flag;
    }
    else {
        echo "wrong!";
    }
  }

如果$name 和 $password 不相等且是它们的MD5哈希值相等时,将输出flag,否则,将输出 "wrong!".(作用在从外到内第二个if判断语句)

else{
    echo 'wrong!';
}

如果判断条件不成立,将会输出 "wrong!".(作用在从外到内第一个if判断语句)

2.审计代码得知:

①需要用get传递一个参数‘name’,post传递一个参数‘password’;

②传入的‘name’不等于‘password’且两个的MD5值相等,即可获得flag.

两种常用题解方法(PHP md5常用两种绕过方式):

a.数组漏洞绕过:

原理:PHP md5函数接收的参数为string(字符串型),如果传入arry(数组型)就无法计算其md5值,但不会报错,导致数组md5值都相等.

b.PHP ‘==’(弱类型比较)漏洞绕过:

原理解释:PHP在进行“==”(弱类型比较)时,会先转换字符串类型,再进行字符串比较,而进行md5后以0e开头的都会被PHP识别为科学计数法,即0e*被视作0的*次方,结果都为0,故我们只需找到md5后为0e*的字符串,常用md5后为0e*的有:

字符串         对应md5值

240610708      0e462097431906509019562988736854

QLTHNDT       0e405967825401955372549139051580

QNKCDZO      0e830400451993494058024219903391

PJNPDWY       0e291529052894702774557631701704

NWWKITQ      0e763082070976038347657360817689

NOOPCJF       0e818888003657176127862245791911

MMHUWUV    0e701732711630150438129209816536

MAUXXQC     0e478478466848439040434801845361

注:以上字符串要记得两个及两个以上,对应md5值不用记.

3.知识总结:

①两种md5常用绕过方法:

a.数组绕过;

b.‘==’弱类型比较绕过。

语法:md5(string,raw)

String:必需,规定计算的字符串

raw:可选,规定十六进制或二进制输出格式

TRUE:16字符二进制格式

FALSE:32字符十六进制数

②PHP两种比较:

a.‘==’弱类型比较:

‘123’==‘123’---->true

‘123’==‘123abc....’---->true

注:只取字符串开头整数部分,特别注意*e*(科学计数法)开头的字符串取科学计数法的数值,如:

‘1e3’==‘1e3’      ---->true

‘1e3ctf’==‘1e3ctf’  ---->true

‘1e3’==‘1e4’      ---->false

‘1e3ctf’==‘1e4ctf’  ---->false

b.‘===’强类型比较:

数据类型和值都要求相等,如:

‘1e3’===‘1e3’        ---->true

‘1e3ctf1’===‘1e3ctf2’  ---->false

③两种PHP传参方法get和post;hackbar的基本使用:

(该内容在我另一篇博客具体讲述及运用过,此处不再重述,还不清楚的请弄懂!博客链接:【[SWPUCTF 2021 新生赛]jicao - CSDN App】http://t.csdnimg.cn/CAZ0X)

④isset函数:isset() 是一个 PHP 函数,用于检查变量是否已经设置并且非 NULL。它的语法如下:

isset(mixed $var, mixed $...)

$var:要检查的变量,可以是一个或多个变量。

返回值:如果所有提供的变量都已设置且非 NULL,则返回 true,否则返回 false。

在给定的代码中,isset($_GET['name']) 和 isset($_POST['password']) 用于检查是否已经从 URL 参数中获取了 name,以及是否从 POST 表单中获取了 password。这样可以确保在尝试使用这些变量之前先检查它们是否存在,以避免产生未定义变量的错误。

  • 38
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值