# SQL注入点检测方法

现在有很多防注入程序屏蔽了 and、1=1、1=2 类似这样的关键字,使用这样的方法有时不能探测到注入点了。那么是否有新的方法能够探测注入点呢? 经过一段时间的研究,发现了更好的方法。特此共享一下。 现在假设有一个新闻页面,URL 是 http://192.168.109.139/news.asp?id=123,

1.在浏览器中打开,可以看到一个正常的新闻页面;

2.在URL地址后面加上-1,URL变成:http://192.168.109.139/news.asp?id=123-1,如果返回的页面和前面不同,是另一则新闻,则表示有注入漏洞,是数字型的注入漏洞;在 URL地址后面加上 -0,URL变成 http://192.168.109.139/news.asp?id=123-0,返回的页面和前面的页面相同,加上-1,返回错误页面,则也表示存在注入漏洞,是数字型的。

3.在URL的地址后面加上'%2B',URL地址变为:http://192.168.109.139/news.asp?id=123'%2B',返回的页面和1同;加上'%2B'asdf,URL地址变为:http://192.168.109.139/news.asp?id=123'%2Basdf,返回的页面和1不同,或者说未发现该条记录,或者错误,则表示存在注入点,是文本型的。

为什么这样可以呢?

我们可以从程序的角度来考虑一下。程序员的这条语句大致应该是这样的:

select * from news where id=123
1

当我们在后面加上 -1 后,语句变为

select * from news where id=123-1
1

SQL服务器在执行这条语句时会进行运算,实际执行的是:

select * from news where id=122
1

这样选出来的就是另外一条新闻记录了。如果该记录存在,就是另一则新闻;否则会显示记录不存在,或者出错。这也同时表示程序未对输入的数据进行过滤,存在数值型的注入漏洞。 如果 SQL 语句时这样的:

select * from news where id='123'
1

那么我们在后面加上 '%2B' 之后,语句变为

select * from news where id='123'+''
1

%2B 是 + 的URL编码。 这样之后,SQL服务器实际执行的是:

select * from news where id='123'
1

会返回同样的页面。

加上 '%2B'asdf 之后,语句变为

select * from news where id='123'+'asdf'
1

实际执行的是:

select * from news where id='123asdf'
1

返回页面不存在,或者显错。 这就表示有文本型的注入漏洞。

# 写在最后

如果你觉得冰河写的还不错,请微信搜索并关注「 冰河技术 」微信公众号,跟冰河学习高并发、分布式、微服务、大数据、互联网和云原生技术,「 冰河技术 」微信公众号更新了大量技术专题,每一篇技术文章干货满满!不少读者已经通过阅读「 冰河技术 」微信公众号文章,吊打面试官,成功跳槽到大厂;也有不少读者实现了技术上的飞跃,成为公司的技术骨干!如果你也想像他们一样提升自己的能力,实现技术能力的飞跃,进大厂,升职加薪,那就关注「 冰河技术 」微信公众号吧,每天更新超硬核技术干货,让你对如何提升技术能力不再迷茫!