关于sql注入这一篇就够了

news2025/1/10 23:41:11

本文章根据b站迪总课程总结出来,若有不足请见谅


目录

本文章根据b站迪总课程总结出来,若有不足请见谅

存在sql注入条件

判断数据库类型

注入mysql思路

判断网站是否存在注入点

 判断列名数量(字段数)

文件读写操作

网站路径获取方法

注入类型

按注入点数据类型来分类

根据提交方式分类

猜测查询方式

sql盲注

注入拓展

加解密注入 

json注入

Ladp注入

DNSlog注入

二次注入

堆叠注入

中转注入

WAF绕过

绕过waf的必要条件

绕过方法

WAF举例

安全狗

SQLMap

SQLMAP参数


存在sql注入条件

思维导图(mysql为例):

判断数据库类型

  • 根据数据库特征语句进行判断
  • 根据像sqlmap,穿山甲等工具根据进行判断
  • 根据报错的语句进行判断

了解数据库

详细数据库类型的文章

数据库类型
 

不同数据库注入语句不同,方法也不同,最高权限用户也不同,以mysql为例  一般的网站下一般存放了很多数据库。

比如网站A  -数据库A   -数据库用户A               网站B-数据库B-数据库用户B

每一个网站给定用户一定的执行权限,权利过大可能导致黑客跨站操作等都有可能

网站之间的数据库可能相互影响,要利用数据库探测内部信息可就需要一步一步往下爆

数据库名——>表名——>列名(字段名)——>拿到我们想要的数据

access数据库比较特别

     直接存放表名

                         列名

                              数据

此数据库一般会存放在网站源码下面,不同网站之间数据库不会互相影响

access数据库没有文件读写,也不需要爆破数据库名,但是access存在偏移注入

access偏移注入原理 - 浅易深 - 博客园

注入mysql思路

判断网站是否存在注入点

就是判断sql语句能进行拼接

老方法:

运用逻辑运算符

Select  * from users where id =1 and 1=1   正常

Select * from users where id=1  and 1=2    错误

        新方法:

        例如 :Select * from usrs where id=1dadadada       其实就是判断字符被带入数据库参与查询即可

         

 判断列名数量(字段数)

         在正常语句后加上   order by  x         x为正常与错误的临界的那个值(例如  Select * from users where id=1 order by 3  正常       order by  4  显示错误   我们就可以判断存在四个字段)

 之后可以进行数据库信息的查询

数据库版本:version()

数据库名字: database()

数据库用户:user()

操作系统:@@version_compile_os

常用payload:

'and 1=1--+

'and 1=2--+    #判断是否存在注入点

'order by  3 --+  #判断字段数

'select  1,2,3,4--+  #判断显示位

'union  select database(),2,3--+  #爆出数据库名字

 'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+  #爆出数据库中的表名

' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users' --+ #爆列名

' union select 1,group_concat(id,'--',username,'--',password),3 from users --+  #爆表内所有字段

知识点:

在mysql5.0  版本以上中自带一个数据库名为information_schema,他是一个存储记录所有数据库名,表名,列名的数据库,相当于可以通过他来查询指定数据库下面的表名或列名信息。

数据库符号"."代表下一级的意思  例如:  admin.user  查询的就是admin数据库下的user表

   information_schema.tables  记录数据库中所有表名的表

  information_schema.columns  记录数据库所有列名信息的表

  Table_name 表名

   Columns_name列名

有点绕但是要理解

information_schema的表schemata中的列schema_name记录了所有数据库的名字

information_schema的表tables中的列table_schema记录了所有数据库的名字

information_schema的表tables中的列table_name记录了所有数据库的表的名字

information_schema的表columns中的列table_schema记录了所有数据库的名字

information_schema的表columns中的列table_name记录了所有数据库的表的名字

information_schema的表columns中的列column_name记录了所有数据库的表的列的名字

猜解多个数据可以用 limit  x,1     意思就是从x行加载一条数据

x变动从而显示不同的值

也可以使用group_concat()连接显示所有要查询的信息

文件读写操作

  这个操作需要一定权限,权限一定要给到要不然实现不了

Load_file() : 读取函数     

例如              注:‘\\’是防止浏览器编码'\'而失效

读取配置文件

