【问题标题】:PHP / MySQL / hash: security related type-comparison CTF challengePHP / MySQL / hash:安全相关类型比较 CTF 挑战
【发布时间】:2017-03-23 13:18:43
【问题描述】:

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

如果想通了,最好请你们看看你们的想法。

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

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

sn-p 读取:

$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

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

【问题讨论】:

标签: php mysql security hash


【解决方案1】:

这是一个简单的 SQL 注入,试试这个作为用户名:

admin') #

# 将忽略查询的其余部分(使其成为注释)

【讨论】:

  • 感谢您的及时回复!我看到了,但忽略了它,因为在挑战描述中它说“注意 md5 的第二个参数以及它是如何使用的”;所以我专注于这一点,假设实际的挑战不是注入#(这很明显)。我想我应该在我的问题中提到这一点。无论如何,谢谢!
  • 我不明白...有什么好笑的?
【解决方案2】:
mysql> SELECT user from php3 where (user='admin') and (pw=0e55555555555555);

将返回所需的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-12
    • 2010-09-12
    相关资源
    最近更新 更多