Sqlmap入门

@Sql注入原理

    #通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。

@注入方法

    #先猜表名

        ##and (select count(*) from 表名)<>0

        ##and exists (select * from 表名)

    

    #猜列名

        ##and (select count(列名) from 表名)<>0

        ##and exists (select 列名 from 表名)

    #猜字段长度

        ##and 1=(select count(*) from admin where len(name)>5) 正确 长度是6

    

    #猜解字符

        ##and 1=(select count(*) from admin where left(name,1)=a) ---猜解用户帐号的第一位

@Sqlmap是什么

    #Sqlmap是由Python写成的开源的自动化SQL注入工具

@安装Sqlmap

    #安装python2.7

    #到python.org下载sqlmap

@五种类型的SQL注入

    #布尔型盲注

        ##sqlmap 会替换或添加SQL语句到HTTP请求的查询参数里面,相关的SQL语句可能是合法的SELECT子查询,也可以是任意用于获取输出数据的SQL语句。针对每个注入检测的 HTTP 响应,sqlmap 通过对比原始请求响应的 headers/body,从而逐个

        字符地推导出注入语句的输出。或者,用户可以预先提供一个字符串或正则表达式,用于对正确页面结果进行匹配。sqlmap内部实现了二分算法,使得输出中的每一个字符可在最多7个HTTP请求内被获取。如果请求响应结果不是简单的明文字符集,                sqlmap会采取更大范围的算法来检测输出。

    #时间型盲注

        ##sqlmap 会替换或者添加相关的SQL语句到HTTP请求的查询参数里面,相关的SQL语句可能是合法的、用于使后端DBMS延迟几秒响应的查询。针对每一个注入检测的HTTP响应,通过对HTTP响应时间与原始请求之间进行比较,从而逐个字符地推导

            出注入语句的输出。正如基于布尔型盲注的技术一样,二分算法也会被应用。

    #报错型注入

        ##sqlmap 会替换或者添加用于引发特定数据库错误的SQL语句到查询参数里面,并通过解析对应的注入结果,判断特定的数据库错误信息是否存在响应的 headers/body 中。这项技术只有在Web应用配置开启后端DBMS错误信息提醒才有效

    #Union查询注入

        ##sqlmap 会在查询参数中添加以 UNION ALL SELECT开头的合法SQL 语句。当 Web应用在for循环中直接传递SELECT语句的查询结果,或采用了类似的方法将查询结果在页面中逐行输出时,这项技术会生效。当查询结果不使用 for 循环进行全部                        输出而只输出首个结果,sqlmap还能够利用偏(单入口)UNION 查询 SQL 注入漏洞    

#堆叠查询注入

        ##sqlmap 会测试Web应用是否支持堆叠查询,如果支持,则在HTTP请求的查询参数中添加一个分号( ; ),并在后面加上注入的SQL语句。这项技术不仅适用于执行SELECT语句,同样适用于执行数据定义或者数据操作等SQL语句,同时可能可以获取到文件系统的读写权限和系统命令执行权限,不过这很大程度上取决于底层 DBMS 和当前会话用户的权限