Into outfile或者  into  dumpfile:导出函数

补充知识:

在mysql中   my.ini  中

secure_file_priv 这个变量被用于限制导入和导出的数据目录,比如 LOAD DATA 和 SELECT ... INTO OUTFILE 语句,以及 LOAD_FILE() 函数。这些操作限制了哪些用户拥有文件操作权限。

secure_file_priv 有些设置选项:

magic_quotes_gpc函数

在php配置文件php.ini   设置是否开启

magic_quotes_gpc函数在php中的作用是判断解析用户提示的数据,如包括有:post、get、cookie过来的数据增加转义字符“\”,以确保这些数据不会引起程序,特别是数据库语句因为特殊字符引起的污染而出现致命的错误。

在magic_quotes_gpc = On的情况下,如果输入的数据有

单引号(’)、双引号(”)、反斜线(\)与 NULL(NULL 字符)等字符都会被加上反斜线。

addslashes()函数与其类似

未开启前的查询语句

开启函数后

绕过方法:

  十六进制编码

  127.0.0.1/sql/Less-1/?id=-1'union select 1,load_file("c://2.txt"),3--+         为转码会被转义    

此时我们使用hex编码     127.0.0.1/sql/Less-1/?id=-1'union select 1,load_file(0x433A5C5C322E747874),3--+

使用编码后查询就不再需要双引号了,只需要去掉双引号对c://2.txt编码即可

网站路径获取方法

  报错显示:部分网站在显示错误时会显示路径

  遗留文件:比如phpinfo.php    php搭建的网站会比较多

  

漏洞报错:利用一些漏洞爆出路径

平台配置文件:可以利用文件读取函数,获得文件路径,但是配置文件的路径不固定

相关防注入:

   自带防御:魔术引导   比如说magic_quotes_gpc函数    这个方法的绕过方式很简单

   内置函数:int 等   通过判断用户输入的数据类型防止用户的恶意注入

例如:

自定义关键字:select  ,union等等         比如通过str_replace()函数将恶意注入语句中的关键字替换   或者直接丢弃该条语句

例如:

WAF防护软件:安全狗,宝塔,阿里云盾等   

注入类型

按注入点数据类型来分类

(1)数字型注入点

许多网页链接有类似的结构  http://xxx.com/users.php?id=1 基于此种形式的注入,一般被叫做数字型注入点,缘由是其注入点 id 类型为数字,在大多数的网页中,诸如 查看用户个人信息,查看文章等,大都会使用这种形式的结构传递id等信息,交给后端,查询出数据库中对应的信息,返回给前台。这一类的 SQL 语句原型大概为 select * from 表名 where id=1 若存在注入,我们可以构造出类似与如下的sql注入语句进行爆破:select * from 表名 where id=1 and 1=1

(2)字符型注入点

网页链接有类似的结构  http://xxx.com/users.php?name=admin 这种形式,其注入点 name 类型为字符类型,所以叫字符型注入点。这一类的 SQL 语句原型大概为 select * from 表名 where name='admin' 值得注意的是这里相比于数字型注入类型的sql语句原型多了引号,可以是单引号或者是双引号。若存在注入,我们可以构造出类似与如下的sql注入语句进行爆破:select * from 表名 where name='admin' and 1=1 ' 我们需要将这些烦人的引号给处理掉。

(3)搜索型注入点

这是一类特殊的注入类型。这类注入主要是指在进行数据搜索时没过滤搜索参数,一般在链接地址中有 "keyword=关键字" 有的不显示在的链接地址里面,而是直接通过搜索框表单提交。此类注入点提交的 SQL 语句,其原形大致为:select * from 表名 where 字段 like '%关键字%' 若存在注入,我们可以构造出类似与如下的sql注入语句进行爆破:select * from 表名 where 字段 like '%测试%' and '%1%'='%1%'

4Json  

JSON注入是指应用程序所解析的JSON数据来源于不可信赖的数据源,程序没有对这些不可信赖的数据进行验证、过滤,如果应用程序使用未经验证的输入构造 JSON,则可以更改 JSON 数据的语义。在相对理想的情况下,攻击者可能会插入无关的元素,导致应用程序在解析 JSON数据时抛出异常。

