CTF-[Web] MD5解题思路

这篇具有很好参考价值的文章主要介绍了CTF-[Web] MD5解题思路。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

写在前面:最近练习了一些CTF中关于md5绕过的题目,总结了几种思路,本质没有太大变化,就是各种组合绕过,也是比较考察基础的,前段时间太摆烂了,好久没有更新了,革命尚未成功,同志仍需努力!!!

关于md5

  md5是一种信息摘要算法(目标是用于证明原文的完整性),其本质也是一种哈希函数,一种被广泛使用的密码散列函数,任意长度的数据算出的md5值的长度都是固定的,md5码具有高度的散列性,没有规律可循,哪怕辕信息只有一点变化,那么md5码也会发生巨大的变化,常用于验证文件的完整性,数据库存储密码,数字签名等。

  md5具有不可逆性,但是通过MD5碰撞,还是有一定可能逆向出来的,(推荐一个在线md5破解网站:md5在线破解网站)

PHP 类型比较

  • 松散比较(运算符):使用两个等号 == 比较,只比较值,不比较类型。
  • 严格比较(全等运算符):用三个等号 === 比较,除了比较值,也比较类型。

详细了解可以参考菜鸟教程,很详细了。

PHP 0e漏洞

  PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0(当成科学计数法进行处理),所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。

  PHP在攻击者可以利用这一漏洞,通过输入一个经过哈希后以”0E”开头的字符串,即会被PHP解释为0,如果数据库中存在这种哈希值以”0E”开头的密码的话,他就可以以这个用户的身份登录进去,尽管并没有真正的密码。

PHP md5()函数

语法:md5(string,raw)

PHP md5()函数
参数 描述
string 必需。规定要计算的字符串。
raw 可选。规定十六进制或二进制输出格式:

TRUE - 原始 16 字符二进制格式

FALSE - 默认 32 字符十六进制数

md5解密 ctf,PHP,BUUCTF,CTF,哈希算法,算法,网络安全,web安全

具体使用方法,可以参考菜鸟教程

松散比较类型

 题目一

  • 题目如下:
<?php
header("Content-Type:text/html;charset=utf-8");
show_source(__FILE__);
include('flag.php');
$md5 = $_GET['md5'];
if($md5 == md5($md5)){
    echo 'GET_FLAG'.$flag;
}else{
    echo 'md5校验失败...';
}
?> md5校验失败...
  • 题目分析:

题目中要求一个字符串与md5加密后的值相等,通过上面PHP 0e漏洞的原理,也就将此题转化成 ==>寻找一个字符串(0e开头)加密后(还是0e开头),弱比较相等

payload:?md5=0e215962017

  • 此题可解:

md5解密 ctf,PHP,BUUCTF,CTF,哈希算法,算法,网络安全,web安全

 md5解密 ctf,PHP,BUUCTF,CTF,哈希算法,算法,网络安全,web安全

题目二

  • 题目如下:
<?php
header("Content-Type:text/html;charset=utf-8");
show_source(__FILE__);
include('flag.php');
$username = $_GET['username'];
$password = $_GET['password'];
if($username != $password){
    if(md5($username) == md5($password)){
        echo 'GET_FLAG:'.$flag;
    }else{
        echo 'md5校验出错...';
    }
}else{
    echo '用户名密码不能相等!';
}
?> 用户名密码不能相等
  • 题目分析:

题目中,要求两个字符串值不能相等,但是两个字符串经过md5加密后的值需要相等,通过上面PHP 0e漏洞的原理,也就将此题转化成 ==> 寻找两个值加密后以0e开头,且0e后面是纯数字的字符串即可,可以使用Python写个程序或者直接在网上搜。

240610708 
0e462097431906509019562988736854
 
314282422 
0e990995504821699494520356953734
 
571579406 
0e972379832854295224118025748221

QLTHNDT 
0e405967825401955372549139051580
 
QNKCDZO 
0e830400451993494058024219903391
 
EEIZDOI 
0e782601363539291779881938479162
 
TUFEPMC 
0e839407194569345277863905212547
 
UTIPEZQ 
0e382098788231234954670291303879
  • 此题可解:

