APP下载

《Web安全技术》实验教学的探索与实践

2022-04-14忽海娜刘宇建

许昌学院学报 2022年2期
关键词:字节语句漏洞

忽海娜,刘宇建,丁 豹,平 源

(许昌学院 信息工程学院,河南 许昌 461000)

随着互联网信息化的不断发展,Web应用得到了迅速开发,为互联网的进步发挥着非常重要的作用,但同时,随之而来的安全问题也日益凸显.《Radware 2018年Web应用安全现状》报告中指出,应用层攻击的频率和复杂性在不断增长,至少89%的受访者在过去一年都遭遇过针对Web应用或Web服务器的攻击[1].因此,Web安全问题成了当前信息安全领域的热门关注点,国内各高校信息安全相关专业也相继开设《Web应用安全》《Web安全技术》等相关课程关注这一热点问题[2-4].

以我校为例,《Web安全技术》是信息安全专业的核心课程,具有很强的实践性和应用性,在教学过程中需引入大量的实验任务,帮助学生更好地理解Web攻击的原理和漏洞的成因,从而提高学生的漏洞检测能力和修复能力.但是,课程应该包括哪些方面的实验内容,如何对实验内容进行合理的设计,选择什么样的实验平台,如何开展实验教学,这些都是亟待解决和研究的问题.

1 实验项目设计

图1 Web攻击态势分析

Web技术日新月异,Web 安全的威胁状况也在不断变化,因此,在设计《Web 安全技术》实验教学内容时,紧跟当前Web安全的行业和技术发展态势,同时按照我校应用型人才的培养要求[5],从实践角度出发,围绕2017年OWASP(Open Web Application Security Project,开放式Web应用程序安全项目)公布的Web安全十大威胁[6],同时结合国内阿里云发布的《2019上半年Web应用安全报告》[7]中的Web攻击态势分析(如图1所示),最终将常见的SQL注入、代码注入、XML外部实体注入(XXE注入)、敏感信息泄露、XSS跨站脚本攻击、文件包含、文件上传、不安全的反序列化等作为主要教学内容.针对每部分的教学内容,设计操作性较强的实验案例,对Web漏洞的成因和原理进行分析,同时对相关技术进行验证.

此外,考虑到Web安全问题的复杂性,即Web安全问题不仅仅是由某个单一的漏洞造成的,基于此,在基础实验项目完成之后,设计了一个综合的Web渗透测试实验项目,包含网络嗅探、漏洞扫描、信息收集、漏洞检测与利用、提权等相关内容,可以多维度地对Web服务器的安全问题进行分析.最终,《Web安全技术》课程设计的实验内容,如表1所示.

表1 Web安全实验设计

2 实验平台遴选

因Web安全相关的实验项目具有一定的攻击性和破坏性,不能在真实的Web网站上进行,需要自主搭建Web安全实验教学平台.而在实验平台的遴选上,国内高校更倾向于选择开源的Web漏洞平台,其中大多选择的是DVWA平台[8].

DVWA是一套开源的、适用于常规Web漏洞教学和检测的Web脆弱性测试程序,包含了诸如SQL注入、XSS等常见的一些Web安全漏洞,可以满足基本的实验需求.但因后续版本更新太慢的问题,导致新的Web 漏洞未在平台中及时更新,比如2017版OWASP TOP 10公布的一些漏洞,像XML外部实体注入、不安全的反序列化、越权等漏洞并未被包含在DVWA平台中,平台的实验场景过于陈旧,而过于陈旧的安全攻防内容以及环境受限的实验设计缺乏实际应用价值.