@选项

    #-h, --help 显示基本帮助信息并退出

    #-hh 显示高级帮助信息并退出

    #--version 显示程序版本信息并退出

    #-v VERBOSE 输出信息详细程度级别:0-6(默认为 1)

    #-d DIRECT 直接连接数据库

    #-u URL, --url=URL 目标 URL(例如:"http://www.site.com/vuln.php?id=1")

    #-l LOGFILE 从 Burp 或 WebScarab 代理的日志文件中解析目标地址

    #-x SITEMAPURL 从远程网站地图(.xml)文件中解析目标

    #-m BULKFILE 从文本文件中获取批量目标

    #-r REQUESTFILE 从文件中读取 HTTP 请求

    #-g GOOGLEDORK 使用 Google dork 结果作为目标

    #-c CONFIGFILE 从 INI 配置文件中加载选项

   #--method=METHOD 强制使用提供的 HTTP 方法(例如:PUT)

   #--data=DATA 使用 POST 发送数据串

   #--param-del=PARA.. 设置参数值分隔符

   #--cookie=COOKIE 指定 HTTP Cookie

   #--cookie-del=COO.. 设置 cookie 分隔符

   #--load-cookies=L.. 指定以 Netscape/wget 格式存放 cookies 的文件

   #--drop-set-cookie 忽略 HTTP 响应中的 Set-Cookie 参数

   #--user-agent=AGENT 指定 HTTP User-Agent

   #--random-agent 使用随机的 HTTP User-Agent

   #--host=HOST 指定 HTTP Host

   #--referer=REFERER 指定 HTTP Referer

   #-H HEADER, --hea.. 设置额外的 HTTP 头参数(例如:"X-Forwarded-For: 127.0.0.1")

   #--headers=HEADERS 设置额外的 HTTP 头参数(例如:"Accept-Language: fr\nETag: 123")

    #--auth-type=AUTH.. HTTP 认证方式(Basic,Digest,NTLM 或 PKI)

    #--auth-cred=AUTH.. HTTP 认证凭证(username:password)

    #--auth-file=AUTH.. HTTP 认证 PEM 证书/私钥文件

    #--ignore-code=IG.. 忽略 HTTP 错误码(例如:401)

    #--ignore-proxy 忽略系统默认代理设置

    #--ignore-redirects 忽略重定向尝试

    #--ignore-timeouts 忽略连接超时

    #--proxy=PROXY 使用代理连接目标 URL

    #--proxy-cred=PRO.. 使用代理进行认证(username:password)

    #--proxy-file=PRO.. 从文件中加载代理列表

    #--tor 使用 Tor 匿名网络

    #--tor-port=TORPORT 设置 Tor 代理端口代替默认端口

    #--tor-type=TORTYPE 设置 Tor 代理方式(HTTP,SOCKS4 或 SOCKS5(默认))

    #--check-tor 检查是否正确使用了 Tor

    #--delay=DELAY 设置每个 HTTP 请求的延迟秒数

    #--timeout=TIMEOUT 设置连接响应的有效秒数(默认为 30)    

    #--retries=RETRIES 连接超时时重试次数(默认为 3)

    #--randomize=RPARAM 随机更改给定的参数值

    #--safe-url=SAFEURL 测试过程中可频繁访问且合法的 URL 地址(译者注:有些网站在你连续多次访问错误地址时会关闭会话连接,后面的“请求”小节有详细说明)

    #--safe-post=SAFE.. 使用 POST 方法发送合法的数据

    #--safe-req=SAFER.. 从文件中加载合法的 HTTP 请求

    #--safe-freq=SAFE.. 每访问两次给定的合法 URL 才发送一次测试请求

    #--skip-urlencode 不对 payload 数据进行 URL 编码

    #--csrf-token=CSR.. 设置网站用来反 CSRF 攻击的 token

    #--csrf-url=CSRFURL 指定可提取反 CSRF 攻击 token 的 URL

    #--force-ssl 强制使用 SSL/HTTPS

    #--hpp 使用 HTTP 参数污染攻击

    #--eval=EVALCODE 在发起请求前执行给定的 Python 代码(例如:"import hashlib;id2=hashlib.md5(id).hexdigest()")

    #-o 开启所有优化开关

    #--predict-output 预测常用请求的输出

    #--keep-alive 使用持久的 HTTP(S) 连接

    #--null-connection 仅获取页面大小而非实际的 HTTP 响应

    #--threads=THREADS 设置 HTTP(S) 请求并发数最大值(默认为 1)

    #-p TESTPARAMETER 指定需要测试的参数

    #--skip=SKIP 指定要跳过的参数

    #--skip-static 指定跳过非动态参数

    #--param-exclude=.. 用正则表达式排除参数(例如:"ses")

    #--dbms=DBMS 指定 DBMS 类型(例如:MySQL)

    #--dbms-cred=DBMS.. DBMS 认证凭据(username:password)

    #--os=OS 指定 DBMS 服务器的操作系统类型

    #--invalid-bignum 将无效值设置为大数

    #--invalid-logical 对无效值使用逻辑运算

    #--invalid-string 对无效值使用随机字符串

    #--no-cast 关闭 payload 构造机制

    #--no-escape 关闭字符串转义机制

    #--prefix=PREFIX 注入 payload 的前缀字符串

    #--suffix=SUFFIX 注入 payload 的后缀字符串

    #--tamper=TAMPER 用给定脚本修改注入数据

    #--level=LEVEL 设置测试等级(1-5,默认为 1)

    #--risk=RISK 设置测试风险等级(1-3,默认为 1)

    #--string=STRING 用于确定查询结果为真时的字符串

    #--not-string=NOT.. 用于确定查询结果为假时的字符串

    #--regexp=REGEXP 用于确定查询结果为真时的正则表达式

    #--code=CODE 用于确定查询结果为真时的 HTTP 状态码

    #--titles 只根据页面标题对比页面

    #--technique=TECH 使用的 SQL 注入技术(默认为“BEUSTQ”,译者注:

        B: Boolean-based blind SQL injection(布尔型盲注)

        E: Error-based SQL injection(报错型注入)

        U: UNION query SQL injection(联合查询注入

        )

        S: Stacked queries SQL injection(堆查询注

        入)

        T: Time-based blind SQL injection(时间型

        盲注)

        Q: inline Query injection(内联查询注入)

    #--time-sec=TIMESEC 延迟 DBMS 的响应秒数(默认为 5)

    #--union-cols=UCOLS 设置联合查询注入测试的列数目范围

    #--union-char=UCHAR 用于暴力猜解列数的字符

    #--union-from=UFROM 设置联合查询注入 FROM 处用到的表

    #--dns-domain=DNS.. 设置用于 DNS 渗出攻击的域名(译者注:推荐阅读《在SQL注入中使用DNS获取数据》http://cb.drops.wiki/drops/tips-5283.html,在后面的“技术”小节中也有相应解释)

    #--second-order=S.. 设置二阶响应的结果显示页面的 URL(译者注:该选项用于二阶 SQL 注入)

    #-f, --fingerprint 执行广泛的 DBMS 版本指纹识别

猜你喜欢

转载自blog.csdn.net/glfxml/article/details/82179474
今日推荐