APP下载

基于Web 环境的网站渗透测试技术探究

2021-01-25文春生唐阳华

湖南科技学院学报 2020年5期
关键词:域名漏洞端口

文春生 唐阳华

(湖南科技学院 学报编辑部,湖南 永州 425199)

由于Web 应用程序或基于Web 的数据处理存在安全漏洞,导致其很容易遭到黑客的攻击,因此保证 Web 站点的安全是确保信息安全的关键问题。对 Web 攻击在一定的层面上可以理解为黑客入侵,保障 Web 网站的安全运行可以从检测网页存在的漏洞、发现网页木马、测试网页是否被篡改、有没有欺诈网站等着手。越来越多的重要或敏感数据被存储在 Web 类应用系统中,专业、全面的安全检测对保证业务安全必不可少。渗透测试,就是这样一种机制[1],通过识别目标网站的安全漏洞来帮助网站拥有者理解网站当前的安全状况,目的是为了使网络防御按照预期计划正常运行。本文在本地搭建 bug4.0 靶机站点,模拟各种攻击方法对 Webug4.0 站点进行渗透,通过研究Web 渗透测试方法的设计分析和防护措施,以检验其对Web 网站的信息安全是否可行、有效。

1 常见的Web 安全漏洞

1.1 SQL 注入漏洞[2,3]

(1)漏洞原理。因为后台SQL 语句拼接了用户的输入,Web 应用程序对用户输入数据的合法性没有进行判断、过滤,前者传入后端的参数是攻击者可以控制的,导致攻击者通过构造不同的SQL 语句实现对数据库的任意操作。

(2)漏洞危害。攻击者利用SQL 注入漏洞可以绕过应用程序的安全措施、绕过网页或者 Web 应用程序的身份验证和授权等,使用 SQL 注入来增加、查询、修改和删除数据库中的记录。不法分子可能会利用此漏洞访问用户的敏感数据、个人隐私、客户信息、知识产权、商业机密等等。

(3)漏洞防范。

①使用预编译语句,绑定变量;

②使用存储过程,将 SQL 语句定义在数据库中,在使用存储过程时尽量避免使用动态 SQL 语句,当无法避免时,使用严格的输入过滤和编码函数来处理用户的输入数据;

③检查数据类型;

④使用安全的函数。

1.2 上传漏洞

(1)漏洞原理。由于Web 对实现文件上传功能的代码对用户上传的文件后缀名和文件类型并没有作出严格的限制,导致攻击者可以利用这个缺陷通过Web 访问的目录上传任意PHP 文件,还能将这些文件传递给 PHP 解释器,攻击者能在远程服务器上执行任意的PHP 脚本文件。

(2)漏洞危害。

①网站被控制;

②服务器沦陷;

③同一服务器的其他网站沦陷。

1.3 XSS 跨站脚本攻击漏洞[4,5]

(3)漏洞原理。XSS 漏洞攻击时,攻击者通过在网页中嵌入恶意脚本,比如用JavaScript 编写的恶意代码,使得用户在浏览已被嵌入了恶意代码的网页时,恶意代码被执行,从而实现对用户浏览器的控制。

⑵漏洞分类。XSS 攻击方式通常分为三大类:反射型XSS、存储型XSS、DOM 型XSS。

⑶漏洞危害。获取用户的 Cookie、修改网页内容、网站挂马及利用网站重定向等。

(4)漏洞防范。严格过滤输入输出,检测输入输出是否存在某些特殊字符或者直接过滤某些关键字,例如<>和 script 等。HttpOnly 本身对防御XSS 漏洞起不到任何作用,可在 Cookie 中加入HttpOnly,可解决XSS 漏洞后续产生的Cookie 劫持攻击。

1.4 文件包含漏洞

(1)漏洞原理。一般情况下,程序开发人员为了方便使用会把一些重要的函数写到一个文件中,这样就不需要再次编写,直接调用文件就行,而这个调用的过程就是文件包含。由于在生成这个文件过程中没有对其文件名做出严格的过滤,就会被攻击者利用,从而使包含了 Web 根目录和其他文件的信息泄露,甚至可能被注入恶意代码等操作。

