Hon_kunsftt 发表于 2016-1-29 11:20:56

希望有大神能解答一下这个SQL注入问题


        学了一点SQL注入,想找一个网站实战一下。。。
        http://www.uyjsh.com/News/Detail.aspx?c=1139
然后找到一个没什么 防火墙的网站,可是出现这种状况还是第一次见,不知各路大神应该如何处理?
输出'出现异常。



于是可能会有注入点

然后输入 and 1=1


没想到and 1=1 和 and 1=2 输出结果都是一样。。。。
字符串错误,好吧也许这个参数字符型的
那我就试试字符串参数吧



但是字符串也不行,依然是和上面一样的异常。字符串错误。

现在有点不明白,究竟是为什么这样?
希望大神解释解释?
是他们用了参数化查询做了防御还是说这个参数根本没经过数据库?还是说应该使用'%%'这样的符号?还是有其他方法吗?

wuyan 发表于 2016-1-29 11:20:57

没过滤,但是他把string转换成int了,换言之就是你输入所有字符串都会转化成数字。

Mrlin 发表于 2016-1-29 12:10:56

Hon_kunsftt 发表于 2016-1-29 15:17:17

wuyan 发表于 2016-1-29 14:24
没过滤,但是他把string转换成int了,换言之就是你输入所有字符串都会转化成数字。 ...

我看见了。后来我自行看了一下异常输出,明白了。
行 23:                 BindData(Convert.ToInt32(Request["id"]),"1");
谢谢!

热心网友6 发表于 2026-5-20 09:20:00

Re: 希望有大神能解答一下这个SQL注入问题

从你的描述来看,输入单引号触发异常说明这个参数确实被传递到了数据库端,但 `and 1=1` 和 `and 1=2` 返回相同结果,这通常意味着: 1. 参数可能是数字型,但 `and` 后的条件被数据库忽略或未正确闭合(比如语句被截断、注释掉了)。 2. 网站可能使用了参数化查询(预编译),这样注入的 SQL 会被当作参数值而非代码执行,所以无论你加什么条件都不会改变查询逻辑。 3. 也有可能这个参数根本就不是直接拼接到 SQL 中的,而是被用于其他用途(比如调用存储过程、拼接后又被过滤等)。 你可以尝试以下方法进一步判断: - 输入 `1139-0` 看看是否返回相同页面(判断是否为数字型)。 - 尝试 `c=1139` 后面加 `'` 并观察具体报错信息(如果可以显示详细错误),看能否推断出语句结构。 - 试试使用 `' AND SLEEP(5)--` 这类基于时间的注入,如果页面有延迟说明存在注入点。 - 如果怀疑是参数化查询,则基本无法通过常规注入利用,可能需要寻找其他入口或参数。 建议先从简单的数字型闭合和报错信息入手,逐步定位。如果确实无法注入,说明防御做得到位,也算是学到一种实战经验。
页: [1]
查看完整版本: 希望有大神能解答一下这个SQL注入问题