红日安全_《Web安全攻防从入门到精通》
第1章 HTTP基本概念
HTTP请求
- HTTP1.1版本必须使用Host请求
- Accept表示浏览器支持的MIME(多用途互联网邮件扩展)类型,浏览器支持text/html,application/xhtml+xml,application/xml,/,优先顺序从左往右。
- 可称为媒体类型和内容类型
- 斜杠“/”前是type类型,后是subtype子类型
- text:标准化表示文本信息
- text/html:表示html文档
- application:传输应用程序数据或二进制数据
- application/xhtml:表示xhtml文档
- application/xml:表示xml文档
- Referer消息头:早期规范中存在拼写错误,正确的是Refferrer,为了向后兼容,就将错就错。
- Accept-Language:
en,zh-CN;q=0.9,zh;q=0.8
,q是权重系数,q值越大,请求越倾向于获得其“;”之前的类型表示的内容
HTTP响应
- Pragma:表示浏览器不要将响应保存在缓存中
- Content-Type:消息头表示这个消息主体中包含一个HTML文档
- Content-Length:消息头规定消息主体的字节长度
- Cookie
- Secure:设置这个属性,则仅在HTTPS请求中提交Cookie
- HTTPOnly:设置这个属性,将无法通过客户端JavaScript直接访问Cookie
第2章 工具实战
-
Kali Linux
-
PentestBox
-
Burp Suite
-
phpStudy
-
sqlmap
- level等级1-5,等级越高payload越多,速度越慢
- risk等级0-3,等级越高测试语句越多
- -p指定检测参数:
sqlmap -u "www.test.com?id1&page=2" -p id
- 绕过waf:
sqlmap -u "www.test.com?id=1" --tamper xx.py
- 指定注入模式:
sqlmap -u "www.test.com?id=1" --technique(B/E/U/S/T)
(B:布尔,E:报错,U:联合查询,S:可多语句查询,T:基于时间) - POST注入包:
sqlmap -r test.txt
- 写入文件:
sqlmap -u "www.test.com?name=kobe&submit=x" -p kobe --texchnique U --file-write "本地文件" --file-dest "网站绝对路径+文件名"
-
Behinder
-
awvs
-
oneforall子域名收集
python3 oneforall.py --target example.com run
python3 oneforall.py --target example.com --brute True run
python3 oneforall.py --target example.com --dns False run
python3 oneforall.py --target example.com --req False run
-
dirsearch
python3 dirsearch.py -u http://www.test.com/ -e php
python3 dirsearch.py -u http://www.test.com/ -e php --random-user
python3 dirsearch.py -u http://www.test.com/ -e php -r -R 2
python3 dirsearch.py -u http://www.test.com/ -e php -w test.txt
python3 dirsearch.py -u http://www.test.com/ -e php -x 403,301,302,401
-
xray
- 使用基础爬虫爬取并对爬虫爬取的链接进行漏洞扫描:
xray webscan --basic-crawler http://example.com --html-output vuln.html
- 使用 HTTP 代理进行被动扫描:
xray webscan --basic-crawler http://example.com --html-output vuln.html
- 只扫描单个 url,不使用爬虫:
xray webscan --url http://example.com/?a=b --html-output single-url.html
- 手动指定本次运行的插件:
xray websca n --plugins cmd-injection,sqldet --url http://example.com
xray webscan --plugins cmd-injection,sqldet --listen 127.0.0.1:7777
- 指定插件输出:
xray webscan --url http://example.com/?a=b \ --text-output result.txt --json-output result.json --html-output report.html
xray servicescan --target 127.0.0.1:8080
第3章 信息收集
信息收集指的是一种提前踩点动作,获取信息的过程就叫做踩点,踩点是为了进行信息的收集。
渗透测试过程中,第一件要做的事就是进行信息的收集,俗称踩点。
了解安全架构
- 某公司使用了哪些安全设备,防火墙、waf等
- 网络安全人员或管理人员的配置情况
- 规范制度是否完善
建立信息数据库
重要信息 | 信息 |
---|---|
网址 | www.xxx |
ip地址 | 10.2.7.9 |
是否使用cms | dedecms |
网站端口 | 80 |
网站敏感信息
网站及服务器信息
知道域名,首先通过whois数据库进行查询
默认kali自带
针对收集到的邮箱、QQ号、电话号码、姓名及服务商等信息,有针对性进行社工库查找相关管理员信息,也可以对相关dns服务商进行渗透,查看是否有漏洞。
域名枚举
进行基本域名收集以后,通过主域名得到所有子域名,可以找到更多ip地址
fierce工具:fierce -dns domainName
、fierce -dns domainName -wordlist /root/wordlist.txt
正常情况下,收集完二级域名后,就可以进行常规漏洞扫描。(注意用代理)
nslookup
交互式和非交互式
NS记录:域名服务器记录,记录该域名有哪台域名服务器解析。
非交互式语法:nslookup [-option] [hostname] [server]
(hostname指定查询的主机名,server指定dns服务器)
nslookup -type=ns jd.com
(-type选项和-qt一样)
nslookup -qt=mx taobao.com
交互式
1 | >nslookup |
通过敏感信息可以获取
- 网络拓扑结构,服务器集中的IP地址段
- 数据库服务器的IP地址
- 测试服务器ip地址
- vpn服务器ip
dig
dig+域名
dig www.baidu.com any
-c协议类型:IN、CH、HS
-f批量查询dig -f 1.txt -c IN -t A
-t设置查询类型,A、MX
-q显示设置域名
-x逆向查询
+trace跟踪全过程
+nocmd精简输出
+short仅输出最精简的cname和a记录
域传送数据:dig @dns.test.com axfr test.com
,axfr后面跟域名称,只要出现XFR Size
就存在漏洞。
多级域名敏感信息
nmap
-T+数字,数字越高,扫描速度越快
subDomainsBrute二级域名收集
layer子域名挖掘机
wydomain
搜索引擎查找域名信息
搜索引擎是指根据一定的策略、运用特定的计算机程序从互联网上搜集信息,对信息进行组织和处理后,为用户提供检索服务,并将检索的相关信息展示给用户的系统。搜索引擎包括全文搜索引擎、目录索引、元搜索引擎、垂直搜索引擎、集合式搜索引擎、门户搜索引擎与免费链接列表等。
通过搜索引擎进行快速定位,可以发现网站尽可能多的漏洞点,以及更容易下手的方式。具体操作步骤如下。
第一步:爬行。
搜索引擎通过一种特定规律的软件跟踪网页的链接,从一个链接爬到另外一个链接,像蜘蛛在蜘蛛网上爬行一样,所以也被称为“蜘蛛”或“机器人”。搜索引擎蜘蛛的爬行是被输入了一定的规则的,它需要遵从一些命令或文件的内容。
第二步:抓取存储。
搜索引擎通过蜘蛛跟踪链接爬行到网页,并将爬行的数据存入原始页面数据库。其中的页面数据与用户浏览器得到的HTML是完全一样的。搜索引擎蜘蛛在抓取页面时,也要做一定的重复内容检测,一旦遇到权重很低的网站上有大量抄袭、采集或复制内容的情况,很可能就不再爬行。
第三步:预处理。
搜索引擎将蜘蛛抓取回来的页面,进行各种步骤的预处理。
(1)提取文字。
(2)中文分词。
(3)去停止词。
(4)消除噪声(搜索引擎需要识别并消除这些噪声,如版权声明文字、导航条、广告等)。
(5)正向索引。
(6)倒排索引。
(7)链接关系计算。
(8)特殊文件处理
除了HTML文件外,搜索引擎通常还能抓取和索引以文字为基础的多种文件类型,如PDF、Word、WPS、XLS、PPT、TXT等文件。我们在搜索结果中也经常会看到这些文件类型。但搜索引擎还不能处理图片、视频、Flash这类非文字内容,也不能执行脚本和程序。
第四步:排名。
用户在搜索框中输入关键词后,排名程序调用索引库数据,将计算排名显示给用户,排名过程与用户是直接互动的。但是,由于搜索引擎的数据量庞大,虽然能实现每日都有小的更新,但是一般情况下搜索引擎的排名规则都是根据日、周、月进行阶段性、不同幅度的更新。
ZoomEye
bing搜索:inanchor:
、inbody:
,可同时使用,例如inanchor:msn inbody:seo inbody:sem
theHarverster
1 | -d 域名 |
- PentestBox
- kali
theHarvester -d qq.com -l 100 -b baidu
FOFA
C段信息收集
所谓C段就是指ip地址前三个字段值不变,只变动最后一个字段,从1-255将所有主机扫一遍。
利用Layer子域名挖掘机扫出二级域名以及对应ip地址,将这些地址放到nmap扫C段。
nmap C段收集
nmap -T4 -A -v 192.168.0.1/24
nmap -T4 -A -v 192.168.0.1-255
御剑C段信息收集
AWVS C段信息收集
实战演示
- 敏感信息收集工具
- 学会活用搜索引擎和搜索语法
1 | https://github.com/ring04h/weakfilescan |
-
软件敏感信息
- 操作系统版本,nmap
- 中间件类型、版本、http返回头、404报错页面,whatweb
- web程序,whatweb、cms_identify
-
web敏感信息
- phpinfo()信息泄露
- 测试网页泄露外网:test.cgi、phpinfo.php、info.php等
- 编辑器备份文件泄露外网
- test.php.swp
- test.php.bak
- test.jsp.old
- cgi~
- 版本工具泄露
- .git/config
- CVS/Entriesp
- .svn/entriesp
- http认证信息泄露
- basic/index.php
- web目录开启了http basic认证,但未限制ip,可暴力破解账户密码
- 管理后台地址泄露
- login.php
- admin.php
- manager.php
- admin_login.php
- 泄露员工邮箱、分机号码:可被社工、生成字典
- 错误页面暴露信息: mysql错误、php错误、暴露cms版本等
- 探针文件
- robots.txt
- phpmyadmin
- 网站源码备份文件(www.rar/sitername.tar.gz/web/zip等)
- 其他
- 网络信息泄露:dns域传送漏洞、运维监控系统弱口令、网络拓扑泄露、zabbix弱口令等
- 第三方软件应用
- github上的源代码、数据库、邮箱密码等泄露,可搜索类似"smtp 163 password"
- 百度网盘被员工上传敏感文件
- QQ群被员工上传敏感文件
信息泄露案例
网页设计不当导致信息泄露
- 访问url,列出目录文件列表
- 输出错误url参数报错,显示banner信息
- 源代码(html、css、js)包含敏感信息,如后台地址、内网接口信息等(特别是注释可能包含)
容器或网页源代码查看敏感信息
把敏感信息写在注释里,上线后忘记删除
whois查找网页敏感信息
whois用来查询域名是否注册,以及注册域名信息的数据库
通过whois查询可以获得域名注册者、邮箱、地址等信息。
一般情况下,对于中小型网站来说,域名注册者就是网络管理员,利用搜索引擎对whois查询到的信息进行搜索,可以获取更多域名注册者信息。下一步可以利用网站注册者去找真实注册人,再通过qq邮箱或手机号码等敏感信息,利用第三方关联网站进行溯源。
whois查询方法
- web接口查询:whois.aizhan.com,robtex.com
- whois命令查询
备案敏感信息
ipc备案查询方法
- https://www.beian88.com
- http://beian.miit.gov.cn/publish/query/indexFirst.action
- https://www.tianyancha.com
- http://www.beianbeian.com
CMS网站敏感信息
根据cms指纹识别,收集相应版本号,精准寻找exp。例如,查出wordpress3.1,去exploit-db网站找exp测试。
- 在线工具
- http://whatweb.bugscaner.com/look
- htpp://www.yunsee.cn/finger.html
- http://he.bgp.net
- 本地工具:御剑web指纹识别、大禹cms识别等,以及在线cms指纹识别。
cms漏洞查找
- 乌云漏洞库
- 安全漏洞平台
敏感目录查找
常用探测工具
- 御剑后台扫描工具
- wwwscan命令行工具
- dirb命令工具
- dirbuster扫描工具
- teemo工具
- subdomain
端口信息
- nmap
- 在线网站端口,例如:tool.chinaz.com/port,TreatScan在线网站TSan
github信息收集
1 | site:github.com smtp |
绕过CDN找真实ip
-
判断cdn是否存在:通过设置代理ping检测或在线ping检测网站使用不同地区的ping服务器(站长之家ping检测)来测试,响应ip不一样说明存在cdn。
-
绕过cdn
- 内部邮箱源:收集到内部邮箱服务器ip地址
- 网站phpinfo文件
- 分站ip地址,查询子域名:cdn花费很高,很有可能分站后不适用cdn
- 通过国外网站获取ip地址(使用代理进行ping,选择一个很偏的国家)
敏感文件泄露
ssrf或任意url链接跳转
账号密码泄露
在源码注释中
错误处理测试
组织架构敏感信息
百度文库查找敏感信息
查找产品安装手册或企业敏感信息,如vpn、邮箱、oa等应用使用手册或应用安装手册(默认账户口令)等
威胁情报平台
riskiq
第4章 靶场搭建
dvwa
xvwa
webug
dsvw
pikachu
upload-labs
sqli-labs
vulhub
root me
vulnstack
第5章 Web安全入门
SQL注入漏洞
防御手段
- 使用参数化查询
- 使用安全的API
- 使用白名单来规范化输入验证方法
- 对输入的特殊字符进行Escape转移处理
XSS漏洞
防御手段
- 对用户输入的数据进行合法性检查
- 使用filter过滤敏感字符或进行编码转义
- 针对特定类型数据进行格式化检查
- 对输出内容进行编码转义
CSRF漏洞
防御手段
- 验证Referer字段是否来自本站
- 请求中加入token
SSRF漏洞
防御手段
- 禁止跳转
- 限制协议
- 内外网限制
- url限制
XXE漏洞
防御手段
- 打开PHP的libxml_disable_entity_loader(true),禁止加载外部实体
- 过滤用户提交的XML数据,如ENTITY,SYSTEM
反序列
防御手段
- 禁止把用户的输入或用户可控的参数值直接放进反序列化的操作中
文件上传漏洞
防御手段
- 白名单限制上传文件后缀名,只允许上传图片格式文件
- 配置白名单限制上传文件类型,只允许上传图片类型文件
- 限制上传文件大小
- 对上传文件进行重命名操作
任意文件下载漏洞
防御手段
- 过滤…/等敏感字符,用户在URL中不能回溯上级目录
- 文件下载时判断输入的路径
- php.ini配置open_basedir限定文件访问范围
远程代码执行漏洞
防御手段
- 尽量少用执行命令的函数或禁用
- 参数值尽量使用引号包含,拼接前调用addshlasher函数进行转义
越权漏洞
防御手段
- 前后端同时对用户输入信息进行检验,设置双重验证机制
- 执行关键操作之前必须验证用户身份,验证用户是否具备操作数据的权限
- 直接对象引用的加密资源ID,防止攻击者枚举ID
第6章 小试牛刀
信息收集
子域名、端口、ip、应用类型、敏感信息等
漏洞利用
暴力破解、弱口令、WebShell上传等
phpmyadmin弱口令+写入WebShell
网站存在会员登录功能,后台弱口令+爆破
前台模板写入WebShell+冰蝎连接
内网利用
使用CS+MSF+kali全局代理
1 | vim /etc/proxychains.conf |
第7章 SQL注入实战攻防
sqlmap
第8章 XSS漏洞实战攻防
bruteXSS
XSSer
xss平台:bluelotusxssreceiver
第9章 CSRF漏洞实战攻防
burp+engagement tools+Generate CSRF PoC
第10章 SSRF漏洞
1 | image=http://127.0.0.1:22 |
漏洞检测点
- 分享:通过url地址分享文章,url参数
- 图片加载与下载:通过url地址加载或下载图片,存在于很多编辑器中,编辑器上传图片处
- 图片、文章收藏功能:title参数是文章标题地址,代表一个文章的链接地址
- 利用参数中的关键字来查找
1 | share |
绕过
- 限制为
http://www.xxx.com
域名:尝试采用http基本身份认证方式绕过,针对不同处理函数存在处理差异,例如:在http://www.aaa.com@www.bbb.com@www.ccc.com
中,php的parse_url会识别www.ccc.com,libcurl
识别为www.bbb.com
。 - 限制请求ip不为内网地址
- 采用短地址绕过
- 使用xip.io,例如127.0.0.1.xip.io
- 采用进制转换,八进制,十六进制,十进制
- 限制请求只为http协议
- 302跳转
- 百度短地址
- 使用
https://tinyurl.com
生成302跳转地址
第11章 任意文件上传实战攻防
文件上传常见点
- 上传头像
- 上传相册
- 上传附件
- 添加文章图片
- 前台留言资料上传
- 编辑器上传点
利用工具进行Fuzz
github+upload-fuzz-dic-builder+bp爆破
docker-compose logs | grep password
第12章 业务逻辑漏洞实战攻防
第13章 未授权访问实战攻防
第14章 XXE漏洞实战攻防
DTD
- 内部DOCTYPE声明:
<!DOCTYPE 根元素 [元素声明]>
- 外部文档声明:
<!DOCTYPE 根元素 SYSTEM "文件名">
DTD实体
-
内部实体声明:
<!ENTITY 实体名称 "实体的值">
-
外部实体声明:
<!ENTITY 实体名称 SYSTEM "URI">
-
参数实体声明:
<!ENTITY % 实体名称 "实体的值">
或者<!ENTITY % 实体名称 SYSTEM "URI">
-
参数实体用%实体名称声明,引用时也用%实体名称;其余实体直接用实体名称声明,引用时用&实体名称。
-
参数实体只能在DTD中声明,DTD中引用;其余实体只能在DTD中声明,可在XML文档中引用。
XXE分类
按构造实体声明
- 直接通过DTD外部实体声明
1 | <?xml version="1.0"?> |
- 通过DTD文档引入外部DTD文档中的外部实体声明
1 | xml: |
- 通过DTD外部实体声明引入外部DTD文档中的外部实体声明
1 | xml: |
按回显信息
- 正常回显xxe
- 报错xxe
- blind xxe
1 | xml: |