(2)漏洞分类。本地文件包含(LFI):当被包含的文件在服务器本地时,就叫本地文件包含;远程文件包含(RFI):当被包含的文件在第三方服务器时,就叫远程文件包含。值得注意的是,php.ini 中的 allow_url_fopen 和 allow_url_include 需要打开。

(3)漏洞危害。文件泄露,恶意的代码注入。

(4)漏洞防范。第一,严格判断包含的参数是否是外部可以控制的;第二,进行路径限制,既要限制被包含的文件只能存在于单一文件夹内,也要禁止目录跳转字符,例如:“./”等;第三,进行包含文件的验证,查看黑名单中是否存在被包含的文件;第四,严格动态包含的使用,尽量不使用动态包含,当需要包含时,在页面固定写好即可,如:“include<”admin。php”>”。

2 Web 渗透测试基本步骤

Web 渗透测试基本步骤主要有:对目标网站进行渗透,发掘出其中存在的漏洞和风险,而后撰写渗透测试报告,将其提供给客户。根据渗透测试报告,客户会对网站存在的漏洞进行相应的修补,防止入侵[6]。

渗透测试分为白盒测试和黑盒测试[7]。白盒测试是在已知目标网站源码和其他一些相关信息的情况下对其进行渗透,类似于代码分析。黑盒测试就是只告知了网站的 URL,模拟黑客对网站的渗透。如图1所示完整的渗透测试基本流程可概括为:目标确定→收集信息→探索漏洞→漏洞利用→获得Webshell→清除痕迹→测试报告撰写。

图1 渗透测试流程

2.1 信息收集

信息收集一般分为:主动信息收集和被动信息收集。通过从目标 Web 服务器下载或进行交互等技术获取相关信息的方式称为主动信息收集;通过搜索引擎或者社交工具等间接的手段获取目标Web 网站信息的方法称为被动信息收集。

(1)域名的获取。渗透测试从域名开始,通过域名发现该域名所对应的目标 Web 主机 IP、端口、Web 应用服务,从而分析潜在的攻击面,这是信息收集阶段最关键的任务之一。

(2)目标网站所有者的查询。通过一个名为Who.is 传输协议查询目标网站的 IP、持有者等相关信息的,或利用 Who.is 反查出与同一域名注册人相匹配的其他域名、DNS 记录等情况。根据域名注册人姓名、电话、电子邮箱等信息,利用社会工程学欺骗等手段进行渗透测试。该协议信息查询常用的工具有微步、Http://who.is/、chinaz、命令等。

(3)备案信息的查询。通过工业和信息化部ICP/IP 地址/域名信息备案管理系统、天眼查、企业信用信息公示系统等查询域名的备案信息。

(4)收集子域名。通过子域名的收集,可以发现更多的目标,从而发现更多安全漏洞。而子域名的收集,可以通过字典暴力枚举、子域名猜测、 Layer 子域名挖掘机、 搜索引擎、SubDomainsBrute、Wydomain 工具及在线工具Phpinfo.me 进行。

(5)Web 服务器信息获取。可以使用 host、nslookup、dig 命令以及 dnswalk、dnstracer、dnsenum 等工具获取DNS 的信息。另外,DNS 域传送漏洞可能因DNS 配置不当所致,这种漏洞的存在会导致Web 网络拓扑图的泄露。

(6)收集 IP 地址。通过网络命令 ping、nslookup、查询二级域名、查看历史解析记录、网站的漏洞等方法绕过CDN 查找到目标节点的真实IP 地址。

(7)旁站及C 段查询。同一Web 服务器的其他站点称为旁站,同一网段的其他服务器叫做 C段,利用python 可以查询旁站和C 段。

(8)服务端口收集。服务端口与安全相对应,Web 主机开启的端口越多,存在漏洞的可能性越大,面对的安全威胁也越大,使用 masscan、Nmap 等工具可以进行端口渗透的探测。

