网址:ctf.show
进入靶场
上接第一题的知识点
这里有一个很明显的区别
if(preg_match("/or|\+/i",$id)){
die("id error");
}
这题的要点就多了一个:
如何绕过 `preg_match("/or|\+/i", $id)` 这一正则表达式的限制,从而尝试进行 SQL 注入攻击。
说明:
正则表达式 `"/or|\+/i"` 的作用是检查 `$id` 变量是否包含 `or` 或 `+` 字符。如果包含其中任意一个字符,程序将输出 "id error" 并终止执行。这是一个基本的 SQL 注入防护措施,目的是防止用户输入恶意的 SQL 查询语句。
为了绕过这个限制,需要构造一个有效的 `$id` 参数,可以通过乘法来尝试绕过:
?id=2*500
到了这里,你会发现,其实这种题目有各种各样的解法,
继续再来第三题
限制又双不一样了
if(preg_match("/or|\-|\\|\*|\<|\>|\!|x|hex|\+/i",$id)){
die("id error");
}
程序现在对输入的 `id` 参数进行了更加严格的过滤,包括对一些特殊字符的检测,如 `-`, `\`, `*`, `<`, `>`, `!`, `x`, `hex`, `+` 等等。如果输入的 `id` 参数包含这些特殊字符中的任何一个,程序都会输出 "id error" 并终止执行。
这是一种更加严格的防御措施,目的是防止恶意用户通过各种方式尝试绕过输入过滤来进行 SQL 注入攻击。
要绕过这种过滤,您需要仔细分析过滤规则并找到相应的漏洞。以下是一些可能的思路:
1. 绕过特殊字符检测: 您可以尝试使用一些绕过技巧来绕过对特殊字符的检测。例如,使用 URL 编码、十六进制编码、Unicode 编码等来隐藏特殊字符。
2. 利用 SQL 注入漏洞: 如果程序的其他部分存在 SQL 注入漏洞,您可以尝试利用这些漏洞来执行恶意 SQL 查询。例如,通过绕过对数字大小的检查,使得程序接受输入的 `id` 参数为非数字,然后构造恶意的 SQL 查询。
3. 利用错误消息泄露:如果程序存在错误消息泄露,您可以尝试通过构造恶意输入来触发错误,从而获取更多的信息或者利用漏洞。
就是找bug呗
之前用的or不行,*也不行
还有/除法啊,还有取反啊
首先写取反是可以得到的
10/0.01=1000,所以
如鱼得水嘿嘿