sql注入作为安全攻防中最重要的一个部分,可以说是所有渗透测试注入中最为重要的一个注入,不管是预防还是测试,都需要扎实的基础才能明白sql注入。
温馨提示:此文章仅限于学习记录与讨论,不得随意测试或者注入,互联网不是法外之地,任何除学习之外的事情与作者无关。
sql注入顾名思义就是执行sql命令
原理:执行的用户能使用sql注入绕过认证机制输入变量,使得sql语句发生变化,通过接收和传递重新定义sql语句,然后可以重新操作。
原理一定要弄清楚,以后才可以活学活用。
产生sql注入的条件:1.变量传递,可控变量
2.使变量带入数据库进行查询(使其执行sql语句)
判断一个网站是否存在sql注入的方法:
1.比较流行也是大部分人都知道的一个方法,在参数后边加 and 1=1页面正常,然后在参数后边加入 and 1=2 页面错误,这种一般存在sql注入。
2.在参数后边加一个任意符号 如 ',如果加入符号之后与加入符号之前没有任何区别,那网站不会存在注入点。如果加入符号后网站返回的界面与之前不一样那网站通常存在注入点。
第二条其实也很好理解,因为加入符号之后sql语句发生了变化所以网站返回的内容与之前不一样所以存在注入点。
以上两种情况适用于大部分判断,如果怎么测试都返回404(不存在)或者相同的一个界面,那就存在过滤,一般没有注入点。
发现存在sql注入的几种办法:
1、手工
一个网站一般有多个分目录站点,如www.xxx.com为主页,www.xxx.com/bbs 为其网站下的一个论坛,一般情况下主目录站点很难发现注入,可以借助分目录下发现。
分端口站点:如111.112.113.1 111.112.113.1:80
2、工具
常用的工具扫描为awvs,appscan,w3af等等
前期学习为了更好的理解sql注入可以选择手工方式,后期为了方便可以利用工具。
如何预防sql注入
1.凡是有固定格式的变量,在sql语句执行之前,应该严格按照固定的格式去检查,确保变量是我们预想的那样。
2.过滤掉没意义的特殊符号,无法固定格式的变量,一定要进行特殊符号过滤或者转义。过滤是如今很多预防sql注入的重要方法之一。
3.waf可以也可以预防部分sql注入,但是有绕过的可能性。
4.使用数据库防火墙、数据库加密等方式。