(9)网站架构信息的收集。操作系统、中间件、数据库、脚本语言等一起构成网站架构。通过 Nmap、AWVS、wappalyzer、云悉在线等工具可以收集网站的操作系统信息。通过 IIS、Tomcat、Apache、Nginx 等可以收集网站的中间件信息。通过数据库管理软件如 MySQL、access、SQL server、Oracle 等可探查网站数据库所采用的数据库管理类型。通过 Nmap、wappalyaer、云悉在线工具等可以方便地获取中间件、数据库、脚本语言。另外,还可通过HTTP 消息中header 头部信息,网页默认页面及报错页面信息等方式获取网站其他信息。

(10)探测 Web 应用防护系统 WAF。WAF 不仅能够解析HTTP请求,也能进行相应的规则检测,从而做出防御。要判断 WAF 是否存在,可通过提交恶意数据或者使用Nmap、wafwoof 等工具进行。

(11)敏感目录、敏感信息及源码泄露。利用搜索引擎搜索敏感目录、敏感文件和敏感信息,还可以利用暴力字典枚举目录等等,这些都是信息收集中要尽可能的获取的内容途径。

(12)指纹信息。指纹信息包括:CMS(内容管理系统)指纹、目标的操作系统登录指纹、目标的服务版本。进行渗透测试应尽量的检索 Web 信息,通过指纹可以识别出目标网站使用的CMS 信息类型,为进一步的了解渗透测试环境提供帮助。检查CMS 类型方法有:通过robots.txt、文件版权信息、查看网页代码、比较网站的 md5 判断网站CMS,也可以使用云悉、bugscaner 等工具对CMS 进行收集。

(13)社会工程学。利用微博、微信、网购网站、求职平台等互联网平台获取相关的信息,这些信息在渗透测试中有可能起到意想不到的效。

2.2 漏洞挖掘

漏洞挖掘基于海量的信息,判断网站是否存在 Web 诸如 SQL 注入、XSS 跨站脚本、文件上传、文件包含、文件解析等漏洞,要进行针对性的探测,利用Nessus、AppScan、AWVS 等工具可以有效地进行探测。如 SQL 注入的步骤可简单的概括为:“判断 SQL 注入→注入点寻找→数据库类型判断→注入实施并提升权限”。GET 型注入漏洞,主要环节包括整型参数判断和字符串型参数判断,针对性的判断直接影响渗透测试推进。

(1)工具扫描。使用工具扫描能快速发现 Web站点是否存在相应的漏洞,也会生成对应的payload,以便于我们分析漏洞。集成扫描漏洞模块越多的工具,功能也就越强大。漏洞扫描的具体方案:首先确定扫描的目标网站系统,然后从多个漏洞扫面工具中选取出一款合适的工具,最后对其扫描结果做出输出列表。

(2)手工检测。在对Web 站点进行漏洞挖掘的时候,当发现 Web 服务器里安装有对应的防火墙或安全狗时,使用工具扫描的话,将会在短时间内频繁地对系统进行访问,导致 IP 被拦截限制,最终会造成无法访问 Web 站点程序,这时只能通过手工去慢慢挖掘漏洞。

①要判断是否存在 SQL 注入,简单地方法是在id 参数后面提交单引号和通过and1=1 和and1=2回显来判断是否存在SQL 注入漏洞。

②检测后台登陆是否存在弱口令。试试在后台登录地址里输入admin/admin 或者类似一些弱口令,或者尝试使用万能密码是否能够成功登录。

③使用谷歌语法。使用谷歌语句 site:xxx.com inurl:upload 等查看是否存在编辑器或者上传点。

2.3 漏洞利用

针对性地利用漏洞是在探测到网站的漏洞之后。因为基于单一的漏洞很难获取网站的Webshell,所以需要结合多个漏洞获取网站的 Webshell,利用 SQLmap、AWVS 等工具在此过程中会使Webshell 的获取事半功倍。在获取 Webshell 后,需要进行提权,SUID 提权(Linux),系统溢出漏洞提权、第三方软件提权、数据库提权等是常用的提权方法。数据库提权,可利用 MySQL、SQL Server 等数据库实现提权。

