md5和sha1常见绕过【详细附新生赛题目】

​​

思路起源:

1.对于php强比较和弱比较:md5(),sha1()函数无法处理数组,如果传入的为数组,会返回NULL,两个数组经过加密后得到的都是NULL,也就是相等的。

2、对于某些特殊的字符串加密后得到的密文以0e开头,PHP会当作科学计数法来处理,也就是0的n次方,得到的值比较的时候都相同。

常见的加密后密文以0e开头的字符串:
复制代码
md5:
 
240610708:0e462097431906509019562988736854
QLTHNDT:0e405967825401955372549139051580
QNKCDZO:0e830400451993494058024219903391
PJNPDWY:0e291529052894702774557631701704
NWWKITQ:0e763082070976038347657360817689
NOOPCJF:0e818888003657176127862245791911
MMHUWUV:0e701732711630150438129209816536
MAUXXQC:0e478478466848439040434801845361
 
 
sha1:
 
10932435112: 0e07766915004133176347055865026311692244
aaroZmOk: 0e66507019969427134894567494305185566735
aaK1STfY: 0e76658526655756207688271159624026011393
aaO8zKZF: 0e89257456677279068558073954252716165668
aa3OFF9m: 0e36977786278517984959260394024281014729
0e1290633704: 0e19985187802402577070739524195726831799
哈希碰撞?

MD5 算法 的 哈希输出空间 相对较小,仅有 128 位(仅能容纳 128 位二进制数据),而 输入空间是无限的,这种 输入与输出的不匹配性 导致了哈希碰撞的 可能性。攻击者可以使用 巧妙构造的输入数据,通过精心选择的 碰撞攻击算法,找到 具有相同哈希值的不同输入。

SHA-1算法也与MD5类似,都是把输入二进制串分成512位的块,把二进制串的位数存储在最后64位,二者之间填充为0,依次对每个块进行一些列高深的数学运算,最后得到一个160位的二进制串。通常表示为40个十六进制数字。

【即僧多肉少,输入大于输出】

常见题目:

要求传入两个参数不相等但是经过md5加密后需要相等

数组绕过

传入两个不同的数组,经md5加密后结果都是null,比较则相等

如:md5_1[]=1&md5_2[]=2

使用特殊字符串绕过【只能进行弱比较,强比较无法进行】

随便选取两个加密后是以0e开头的字符串传入即可

SWPUCTF 2023 秋季新生赛一键连接!

题目

连连need

复制代码
<?php
highlight_file(__FILE__);
error_reporting(0);
$md5_1 = $_GET['md5_1'];
$md5_2 = $_GET['md5_2'];
$sha1_1 = $_GET['sha1_1'];
$sha1_2 = $_GET['sha1_2'];
$new_player =$_GET['new_player'];
if ($md5_1 !== $md5_2 && md5($md5_1) === md5($md5_2)) {
    if ($sha1_1 != $sha1_2 && sha1($sha1_1) === sha1($sha1_2)) {
        if (file_get_contents($new_player) === "Welcome to NSSCTF!!!") {
            echo "Congratulations~~~~~~~~~";
            echo "试试need Antsword<br/>";
            @eval($_POST['Nss']);
        }else{
            echo "可曾听过data协议?";
        }
    } else {
        echo "sha1又如何相等呢";
    }
} else {
    echo "如何让md5值相等呢¿";
}
如何让md5值相等呢¿

尝试与解题

如何满足这个条件:

  1. $md5_1 !== $md5_2 && md5($md5_1) === md5($md5_2)

可以使用数组绕过,即md5_1[]=1&md5_2[]=2

  1. $sha1_1 != $sha1_2 && sha1($sha1_1) === sha1($sha1_2)

可以使用数组绕过,即sha1_1[]=1&sha1_2[]=2

  1. file_get_contents($new_player) === "Welcome to NSSCTF!!!"

强比较类型new_player="Welcome to NSSCTF!!!"【不行】

正解new_player=data://text/plain,Welcome to NSSCTF!!!

  1. @eval($_POST['Nss']);

SWPUCTF 2024 秋季新生赛PHP躲猫猫

2024年NSSCTF秋季招新赛WP-Web-CSDN博客

【php伪协议,弱比较】

题目

尝试与解题

不安全的方式,即get的传参方式

get传参完出现这个,更安全的方式?post

通过post请求,让我们去这个地点,修改url即可

然后页面出现了源代码

vb 复制代码
`<?php
error_reporting(__FILE__);
highlight_file(__FILE__);
Include('hello.php');

$NSS=$_POST['NSS'];
$ATM=$_GET['CTF'];
$CTF=$_GET['ATM'];

if ($CTF!=$ATM ){
    if (is_string($CTF)&&is_string($ATM)){
        if (md5($ATM)==md5($CTF)){
            include($NSS);//f1ag在/f1ag里面,快通过include拿到它
        }else{
            echo '诶嘿,但是我就是要让ATM==CTF,不然你就别想拿到f1ag,不服进nss来揍我';
        }
    }else{
        echo '不准无脑用数组,实打实的学才能学得好'; 
    }
}else{
    echo 'ATM怎么能是CTF呢';
}

if ($NSS=='I love CTF'){
    echo $f1agfile;
}
?> ATM怎么能是CTF呢`

看这个很复杂的样子?

看来需要代码审计

  1. include($NSS);//f1ag在/f1ag里面,快通过include拿到它

include函数包含NSS,说明

通过include($NSS)包含/f1ag,需将$NSS设置为/f1ag(直接包含绝对路径)

  1. md5($ATM)==md5($CTF)

要如何将二者的哈希值相等呢,md5这个弱比较

例:s878926199a s155964671a

?ATM=s878926199a&CTF=s155964671a

相关推荐
TlSfoward16 小时前
抓包代理链路下的 TLS 指纹变化分析 TLSFOWARD抓包工具
数据库·爬虫·网络协议·搜索引擎·php
其实防守也摸鱼19 小时前
补天SRC新手入门指南:从0到1的漏洞挖掘之路
网络·python·学习·安全·web安全·数据挖掘·挖洞
—Miss. Z—19 小时前
计算机二级MySQL——简单应用题(存储过程&存储函数)
数据库·oracle·php
故乡de云19 小时前
AWS 添加付款方式失败排查清单:卡片、银行风控与账号状态逐项定位
开发语言·php
lubiii_20 小时前
网络安全法律法规备考速查手册
安全·web安全·网络安全
txg66620 小时前
网络安全领域简报(2026年7月14日—20日)
安全·web安全
梦梦代码精20 小时前
基于ThinkPHP6 + Vue3的家政预约系统全解析:从LBS定位到自动派单的完整实现
java·docker·开源·php·代码规范
郑州光合科技余经理21 小时前
家政O2O平台解析:从0搭建上门预约小程序解决方案
android·java·开发语言·前端·小程序·架构·php
lxw18449125141 天前
PHP后端(CI框架方向)面试题库,分为基础必问、MySQL、Redis、工程运维、高阶加分、场景实操六大模块,适配该JD全部考点,附带标准答案
ci/cd·面试·php
郑州光合科技余经理1 天前
家政预约小程序后端源码深度剖析:支付回调实战
java·开发语言·前端·git·小程序·架构·php