1.网络安全和渗透测试
(1)什么是网络安全
网络防御主要是针对各类网络攻击提供网络安全防御方案,为了应对攻击技术的不断革新,防御技术已经逐步从被动防御的历史阶段转变为主动防御阶段。目前常见的网络防御技术大体类型有加密技术、访问控制技术、安全检测技术、安全监测技术和安全审计技术等,综合运用这些类技术,进行有机的组织可以应对千变万化的各类网络安全需求,有效形成网络安全防护的解决方案。
简言之,就是要建立和维护一个安全的网络环境,保护系统和数据不受攻击和损害。
(2)什么是渗透测试
渗透测试(Penetration Test),是一项在计算机系统上进行的授权模拟攻击,旨在对其安全性进行评估,是为了证明网络防御按照预期计划正常运行而提供的一种机制。
渗透测试是一种安全测试和评估的方法,能够从攻击者角度,发现目标系统的安全漏洞以及钓鱼攻击等社会工程学操作的脆弱点。渗透测试所产出的结果都将以报告的形式输出,根据渗透测试报告,有针对性地对网络系统进行完善,提高系统的安全性。
(3)渗透测试的范围和场景
-
Web应用程序渗透测试:对Web应用程序进行渗透测试,包括寻找常见的Web漏洞(如跨站脚本、SQL注入、文件上传等)。测试访问控制和授权机制,验证敏感数据保护等。
-
移动应用程序渗透测试:对移动应用程序(如iOS和Android应用)进行渗透测试,发现安全漏洞。如数据存储不安全、未加密的通信、未授权的访问等,以确保移动应用程序的安全性。
-
网络基础设施渗透测试:对企业的网络基础设施进行渗透测试,包括局域网(LAN)、无线网络(Wi-Fi)、路由器、交换机等。对企业的物理安全措施进行渗透测试,验证门禁系统的强度、监控摄像头的有效性、机房的安全等。发现可能存在的网络漏洞和入侵点,评估网络的安全性。
-
社会工程学渗透测试:通过模拟人为攻击和欺骗手段,测试公司员工的安全意识和反应。通过发送钓鱼邮件、进行电话欺骗等方式,评估公司的社会工程学防御能力。
-
云环境渗透测试:对云计算环境进行渗透测试,验证云平台的安全性,包括云服务器、存储、数据库等。
(4)网络安全和渗透测试的共同点
-
目标一致:网络安全和渗透测试的最终目标都是保护计算机网络和系统的安全,防止恶意攻击和数据泄露。
-
依赖关系:渗透测试是网络安全的一项重要手段之一,通过渗透测试可以评估系统和应用程序的安全性。从而发现存在的安全漏洞和弱点,提出改进和修复建议。
-
网络安全和渗透测试是一个循环的过程:网络安全是一个持续不断的工作,需要不断更新和改进安全策略和措施而渗透测试应该是定期进行的,以确保系统和应用程序的安全性得到持续增强。
(5)安全攻防建设对企业的重要性
-
数据保护:网络安全确保企业的敏感数据和商业秘密不会泄露、被篡改或被盗取。保护客户和员工的个人信息,防止数据泄露和身份盗窃,有助于维护企业声誉和客户信任。
-
法律合规性:许多行业都有与网络安全相关的法规和合规性要求。完善的网络安全措施有助于企业遵守相关法规,减少法律风险和潜在的罚款。
-
业务连续性:网络安全措施可以保障企业业务的连续性,防止网络攻击和恶意代码的破坏,如勒索软件和拒绝服务攻击。如果企业遭受网络攻击,可能导致系统故障、数据丢失或瘫痪,给业务带来重大影响。
-
品牌竞争优势:有效的网络安全措施可以增强企业的竞争优势。提供安全的在线交易和客户信息保护,会吸引更多客户信任和业务合作机会。一旦企业遭受数据泄露或其他网络安全事件,会对品牌声誉造成严重影响。网络安全的投资和努力可以提高企业在市场中的声誉和信誉。
-
内部安全:网络安全不仅涉及外部威胁的防护,也包括内部员工的恶意行为和错误操作的防范。合适的访问控制和权限管理可以防止内部员工滥用权限、泄露敏感信息或对系统进行破坏。
(6)渗透测试常见操作思路
- 扫描目标:攻击者首先扫描目标Web应用程序,寻找潜在的文件上传漏洞。
- 发现漏洞:一旦找到文件上传漏洞,攻击者可以通过上传可执行文件来验证漏洞。
- 构造WebShell脚本:攻击者制作一个包含恶意操作的WebShell脚本(如PHP、JSP或ASP脚本)。
- 上传WebShell文件:攻击者通过利用文件上传漏洞将WebShell脚本文件上传到服务器上。
- 运行WebShell脚本:一旦WebShell文件成功上传,攻击者可以通过访问相应的URL来执行WebShell脚本,并获取控制服务器的权限。
关于WebShell,我们后面会说。
2.跨站脚本攻击XSS
(1)Web渗透测试通常包括以下几个步骤
-
信息收集:收集与目标Web应用程序有关的信息,包括域名、IP地址、子域名、相关技术和框架等。可以通过搜索引擎、WHOIS查询、目录爬取工具等手段进行信息收集。
-
漏洞扫描:用自动化工具对目标Web应用程序进行漏洞扫描,检测常见安全漏洞,如跨站脚本(XSS)/SQL注入/文件上传漏洞等。漏洞扫描工具可以自动发现潜在的漏洞,并生成扫描报告。
-
漏洞利用与权限提升:在发现漏洞后,渗透测试人员会尝试利用这些漏洞获取对应用程序的未授权访问或提升权限。例如,利用已知的漏洞进行注入攻击或绕过访问控制机制。
-
弱点分析与漏洞验证:在发现漏洞后,渗透测试人员会深入研究漏洞,并验证是否存在真实的攻击风险。这可能需要使用手动的技术和工具,如渗透测试人员模拟攻击者行为,包括手动注入、渗透测试脚本等。
-
敏感信息泄露测试:测试是否存在敏感信息泄露的风险,如测试是否能够获取到数据库信息、登录凭证或其他敏感数据。这样的测试有助于评估数据保护和隐私保密性。
-
报告编写和建议:根据测试结果和发现的漏洞,渗透测试人员将编写详细的报告,并提供相应的修复和防护建议。报告应包括发现的漏洞描述、漏洞等级评定以及建议修复措施。
(2)什么是跨站脚本攻击(XSS)
跨站点脚本攻击,简称XSS,是指攻击者利用网站存在的漏洞,通过在网站中注入恶意脚本代码,从而使得用户在访问该网站时受到攻击。这些恶意脚本代码通常是JavaScript 代码,它们可以窃取用户的敏感信息,如用户名、密码等,并将这些信息发送到攻击者的服务器。
XSS攻击的本质是利用Web应用程序中的漏洞,向网页注入恶意脚本代码,然后将这些代码嵌入到网页中,当其他用户访问这个网页时,恶意脚本将会被执行。
解决方案:
- 对用户输入进行有效的过滤和验证,特别是在展示用户输入内容时。
- 使用安全的编码机制,如HTML编码和URL编码。
- 对Cookie设置HttpOnly属性,限制脚本访问敏感信息。
- 阻止不受信任的域名或URL的内容插入到页面中
(3)常见的XSS攻击的例子
-
存储型XSS攻击
-
攻击者将恶意脚本存储在目标网站的数据库中,当其他用户访问包含该恶意脚本的页面时,脚本会被执行。
-
这种攻击利用了网站对用户输入的不当处理,此类攻击一般出现在网站留言、评论、博客日志等交互处,恶意脚本存储到客户端或者服务端的数据库中。
-
<!-- 假设maliciousCode出现在评论区内,当提交之后,下次打开页面就会自动执行alert。-->
<script>// 假设输入的是恶意的脚本链接var maliciousCode = '<script>alert("你的账户信息已被攻击,请输入密码并发送给攻击者")</script>';// 假设这里是漏洞存在的页面,用户的输入没有进行过滤或转义var userInput = maliciousCode;// 恶意脚本被存储并执行document.getElementById('content').innerHTML = userInput;
</script>
-
反射型XSS攻击
-
攻击者通过诱使受害者点击包含恶意脚本的特制链接,将恶意脚本作为参数传递给目标网站
-
网站在返回响应时会将恶意脚本包含在其中,并被浏览器执行,此类攻击一般出现在网站留言、评论、博客日志等交互处,恶意脚本存储到客户端或者服务端的数据库中。
-
<!-- 假设这里是漏洞存在的搜索页面,用户的输入没有进行过滤或转义 -->
<form action="/search" method="GET"><input type="text" name="query" value=""><button type="submit">搜索</button>
</form>
<!-- 攻击者构造的恶意链接 -->
<a href="/search?query=<script>alert('你的账户信息已被攻击,请输入密码并发送给攻击者')</script>">点击此处获取免费礼品</a>
3.跨站请求伪造CSRF
(1)什么是跨站请求伪造
- 跨站请求伪造(Cross-Site Request Forgery,CSRF),是一种利用受信任的用户身份执行未经授权的操作的攻击方式。
- 攻击者通过伪造请求,利用用户在目标网站中的登录状态来执行恶意操作或窃取用户的敏感信息
(2)跨站请求伪造解决方案
- 引入CSRF令牌(token),并将其包含到表单或请求中,校验Referer头部,确保请求来自合法的来源。
- 使用验证码、双因素身份验证、HTTPS等也是增加安全性的有效措施,以确保用户与目标网站的交互是安全和可信的
- 启用SameSite属性,限制Cookie的发送,防止未经用户许可的跨站请求
(3)CSRF攻击案例
- 收藏夹攻击
攻击者在自己的网站上创建一个恶意链接,当受害者登录了目标网站后,点击该链接即可执行被欺骗的操作。用户在目标网站登录后,如果点击恶意收藏夹中的链接,就会执行跳转到攻击者控制的网站上,并执行相应的操作。
<!-- 假设这里是受害者在目标网站上的收藏夹页面 -->
<h1>我的收藏夹</h1>
<ul><li><a href="https://malicious.com/transfer?amount=1000">点击领取惊喜礼品</a></li><!-- 收藏夹中的恶意链接 --><li><a href="https://malicious.com/logout">点击注销</a></li>
</ul>
- 钓鱼网站攻击
攻击者创建与目标网站非常相似的钓鱼网站,引诱受害者在该钓鱼网站上进行操作,窃取用户的登录凭证或敏感信息。攻击者创建了一个与目标网站相似的登录页面,引诱受害者输入用户名和密码,并将这些信息发送到目标网站,从而获取用户的登录凭证。
<!-- 假设这里是攻击者创建的钓鱼网站 -->
<h1>请输入用户名和密码来领取奖品</h1>
<form action="https://target-website.com/login" method="POST"><input type="hidden" name="username" value="victim"><input type="hidden" name="password" value="123456"><button type="submit">登录并领取奖品</button>
</form>
4.SQL注入攻击
(1)什么是SQL注入攻击
SQL注入是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
(2)SQL注入攻击解决方案
- 使用参数化查询(Prepared statement)或存储过程,确保用户输入不会被拼接到SQL语句中。
- 对用户输入进行严格的验证和过滤,去除非法字符。
- 设置数据库用户的最小权限原则,限制数据库操作
(3)基于用户输入的SQL注入攻击
- 应用程序未正确验证和过滤用户输入,攻击者可以通过在输入字段中注入SQL代码来修改或绕过应用程序的查询语句
// 假设这是一个登录验证的 SQL 查询语句,用户的输入没有经过过滤或转义
var username = getRequestParameter('username');
var password = getRequestParameter('password');
var query = "SELECT * FROM user WHERE username = '" + username + "' AND password = '" + password + "'";
// 执行 SQL 查询
- 攻击者可以在用户名或密码字段中注入额外代码,例如
' OR '1'='1' --
,使得查询语句变为
- ANSI 标准的注释符“–” 用于单行注释,格式:-- 注释内容
- 这样就绕过了用户名和密码的验证,返回了所有用户的记录
5.Web文件上传漏洞
(1)什么是文件上传漏洞
文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。常见场景是Web服务器允许用户上传图片或者普通文本文件保存,而用户绕过上传机制上传恶意代码并执行从而控制服务器。
@PostMapping("/upload")@ApiOperation(value = "文件上传", notes = "文件上传")public R<String> upload(MultipartFile file) throws IOException {@CleanupInputStream inputStream = file.getInputStream();StorePath storePath = storageClient.uploadFile(inputStream, file.getSize(), FilenameUtils.getExtension(file.getOriginalFilename()), null);return R.ok(getResAccessUrl(storePath));}
- 用户可以通过访问
/upload
的URL来上传文件。攻击者可能会利用这个功能来上传恶意文件- 攻击者可以将这段恶意脚本保存为一个以
.html
结尾的文件,然后通过文件上传漏洞将其上传到目标应用程序。 - 一旦恶意文件被上传并保存在服务器上,当其他用户访问该文件时,恶意脚本将被执行,
- 攻击者可以窃取用户的Cookie并在攻击者控制的服务器上进行记录
- 攻击者可以将这段恶意脚本保存为一个以
- 解决方案
- 文件类型验证:对上传文件的扩展名进行验证,仅允许允许的文件类型上传。
- 文件大小限制:限制上传文件的大小,避免上传过大的文件。
- 文件内容验证:对上传的文件进行检查,确保文件内容符合预期。
- 文件重命名:对上传的文件进行重命名,避免使用原始文件名。
- 文件存储位置:将上传的文件保存在安全的位置,限制执行权限。
6.Web Shell木马
(1)什么是Web Shell
- Web Shell是指在Web服务器上的恶意脚本文件,它可以被攻击者利用来执行远程操作和控制服务器。
- WebShell通常以脚本文件的形式存在,可以包含各种编程语言的代码,如PHP、ASP、JSP等。
- 攻击者通过上传WebShell文件到服务器,并通过Web应用程序提供的漏洞或弱点执行相关脚本,从而获取对服务器的操控权。
- WebShell和文件上传漏洞通常相关联,因为文件上传漏洞是攻击者利用来上传和执行WebShell脚本的常见方式。
- 一旦文件被上传并保存在服务器上,攻击者可以通过执行WebShell脚本来远程控制服务器、执行恶意命令、窃取敏感信息等
(2)WebShell的危害
- 远程操控:攻击者可以通过WebShell远程执行命令、调用操作系统的API、上传/下载文件等操作,并完全控制服务器。
- 数据窃取:WebShell可以用来窃取敏感信息,如数据库连接信息、用户凭据、文件内容等。
- 木马功能:WebShell可以作为一个后门程序,与外部服务器进行通信,允许攻击者随时控制服务器并进一步的攻击活动。
- 网站篡改:攻击者可以通过WebShell修改网站的文件和数据库,包括篡改内容、添加恶意链接、注入恶意代码等。
(3)WebShell防范措施
- 输入验证和过滤:对用户输入进行验证和过滤,确保任何用户提供的参数都不能直接成为命令的一部分。
- 文件上传验证:对上传的文件进行严格验证,包括文件类型 大小和内容的检查。确保只允许上传合法的文件并将其存储在安全的位置。
- 最小权限原则:将Web服务器配置为以最小特权运行,限制访问权限,比如Tomcat不要root用户允许,Redis不要Root用户部署。
- 安全配置:及时更新Web服务器和应用程序的软件版本,并遵循安全最佳实践进行配置。
- 定期审查和监测:定期审查服务器上的文件和日志,寻找可疑活动和未知的WebShell文件。
- 安全编码:开发过程中遵循安全编码标准,包括对输入进行严格验证和过滤,并确保不会产生任意代码执行漏洞。