PHP / MySQL / hash:安全相关的类型 - 比较CTF挑战

时间:2016-11-09 16:39:47

标签: php mysql security hash

我发现自己正在为我工​​作的公司的安保审计员编写测试;通过这样做,我发现了一个我仍然无法解决的CTF挑战。

如果弄清楚,那么请你们看看你的想法会很好。

链接为https://2013.picoctf.com/problems/php3/

测试说明要注意如何使用md5函数,特别是最后一个参数设置为true。

该片段显示:

$pass = md5($_POST[pass], True);
$query = @mysql_fetch_array(mysql_query("select user from php3 where (user='$user') and (pw='$pass')"));

md5()结尾为true意味着md5将返回原始表示而不是字符串表示:

  

如果可选的raw_output设置为TRUE,则md5摘要为   而是以原始二进制格式返回,长度为16。

考虑到这一点,您对通过此测试的程序有什么了解吗?

我想这与MySQL将字符串与二进制表示形式进行比较的方式有关,即类似于Why md5('240610708') is equal to md5('QNKCDZO')?并且与http://dev.mysql.com/doc/refman/5.7/en/type-conversion.html中描述的浮点数比较相关

mysql> SELECT '18015376320243458' = 18015376320243458;
-> 1
mysql> SELECT '18015376320243459' = 18015376320243459;
-> 0

你能帮我理解这个挑战吗?

2 个答案:

答案 0 :(得分:0)

这是一个简单的SQL注入,请尝试使用此用户名:

admin') #

#将忽略查询的其余部分(使其评论)

答案 1 :(得分:0)

mysql> SELECT user from php3 where (user='admin') and (pw=0e55555555555555);

将返回所需的数据。