md5解密 ctf,PHP,BUUCTF,CTF,哈希算法,算法,网络安全,web安全

严格比较类型

题目一

  • 题目如下:
<?php
header("Content-Type:text/html;charset=utf-8");
show_source(__FILE__);
include('flag.php');
$username = $_GET['username'];
$password = $_GET['password'];
if($username != $password){
    if(md5($username) === md5($password)){
        echo 'GET_FLAG:'.$flag;
    }else{
        echo 'md5校验出错...';
    }
}else{
    echo '用户名密码不能相等!';
}
?> 用户名密码不能相等!
  • 题目分析:

全等运算符“===”,既比较值又比较类型,题目中“!=”意思为“不等于”,具体可查看菜鸟教程关于“!=”说明,值不相等时返回“ture”,也就是说两个参数值要不相等,两个参数在md5加密后全相等,也就是说两个参数在md5加密后不仅值相等类型也要一致,此时就无法利用PHP 0e漏洞了,需要别的方法绕过。

可以利用md5在加密字符串时会warining,输出结果为NULL,传入两个数组,这样就能使两个参数在md5加密后的类型是一致的。

payload:?username[]=1&password[]=2

  • 此题可解:

md5解密 ctf,PHP,BUUCTF,CTF,哈希算法,算法,网络安全,web安全

 catf1ag{nlLU5FRGzI98ZuDyCYwq4KG4iZqIVEmp}

SQL注入+md5

(此题考察了SQL注入+md5各种绕过)

  • 题目如下:md5解密 ctf,PHP,BUUCTF,CTF,哈希算法,算法,网络安全,web安全
  • 题目分析:

随便输入内容。点击提交没有任何回显,想到查看网页源代码,是否会有线索解题,在源代码中看到“header”,考虑可以尝试抓包查看HTTP头,这里推荐一个好用的在线工具(在线查看HTTP/HTTPS响应消息头)。

md5解密 ctf,PHP,BUUCTF,CTF,哈希算法,算法,网络安全,web安全

通过抓包(如下图),发现“Hint”处存在一个SQL语句“select * from 'admin' where password=md5($pass,true)”,这里通过上面对PHP md5()函数的解释,md5($pass,true)为true时,返回的是原始 16 字符二进制格式,这时可以通过输入ffifdyop进行绕过。md5解密 ctf,PHP,BUUCTF,CTF,哈希算法,算法,网络安全,web安全

ffifdyop绕过原理:

ffifdyop经过md5加密后是:276f722736c95d99e921722cf9ed621c

在转换字符串是:'or'6<乱码>  即  'or'66�]��!r,��b

利用方法:

select * from admin where password=''or'6<乱码>'

就相当于构成永真式,即万能密码,实现SQL注入

select * from admin where password=''or 1

 输入提交后,返回了新的页面(如下图)。

md5解密 ctf,PHP,BUUCTF,CTF,哈希算法,算法,网络安全,web安全

查看网页源代码。

<!--
$a = $GET['a'];
$b = $_GET['b'];

