一.注入攻击原理
简单来说就是程序员在对用户输入的参数数据未做严格过滤,导致可以直接进入数据库进行操作查询。
二.如何找注入点?如何判断注入点?
2.1
与数据库有交互的地方,例如:登录的地方、提交的地方、更新的地方、注册的地方、搜索的地方、更改地址的地方、充值的地方、留言板等,还有就是http头、cookices、referee、user agent,post提交数据包的地方等等
2.2
(1)在网址末端输入单引号('),如果页面不能正常显示,浏览器返回一些异常信息,则说明该链接可能存在注入漏洞。
(2)在链接地址后分别加上and 1=1和and 1=2进行提交,如果返回不同的页面,那么说明存在SQL注入漏洞。
三.注入的分类及提交方式
3.1
(1)数字型注入 or1=1
(2)字符型注入 XXX' or 1=1#'
(3)搜索型注入 %XXX% or 1=1#%'
(4)XXX型注入 XXX') or 1=1#
3.2
提交方式有get提交、post提交、cookie提交
四.注入攻击一般所支持的类型
(1)union注入
(2)information_schema注入
(3)基于函数函数报错注入
updatexml():函数是MYSQL对XML文档数据进行查询和修改的XPATH函数.
extractvalue() :函数也是MYSQL对XML文档数据进行查询的XPATH函数.
floor():MYSQL中用来取整的函数.
(4)HTTP Header注入
(5)盲注
(6)宽字节注入
五.寻找网站物理路径的方法
(1)通过搜索引擎,例如百度,谷歌
(2)输入单引号,报错信息中寻找
(3)加载配置文件,例如c:/windows/php.ini //php配置信息
c:\windows\system32\inetsrv\MetaBase.xml 查看IIS的虚拟主机配置
d:\APACHE\Apache2\conf\httpd.conf
c:/windows/my.ini //MYSQL配置文件,记录管理员登陆过的MYSQL用户名和密码
六.mysql及mssql数据库写入webshell的方法
mysql:into outfile
mssql:xp_cmdshell
七.mysql5.0以下与5.0以上的区别
MySQL5版本以下数据库不支持字符转义字句查询,利用order by获得当前表的字段数,再使用union select联合查询来获取想要的数据库信息。使用union select联合查询数据库时,由于不知道数据库中的表名与字段名,因此只能像Access一样直接用常见表名和字段名进行猜测判断。
MySQL 5版本由于information_schema库的存在,注入攻击相对来说方便了许多
通过load_file()函数来读取脚本代码或系统敏感文件内容,进行漏洞分析或直接获取数据库连接账号、密码。
通过dumpfile/outfile函数导出获取WebShell。
八.sqlmap注入对服务器文件读写操作需要的条件
(1)需要知道远程目录
(2)需要远程目录有写权限
(3)上传目录是否有脚本执行权限
(4)需要数据库开启secure_file_priv 相当于secure_file_priv的值为空,不为空不充许写入webshell (默认不开启,需要修改my.ini配置文件)
九.sqlmap的常用参数
-r 指定参数注入
-u get注入
--level 执行测试的等级(1-5,默认为1),使用–level 参数且数值>=2的时候也会检查cookie里面的参数,当>=3的时候将检查User-agent和Referer
--risk 执行测试的风险(0-3,默认为1),默认是1会测试大部分的测试语句,2会增加基于事件的测试语句,3会增加OR语句的SQL注入测试
-v ERBOSE信息级别: 0-6 (缺省1),其值具体含义:“0”只显示python错误以及严重的信息;1同时显示基本信息和警告信息(默认);“2”同时显示debug信息;“3”同时显示注入的payload;“4”同时显示HTTP请求;“5”同时显示HTTP响应头;“6”同时显示HTTP响应页面;如果想看到sqlmap发送的测试payload最好的等级就是3
-threads 线程数,如果你想让sqlmap跑的更快,可以更改这个线程 数的值,默认值为10
-p 后面接参数,针对单个参数注入
--tables -D 数据库名:获取表名
--columns -T 表名 -D 数据库名:获取字段名
--tamper:sqlmap过waf
九.注入防范方法
安全狗、涵数过滤、直接下载相关防范注入文件,通过incloud包含放在网站配置文件里面