SQL注入-md5加密参数漏洞(CTF例题)

漏洞成因

php中的md5函数有一个可选参数,如果开发者写查询数据库函数时使用了这个参数,或者在数据存储时是md5后的字符串形式存储,都有可能产生这个漏洞。
在这里插入图片描述

利用方法

md5看似是非常强加密措施,但是一旦没有返回我们常见的16进制数,返回了二进制原始输出格式,在浏览器编码的作用下就会编码成为奇怪的字符串(对于二进制一般都会编码)。
我们使用md5碰撞,一旦在这些奇怪的字符串中碰撞出了可以进行SQL注入的特殊字符串,那么就可以越过登录了。
下面是参考资料的英文原版:
The trick: Raw MD5 hashes are dangerous in SQL

The trick in this challenge was that PHP’s md5() function can return its output in either hex or raw form. Here’s md5()’s method signature:

string md5( string $str [, bool $raw_output = false] )

If the second argument to MD5 is true, it will return ugly raw bits instead of a nice hex string. Raw MD5 hashes are dangerous in SQL statements because they can contain characters with special meaning to MySQL. The raw data could, for example, contain quotes (’ or ") that would allow SQL injection.

在经过长时间的碰撞后,比较常用的是以下两种:
数字型:129581926211651571912466741651878684928
字符型:ffifdyop

你可以使用以下代码验证:

<?php
    $a='ffifdyop';
    $b='129581926211651571912466741651878684928';
    $bb=md5($a,TRUE);
    echo $bb;
    echo "\n";
    $cc=md5($b,true);
    echo $cc
    ?>

结果为:
在这里插入图片描述
可以看到,它们都有'or' 结构
就可以构造出必真的结果。

例题(ctfshow-web9)

在这里插入图片描述
看起来是一个SQL注入,但是很多探测都没反应。
试试robots协议
在这里插入图片描述
有提示了,把文件下载下来
在这里插入图片描述
看来是md5加密,一开始想到的就是md5碰撞,但是非常麻烦。
它加了关键参数true,那就用这个漏洞试试。
这里长度不允许大于10,所以就用字符型。
在这里插入图片描述
登录成功

参考资料

漏洞英文资料:https://cvk.posthaven.com/sql-injection-with-raw-md5-hashes

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值