我正在尝试在网站上利用 SQL 注入(当然是以 Science 的名义)。经过一些测试,我发现了后端是如何工作的。SQL 查询是这样形成的:
$query = 'SELECT * FROM TABLE WHERE ID ='.$segment
$segment
URL 的第二个路径段在哪里。如果http://vict.im/menu/10
它等于 10. Symbols /
,#
它们之后的所有内容都将被忽略,所以前面的链接,http://vict.im/menu/10/blah-blah
并http://vict.im/menu/10#blah-blah
给出相同的结果。
这里的问题是段解析器没有URLdecode()
段。如果我发送.../menu/30 ;
它,它将被编码为.../menu/30%20;
,并且 MySQL 会将其解释为除法的余数,返回 ID = 10 的结果。同样的原因+
,它不会被替换为空格,它作为一个运算符工作。
因此,需要进行不包含任何通常由 Web 浏览器编码的符号的注入。例如,.../menu/(10)or(1=1)
基于布尔值的注入.../menu/9+(USER()='Smith')
和.../menu/CONCAT('1','0')
工作正常。
我该如何向 Sqlmap 解释这种情况?是否有针对此的篡改脚本?还有其他方法可以绕过这种“保护”吗?
PS似乎可以使用以下符号:! $ & ' ( ) * + , : ; = ? @ [ ]
加上mixalpha-numeric。