WEB安全渗透测试小结一

928 阅读10分钟

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界面功能说明:
      1. 使用代理模式从Scanner 切换到 Proxy.

- 2. 检查端口侦听状态.

    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. 扫描目标分区

- 点击下拉选旁边的按钮Add添加一个任务分组,在Base Paths下向下拉选中的任务分组中添加需要扫描的站点信息,可以添加多个主要的路径. - Exclude 不扫描的页面,可以向里面添加不需要扫描的页面.

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