CTF中常见php-MD5()函数漏洞

CTF中常见php-MD5()函数漏洞

1.数字与字符串之间的比较

var_dump( 0 == "a" );
var_dump( "0" == "a" );

第一个返回的是 true ,第二个返回的是 false
因为php把字母开头的转化为整型时,转化为0, 前面数字后面字母的话就只取到第一个字母出现的位置之前(如intval(’'123abd45gf)结果为123)

2.MD5函数漏洞

$_GET['name'] != $_GET['password']
MD5($_GET['name']) == MD5($_GET['password'])

要求满足上述条件则
那么要求name和password数值不同但是MD5相同,在这里可以利用绕过。
PHP在处理哈希字符串时,它把每一个以“0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以“0E”开头的,那么PHP将会认为他们相同,都是0。

以下值在md5加密后以0E开头:

  • QNKCDZO
  • 240610708
  • s878926199a
  • s155964671a
  • s214587387a
  • s214587387a

以下值在sha1加密后以0E开头:

  • sha1(‘aaroZmOk’)
  • sha1(‘aaK1STfY’)
  • sha1(‘aaO8zKZF’)
  • sha1(‘aa3OFF9m’)

GET传入a=QNKCDZO&b=240610708就能绕过了

3.php特性

if($_POST['param1']!==$_POST['param2'] && md5($_POST['param1'])===md5($_POST['param2'])){
        die("success!");
    }

在php中===为完全等于运算,不仅比较,而且还比较值的类型,只有两者一致才为真。再次使用a=QNKCDZO&b=240610708就不行了,因为a和b类型不同。
PHP中md5的函数特性

md5([1,2,3]) == md5([4,5,6]) == NULL

[1] !== [2] && md5([1]) === md5([2])
所以GET传入a[]=1&b[]=2就能够绕过了。

4.MD5碰撞

if((string)$_POST['param1']!==(string)$_POST['param2'] && md5($_POST['param1'])===md5($_POST['param2'])){
        die("success!);
}

要求构造param1和param2不同,但是MD5相同,也就是说要求传入两个MD5相同的不同字符串。

Param1=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2
Param2=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2

MD5值相同使用谷歌可以搜到相当多被巧妙构造出的二进制文件,其MD5相同,注意一点,post时一定要urlencode!!!

参考链接:https://blog.csdn.net/wy_97/article/details/79088218

  • 22
    点赞
  • 88
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: CTF 比赛常见的文件包含漏洞的做法包括: 1. 在文件嵌入恶意代码,例如 PHP 文件嵌入 PHP 后门。 2. 在文件嵌入解压后执行恶意代码的压缩包,例如在一个图片文件嵌入 zip 压缩包。 3. 在文件包含指向恶意网站的链接。 4. 在文件包含指向恶意文件的路径,例如在一个文本文件包含指向加密垃圾文件的路径。 最常见的文件包含漏洞的类型是 PHP 和其他服务器端脚本语言,因为它们可以在服务器上执行恶意代码。但也有可能在其他类型的文件发现文件包含漏洞,例如 PDF、Office 文档等。 ### 回答2: 在CTF比赛,文件包含漏洞是一种常见的攻击方式。文件包含漏洞主要出现在动态网页,它指的是在文件引用其他文件时,未经有效的过滤或验证,导致恶意用户可以通过构造特定的请求,获取系统的敏感信息或执行任意代码。 首先,一个常见的做法是利用路径遍历来获取敏感文件。攻击者通过构造包含../的文件路径,让服务器读取到位于网站根目录之外的敏感文件。例如,攻击者可能会访问config.php,其包含数据库的用户名和密码。 其次,攻击者也可能利用文件包含漏洞实现远程文件包含,进一步扩大攻击面。如在引入文件的地方,通过传递网络路径的方式,将远程服务器上的恶意文件包含到受影响的网站上,从而执行任意代码。这种方式被称为远程文件包含(RFI)攻击。 除此之外,攻击者还可以通过利用用户的输入来实现文件包含漏洞。在某些情况下,网站可能会动态地引入用户提交的内容,例如通过GET或POST参数。攻击者可以构造恶意的参数值,使得网站将用户输入的内容当作文件路径进行解析,从而执行恶意代码或访问敏感文件。 为了防止文件包含漏洞,开发者需要进行严格的输入验证和过滤。例如,可以使用白名单机制,只允许系统访问指定目录内的文件。此外,对于用户输入的参数,要进行充分的校验和过滤,确保其只包含允许的字符和路径。 总之,在CTF比赛常见的文件包含漏洞攻击方式主要包括路径遍历、远程文件包含和用户输入导致的漏洞。为了保护系统安全,开发者需要进行合适的输入验证、输出过滤和权限控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值