Pikachu平台也是一套开源的且易于搭建的Web漏洞平台.与DVWA相比,Pikachu平台以最新发布的OWASP TOP 10为核心不断更新漏洞模块,截止目前,Pikachu平台包含了常见的SQL注入、代码注入、XML外部实体注入、敏感信息泄露、XSS跨站脚本攻击、文件包含、文件上传、PHP反序列化等15种Web漏洞场景,如图2所示.同时,Pikachu平台中的每类漏洞,根据不同的情况分别设计了不同的子类,以SQL注入漏洞为例,又分为数字型注入、字符型注入、搜索型注入、HTTP Header注入、布尔盲注(Base on Boolean)、时间盲注(Base on Time)和宽字节注入等十种不同类型的SQL注入漏洞.丰富的漏洞场景可以满足不同的Web安全实验需求.此外,Pikachu平台的代码结构清晰,内容易读,在虚拟机搭建好之后,学生可以根据实验的不同需求,修改Pikachu平台的源代码.比如,适当添加一些过滤函数,增加实验的难度等.

课程在对DVWA和Pikachu两大平台进行对比分析的基础上,最终确定采用Pikachu平台作为《Web安全技术》的实验教学平台.

3 Pikachu平台在教学中的实践

以2019级信息安全专业为例,根据Web安全的实验项目和班级的学生人数,将学生以3人为单位,分为10个小组,每组学生可以选择Pikachu平台的不同漏洞模块或者同一漏洞模块的不同内容.在掌握漏洞基本原理的基础上,各小组在搭建好的Pikachu平台上进行实验,并将实验的整个过程,包括漏洞成因分析、漏洞检测、漏洞利用以及漏洞防御等过程撰写成文档报告,同时将漏洞检测和利用的过程在课堂上进行演示、分享.

以宽字节注入为例,学生在掌握宽字节注入的基本原理后,在Pikachu平台上完成了实验的整个过程,整理形成的报告如下.

图2 Pikachu平台漏洞模块

3.1 特殊字符转义

当GPC开启或使用addslashes、mysql_escape_string等函数过滤提交的参数时,SQL注入的经典语句【id=1'】,其中的单引号会被转义而变成【id=1’】,这样就使得单引号无法闭合SQL语句,从而达到防御SQL注入的目的,这种防御方式一般情况下是很难绕过的.此时,针对字符转义,可以尝试使用宽字节注入方式.

3.2 漏洞成因

宽字节注入发生的原因就是PHP发送请求到MySQL时,字符集使用character_set_client设置值进行了一次编码,如果编码为GB2312、GBK等双字节编码,就会存在宽字节注入漏洞[9].

宽字节带来的安全问题主要是编码转换引起的“吃ASCII字符”的现象,如果拼接合理,可以在吃掉一个字节后,将剩余内容重新拼接成一个单引号.简单来说,就是“’”转义了单引号“'”,当PHP连接MySQL的编码为GBK时,注入格式为【id=1%df'】,因为反斜杠“”的编码为“%5c”,所以参数传到后端经过转义后就会变成【id=1%df%5c'】,其中GBK会将“%df%5c”编码成一个繁体字“運”,这样反斜杠就失去了转义的效果,使得单引号逃逸出来闭合了语句,具体分析如图3所示.

图3 宽字节注入漏洞成因分析

3.3 漏洞检测

第1步:访问Pikachu平台地址“http://192.168.136.135/pikachu/”,选择“SQL-Inject”模块的“宽字节注入”.通过测试,发现这是一个POST传参,所以结合Burp Suite截获数据包,利用Repeater 重放模块进行测试分析.

第2步:在Repeater模块中,尝试修改参数【name=vince'】后发送数据包,页面无任何返回信息.此时,对Pikachu后台的源代码文件“sqli_widebyte.php”进行修改,添加一条输入语句“echo$query”,将SQL查询的语句显示在页面上,便于对输出结果进行分析.

第3步:再次发送上述数据包,页面返回SQL查询的语句为:【select id,email from member where username='vince’'】,单引号“'”被转义为“’”.

第4步:尝试使用宽字节注入的方式.在Burp Suite截获数据包中,直接修改参数【name=vince%df' or 1=1#】 后发送数据包,浏览器页面返回SQL查询的语句为:【select id,email from member where username='vince運' or 1=1 #'】(此处需设置浏览器的编码为中文模式),查询结果如图4所示.数据表中相关字段的内容都显示在了页面上.从图4中也可以看出,写入的参数在实际执行语句中发生了较大的变化,前面输入的“%df”已经吃掉了反斜杠“”,并将其转换为一个繁体字“運”,使得单引号逃逸出来闭合了语句.说明,此处存在宽字节注入漏洞.

