WEB攻击面
- Browser ---> 浏览器本身
- Network ---> 网络设备
- DNS ---> 域名解析
- LSB/CDN ---> 负载分发
- Firewalls/waf ---> 安全拦截过滤
- OS ---> 进由系统支撑WEB Server
- WEB Server ---> 支撑WEB的 Apache httpd IIS tomcat Nginx
- App Server ---> API分层
- Web Application ---> 业务处理
- .........................
- Databases ---> 后端数据存储支撑
HTTP协议七层明文协议
-
明文:
- 无内建的机密性安全机制.
- 嗅探或代理截断可查看全部明文信息.
- HTTPS只能提高传输层安全.
-
无状态,仅针对HTTP协议本身.不看传输层TCP.
-
每一次客户端和服务器端的通信都是独立的过程. 针对HTTP本身的协议,它有状态是依赖于传输层的TCP协议来实现有状态的特性.
-
WEB应用需要跟踪客户端会话.(多步通信).
-
使用cookie对客户端身份验证进行跟踪.客户端每次发送请求都会在HTTP头部信息中包含Cookie信息.
-
Session用于在用户身份验证后跟踪用户行为轨迹.
-
提高用户体验,但增加了攻击向量,应该建议在多少分钟后重新下发Cookie.去更新客户端浏览器的Cookie.
-
对于敏感操作建议每次都在程序方面进行限制,需要强制性密码验证.
-
对Session失效时间做严格控制.
-
-
HTTP协议中重要请求/响应的头部信息
- set-Cookie: 服务器发给客户端的SessionID
- content-length: 响应body部分的字节长度
- location: 重定向用户到另一个页面,可识别身份认证后允许访问的页面
- Cookie: 客户端发回给服务器证明用户身份状态的信息(key:values)
- Referrer: 发起新请求之前用户用于那个页面.
HTTP协议中重要的状态码
-
100s: 服务器响应的状态码,表示服务器还有后续处理.
-
200s: 请求被服务器成功接受并处理后返回的响应结果.
-
300s: 重定向,通常在身份认证成功后重定向到一个安全页面.
-
400s: 表示客户端请求错误.
- 401: 需要身份验证
- 403: 拒绝访问
- 404: 目标未发现
-
500s: 服务器内部错误
- 503: 服务不可用
攻击步骤
信息收集
漏洞扫描(主动扫描/手动扫描)
漏洞信息利用
攻击漏洞
提升内网攻击范围
httrack
将目标渗透系统所有页面下载到本地一份,收集关于webapp可以加以利用的信息
root@bogon:~# httrack
Welcome to HTTrack Website Copier (Offline Browser) 3.49-2
Copyright (C) 1998-2017 Xavier Roche and other contributors
To see the option list, enter a blank line or try httrack --help
Enter project name :dvwa
Base path (return=/root/websites/) :/root/dvwa
Enter URLs (separated by commas or blank spaces) :http://192.168.1.126/dvwa
Action:
(enter) 1 Mirror Web Site(s) 镜像克隆站点
2 Mirror Web Site(s) with Wizard 使用向导完成镜像克隆站点
3 Just Get Files Indicated 只想通过GET下载其中的文件
4 Mirror ALL links in URLs (Multiple Mirror) 镜像中所有的链接
5 Test Links In URLs (Bookmark Test) 只测试URL中的链接并不下载
0 Quit
: 2
Proxy (return=none) :
You can define wildcards, like: -*.gif +www.*.com/*.zip -*img_*.zip
Wildcards (return=none) :*
You can define additional options, such as recurse level (-r<number>), separated by blank spaces
To see the option list, type help
Additional options (return=none) :
---> Wizard command line: httrack http://192.168.1.126/dvwa -W -O "/root/dvwa/dvwa" -%v *
Ready to launch the mirror? (Y/n) :Y
WARNING! You are running this program as root!
It might be a good idea to run as a different user
Mirror launched on Tue, 04 Feb 2020 17:31:38 by HTTrack Website Copier/3.49-2 [XR&CO'2014]
mirroring http://192.168.1.126/dvwa * with the wizard help..
WEB扫描工具
大部分WEB扫描工具只扫描四层之上的层级不会涉及到下四层的漏洞.部分会涉及到 端口和应用的版本以及操作系统的信息,但并这都不是它们扫描器的重点,一般情况下WEB扫描器只关注WEB代码本身所包含的漏洞情况.
- Nikto
- Vega
- Skipfish
- W3af
- Arachni
- Owasp-zap
NIKTO
NIKTO关注于软件版本漏洞和服务器信息漏洞. 这个软件有个坑,使用前一定要去修改配置文件中的USERAGENT,有些大站专门对浏览器特征进行识别,但是nikto的身份特性直接就写在了配置文件中,在扫描的时候也会使用这个身份特征去扫描,导致被waf或则入侵防御系统检测到,导致被封IP.所以这里需要修改成其他的浏览器的特性.伪装一下.
- 使用小技巧
- 使用前修改其useraget信息
- 使用前搭建文件漏洞包含的服务器指定到配置中
- 在配置文件中设置好cookie
- Perl语言开发的开源web安全扫描器.
- 搜索存在安全隐患的文件.
- 服务器配置漏洞.
- web application 层面的安全隐患
- 避免404误判
- 很多服务器不遵守RFC标准,对于不存在的对象返回200响应码
- 依据响应文件内容判断,不同的扩展名的文件404响应内容不同
- 去除时间信息后的内容取MD5值
- no404
- nikto -update 升级
- 插件: nikto -list-plugins
- nikto -host IP -ssl -port port
- nikto -host http://????
- nikito -host ? -useproxy ?
- nmap -p80 IP -oG - | nikto -host -
- -vhost
- 在扫描时的交互式指令 第一次输入开启,第二次输入关闭
- v 详细信息
- d debug信息及其详细
- e error 错误报告信息
- p 展示扫描进度
- r 重定向显示
- c cookie显示
- a 尝试身份认证显示
- q 退出扫描
- N 下一个主机
- P 暂停
- 配置文件(比如说指定cookie用于身份认证,自带的参数id 只能支持http身份认证 username:password)
- /etc/nikto/config
[root@ecs-1eed ~]# cat /etc/nikto/config
#########################################################################################################
# CONFIG STUFF
# $Id: config.txt 94 2009-01-21 22:47:25Z deity $
#########################################################################################################
# default command line options, can't be an option that requires a value. used for ALL runs.
# CLIOPTS=-g -a
# ports never to scan
SKIPPORTS=21 111
# User-Agent variables:
# @VERSION - Nikto version
# @TESTID - Test identifier
# @EVASIONS - List of active evasions
USERAGENT=Mozilla/5.00 (Nikto/@VERSION) (Evasions:@EVASIONS) (Test:@TESTID)
# 浏览器客户端信息.
# RFI URL. This remote file should return a phpinfo call, for example: <?php phpinfo(); ?>
# You may use the one below, if you like.
#RFIURL=http://cirt.net/rfiinc.txt?
# 验证远程文件包含漏洞包含的远程文件
# IDs never to alert on (Note: this only works for IDs loaded from db_tests)
#SKIPIDS=
# The DTD
NIKTODTD=docs/nikto.dtd
# the default HTTP version to try... can/will be changed as necessary
DEFAULTHTTPVER=1.0
# Nikto can submit updated version strings to CIRT.net. It won't do this w/o permission. You should
# send updates because it makes the data better for everyone ;) *NO* server specific information
# such as IP or name is sent, just the relevant version information.
# UPDATES=yes - ask before each submission if it should send
# UPDATES=no - don't ask, don't send
# UPDATES=auto - automatically attempt submission *without prompting*
UPDATES=yes
# Warning if MAX_WARN OK or MOVED responses are retrieved
MAX_WARN=20
# Prompt... if set to 'no' you'll never be asked for anything. Good for automation.
#PROMPTS=no
# cirt.net : set the IP so that updates can work without name resolution -- just in case
CIRT=107.170.99.251
# Proxy settings -- still must be enabled by -useproxy
# 默认代理设置
#PROXYHOST=127.0.0.1
#PROXYPORT=8080
#PROXYUSER=proxyuserid
#PROXYPASS=proxypassword
# Cookies: send cookies with all requests
# Multiple can be set by separating with a semi-colon, e.g.:
# "cookie1"="cookie value";"cookie2"="cookie val"
# 设置cookie
STATIC-COOKIE="PHPSESSID=h5ul9b6a4qrsht9268ejm5qfk5";"security=low";
# The below allows you to vary which HTTP methods are used to check whether an HTTP(s) server
# is running. Some web servers, such as the autopsy web server do not implement the HEAD method
CHECKMETHODS=HEAD GET
# If you want to specify the location of any of the files, specify them here
EXECDIR=/usr/share/nikto # Location of Nikto
PLUGINDIR=/usr/share/nikto/plugins # Location of plugin dir
# DBDIR=/opt/nikto/databases # Location of database dir
TEMPLATEDIR=/usr/share/nikto/templates # Location of template dir
DOCDIR=/usr/share/nikto/docs # Location of docs dir
# Default plugin macros
@@MUTATE=dictionary;subdomain
@@DEFAULT=@@ALL;-@@MUTATE;tests(report:500)
# Choose SSL libs:
# SSLeay - use Net::SSLeay
# SSL - use Net::SSL
# auto - automatically choose whats available
# (SSLeay wins if both are available)
LW_SSL_ENGINE=auto
# Number of failures before giving up
FAILURES=20
- 使用evasion对防IDS躲避技术,可使用以下几种类型:(可以同时使用多个方式)
- 随机URL编码(非UTF-8方式)
- 自选择路径
- 优先考虑长随机字符
- 参数欺骗
- 使用TAB作为命令的分隔符
- 使用变化的URL
- 使用windows路径分隔符"/"
VEGA
- 使用JAVA编写的开源Web扫描器,纯GUI图形化界面扫描. 更加专注web应用程序代码漏洞.
- 两种工作模式: 扫描模式,代理模式(代理截断,流量劫持,指哪儿扫哪儿具有高灵活性特点,而且在不进行特征性较强的侵入性内容前,其行为特征与正常用户无异.)
- 爬站,处理表单,注入测试
- 支持SSL
- 安装
wget https://support.subgraph.com/downloads/VegaBuild-linux.gtk.x86_64.zip
apt-get install openjdk-8-jre openjdk-8-jre-headless libwebkitgtk-1.0-0
unzip VegaBuild-linux.gtk.x86_64.zip
./Vega
- 安装启动完成后,需要配置的是
- 在Window上Perferences中的Scaner与Proxy中Useragent设置将其设置为其它浏览器的Useragent,免得触发IDS,Waf防御系统.
- 在Proxy中启用代理功能监听,默认监听的是本机的8888端口,默认未启用监听代理功能.


- 其它配置简要:
- General: 中首页中可以设置外部代理服务,由外部服务器向目标渗透网站进行访问.
- Update: 建议打开自动检测更新,
- Proxy: 强烈建议更换default User-Agent
- Override client User-Agent: 重写客户端的浏览器特征信息,如果勾选那么geva会使用上面设置的的useragent去发送请求,如果不勾选就默认使用客户端中的特征信息.
- Prevent browser caching: 阻止浏览器缓存,强烈建议勾选 访问量会有所增大
- Pervent intermediate(proxy) caching: 阻止中间代理缓存. 强烈建议勾选
- Listener 监听
- Listern Address: 默认监听本机127.0.0.1:8888
- Scanner 扫描器(主动扫描)
- User-Agent: 强烈建议更换
- Maximum number of total path descendants: 扫描目标地址最大的路径
- Maximum number child paths for a single node: 扫描目标最大的子路径
- Maxmum path depth: 最大扫描几层链接
- Maximum number of duplicate path elements: 最大重复路径枚举数
- Maximum length of strings to display in alert reports: 最大字符串的长度
- Maximum number of requests per second to send: 每秒发送最大请求数,强烈建议调少点,可能会触发警报阈值
- Maximum response size to process in kilobytes: 最大响应大小
- Debug
- Log all scanner requests: 所有的扫描请求日志展示.
- Display debug output In console: 显示debug输出在控制台上.
- Vega界面功能说明:
-
- 使用代理模式从Scanner 切换到 Proxy.
-

root@lqh:/home/lqh# netstat -antup | grep 8888
tcp6 0 0 127.0.0.1:8888 :::* LISTEN 4498/java
- 3. 第一个绿色开始监听按钮Start HTTP Proxy
- 按下即开始启动端口监听
- 4. 第二个红色停止监听按钮Stop HTTP Proxy
- 按下即停止端口监听
- 5. 第三个配置按钮 Configure which Scanner modules are run on proxy traffic 配置在监听模式下的扫描模块
- Injection Modules 注入模块(全选开启)
- 内部包含XSS跨站脚本攻击,SQL注入,SQL盲注等多种注入类漏洞模块
- Response processing modules 响应进程模块(权限开启)
- 包括Cookie安全模块,HTTP头部信息检查等多种服务器返回信息检查.
- 6. 第四个按钮没用,不显示扫描信息.纯代理模式类似.
- 7. 启动代理扫描
- 8. 扫描目标分区

- vage的使用:
- 代理模式:
-
- 启动代理监听,设置浏览器代理指向本地的8888端口.
-
- 启动浏览器开始访问手动点击站点功能.
-
- 停止手工爬站,将扫到的站点添加到scope,并将退出路径添加到额外Exclude中.
-
- 添加身份认证信息.
-
- 开始任务.
-
- 代理模式: