总算进入了本身喜欢的行业. 要时刻记得当初本身说过的话, 不忘初心. Come on!php
感谢超哥分享的干货.. sqlmap干货点击直达html
本次学习使用的是kali集成的sqlmap,包括后续的burp suite 不牵扯安装.此步略过.python
基本上能够说 安全从业人员必备的一款神器之软件.也是迈入安全圈的必要条件.mysql
sqlmap 支持5种漏洞检测类型:web
已知的有mysql,sql server,oracle,sqlite.............. 基本上所有支持了,若是某些小众的不支持,放心,咱们通常也接触不到,目前仍是以mysql为主流(我的看法,欢迎纠正)sql
这些好像都要版本>= 0.8以后才可使用, 我本次使用的是1.0shell
-d 若是你知道了对方数据库帐号,密码,端口等一些信息,则能够经过sqlmap直接链接 不须要再装客户端管理软件 例 :Navicat数据库
能够与burp suite ,google搜索引擎,结合使用. windows
get,post,cookie,referer,user-agent 均可以指定和随机产生. (cookie过时后自动更新cookie)后端
并发,延迟等修改.(好比设置间隔请求时间(避免被服务器发现),并发大一点,以达到追求速度的效果,)
支持Basic,Digest,NTLM,CA等身份认证(但我的感受仍是web应用层的身份证多一点)
包含密码破解模块..
等.....
由于参数太多,我这里分项学习作笔记
sqlmap --version 查看sqlmap版本信息.
-h 查看功能参数(经常使用的)
-hh 查看全部的参数 (若是有中文包 就最好了)
-v 显示更详细的信息 一共7级, 从0-6.默认为1, 数值越大,信息显示越详细.
Target(指定目标):
-d 直接链接数据库侦听端口,相似于把本身当一个客户端来链接.
-u 指定url扫描,但url必须存在查询参数. 例: xxx.php?id=1
-l 指定logfile文件进行扫描,能够结合burp 把访问的记录保存成一个log文件, sqlmap能够直接加载burp保存到log文件进行扫描
-x 以xml的形式提交一个站点地图给sqlmap(表示不理解..)
-m 若是有多个url地址,能够把多个url保存成一个文本文件 -m能够加载文本文件逐个扫描
-r 把http的请求头,body保存成一个文件 统一提交给sqlmap,sqlmap会读取内容进行拼接请求体
-g 利用谷歌搜索引擎搭配正则来过滤你想要的
-c 加载配置文件,配置文件能够指定扫描目标,扫描方式,扫描内容等等.加载了配置文件sqlmap就会根据文件内容进行特定的扫描
扫描目标是我本机对象Mutillidae,
username | password 随便键入值,
获得url :http://192.168.21.134/mutillidae/index.php?page=user-info.php&username=1&password=1&user-info-php-submit-button=View+Account+Details
咱们知道 在这段url中,有用的信息只有username & password 因此咱们就能够对这两个变量进行注入测试
sqlmap :
-u 指定一个带参数的url地址进行扫描.
-p 只对特定的参数进行扫描(咱们知道,page等是用不到的,在这串url中,只有password和username是有价值的信息,因此咱们只对username进行扫描)
因为我kali python环境的问题, sqlmap的 字体和常规不一致..(常规绿色,),我也没有着手解决, 很快,sqlmap就扫描到告终果,疑似发现注入,而且发现了咱们后端使用的是mysql数据库,问咱们是否跳过数据库类型的检测,(总之就是这意思,原理我渣渣的英文读写能力...),既然已经知道数据库了,咱们就不必进行其余类型的检测了,常规跳过就好,:..
以后又提示咱们检测的级别(level)和风险值(risk), 级别,风险越高,对web形成的伤害性也就越高,常规为默认.(试想下,你帮客户作渗透,结果渗透没作好,把人家web给扫描出问题了....,若是黑客出于攻击行为来使用的话,确定越高越好..我的理解..) 这里咱们选择默认..
接下来sqlmap就会运用以前说的5种扫描方式来对咱们指定的url种的特定参数 ,进行一系列的全自动注入,
遗憾的是经过sqlmap一系列的扫描和我不断的 尝试,好像并无注入,可是sqlmap强烈建议咱们提供扫描等级和风险等级...
那咱们就提高下扫描等级和风险等级:
扫了一圈结果仍是没发现注入(我晚上在好好研究下.)...
sqlmap 支持2种post 扫描. 1, 请求文件. 2,busp suite log文件.
请求文件:
首先须要设置浏览器代理.
打开抓包工具,这里以burp suite为例
把咱们抓到的数据包 所有复制下来 保存为一个txt文件
接下来.. sqlmap启动, sqlmap -r request.txt -f
还有一种方式 就是经过加载burp suite的日志文件进行扫描注入..
sqlmap -l xxx.txt -f --dbs ...
burp suite的日志文件生成方式为:
--data 提交的时候要携带的参数. (get,post通用,最简单的post请求方式).
--users 获取数据库用户
--dbs 获取因此数据库
--param-del 变量分隔符,默认为&,
--cookie 设置cookie头
--user-agent 指定user-agent(防止对方服务器侦测到)
--random-agent 随机agent
--host 指定host头
--level 安全级别 (1-5, >=3,检测anent,>=5,检测host头)
--referer 指定referer头(level >=3才检测)
--headers 指定额外的headers请求头(多个必须使用换\n,首字母必须大写)
--method 指定请求方式, 默认为get,get请求不成功尝试post
--auth-type 身份认证类型 (Basic,Digest,NTLM) ,
--auth-cred 身份认证帐号密码 "username:password" , 完整demo: http://xxx.php?id=1 --auth-type Basic --auth-cred "u:p" (我的认为不经常使用)
--auth-cert / --auth-file 基于客户端证书进行校验,(我的感受很是很是很是之不经常使用,略过...嘿嘿,放肆一把,就不学这个了)
--proxy 指定代理
--proxy-cred 指定代理的帐号密码(代理须要帐号密码的前提下)
--ignore-proxy 忽略系统代理(咱们设置的代理都是经过浏览器进行设置的,一般用于扫描本地系统)
--delay 每次请求的延迟时间,单位秒,默认无延迟.
--timeout 请求超时时间,默认30秒.
--retries 链接超时重试次数 ,默认3次
--randomize 长度,类型与原始值保持一致的状况下,指定每次请求随机取值的参数名 例: xxx.php?id=100, --randomize=''id" 则id的值在100-999随机出现
--scope 过滤日志内容,经过正则筛选扫描对象. 例: sqlmap -l burp.log --scope="(www)?\.aaa\.(com|net|org)" 则只会扫描以www开头.aaa.com或者net或者org
--safe-url \ --safe-freq 扫描的时候回产生大量的url,服务器可能会销毁session.每发送--safe-freq 次注入请求后 就发送一次正常请求.
--safr-url 须要扫描的url.
--safe-freq 出现错误(或者说带sql注入请求)的次数
--skip-urlencode get请求会对url进行编码. 某些web服务器不遵循标准编码 此参数就是不对get请求的url进行编码
--eval 每次请求前指定执行特定的python代码.
对本机dvwa进行sql漏洞扫描. 首先这个网站是须要登陆的.
登陆过以后,在浏览器内获取cookie信息.
复制cookie信息到sqlmap ,多个cookie之间用分号间隔分开
很快就直接把数据库给爆了出来,证实此url存在sql注入漏洞且sqlmap带入cookie成功.
-0 后续3个参数的集合(除--threads)
--predict-output 根据检测方法,比对返回值和统计表(/sqlmap/common-outputs.txt)内容,不断缩小检测范围,提升检测效率.(比对信息包括但不限于版本名,用户名,密码,表名,列名..等,与--threads参数不兼容)
--keep-alive 使用http(s)长链接,新能好, 与--proxy参数不兼容.长链接避免重复简历链接的网络开销,但大量长链接会严重占用服务器资源
--null-connection 只获取相应页面的大小值,而非页面具体内容.一般用于盲注判断真/假,下降网络带宽消耗. 与--text-only(基于页面内容的比较判断)不兼容
--threads 最大并发线程,默认为1个线程,建议不要超过10个线程,不然可能影响站点可用性.与--predict-output参数不兼容
-p 扫描指定的参数,例 xxx.php?id=2&name=root -p id 只会扫描id变量的值 (能够指定多个变量名,多个变量名逗号隔开)
(在使用-p的时候会使--level失效,例如--level=3的时候才会扫描user-agent,可是咱们使用手动指定了扫描参数user-agent 虽然没有指定--level=3,但此时也会扫描)
--skip 排除指定的参数,例如--level=3 会扫描user-agent 可是咱们不但愿扫描useragent 可使用--skip跳过此参数的扫描
--dbms 指定后端数据库,在已知web应用的数据库前提下,略去sqlmap扫描判断后端数据库过程,提升效率.例: --dbms="mysql"(<5.0>指定版本)
--os 指定目标操做系统
--invalid-bignum/ --invalid-logical 默认使用负值使参数失效,bignum使用最大参数值使参数失效,logical使用布尔判断值使取值失效
--no-cast 榨取数据时,sqlmap将全部结果转换为字符串,默认用空格替换null, 老版本可能不支持空格替换,使用--no-cast关闭替换
--no-escape 不逃逸,也就是说当payload中用丹壹号界定字符串时,sqlmap使用char()编码逃逸的方法替换字符串,也就是说否则sqlmap对payload中 的单引号进行编码
--prefix/ --suffix 前缀/后缀
--tamper 混淆脚本,用于绕过应用层过滤,IPS,WAF. 编写好的脚本存放于(sqlmap/tamper/...)使用的时候直接写出脚本名称便可,sqlmap会 自动去对应文件夹加载对应的文件
--level 检测级别,默认1级. 可设定1-5.级别不一样,检测的细度不一样./sqlmap/xml/payloads(检测级别不一样,发送的payloads不一样,)
--risk 风险级别 1-4 默认1, 若是指数太高,可能会对数据形成伤害(如:更新,删除等)
就是以前提到的sqlmap的五种检测类型, 默认是所有使用, 也能够手动指定.
--time-sec 基于时间的注入检测相应延迟时间(默认5秒)
--union-cols 默认联合查询1--10列,随着--level增长 最多检查50列.能够手动指定.
--union-char 联合查询默认使用null,可能会出现失败,此时能够手动指定数值. 例: union select null union select 1111
--dns-domain 若是攻击了dns服务器,使用此功能能够提升数据榨取速度
-f(--fingerprint) 数据库管理系统的指纹信息(数据库类型,操做系统,架构,补丁等)
-b (--banner) banner信息
--current-user 查询当前数据库管理系统帐号
--current-db 查询当前数据库昵称
--hostname 查询当前主机名
--users 查询数据库系统中全部的帐号
--peivileges-U xxx -u 查询指定帐号的权限 若是不跟指定用户名 则查询的是全部的用户, -CU 查询当前用户
-D 指定数据库
--table 查询全部表
-T 指定表
--columns 查询指定表的全部列
-C 指定某一列查询
--exclude-sysdbs 忽略系统库
--count 统计记录
--batch 批处理,也就是系统默认选项(按照默认的选项 全自动执行)
--dump 保存数据到本地(配合一系列的指令)
-C 指定columns 若是不指定,默认整表
-T 指定表名,
-D 指定数据库
-start 数据起始位置 (按表的id进行取值)
-stop 数据结束位置
--dump-all 下载整表
--sql-query 指定sql语句
在mysql <5.0的时候 ,是没有information_schema库的,这时候咱们就不能根据数据源表进行一系列的操做
还有一种状况是mysql>=5.0的时候,但无权限读取information_schema库,这时候可能就须要用到暴力破解
在微软access数据库中,默认是无权读取MSysObjects库的
--common-tables 暴力破解表名(根据字典)
--common-columns(Access系统表无列信息) 暴力破解表字段
--udf-inject ,, --shared-lib
--file-read 读取目标系统指定文件(值为具体文件的路径)
--file-write 写入的文件
--file-dest 写入保存的路径
--os-cmd 执行系统命令
--os-shell 获得系统shell
--sql-shell 获得sqlshell
--reg-read 读取注册表键值
--reg-add 向注册表添加键值
--reg-del 删除注册表键值
--reg-key --reg-value --reg-data --reg-type 辅助参数, 上面三个操做的时候能够缩小范围.
-s sqllite会话文件保存位置
-t 记录流量文件保存位置
--charset 强制字符编码
--crawl 从起始位置爬站深度
--csv-del dump下来的数据默认存于","分割的csv文件中,--csv-del用来指定其余分隔符
--dbms-cred 指定数据库帐号
--flush-session 清空session
--force-ssl 针对https的网站..
--fresh-queries 忽略本地session 重新发送请求
--output-dir 指定一个输出目录
--parse-errors 分析和显示数据库中内建报错信息
--save 将命令保存成配置文件
--check-waf 检测waf.ips.ids
--hpp 绕过WAF,IPS,IDS 尤为对ASP,/IIS.ASP.NET/IIS
--identify-waf 更完全的检查waf
--mobile 模拟只能手机设备(实现方式只是替换对应的user-agent)
--purge-output 清除output文件夹
--smart 当有大量检测目标时, 只选择基于错误的检测结果
--wizard 向导模式.