图4 漏洞测试返回结果

3.4 漏洞利用

利用联合查询,对存在的宽字节注入漏洞进一步利用.

第1步:构造Payload为“vince%df' union select database(),2 #”,爆出当前数据库名为“pikachu”.

第2步:构造Payload为“vince%df' union select(select group_concat(table_name)from information_schema.tables where table_schema=database()),2 #”,爆出当前数据表名为“httpinfo,member,message,users,xssblind”.

第3步:构造Payload为“vince%df' union select group_concat(column_name)from information_schema.columns where table_name=0x7573657273,2 #”,爆出数据表“users”的字段名为“id,username,password,level”.

第4步:构造Payload为“vince%df' union select group_concat(username),group_concat(password)from users #”,爆出用户名和密码,如图5所示.

图5 爆出用户名和密码

3.5 漏洞防御

宽字节注入漏洞的最好防御方式就是统一编码标准,Web页面及数据库均使用UTF-8进行编码.

在Pikachu平台上进行验证.修改Pikachu后台的源代码文件“sqli_widebyte.php”,将此行代码$set=“set character_set_client=gbk”,修改为:$set=“set character_set_client=utf8”.保存退出后,在Burp Suite的Repeater模块中重新发送Payload:“vince%df' union select group_concat (username),group_concat (password) from users #”,后台数据库未查询出数据,返回结果如图6所示.

图6 漏洞代码修复后的查询结果

4 Web渗透测试

在对Web常见漏洞的基本原理、成因及检测方式熟练掌握的基础上,本课程设置的最后一个实验项目为Web渗透测试,要求学生以渗透测试的思路,完成Web平台的漏洞检测与利用的整个过程.其中,在Web渗透测试平台的遴选上,建议每组学生从VulnHub或者GitHub网站上下载漏洞平台源代码,搭建在虚拟机环境中,并按照Web渗透测试的流程,对漏洞平台进行网络嗅探、端口扫描、信息收集、漏洞检测、漏洞利用、提权等攻击行为,尽可能地挖掘出Web平台中存在的漏洞.

截止目前,学生在完成实验项目的过程中,遴选出了一些非常不错的Web渗透测试平台,其中包括Zico2、Billu_b0x、HackInOS、Wakanda、Hackme等靶机平台.以HackInOS平台为例,它是一款CTF风格的Web漏洞平台,学生在虚拟机上搭建完成后,找到了平台中存在的文件上传漏洞,之后利用该漏洞上传WebShell拿到权限,最终利用Docker逃逸成功提权,拿到了“flag”文件的信息,如图7所示.

图7 HackInOS平台渗透测试报告

5 结语

围绕Web安全十大威胁,对《Web安全技术》课程的实验项目设计、实验平台遴选、实验开展过程等环节进行了一系列的探索与实践.在基础实验项目的开展过程中,以Pikachu平台的漏洞实例为导向,将知识点与实验项目紧密结合,学生在完成实验的过程中,通过对代码的深入分析,可以透彻理解漏洞的成因,掌握漏洞的挖掘技术和防御策略.而Web综合渗透测试实验的开展,一方面学生需要自主搜寻合适的“靶机”平台,充分调动了学生的主动性,另一方面,学生需要采用“黑盒测试”的模式,对“靶机”平台中存在的漏洞进行检测与利用,最大限度地激发了学生的学习兴趣.课程实践表明,《Web安全技术》实验教学效果良好,学生在具体实验过程中能够牢牢地掌握知识要点和专业技能.

猜你喜欢

字节语句漏洞
漏洞
No.8 字节跳动将推出独立出口电商APP
重点:语句衔接
No.10 “字节跳动手机”要来了?
基于MSP430的四旋翼飞行器的S-BUS通信协议的设计与实现
三明:“两票制”堵住加价漏洞
漏洞在哪儿
高铁急救应补齐三漏洞
我喜欢
人类进入“泽它时代”