2.4 痕迹清除

完成对目标的渗透测试后,清除痕迹是必须的,具体做法是掩盖网络痕迹和清除日志。使用代理或多层代理可实现真实 IP 地址掩盖,不同系统存在不同的日志清除方式,Linux 系统需删除“/var/log”下文件,Windows 系统则需要删除Log 文件或安装Clearlogs 工具才能进行清理。

2.5 撰写渗透测试报告

渗透测试完成后,结合测试结果撰写渗透测试报告,指出系统存在的漏洞,给出修补漏洞的方法。客户根据渗透测试报告,有针对性地进行漏洞修复,以此强化Web 的信息安全保障。

3 一次完整的渗透测试

3.1 测试环境

VMware 15.5,DC-8 靶机虚拟机,kali 虚拟机(均为NAT 模式),ip 为:192.168.86.129

3.2 信息收集

测试时两台主机为NAT 模式,并属同一个网段,使用 Nmap 进行同网段的 IP 存活扫描。图 2所示,Kali 攻击机的 IP 为 192.168.86.129,Nmap扫描命令为:nmap-sP192.168.86.1/24。

图2 存活IP 地址开放端口

靶机192.168.86.132 对此IP 进行全端口扫描,查看是否开启 Web 的端口。通过 Nmap 命令:nmap -sS-Pn-p-192.168.86.132 看到目标机开启了22 和 80 端口,22 是 SSH 协议,可以进行 SSH 爆破,然后 Xshell 远程连接。因开启了 80,说明Web 服务开启,如图3 所示。访问弹出了Web 页面,用插件wappalyzer 识别。

图3 Wappalyzer 识别

图3 中发现是一个drupal 版本为7 的cms,后台脚本为 PHP,Web 容器为 apache。然后百度得知drupal7 后台gets hell 漏洞,选择PHP_CODE 模式(编辑 PHP 代码)并预览,在预览页面加载后就会执行代码。在编辑处写入代码:

其中的IP 为Kali 的IP 地址,端口是接收反弹的一个Kali 未被占用的端口。可以在Kali 上执行NC 监听,如图 4 所示。先在 Kali 上执行 NC 监听,再进行目标站点的后台编辑 PHP 代码进行保存。

图4 NC 监听

见图 5,保存后没有反弹,查看发现在 view模块处要提交邮箱等信息才能完成,随便填入信息,确定试试,会发现反弹成功,交互式 shell 被获取。

图5 成功反弹信息

3.3 提权

使用 find 查看那些命令是 root 权限发现exim4,如图6 所示。

图6 版本信息

图7 使用searchsploit 查找响应的漏洞

图7 所示,把目标程序下载到靶机,并用scp在kali 上开启ssh 服务scproot@192.168.86.132:/usr/share/exploitdb/exploits/linux/local/46996.sh /tmp/,运行./46996.sh 可以查看到完整信息,如图8 所示。

图8 完整信息

再次执行,先监听kali 上的8888 端口,然后反弹成功,注意这里很快就会短链,要快。

4 结 论

渗透测试技术能通过主动发掘目标 Web 系统所存在的安全漏洞,分析漏洞的成因并及时修补,以达到主动防御,防患于未然的目的。本文结合渗透测试技术,分析 Web 系统存在的安全漏洞,通过在本地搭建 bug4.0 靶机站点,模拟各种攻击方法对Webug4.0 站点进行渗透,对Web 渗透测试方法的设计分析和防护措施进行研究,实际证明,在有关网络安全中积极的防守在于有目的的进攻,渗透测试技术在 Web 网站系统的应用,对保障网站信息安全是可行、有效的。

猜你喜欢

域名漏洞端口
漏洞
一种端口故障的解决方案
如何购买WordPress网站域名及绑定域名
端口阻塞与优先级
三明:“两票制”堵住加价漏洞
漏洞在哪儿
高铁急救应补齐三漏洞
腾讯八百万美元收购域名
初识电脑端口
生成树协议实例探讨