E049-论坛漏洞分析及利用-针对bwapp进行web渗透测试的探索
论坛漏洞分析及利用
---------------------------------------------------------------------------------------------------------------------------------
中级
【任务场景】
磐石公司邀请渗透测试人员对该公司的论坛进行渗透测试,由于公司部门的特殊性,该公司要求渗透测试人员小王和公司网站运维协同工作,来识别出潜在的安全风险,我们在知道目标网站源码和其他一些信息的情况下对其进行的测试,通过对代码进行分析挖掘出其中潜在的安全风险
---------------------------------------------------------------------------------------------------------------------------------
【任务分析】
渗透测试最简单直接的解释就是:完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标系统(Web、业务软件、操作系统)的安全做深入的探测,发现系统最脆弱的环节。它能充分了解企业网络当前存在的安全隐患,渗透测试操作人员在客户知情和授权的情况下,站在黑客的角度以入侵者的思维方式,使用黑客会使用的各种方法对目标信息系统进行全面深入的渗透入侵,尝试发现系统安全的最薄弱环节。渗透测试的过程如同网络真实入侵事件的演练。通过专业的渗透测试平台的模拟实验,使得信息系统的管理人员了解入侵者的思维。
---------------------------------------------------------------------------------------------------------------------------------
【预备知识】
buggy web Application 这是一个集成了各种常见漏洞和最新漏洞的开源Web应用程序,目的是帮助网络安全爱好者、开发人员和学生发现并防止网络漏洞。包含了超过100种漏洞,涵盖了所有主要的已知Web漏洞,包括OWASP Top10安全风险,其中还整合了OpenSSL和ShellShock漏洞
1.Injection vulnerabilities like SQL, SSI, XML/XPath, JSON, LDAP, HTML, iFrame, OS Command and SMTP injection
//注入漏洞,如SQL、SSI、XML/XPath、JSON、LDAP、HTML、iFrame、OS命令和SMTP注入
2.Cross-Site Scripting (XSS), Cross-Site Tracing (XST) and Cross-Site Request Forgery (CSRF)
//跨站脚本、跨站式追踪攻击、跨站请求伪造
3.Unrestricted file uploads and backdoor files
//不受限制的文件上传和后门文件
4.Authentication, authorization and session management issues
//认证、授权和会话管理问题
5.Arbitrary file access and directory traversals
//任意文件访问和目录遍历
6.Local and remote file inclusions (LFI/RFI)
//本地和远程文件包含
7.Server Side Request Forgery (SSRF)
//服务器端请求伪造
8.XML External Entity Attacks (XXE)
//XML外部实体攻击
9.Heartbleed vulnerability (OpenSSL)
//OpenSSL心脏滴血漏洞
10.Shellshock vulnerability (CGI)
//破壳漏洞
11.Drupal SQL injection (Drupageddon)
//Drupal注入漏洞
12.Configuration issues: Man-in-the-Middle, cross-domain policy file, information disclosures,...
//配置问题:中间人,跨域策略文件,信息公开,……
13.HTTP parameter pollution and HTTP response splitting
// HTTP参数污染与HTTP应答拆分攻击
14.Denial-of-Service (DoS) attacks
//拒绝服务攻击
15.HTML5 ClickJacking, Cross-Origin Resource Sharing (CORS) and web storage issues
//HTML5点击劫持,跨域资源共享,Web存储问题
16.Unvalidated redirects and forwards
//未验证的重定向和转发
17.Parameter tampering
//参数串改
18.PHP-CGI vulnerability
//PHP-CGI漏洞
20.Insecure cryptographic storage
//不安全的加密存储
21.AJAX and Web Services issues (JSON/XML/SOAP)
//AJAX和Web服务问题(JSON/XML/SOAP)
22.Cookie and password reset poisoning
//Cookie和密码重置毒化
23.Insecure FTP, SNMP and WebDAV configurations
//不安全的FTP,SNMP和WebDAV配置
。。。。。。。。。。。。。
---------------------------------------------------------------------------------------------------------------------------------
E049-论坛漏洞分析及利用-针对bwapp进行web渗透测试的探索
服务器场景:p9_kali-6(用户名:root;密码:toor)
服务器场景操作系统:Kali Linux
服务器场景:p9_linux-3(用户名:bee;密码:123456)
服务器场景操作系统:linux
---------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------
打开一个终端,然后在/var/www/html目录中编写一个简单的页面,再然后使用命令service apache2 start启动apache服务器:
使用命令firefox打开火狐浏览器,然后访问靶机地址http://172.16.1.6/bWAPP/login.php
使用默认用户名bee密码bug登录,并设置安全级别为low,然后点login进入网站
选择A1-HTML Injection-Reflected(GET),点击Hack按钮,进行反射性HTML注入:
打开网页后,发现一个form表单,尝试在输入栏中填入以下代码:
Click ME然后点击Go向服务器提交请求
Click ME
在接下来的页面中点击Click ME! 提交后可以看到,提交的信息在页面中直接显示
在地址栏里面看到我们的信息,这是get请求的特征之一:
尝试伪造存在xss漏洞的恶意url执行,通过提交期望执行的代码,来搜集到客户端的访问信息,在输入栏中的First name处填入以下代码:,在Last name填入任意信息如下所示:
提交请求后,发现成功获取到用户的cookie:
进入靶机场景,切换路径至/var/www/bWAPP,查看目录下的htmli_get.php
查看源代码发现,当安全防护为low的情况下,没有对用户输入的数据进行处理,echo 输出没有经过任何过滤:
回到渗透机kali中,在登录界面将安全级别设置为medium中级:
重复上面的步骤,在输入框里填写:,提交后查看返回结果。
发现再有弹框而是将用户输入的内容直接输出到前端页面中:
通过查看靶机中的详细防护代码发现,在安全级别为medium的情况下,使用了str_replace()函数过滤"<"和">"这两个特殊字符处理了,最后,用了urldecode()函数进行解码,把URL编码还原字符串。
依据代码的思路,我们可以先对"<"、">"进行urlencode,绕过str_replace()函数的过滤即可。建议把所有特殊的符号都进行编码,例如"=","/"等。
回到渗透机kali中,继续对html injection -reflected(GET)页面进行注入,按F12打开火狐页面调试功能,找到Hackbar插件,然后输入注入语句。
将语句中的 <,>,/ 符号转换为ascii码进行注入:
转换后的代码如下
将代码复制到输入框中,进行提交:
提交后查看页面,发现已成功绕过:
直接查看源码,进行一下审计:
发现代码中通过函数htmlspecialchars()对用户输入进行过滤,该函数的作用是将预定义的字符串转换为HTML实体
预定义的字符是:
// & (和号)成为 &
// " (双引号)成为 "
// ' (单引号)成为 '
// < (小于)成为 <
// > (大于)成为>
该函数的语法为htmlspecialchars(string,flags,character-set,double_encode),其中第二个参数flags需要重要注意,开发者就是因为没有注意到这个参数导致使用htmlspecialchars()函数过滤XSS时被绕过。因为flags参数对于引号的编码如下:
可用的引号类型:
ENT_COMPAT - 默认。仅编码双引号。
ENT_QUOTES - 编码双引号和单引号。
ENT_NOQUOTES - 不编码任何引号。
实验结束,关闭虚拟机。