SQL查询漏洞



我试图解决这个PHP漏洞,在https://picoctf.com/problems/php3/上找到,源代码可在上面的问题,但不能。

我发现了一个解决方案,它声称任何密码的md5哈希值在字节形式中包含字符串'='或'|'(包括单引号),如果与用户名"admin"配对,将被接受。

最初在这里找到的解决方案:(越南语)http://blog.phuongnam.org/2013/07/picoctf.html

例如,可以接受以下日志详细信息:

管理

1184941

显然这是因为1184941的字节md5哈希值为8žt¼>Pý^0'|'

那么为什么这个解决方案有效呢?

我得到md5的True参数产生一个字节而不是十六进制哈希,并且@前缀

mysql_fetch_array

强制sql忽略由于中断查询而导致的错误,但除此之外我就迷失了。

查询中的管道符号为bitwise OR

为了便于阅读,将查询稍微分割一下,它看起来像这样:

.. WHERE (pass = '8žt¼ø>Pý^0' |'')

按位或返回0(我通过打开javascript控制台并输入'8žt¼ø>Pý^0' |''来确认)。当您针对整数查询char/varchar字段时,MySQL将字段的内容类型转换为整数以进行比较。任何没有有效整数的字段都等同于0。所以它现在正在寻找包含值0的密码,这是所有不是数字值的东西。

或者;您也可以使用用户名登录:') OR 'a'='a' --

最新更新