随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。
SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。
但是,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况。能不能根据具体情况进行分析,构造巧妙的SQL语句,从而成功获取想要的数据,是高手与“菜鸟”的根本区别。
例如下面这个命令,他是从后台(数据库)取字段值,并核查输入的字段与数据库中的相应字段是否能匹配上,如果可以匹配上,即为成功,方可进行下一步的命令操作。
select * from user where uname="1" or 1=#" and pwd="$p"
系统性的学习要有系统性的进度引导:
一、SQL命令:
- 如何查询所有数据库
- 如何查询该库中的数据表
- 如何查询表中的字段
二、了解SQL注入:
- 为什么会产生SQL注入(通过两道题目)
- 了解常用的闭合符号γ(
# --+ </**/>
) - 联合查询注入的步骤
三、掌握sqlmap的基本使用
- 判断是否存在注入
python sqlmap.py -u "url"
- 获取全部数据库
python sqlmap.py -U URL --dbs
- 获取当前数据库
python sqlmap.py -u URL --current-db
- 获取当 前数据库里所有表
python sqlmap.py -u URL -D DB--tables
- 获取表的字段
python sqlmap.py -u URL -D DB-T users - -columns
- 爆值
python sqlmap.py -u URL -D DB-T users -C "password, username" --dump25
四、 了解python脚本
未完成,待补充…