在JSON中是根据引号(“)、冒号(:)、逗号(,)、花括号({})来区分各字符的意义的。如果向JSON中注入恶意字符,那么JSON将解析失败。

JSON注入和XML注入、SQL注入一样,都需要对影响语句的内容进行转义,如双引号、花括号等。

例如注入语句:

当后台实现注入语句

我们的注入语句可以这样写

dumb后面的单引号将’闭合

+

在注入时不同数据类型要注意',",),%,}等字符的干扰   选择不同的符号去闭合  ,同时不同的数据类型语句也会不同

根据提交方式分类

get注入   通过get请求提交参数

post注入   通过post请求提交参数

Cookie     在cookie参数中携带参数提交

request    任意一种提交参数方式都能提交,你使用post,get等方式提交时都能接收

http头部注入:一般获取头部的信息用于数据分析,但是通过请求头部也可以向数据库发送查询信息,通过构造恶意语句可以对数据库进行信息查询

 例如利用网站源码中可能使用$_SERVER['']获取用户信息,如果与数据库有交互,在此添加参数实现注入   例如sqllabs第十八关

$_SERVER详解

$_SERVER[‘HTTP_ACCEPT_LANGUAGE’]//浏览器语言

$_SERVER[‘REMOTE_ADDR’] //当前用户 IP 。

$_SERVER[‘REMOTE_HOST’] //当前用户主机名

$_SERVER[‘REQUEST_URI’] //URL

$_SERVER[‘REMOTE_PORT’] //端口。

$_SERVER[‘SERVER_NAME’] //服务器主机的名称。

$_SERVER[‘PHP_SELF’]//正在执行脚本的文件名

$_SERVER[‘argv’] //传递给该脚本的参数。

$_SERVER[‘argc’] //传递给程序的命令行参数的个数。

$_SERVER[‘GATEWAY_INTERFACE’]//CGI 规范的版本。

$_SERVER[‘SERVER_SOFTWARE’] //服务器标识的字串

$_SERVER[‘SERVER_PROTOCOL’] //请求页面时通信协议的名称和版本

$_SERVER[‘REQUEST_METHOD’]//访问页面时的请求方法

$_SERVER[‘QUERY_STRING’] //查询(query)的字符串。

$_SERVER[‘DOCUMENT_ROOT’] //当前运行脚本所在的文档根目录

$_SERVER[‘HTTP_ACCEPT’] //当前请求的 Accept: 头部的内容。

$_SERVER[‘HTTP_ACCEPT_CHARSET’] //当前请求的 Accept-Charset: 头部的内容。

$_SERVER[‘HTTP_ACCEPT_ENCODING’] //当前请求的 Accept-Encoding: 头部的内容

$_SERVER[‘HTTP_CONNECTION’] //当前请求的 Connection: 头部的内容。例如:“Keep-Alive”。

$_SERVER[‘HTTP_HOST’] //当前请求的 Host: 头部的内容。

$_SERVER[‘HTTP_REFERER’] //链接到当前页面的前一页面的 URL 地址。

$_SERVER[‘HTTP_USER_AGENT’] //当前请求的 User_Agent: 头部的内容。

$_SERVER[‘HTTPS’]//如果通过https访问,则被设为一个非空的值(on),否则返回off

$_SERVER[‘SCRIPT_FILENAME’] #当前执行脚本的绝对路径名。

$_SERVER[‘SERVER_ADMIN’] #管理员信息

$_SERVER[‘SERVER_PORT’] #服务器所使用的端口

$_SERVER[‘SERVER_SIGNATURE’] #包含服务器版本和虚拟主机名的字符串。

$_SERVER[‘PATH_TRANSLATED’] #当前脚本所在文件系统(不是文档根目录)的基本路径。

$_SERVER[‘SCRIPT_NAME’] #包含当前脚本的路径。这在页面需要指向自己时非常有用。

$_SERVER[‘PHP_AUTH_USER’] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的用户名。

$_SERVER[‘PHP_AUTH_PW’] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的密码。

$_SERVER[‘AUTH_TYPE’] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是认证的类型

在实际环境中,可能网站对不同提交方式的过滤措施不同可以,尝试多换几种注入方式   例如 sqllabs 20关 对post 进行过滤   也许进行cookie注入就可以轻松绕过可以用迪总这个php代码自己搭建去试一试理解一下提交方式

