Web安全
Web安全
概述
WEB 应用程序
WEB应用程序是指在HTTP协议基础之上,借助浏览器进行URL访问的网站。
HTTP 协议
HTTP协议(HyperText Transfer Protocol,超文本传输协议)
是用于从WWW服务器传输超文本到本地浏览器的传送协议。 HTTP是一个应用层协议
,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。
HTTP请求
HTTP请求由三部分组成,分别是:请求行、消息报头、请求正文
HTTP 响应
http响应也由三部分组成,分别是︰状态行、消息报头、响应正文
URL
URL可以用来标识一个资源,而且还指明了如何locate这个资源URL一般由三部组成∶
- 协议(或称为服务方式)
- 存有该资源的主机IP地址(有时也包括端口号)
- 主机资源的具体地址。如目录和文件名等
schema://host[:port#]/path/.../[?query-string][#anchor]
URL编码是一种浏览器用来打包表单输入的格式。浏览器从表单中获取所有的 name 和其中的值,将它们以 name/value 参数编码(移去那些不能传送的字符,将数据排行等等)作为URL的一部分或者分离地发给服务器
Web 安全漏洞
SQL 注入
SQL 注入是因为后台 SQL 语句拼接了用户的输入,而且 Web 应用程序对用户输入数据的合法性没有判断和过滤,前端传到后端的参数是攻击者可以控制的,并且将参数带入数据库中进行查询,攻击者可悻通过构造不同的 SQL 语句来实现对数据库的任意操作。例如可以增加、删除、修改数据库里的数据,如果权限过大,还可以执行服务器系统的命令。
XSS
跨站点脚本(XSS) 攻击是一种注射型攻击,攻击者在网页中嵌入恶意代码,用户访问网页时受到影响。
CSRF漏洞
CSRF,是跨站请求伪造(Cross Site Request Forgery)的缩写,是一种劫持受信任用户向服务器发送非预期请求的攻击方式。
通常情况下,CSRF 攻击是攻击者借助受害者的Cookie骗取服务器的信任,在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击服务器,从而在并未授权的情况下执行在权限保护之下的操作。
SSRF 漏洞
SSRF(Server-Side Request Forgery.服务器端请求伪造)
是一种由攻击者构造数据进而伪造服务端请求的安全漏洞。一般情况下,SSRF 攻击的目标是从外网无法访问的内部系统。
反序列化漏洞
反序列化漏洞是指网站对用户可控制的数据进行反序列化时,攻击者能够操纵序列化的对象,将有害数据传递到应用程序代码中。
XXE 漏洞
XXE Injection 即 XML External Entity Injection, 也就是 XML 外部实体注入攻击。XXE 漏洞发生在应用程序解析 XML 输入时,没有禁止外部实体的加载,导致可加载恶意外部文件和代码。
命令执行漏洞
当用户可以控制命令执行函数中的参数时,将可注入恶意系统命令到正常命令中造成命令执行攻击。
由于服务器端没有针对执行函数和对用户提交的内容进行过滤,所以产生了恶意命令。
?ip=1|whoami
文件上传漏洞
Web服务系统大部分都存在文件上传功能,比如允许用户上传文档、图片、头像、视频等。当用户点击上传时,服务端一般会对上传的文件进行判断,比如是否是指定的类型、后缀名等等,然后存储在指定的目录。当上传功能的实现代码没有严格校验上传文件的后缀和文件类型时候,攻击者可以上传恶意的代码文件并解析执行,从而控制整个服务器。
常用的工具
- 主机和端口存活扫描:
nmap
、fscan
- WEB 漏洞扫描:
AWVS
、AppScan
、Xray
- 抓包工具:
BurpSuite
Webshell
管理工具: 中国蚁剑、冰蝎- 网站目录文件扫描:
dirsearch
、御剑 - SQL 注入:
Sqlmap
Web 安全学习建议
学习建议: 多看文章、多实践、多交流、多做笔记、多总结
漏洞文章: 先知社区、安全客、freebuf、看雪、微信安全公众号
漏洞复现: vulhub
CTF 训练平台: BUUCTF
、CTFHUB
、Bugku
交流学习: 团队(校内外的 CTF 等团队)、安全相关的 QQ 群和微信群
学习记录: 写博客(hexo+github
、wordpresss
)、语雀、有道云笔记、印象笔记等
靶场
DVWA
使用 docker 搭建 DVWA
# 拉取 dvwa 镜像
docker pull vulnerables/web-dvwa
# 运行 dvwa 镜像(将容器 80 端口映射到主机 9220 端口)
docker run -it -d -p 9220:80 vulnerables/web-dvwa
-i
: 以交互模式运行容器,通常与 -t 同时使用;-t
: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;-d
: 后台运行容器,并返回容器ID;-p
: 端口映射,格式为:主机(宿主)端口:容器端口
pikachu
zhuifengshaonianhanlu/pikachu: 一个好玩的Web安全-漏洞测试平台 (github.com)
Pikachu由国内大佬@hanlu开发GITHUB地址,其中包含的漏洞种类与体验感完全不亚于DVWA,并且与DVWA配置环境都兼容,所以两者同时练习亦可。
graph LR
P[Pikachu] --- BruteForce[暴力破解漏洞]
BruteForce --- 基于表单的暴力破解
BruteForce --- 服务端验证码绕过
BruteForce --- 客户端验证码绕过
BruteForce --- 带token的登录绕过
P --- XSS[跨站脚本漏洞]
XSS --- XSS1["反射型 xss(get)"]
XSS --- XSS2["存储型 xss"]
XSS --- XSS3["DOM 型 xss"]
XSS --- XSS4["xss 盲打"]
XSS --- XSS5["xss 过滤"]
XSS --- XSS6["xss htmlspecialchars"]
XSS --- XSS7["xss href 输出"]
XSS --- XSS8["xss js 输出"]
P --- CSRF[跨站请求伪造]
CSRF --- CSRF1["CSRF(get)"]
CSRF --- CSRF2["CSRF(post)"]
CSRF --- CSRF3["CSRF token"]
P --- SQLinject(SQL 注入漏洞)
SQLinject --- SQLinject1["数字型注入(post)"]
SQLinject --- SQLinject2["字符型注入(get)"]
SQLinject --- SQLinject3["搜索型注入"]
SQLinject --- SQLinject4["xx型注入"]
SQLinject --- SQLinject5["'insert/update'注入"]
SQLinject --- SQLinject6["'delete' 注入"]
SQLinject --- SQLinject7["'http header' 注入"]
SQLinject --- SQLinject8["基于boolian的盲注"]
SQLinject --- SQLinject9["基于时间的盲注"]
SQLinject --- SQLinject0["宽字节注入"]
P --- RCE[远程代码执行漏洞]
RCE --- RCE1["exec 'ping'"]
RCE --- RCE2["exec 'evel'"]
P --- FilesInclusion(文件包含漏洞)
FilesInclusion --- FilesInclusion1["本地文件包含漏洞"]
FilesInclusion --- FilesInclusion2["远程文件包含漏洞"]
P --- Unsafefiledownloads(不安全的文件下载)
P --- Unsafefileuploads(不安全的文件上传)
Unsafefileuploads --- Unsafefileuploads1["客户端验证"]
Unsafefileuploads --- Unsafefileuploads2["MIME type 验证"]
Unsafefileuploads --- Unsafefileuploads3["getimagesize"]
P --- OverPermisson(越权漏洞)
OverPermisson --- OverPermisson1["水平越权"]
OverPermisson --- OverPermisson2["垂直越权"]
P --- ../../../(目录遍历)
P --- IcanseeyourABC(敏感信息泄露)
P --- PHP反序列化漏洞
P --- XXE(XML External Entity attack)
P --- 不安全的URL重定向
P --- SSRF(Server-Side Request Forgery)
SSRF --- SSRF1["SSRF(curl)"]
SSRF --- SSRF2["SSRF(file_get_content)"]
使用 Docker 搭建 pikachu 靶场
docker pull area39/pikachu
docker run --restart=always -d -p 9221:80 -p 9222:3306 area39/pikachu
docker run
--restart=always
: 容器设置自动启动-d
: 后台运行容器,并返回容器ID;-p
: 指定端口映射,格式为:主机(宿主)端口:容器端口
需要注意的是默认初始化完成之后密码是空的, 如果想要远程连接 docker 中的 MySQL 则需要修改密码, 修改完密码之后需要重新初始化, 此时务必注意要初始化写的密码配置项有两个, 一个在
/app/inc/config.inc.php
对应主页面的配置, 另一个在/app/pkxss/inc/config.inc.php
对应后台管理的配置
pkxss 管理后台使用介绍
工具栏左侧最下方 管理工具 -> XSS 后台
WAF 对抗
- 分块传输
工具整理
资源库知识库类
公开信息收集与自动推送
- yhy0/github-cve-monitor: 实时监控github上新增的cve、自定义关键字、安全工具更新、大佬仓库监控,并多渠道推送通知
- lxflxfcl/monitor: 漏洞监控平台——Monitor。目前实现了监控GitHub、微软、CNNVD三者的漏洞信息,并使用企业微信实时推送。还可以使用邮箱推送,默认关闭。
信息收集
FuzzScanner
TideSec/FuzzScanner: 一个主要用于信息搜集的工具集,主要是用于对网站子域名、开放端口、端口指纹、c段地址、敏感目录等信息进行批量搜集。 (github.com)
安装
docker pull registry.cn-hangzhou.aliyuncs.com/secplus/tide-fuzzscanner:1.0
docker run --name fuzzscanner -t -i 52341fc71d0a /bin/bash
使用
进入 docker 之后在 /root 目录下有 FuzzScaner
python FuzzScanner.py -hc target.com --> domain && web finger && Dir scan && C scan
设置单个目标网站,子域名枚举 && web指纹识别 && 目录枚举 && C段扫描
python FuzzScanner.py -Hc vuln_domains.txt --> domain && web finger && Dir scan && C scan
从文件读取单个或多个目标网站,子域名枚举 && web指纹识别 && 目录枚举 && C段扫描
python FuzzScanner.py -hca target.com --> domain && web finger && Dir scan && C scan && C allport
设置单个目标网站,子域名枚举 && web指纹识别 && 目录枚举 && C段全端口扫描
python FuzzScanner.py -Hca vuln_domains.txt --> domain && web finger && Dir scan && C scan && C allport
从文件读取单个或多个目标网站,子域名枚举 && web指纹识别 && 目录枚举 && C段全端口扫描
python FuzzScanner.py -h target.com --> domain && web finger && Dir scan
设置单个目标网站,子域名枚举 && web指纹识别 && 目录枚举
python FuzzScanner.py -H vuln_domains.txt --> domain && web finger && Dir scan
从文件读取单个或多个目标网站,子域名枚举 && web指纹识别 && 目录枚举
python FuzzScanner.py -c 192.168.1.1 --> C scan
设置单个IP,进行C段地址探测
python FuzzScanner.py -cd 192.168.1.1 --> C scan && Dir scan
设置单个IP,进行C段地址探测并对web服务进行目录枚举
python FuzzScanner.py -C vuln_ip.txt --> C scan
从文件读取单个或多个目标IP地址,进行C段地址探测
python FuzzScanner.py -Cd vuln_ip.txt --> C scan && Dir scan
从文件读取单个或多个目标IP地址,进行C段地址探测并对web服务进行目录枚举
python FuzzScanner.py -ca 192.168.1.1 --> C scan && C allport
设置单个IP,进行C段地址探测和全端口扫描
python FuzzScanner.py -Ca vuln_ip.txt --> C scan && C allport
从文件读取单个或多个目标IP地址,进行C段地址探测和全端口扫描
gshark - 敏感信息搜集防泄漏图形化工具
madneal/gshark: Scan for sensitive information easily and effectively. (github.com)
多平台的敏感信息监测工具-GShark (seebug.org)
gshark-敏感信息搜集防泄漏图形化工具(避坑指南) _爱国小白帽的技术博客_51CTO博客
前端部署
在 Releases · madneal/gshark (github.com) 下载对应系统的 release
# 解压压缩包, 如: unzip gshark_linux_amd64.zip # 安装 nginx sudo apt update sudo apt install nginx
编辑 Nginx 配置文件
/etc/nginx/nginx.conf
, 在http{}
中添加如下配置项http { ...... server { listen 8080; server_name localhost; root /var/www; # charset koi8-r; # access_log /var/log/nginx/host.access.log main; location /api/ { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; rewrite ^/api/(.*)$ /$1 break; proxy_pass http://127.0.0.1:8888; # 设置代理服务器的协议和地址 } } }
将解压后的 dist 目录下的文件拷贝到
/var/www
目录下后端部署
git clone https://github.com/madneal/gshark.git cd server go mod tidy mv config-temp.yaml config.yaml go build ./gshark web
访问 Web 页面
localhost:8080
输入 MySQL 账密初始化数据库账密都是
gshark
登入系统在
管理
菜单进行 Token 配置, 规则(关键词) (批量导入, 关键词换行)以及过滤规则然后回到后端命令行
./gshark scan
然后在前端页面
搜索结果
中进行查看
暴力破解
超级弱口令检查工具
直接到 Release 页面下载即可
WangYihang/ccupp: 基于社会工程学的弱口令密码字典生成工具 (github.com)
shadowabi/S-BlastingDictionary: 自己搜集的爆破字典,包括常用用户名、密码弱口令、XSS的on事件遍历、SQL万能密码等 (github.com)
威胁情报收集
Chrome 扩展推荐
Wapplayzer
Wappalyzer - Technology profiler - Microsoft Edge Addons