if($a != $b && md5($a) == md5($b)){
-->

这里通过代码审计:

传入参数a和b不能相等,两个参数经过md5加密后值相等。可以参考上面的松散比较类型进行绕过。提交参数后,页面刷新(如下图)。

md5解密 ctf,PHP,BUUCTF,CTF,哈希算法,算法,网络安全,web安全好家伙,又要绕过,需要传入参数param1和param2,需要满足两个参数不相等,md5加密后值和类型都相等,可以参考上面的严格比较类型进行绕过(数组)。需要注意的是这里需要使用POST传参,这里推荐工具:HackBar。

  • 题目得解:

md5解密 ctf,PHP,BUUCTF,CTF,哈希算法,算法,网络安全,web安全

 flag{2223418e-1d21-4436-95cb-4050c0ffc7a4}

题目练习平台

Catf1agCTF - 综合训练平台(前面几道题目)

BUUCTF在线评测http://www.catf1ag.cn/mainBUUCTF在线评测(最后一题[BJDCTF2020]Easy MD51)文章来源地址https://www.toymoban.com/news/detail-649735.html

到了这里,关于CTF-[Web] MD5解题思路的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RSA、MD5加密解密算法全套解析安装教程

    第一部分介绍加密解密算法, 第二部分介绍我小组成功应用的RSA、MD5两种加密解密算法,以及心得体会。 1、加密解密算法介绍 应用的开发中安全很重要,所以信息加密技术显得尤为重要。我们需要对应用中的多项数据进行加密处理,从而来保证应用上线后的安全性,给用户

    2024年02月09日
    浏览(59)
  • 常见加密解密(DES、RSA)以及摘要算法MD5的介绍

    1.1-理解MD5 MD5公开的算法,任何语言实现后其实都是一样的、通用的 不可逆加密:原文——加密——密文,密文无法解密出原文 1.2-MD5封装 1.3-MD5总结 相同原文加密的结果是一样的 不同长度的内容加密后都是32位,可以自行改变长度 原文件改动差别很小,结果差别很大 不管文

    2024年02月14日
    浏览(91)
  • Java使用MD5加盐对密码进行加密处理,附注册和登录加密解密处理

    在开发的时候,有一些敏感信息是不能直接通过明白直接保存到数据库的。最经典的就是密码了。如果直接把密码以明文的形式入库,不仅会泄露用户的隐私,对系统也是极其的不厉,这样做是非常危险的。 那么我们就需要对这些铭文进行加密。 现在市场是加密的方式已经

    2024年02月02日
    浏览(42)
  • 【MD5】什么是MD5?md5的简要描述

    MD5:英文全称是 Message-Digest Algorithm 5。 中文名为 消息摘要算法第五版。它是消息摘要算法,属于 Hash 算法的一种。 正常情况下,它的结果是一个 长度为 32位 的 16进制 的 字符串 。 也有一些地方会用到 16 位的 MD5的结果,它实际上是从 32位 字符串中取中间的第9位到第24位的

    2024年02月08日
    浏览(50)
  • C#集成数据加密算法,包含DES、RSA、Base64、SHA、MD5算法,轻松实现数据加密解密需求

    在需要使用配置文件的工控软件中,往往需要在配置文件和数据库中对一些数据加密,即对一串数据进行加密算法后输出复杂符号和字符的形式,让非相关人员无法识别原有数据,从而对数据或数据库进行相应的保护,这往往也是公司安全部门的基本要求。 网上写加密算法的

    2024年02月03日
    浏览(85)
  • macOS - md5 | md5sum

    大文件传输是否完整,你可以使用 md5 进行校验 linux 上使用 md5sum 命令,在macOS 上 md5 命令是和 md5sum 等效的 参考:https://blog.csdn.net/cnds123321/article/details/124946370 Linux macOS Linux - md5sum Usage: md5sum [OPTION]… [FILE]… Print or check MD5 (128-bit) checksums. With no FILE, or when FILE is -, read standard

    2024年01月18日
    浏览(41)
  • linux:md5命令以及md5的使用场景

    MD5广泛用于数据完整性校验和密码存储,它是一种不可逆的加密算法,目前无法解密。它会逐位对文件的内容进行校验。是文件的内容,与文件名无关,也就是文件内容相同,其md5值相同。 在数据完整性校验中,MD5可用于验证数据的完整性。例如,在下载文件后,可以对下载

    2024年02月06日
    浏览(44)
  • win中查看MD5、Linux中查看MD5

    Git Bash Here

    2024年02月04日
    浏览(47)
  • uniapp使用md5加密 js使用md5加密

    文章的初衷 最近项目中使用了md5加密,为了方便还不明白怎么使用的朋友参考查阅,当然也为了方便博主再次使用所写 md5加密说明 可在不同平台使用 因为使用方法是js方法去调用的所以不局限于某个平台 我这里使用的方式是登录的时候进行加密,具体其他的使用方式,朋友们自

    2024年02月07日
    浏览(71)
  • 使用md5collgen进行MD5碰撞实验

    题目1:可在ubuntu主机上预先安装md5collgen,题目为“生成两个MD5哈希值一致但是文件内容不同的文件”。 所谓“文件内容不同但却有相同的哈希值”就是 碰撞。 在这个题目中,我们将生成两个具有相同MD5哈希值的不同文件。这两个文件的开始部分需要相同,即它们共享相同

    2024年01月24日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包