<?php

     $get=$_GET[g];

    echo  $get;

    $post=$_POST;

    echo  $post;

    $c=$_COOKIE;

    echo  $c;

    $r=$_REQUEST;

    echo   $r;

    $s=$_SERVER['HTTP_USER_AGENT']

    echo $s;

>

   

猜测查询方式

根据网站功能我们可以对执行的数据库语句进行猜想,从而进行注入

Select  查询数据

在网站中进行数据显示查询操作

例如: select * from  news where id=1

Insert   插入数据

在网站中进行用户数据注册添加等操作

例如: insert  into  new(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

sql盲注

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

盲注的三种分类:

  • 基于布尔的sql盲注-逻辑判断    regexp,like,ascii,left,ord,mid
  • 基于时间的sql盲注-延时判断    通过返回的时延判断注入是否成功   If,sleep 
  • 基于报错的sql盲注-报错回显    通过数据库报错信息夹带注入回显出来 Floor,updatexml,extractvalue等

搭配函数:

Like  ‘ro%'                   #判断ro或者ro…… 是否成立

Regexp  '^xiaodi[a-z]'  #匹配xaiodi及xiaodi…等

If(条件,5,0)                    #若条件成立则返回5,反之返回0

Sleep(5)                        #sql语句延时执行五秒

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

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

Left(a,b)                         #从左侧截取a的b

Length(a)=8                     #判断字符串长度

Ord=ascii                ascii(a)=97  #判断a的ascii值是否等于97

实战中需要我们灵活应用

注入拓展

加解密注入 

源码端执行数据库语句时对接收的数据进行了解密,例如 sqllabs  21关

前提条件:

  • 对方参数产生了加密
  • 知道网站的加密方式     一般为base64,但是有些网站存在自定义的加密方式,需要判断

json注入

Ladp注入

DNSlog注入

目的(优点):解决盲注不能回显,效率低的问题

Dns在域名解析时会留下域名和解析ip的记录,利用这点我们可以使用Dnslog(日志)记录显示我们的注入结果。通过load_file()不仅可以查看本地文件,也可以访问远程共享文件。

前提:涉及到文件读取等操作,所以要求用户拥有高权限   例如:mysql中的root用户

需要用到dns的一个平台

CEYE - Monitor service for security testing (需要翻墙使用)

和一个常用工具DnslogSqlinj GitHub - ADOOO/DnslogSqlinj

工具的配置:

这个工具需要python2.7去运行(这个如果之前安装不是这个版本的python,涉及多个版本python使用问题,可能会出现报错,我自己也弄了好久,不会解决的可以评论区问问)

二次注入

一般在白盒测试下才会使用

例如   sqllabs  24关

在修改密码处有以下一段代码

注册时注册已有的用户名+‘闭合update语句+想要执行的sql语句   例如dhakkan'#

即可实现注入

在修改dhakkan'#用户密码时数据库会执行语句

UPDATE  users SET PASSWORD =$pass' where username='dhakkan'#'and password='$curr_pass'

成功修改了dhakkan用户的密码

这个注入要考虑是否限制了提交参数的长度,前端检测可以轻松绕过,后端就没有办法了

堆叠注入

多条sql语句同时执行,在数据库语句中通常使用“;”将语句分隔开来,我们使用“;”就可以一次性执行多条sql语句。与union联合注入不同,这里可以执行任意注入语句,而联合注入却是有限的。

局限性:

堆叠注入并不是在每一个环境下都可以执行,可能受到API或者数据库引擎不支持的限制

例如sqlmabs第38关 使用insert语句向表中添加用户

中转注入

网站URL注入点是经过编码的,不能直接结合sqlmap进行漏洞利用,所以本地搭建一个网站,写一个php脚本编码文件,就可以结合sqlmap工具进行测试。因为,注入点经过复杂编码之后,就不能直接结合sqlmap进行漏洞攻击。或者sqlmap自己编写tamper脚本进行攻击

WAF绕过

Web应用防护系统(也称为:网站应用级入侵防御系统。英文:Web Application Firewall,简称: WAF)。利用国际上公认的一种说法:Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品

waf拦截其实也是通过匹配关键字实现拦截,阻止恶意用户的非法操作

干货 | 常见WAF拦截页面总结

绕过waf的必要条件

  • 不干扰语句的正常实现
  • 不被waf检测出来

绕过方法

MySQL数据库特性绕过

借助mysql特性来实现绕过

语句:  /*!五位版本号+关键字*/

例如:   /*!50001 select*/

需要注意的是这不仅仅是简单的SQL内联注释绕过,而是在MySQL中有其特定含义。对于MySQL数据库而言,对于上述payload,如果开头是5个数字的话,其含义为当数据库版本大于5.00.01,就把之后的内容当作正常语句来执行,而如果数据库版本如果小于5.00.01,就把后面的内容当作注释的内容来执行。而对于一般waf而言,则只会把该语句当作普通的payload来处理。

http参数污染

如果出现多个相同参数,不同的服务器搭建网站会出现参数接受的差别,从而令原有的参数失效。

HPP发生在查询参数中,查询参数通常是指URI中“?”和URI结尾之间的部分,是一系列的域值对,可以参考RFC 3986查看其具体定义,这些域值对是通过“&”分开的,例如:name=admin&password=Test@123。如果用户输入的name的值为:admin&password=123,数据没有经过任何处理用于提交请求,那么这个URL就会被篡改为:name=admin&password=123&password=Test@123。

Web环境        

                

                

        

                

参数获取函数        

获取到的参数

PHP/Apache

$_GET("par")

last

JSP/Tomcat

Request.getParameter("par")

first

Perl(CGI)/Apache

Param("par")

first

Python/Apache        

getvalue("par")

["first","last"]

ASP.NET/IIS

Request.QueryString("par")

first,last

完整表格:

ip白名单

方式一:IP白奖单

从网络层获取的ip,这种一般伪造不来,

前提对方是利用脚本去接收ip地址   而不是通过网络层的协议,

这时如果是网站自己的IP,这样就可能存在伪造IP绕过的情况。

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

考虑对方ip地址的接收方式来伪造ip

x-forwarded-for

x-remote-IP

x-originating-IP

x-remote-addr

x-Real-ip

方式二:静态资源

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

让waf认为参数是上传到静态资源文件上的,但实际上是传递给数据库的,从而绕过检测(部分老的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检测了注入工具

方式四:爬虫白名单

部分waf有提供爬虫白名单(各大浏览器的爬虫,例如百度,谷歌)的功能

可以通过伪造官方的搜索引擎爬虫进行扫描

识别爬虫的技术一般有两种:

1、根据user-agent

2、通过行为来判断

UserAgent可以很容易欺骗,我们可以伪装成爬虫尝试绕过。User Agent switcher (Firefox附加组件),下载地址:

https : //addons.mozilla.org/en-us/firefox/addon/user-agent-switcher/

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

  • 判定方法一:WAF日志
  • 判定方法二:WAF防护规则
  • 判定方法三:抓包
  • 解决方法:
  • 思路一:采用salmap的随机agent头方法

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

  • 指定采用百度的头

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

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

 采用工具注入会被拉黑

  • 解决方法一:采用延时注入

  • 解决方法二:采用代理池(自行学习)

WAF举例

安全狗

下载网址:http://free.safedog.cn/website_safedog.html

安装成功之后,开启拦截,之前的注入会被拦截

开启的拦截匹配规则越多,拦截的语句就越多,但有时候会干扰到正常用户的操作

用来绕过安全狗waf

url编码:

使用注释语句的符号:

/**/

通常为了躲避检测我们经常重复套用并且加入其他字符进行干扰  例如/*/b*/

原理

安全狗检测渗透脚本是采用整体验证

简单举例:unint select 这个整体,可以使用以上方法,使用unint/*!*/select可不触发waf

一部份可用的payload

 id=-1' union/*/a*/%23%0aselect 1,/*!22222database%23%0a*//*/s*/(),3--+   mysql特性+字符混用绕过

?id=-1  union /*///--/*/  select   1,2,3--+  注释符混用

?id=1 /*&id=-1 union select 1,database(),3%23*/    http参数污染

SQLMap

SQLMAP是一个开源的自动化SQL注入工具,其主要功能是扫描、发现并利用给定的URL的SQL注入漏洞。目前支持的数据库有:MySql、Oracle、Access、PostageSQL、SQLServer、IBMDB2、SQLite、Firebird、Sybase和SAP MaxDB等

官网地址:https://sqlmap.org/(安装之前需要安装好python环境)

sqlmap执行过后会有本地缓存文件,影响接下来使用的结果

Sqlmap全面支持六种SQL注入技术:

  • 基于布尔类型的盲注:即可以根据返回页面判断条件真假的注入。
  • 基于时间的盲注:即不能根据页面返回的内容判断任何信息,要用条件语句查看时间延迟语句是否已执行(即页面返回时间是否增加)来判断。
  • 基于报错注入:即页面会返回错误信息,或者把注入的语句的结果直接返回到页面中。
  • 联合查询注入:在可以使用Union的情况下的注入。
  • 堆查询注入:可以同时执行多条语句时的注入。
  • 带外注入:构造SQL语句,这些语句在呈现给数据库时会触发数据库系统创建与攻击者控制的外部服务器的连接。以这种方式,攻击者可以收集数据或可能控制数据库的行为。

使用示例(无waf)

SQLMAP参数

常见参数:

参数:-u                                                   直接输入目标URL

参数:-m                                                  从文件中取出保存的url进行检测

参数:-r                                                    从文本文件中获取http请求,一般在存在cookie注入时使用。

参数:-g                                                    测试注入Google的搜索结果的GET参数

参数:-l                                                     从Burp或者WebScarab代理中获取日志

–current-user #获取当前用户名称

–current-db #获取当前数据库名称

枚举参数

参数:-b,--banner                                   列出版本号

参数:--dbs                                               列出所有数据库的库名

参数:--current-db                                     列出当前使用的数据库库名

参数:--tables                                            列出数据库中的表

参数:--columns                                        列出数据表中的字段

参数:--dump                                            转储数据库表项,查询字段值

参数:--users                                             列出所有管理用户

参数:--passwords                                    列出并破解数据库用户的hash

参数:--privileges                                      列出数据库管理员权限

请求参数

参数:--method                                          指定使用的http方法

参数:--data                                               把数据以POST方式提交

参数:--param-del                                         GET或POST的数据用&以外的其他字符分割

参数:--cookie,--load-cookies,--drop-setcookie                设置cookie

参数:--referer                                            伪造HTTP中的Referer头

参数:--user-agent                                     自定义HTTP中的User-Agent头

参数:--headers                                         增加额外的http头,不同的头使用“\n”分隔

参数:--timeout                                          设置超时时间

参数:--retries                                            设置重试次数

检测参数

参数:-V显示等级,共有7个等级,为0时只显示python错误以及严重的信息,为1时(默认)同时显示基本信息和警告信息,为2时同时显示debug信息,为3时同时显示注入的payload,为4时同时显示HTTP请求,为5时同时显示HTTP响应头,为6时同时显示HTTP响应页面。

参数:--risk                                                 风险等级,共有4个等级

参数:-p,--skip                                    手动用-p参数设置想要测试的参数,-skip设置跳过的参数

参数:--flush-session                                 清空SQLMAP缓存的会话信息

注入技术参数

参数:--technique             指定sqlmap使用的探测技术,B表示布尔盲注,T表示时间盲注(延退注入),E表示报错注入,U表示联合查询注入,S表示堆查询注入

参数:--time-sec                                          设定延退注入的时间(默认为5秒)

参数:--union-cols                                       设定UNION查询字段数

参数:--union-char                                       设定UNION查询时使用的字符

参数:--second-order                                   设置二次注入的URL

参数:--tamper                                     使用sqlmap自带的tamper或者自己写的tamper来混滑payload,通常用来绕过WAF和IPS。自带的一般用来做ctf,实际环境中需要自己动手写(比如绕waf等等)。

当调用多个脚本的时候,脚本之间用逗号隔开,调用的脚本在 sqlmap文件夹下的 tamper 文件夹中,自己写的脚本也可以放入其中,因支持自定义而变得强大

操作系统权限参数

参数:--os-cmd执行操作系统命令

参数:--os-shell交互式的操作系统的shell

文件读写参数

参数:--file-read

读取文件

参数:--file-write

写入文件

参数:--file-dest指明写入文件的绝对路径

例如:

python sqlmap.py -u“ http://10.1.1.1/sql-labs1/?id=1 ”-D数据库名 -T表名 -C字段名1,字段名2,字段名3..(互相用逗号隔开开)-dump//显示数据

Python sqimap.py -r   a.txt(a.txt存放好所要用到的http请求)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux物理内存:伙伴系统(buddy system)

引入之前写过一篇文章将伙伴系统&#xff0c;可以参考&#xff1a;内存池算法简介从上面的虚拟机上可以看到&#xff0c;X86系统上&#xff0c;有三个物理内存区&#xff0c;DMA&#xff0c;DMA32&#xff0c;Normal&#xff0c;可以看到阶数为11。struct page {atomic_t _mapc…

J DBC相关

JDBC基础什么是JDBC入门程序功能类工具类SQL注入攻击原理PreparedStatement的介绍数据库连接池原理自定义连接池归还连接JDBC框架自定义JDBC框架JDBC基础 什么是JDBC 用于执行SQL语句的java API&#xff0c;实现不同关系型数据库的连接 入门程序 导入jar包 注册驱动 获取连…

Linux驱动开发基础__gpio子系统重要概念

目录 1 引入 2 在设备树中指定引脚 3 在驱动代码中调用GPIO子系统 4 sysfs 中的访问方法 1 引入 要操作 GPIO 引脚&#xff0c;先把所用引脚配置为 GPIO 功能&#xff0c;这通过 Pinctrl 子系统来实现。 然后就可以根据设置引脚方向(输入还是输出)、读值──获得电平状…

Windows Docker Desktop开放API端口2375用于远程调用

Windows Docker Desktop开放API端口2375用于远程调用问题解决开启IP Helper服务开启Docker配置开放2375端口端口映射找到需要暴露的IP执行端口映射命令Windows防火墙关闭防火墙添加防火墙规则测试问题 Windows Docker Desktop为了安全&#xff0c;默认设置中只有localhost:237…

入门的葡萄酒知识

葡萄酒的分类&#xff08;根据制造方法&#xff09; 静态葡萄酒 红葡萄酒 Red Wine&#xff0c;白葡萄酒 White Wine&#xff0c;玫瑰红/桃红/粉红葡萄Rose Wine。 气泡&#xff08;起泡&#xff09;葡萄酒 有气泡的葡萄酒&#xff0c;分香槟Champagne及气泡葡萄酒两类。只有在…

Servlet(上)

Servlet组件(上) 学习目标 了解Web资源的概念了解为什么需要Servlet掌握Servlet是什么掌握Servlet的HelloWorld掌握Servlet的执行原理掌握Servlet的生命周期和生命周期方法掌握ServletConfig的使用掌握Servlet的体系结构掌握Servlet的映射路径的编写方式掌握创建Servlet最常用…

机器学习简单介绍

机器学习简介 定义 机器学习是人工智能(AI)和计算机科学的一个分支&#xff0c;专注于使用数据和算法来模仿人类的学习方式&#xff0c;逐步提高其准确性。 简单来说&#xff0c;是一种运用数学公式来对问题进行最优化求解的方法 分类 一般来说将&#xff1a;机器学习分为…

睿联技术在创业板过会:收入依赖摄像机单机,计划募资11亿元

2023年1月6日&#xff0c;深圳证券交易所披露的信息显示&#xff0c;深圳市睿联技术股份有限公司&#xff08;下称“睿联技术”&#xff09;获得创业板上市委员会审议通过。据贝多财经了解&#xff0c;睿联技术的上市申请于2022年6月2日获得创业板受理。 本次冲刺创业板上市&am…

Unity 3D 地形系统概述|| Unity 3D 创建地形

在三维游戏世界中&#xff0c;通常会将丰富多彩的游戏元素融合在一起&#xff0c;比如游戏中起伏的地形、郁郁葱葱的树木、蔚蓝的天空、、凶恶的猛兽等&#xff0c;营造出身临其境的游戏沉浸感&#xff0c;让玩家置身游戏世界&#xff0c;忘记现实。 地形作为游戏场景中必不可…

Git 基本概念

一、git 官网 https://git-scm.com/ 二、git 数据传输命令 三、基本操作 1、命令整理 命令说明git init初始化 git 库git config获取和设置存储库或全局配置项git status显示工作树状态git add将文件内容添加到index(暂存区)git commit将index(暂存区)修改提交到本地仓库gi…

你知道微服务架构中的“发件箱模式”吗

前言 微服务架构如今非常的流行&#xff0c;这个架构下可能经常会遇到“双写”的场景。双写是指您的应用程序需要在两个不同的系统中更改数据的情况&#xff0c;比如它需要将数据存储在数据库中并向消息队列发送事件。您需要保证这两个操作都会成功。如果两个操作之一失败&…

数据结构与算法—稀疏数组

稀疏数组 稀疏数组与二维数组 当一个数组中大部分元素都是0&#xff0c;或者为同一个值的数组时&#xff0c;可以使用稀疏数组来保存该数组。 二维数组转成稀疏数组&#xff1a; 从图中可以看出&#xff1a; 稀疏数组的行、列、值的 &#xff08;1&#xff09;[0]行&#x…

linux下软硬链接到底是什么?

文章目录前言硬链接软链接前言 在了解软硬链接之前&#xff0c;可以先来了解一下磁盘以及inode到底是什么 Linux文件管理—磁盘上文件如何管理&#xff08;inode&#xff09; 硬链接 什么是硬链接 在Linux下&#xff0c;系统标识文件的唯一方式就是inode号&#xff0c;而对…

【初阶数据结构】——双“指针”求解数组常见问题

文章目录前言题目1&#xff1a;移除元素思路1&#xff1a;暴力求解思路2&#xff1a;时间换空间思路3&#xff1a;双指针原地删除&#xff08;解法2的再优化&#xff09;思路分析代码实现题目2&#xff1a;删除有序数组中的重复项思路&#xff1a;双指针代码实现题目3&#xff…

【JavaScript】BOM 学习总结

基础知识&#xff1a; 获取浏览器窗口的尺寸&#xff1a; innerHeight&#xff1a;获取高度 innerWidth&#xff1a;获取宽度 跳转与刷新 location.href location.reload() body><button id"btn">跳转到下一个页面</button><button id"btn…

Java实现文件操作

目录 一、文件概述 二、常见文件操作 1、获取文件路径 2、判断文件存在以及判断类型 3、文件的创建与删除 4、展示文件夹的文件 5、创建文件夹 三、用数据流来读取文件内容 1、操作字节流文件 a、读取字节流文件 b、写字节流文件 2、操作字符流对象 a、读取…

C++ · 入门 · 03 | 函数重载

啊我摔倒了..有没有人扶我起来学习.... 目录前言函数重载1.1 函数重载概念1.2 函数重载的意义1.3 C支持函数重载的原理--名字修饰(name Mangling)1.4 返回值不同能否构成函数重载?前言 自然语言中&#xff0c;一个词可以有多重含义&#xff0c;人们可以通过上下文来判断该词真…

小米 2021 秋招面试总结

岗位:嵌入式软件工程师(相机驱动岗) 面试时间: 40 分钟 薪资: 28w+ 面试过程 面试官上来先来了一段他自己的自我介绍,流程还是比较规范的。 1、请进行一个简单的自我介绍(2分钟) 2、C语言全局变量可否定义在头文件中? 回答:不能,并且这不是一个好的习惯。 3…

【自学C++】C++输出cout

C输出cout C输出cout教程 在 C 语言 中我们需要输出一个 变量&#xff0c;可以使用 printf。printf 函数 在输出时&#xff0c;我们必须要指定输出的数据类型对应的格式化符&#xff0c;挺不方便。 在 C 中&#xff0c;我们要输出变量&#xff0c;直接使用 std 命名空间中的…

国科大抢课避坑+选课指南+教务系统操作

博客园&#xff1a; https://www.cnblogs.com/phoenixash/p/13669461.html 9月12日12&#xff1a;30&#xff0c;本菜鸡终于经历了国科大传说中的抢课大战&#xff0c;虽然自己之前准备的较多&#xff0c;但还是在抢课的时候掉进了不少坑里&#xff0c;趁现在还记忆犹新&#x…