文章目录
一、什么是sql注入?
sql注入原理:sql注入就是把用户的输入当作sql代码去执行,攻击者可以假设场景利用数据库的一些特性进行攻击。
二、思路
1.找寻注入点
- url
- header
- 表单提交
2.判断是否存在注入
代码如下(示例):
4. and 1=1
5. and 1=2
6. 使用运算符
7. sleep
3.判断字段数
order by
4.查找显错位
- 联合查询
union select 1,2,3 --mysql
union select null,null,null --mssql 对于字符类型要求严格可使用null代替所有类型
union all select null,null,null from dual --oracle 对于语法格式要求严格 dual 虚表
5.查询数据库名
database() --mysql
select * from V$version --oracle查询数据库的版本
6.查询表名
information_schema.tables --mysql
sysobjects --mssql
user_tables --oracle
7.查询字段名
information_schema.columns --mysql
syscolumns --mssql
user_tab_columns --oracle
8.查询值
三、常见的sql注入类型
1.显错注入
- 思路:参考上面的8个步骤
2.head注入
思路:通过弱口令爆破密码,在用户登录的时候发起请求,请求头的信息部分会被网站记录保存到数据库如:UA,XXF,REFERER ,可以通过这些点来尝试进行注入,header注入没有回显,可以利用盲注和报错注入方法其中使用mysql的报错函数updatexml来实现;
3.盲注
- 布尔盲注:采用拆分法,利用sleep ASCII substr length 函数结合再通过burp爆破
- 延时盲注:跟布尔盲注一样多加一个if判断的方法,最后根据burp爆破的响应时间来判断
4.偏移注入
- 思路:利用找出的显错位通过联合查询移动位置来获取数据,有局限性,不能捞取所有数据。
5.dns注入
- 通过load_file函数,让数据库查询的时候访问dns服务地址,然后把结果显示在dnslog上
6.反弹注入
- 对于mssql来说通过opendatesource函数来获取目标数据库数据,插入到攻击者的数据库中,脱库
7.报错注入
- mysql通过updatexml函数
- oracle通过and 1=CTXSYS.DRITHSX.SN(user,(select banner from v$version where rownum=1))
8.宽字节注入
- 主要就是魔术引号的逃逸,通过gbk编码的特性,双字符可以可以构成一个汉字,=%5c ,%df%5c=一个汉字,让\逃逸就可以正常的进行闭合
9.堆叠注入
- 就是使用’;‘,来隔断sql,sql一句一句执行,不同于联合查询,’;'可以堆叠增删改查所有类型的sql
总结
sql注入还可以通过sqlmap脚本来跑,本章不做任何概述,后续更新xss,csrf,文件上传漏洞文档。