20155204《网络对抗》Exp9 Web安全基础实践

20155204《网络对抗》Exp9 Web安全基础实践

一、基础问题回答

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

原理:

  • SQL注入即是指web应用程序对用户输入数据的合法性没有判断,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。

防御:

  • 1.普通用户与系统管理员用户的权限要有严格的区分。如果一个普通用户在使用查询语句中嵌入另一个Drop Table语句,那么是否允许执行呢?由于Drop语句关系到数据库的基本对象,故要操作这个语句用户必须有相关的权限。在权限设计中,对于终端用户,即应用软件的使用者,没有必要给他们数据库对象的建立、删除等权限。那么即使在他们使用SQL语句中带有嵌入式的恶意代码,由于其用户权限的限制,这些代码也将无法被执行。故应用程序在设计的时候,最好把系统管理员的用户与普通用户区分开来。如此可以最大限度的减少注入式攻击对数据库带来的危害。
  • 2.强迫使用参数化语句。如果在编写SQL语句的时候,用户输入的变量不是直接嵌入到SQL语句。而是通过参数来传递这个变量的话,那么就可以有效的防治SQL注入式攻击。也就是说,用户的输入绝对不能够直接被嵌入到SQL语句中。与此相反,用户的输入的内容必须进行过滤,或者使用参数化的语句来传递用户输入的变量。参数化的语句使用参数而不是将用户输入变量嵌入到SQL语句中。采用这种措施,可以杜绝大部分的SQL注入式攻击。不过可惜的是,现在支持参数化语句的数据库引擎并不多。不过数据库工程师在开发产品的时候要尽量采用参数化语句。
  • 3.加强对用户输入的验证。、在SQLServer数据库中,有比较多的用户输入内容验证工具,可以帮助管理员来对付SQL注入式攻击。测试字符串变量的内容,只接受所需的值。拒绝包含二进制数据、转义序列和注释字符的输入内容。这有助于防止脚本注入,防止某些缓冲区溢出攻击。测试用户输入内容的大小和数据类型,强制执行适当的限制与转换。这即有助于防止有意造成的缓冲区溢出,对于防治注入式攻击有比较明显的效果。

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

原理:

  • XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码(如,HTML代码和客户端脚本)植入到提供给其它用户使用的页面中,攻击者可以利用XSS漏洞旁路掉访问控制。

防御

- 1.使用XSSFilter。输入过滤,对用户提交的数据进行有效性验证,仅接受指定长度范围内并符合我们期望格式的的内容提交,阻止或者忽略除此外的其他任何数据。比如:电话号码必须是数字和中划线组成,而且要设定长度上限。过滤一些些常见的敏感字符,例如:```< > ‘ “ & # \ javascript expression  "onclick="  "onfocus"```;过滤或移除特殊的Html标签, 例如: ```<script>, <iframe> ,  &lt; for <, &gt; for >, &quot for```;过滤JavaScript 事件的标签,例如``` "onclick=", "onfocus" ```等等。输出编码,当需要将一个字符串输出到Web网页时,同时又不确定这个字符串中是否包括XSS特殊字符(如< > &‘”等),为了确保输出内容的完整性和正确性,可以使用编码(HTMLEncode)进行处理。
- 2.DOM型的XSS攻击防御。把变量输出到页面时要做好相关的编码转义工作,如要输出到 <script>中,可以进行JS编码;要输出到HTML内容或属性,则进行HTML编码处理。根据不同的语境采用不同的编码处理方式。
- 3.HttpOnly Cookie将重要的cookie标记为http only,   这样的话当浏览器向Web服务器发起请求的时就会带上cookie字段,但是在脚本中却不能访问这个cookie,这样就避免了XSS攻击利用JavaScript的document.cookie获取cookie:

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

原理:

- CSRF跨站请求伪造,也被称为“oneclickattack”或者sessionriding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用,通过伪装来自受信任用户的请求来利用受信任的网站。是一种依赖web浏览器的、被混淆过的代理人攻击。

防御:

- 通过 referer、token 或者 验证码来检测用户提交。
- 尽量不要在页面的链接中暴露用户隐私信息。
- 对于用户修改删除等操作最好都使用post 操作 。
- 避免全站通用的cookie,严格设置cookie的域。

二、实践总结与体会

这是最后一个实验了,基于这个webgoat的实验平台做了很多实验,按着步骤来,也不算难操作,难在理解每一句指令,每一个攻击方式,每一个漏洞,这也是我们做这么多实验的目的吧,直观的先认识到,怎么样会成功,然后再推敲,是怎么成功的。网络对抗的实验确实是最有趣的,也是我做过最能调动人学习兴趣的实验。

三、实践过程记录

1.开启webgoat

  • 通过java -jar webgoat-container-7.0.1-war-exec.jar打开webgoat。(这个实际安装真的好费事。。最后还是选择了老师的kali)
  • 在kali浏览器中输入localhost:8080/WebGoat,用默认账户密码登录webgoat。

2.XSS:Phishing with XSS 跨站脚本钓鱼攻击

如果一个未经验证的用户输入一个 HTTP 响应时, XSS 很有可能发生,利用它就可以进行钓鱼攻击,在一个页面内添加一个伪官方网页就可以骗取用户的账号和口令。注意这里强调的是在 HTTP 响应时攻击,而不是请求,要知道如果是请求的话,那么就相当于是自己黑自己,多没意思,可如果是响应的话就意味着,别人发送请求,而你响应他虚假的页面,这样就可以用来对其进行欺骗。

  • 先准备一个代码

    ```


This feature requires account login:

Enter Username:

Enter Password:


- 然后在webgoat找到xss攻击打开Phishing with XSS,将这段代码输入到输入框中,点击search出现如下登录框:
![](https://images2018.cnblogs.com/blog/1071529/201805/1071529-20180529230250235-1868497484.png)

- 在登录框中输入用户名、密码:

- 点击登录后跳出弹框,其中包含用户输入的用户名、密码。攻击成功!
![](https://images2018.cnblogs.com/blog/1071529/201805/1071529-20180529230257163-183396322.png)

### 3.XSS:Stored XSS Attacks 存储型XSS攻击
- 简单来说明一下存储型XSS的攻击基本流程:比如在某个论坛提供留言板功能,黑客在留言板内插入恶意的html或者Javascript代码,并且提交。网站后台程序将留言内容存储在数据中。然后一个用户也访问这个论坛,并刷新了留言板,这时网站后台从数据库中读取了之前黑客的留言内容,并且直接插入在html页面中,这就可能导致了:黑客留言的脚本本身应该作为内容显示在留言板的,然后此时可能黑客的留言脚本被浏览器解释执行了。然后黑客就可以:通过javascript获取用户的cookie,根据这个cookie窃取用户信息;重定向网站到一个钓鱼网站;重新更改页面内容,假装让客户输入用户名,密码,然后提交到黑客的服务器等等。

- 打开Stored XSS Attacks
- 在Message框中输入<script>alert("你想加在弹框里的内容");</script>
- 点击提交就可以看到弹窗了。
![](https://images2018.cnblogs.com/blog/1071529/201805/1071529-20180529230359666-2086177604.png)

### 4.XSS:Reflected XSS Attacks 反射型XSS攻击

- 反射型XSS,非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。

- 在第二个code框中输入```<script>alert("20155204wh");</script>```
- 点击purchase后攻击成功。
![](https://images2018.cnblogs.com/blog/1071529/201805/1071529-20180529230422678-678387519.png)

### 5.Cross Site Request Forgery(CSRF)

- CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。
- 注意留心页面右边Parameters中的src和menu值
- 在title框中输入学号,message框中输入代码:<img src=‘attack?Screen=src值&menu=menu值&transferFunds=转账数额‘ width=‘1‘ height=‘1‘>
- 点提交按钮,再点击生成的连接,即可看到结果。

![](https://images2018.cnblogs.com/blog/1071529/201805/1071529-20180529230612184-1760972856.png)

### 6.CSRF Prompt By-Pass

- 跟上一个一样的操作,留意页面右边Parameters中的src和menu值,并在title框中输入学号,message框中输入代码:

<iframe src="attack?Screen=src值&menu=menu值&transferFunds=转账数额">

<iframe src="attack?Screen=src值&menu=menu值&transferFunds=CONFIRM">


- 还是点击学号链接,跳转到攻击成功的页面。

![](https://images2018.cnblogs.com/blog/1071529/201805/1071529-20180529230622705-1580751470.png)

### 7.SQL:Numeric SQL Injection
- 这里开始的都是SQL攻击,所谓SQL注入式攻击,就是输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。
- 我们在kali中打开```BurpSuite```这个软件。
- 选择Proxy->Options->Add添加一个端口,修改端口号为5204,并选中这个端口。
- 然后配置Firefox,```preference-->advanced-->network-->connection-->settings```,设置代理服务器和端口,要与刚刚BurpSuite中绑定的一致。
- 设置好代理后回到题目页面,点击Go,然后进入BurpSuite中依次选择Proxy->Intercept,可以看到已经抓到了包。

![](https://images2018.cnblogs.com/blog/1071529/201805/1071529-20180529230653833-547779522.png)

- 然后右键这个包,把它send to repeater,再进入repeater页标签,选择Params将其中station的值改为101 or 1=1,点击Go运行,查看右侧代码可以看到包中的SQL语句为

SELECT * FROM weather_data WHERE station = 101 or 1=1

- 回到Proxy中点击Intercept is on 改为 off 停止抓包,回到火狐发现已经成功。
![](https://images2018.cnblogs.com/blog/1071529/201805/1071529-20180529230710713-1077607454.png)

### 8.SQL:Command Injection
- 还是用BurpSuite抓包。
- 在webgoat中点击view,BurpSuite的proxy已经抓到了包,同样send到repeater,在其中的Params选项中先运行一次,查看数据都提交的位置。
![](https://images2018.cnblogs.com/blog/1071529/201805/1071529-20180529230722288-1228035494.png)

- 然后修改HelpFile的值为```AccessControlMatrix.help"&&ifconfig"```,点击GO发现执行了ifconfig语句。
![](https://images2018.cnblogs.com/blog/1071529/201805/1071529-20180529230732912-924984692.png)

- 回到webgoat发现攻击成功。
![](https://images2018.cnblogs.com/blog/1071529/201805/1071529-20180529230749978-1607675256.jpg)

### 8.SQL:Log Spoofing
- 在User Name文本框中输入```%0d%0aLogin succeeded !admin```可以欺骗登录。
![](https://images2018.cnblogs.com/blog/1071529/201805/1071529-20180529230758728-1555840619.png)

### 9.LAB:SQL Injection(Stage 1:String SQL Injection)
- 使用Firefox浏览器上方的插件firebug,可以修改当前页面的源码。
- 利用firebug对长度maxlength值进行扩大(原本是8),然后使用用户Neville进行登录,在密码栏中再次输入‘ or 1=1 --,点击登录就OK。这里firebug要一直开着,不然改过的网页源码就无效了。
![](https://images2018.cnblogs.com/blog/1071529/201805/1071529-20180529230812262-489408161.png)

### 9.LAB:SQL Injection(Stage 3:Numeric SQL Injection)
- 还是用上一个的办法登录。
- 还是用firebug修改viewprofile部分的代码,找到一行用员工id作为索引来传送数据的代码,双击这行代码就可以出现value的值,因为我们想要用员工的账户浏览老板信息,而大多数企业公司里老板的工资应该是最高的,所以我们就把其中的value值由101改为101 or 1=1 order by salary desc --,这样老板的信息就会被排到第一个让我们看到。
![](https://images2018.cnblogs.com/blog/1071529/201805/1071529-20180529230816861-842379057.png)

### 10.String SQL Injection

- 构造永真式‘or 1=‘1,输入第一个分号用来闭合原输入语句的前一个分号,而第二个分号用来闭合原输入语句的后一个分号,使这条语句被强行拆分成为两条语句。然后我们就可以看到全部信息了。
![](https://images2018.cnblogs.com/blog/1071529/201805/1071529-20180529230827042-930917038.png)

### 11.Database Backdoors

- 输入语句```101; update employee set salary=8888888```成功将该用户的工资变成8888888,攻击成功:

![](https://images2018.cnblogs.com/blog/1071529/201805/1071529-20180529230846407-2120488470.png)

- 下一步,输入语句

101 or 1=1;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email=‘[email protected]‘ WHERE userid = NEW.userid

```

使得表中一旦添加新用户那么就在用户表里将新用户的邮箱改为我设置的邮箱。

12.Blind Numeric SQL Injection

  • 不得不承认,偷了个懒,直接参考同学的博客得到2364是可用的,输入攻击成功。

原文地址:https://www.cnblogs.com/20155204wh/p/9108500.html

时间: 2024-10-29 03:33:03

20155204《网络对抗》Exp9 Web安全基础实践的相关文章

20145225唐振远《网络对抗》 Web安全基础实践

20145225唐振远<网络对抗>Web安全基础实践 参考博客:20145215 卢肖明 基础问题回答 (1)SQL注入攻击原理,如何防御? SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意SQL命令的目的. 防御:利用输入规则限制进行防御,过滤输入的数据,不允许特殊字符输入. (2)XSS攻击的原理,如何防御? 跨站脚本攻击,允许恶意用户将恶意Script代码注入到网页上,当用户浏览网页时,嵌入其中Web里面的Script代码

20145326蔡馨熤《网络对抗》—— Web安全基础实践

20145326蔡馨熤<网络对抗>-- Web安全基础实践 1.实验后回答问题 (1)SQL注入攻击原理,如何防御. 原理: SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统. 根据相关技术原理,SQL注入可以分为平台层注入和代码层注入.前者由不安全的数据库配置或数据库平台的漏洞所致:后者主要是由于程序员对输入未进行细致地过滤,

20145216史婧瑶《网络对抗》Web安全基础实践

20145216史婧瑶<网络对抗>Web安全基础实践 实验问题回答 (1)SQL注入攻击原理,如何防御 攻击原理: SQL注入攻击指的是通过构建特殊的输入作为参数传入web应用程序,而这些输入大都是SQL语法里的一些组合,程序通过执行SQL语句进而执行攻击者所要的操作.其主要原因是程序没有细致的过滤用户输入的数据,致使非法数据侵入系统. 防御方法: 对输入的数据进行过滤,将常见的sql语句的关键词:select or ' " 等字符进行过滤. 对在数据库中对密码进行加密,验证登陆的时

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

20155326<网络对抗>Web安全基础实践 实验后回答的问题 SQL注入攻击原理,如何防御? 原理:SQL注入攻击指的是在Web应用对后台数据库查询语句处理存在的安全漏洞,通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,由于在设计程序中忽略对可能构成攻击的特殊字符串的检查,所以通过执行SQL语句进而执行攻击者所要的操作,使非法数据侵入系统.后台数据库将其认作正常SQL指令后正常执行,可能实现对后台数据库进行各种操作,甚至造成破坏后台数据库等严重后果.

exp9《网络对抗》web安全基础实践201453331魏澍琛

201453331魏澍琛web安全基础实践 一.实验过程 1.webgoat开启 2.Injection Flaws练习 Command Injection 原网页中没有注入的地方,那就用burpsuite(设置的相关步骤别人的博客写的很详细,不累述了),分析第一个包看他的数据提交的位置,找到后进行命令的注入,成功. 我注入的命令是AccessControlMatrix.help"&&ifconfig",执行了ifconfig命令,鉴于这个可以证明是本人操作,就把他截了

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

20155331<网络对抗> Exp9 Web安全基础 实验过程 WebGoat 在终端中输入java -jar webgoat-container-7.0.1-war-exec.jar开启WebGoat. 打开浏览器,在地址栏输入localhost:8080/WebGoat打开WebGoat,使用默认的账号密码即可登陆. XSS攻击 Phishing with XSS 跨站脚本钓鱼攻击 任意构造用户当前浏览的HTML内容,甚至可以模拟用户当前的操作.这里实验的是一种获取用户名和密码的攻击 在

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

基础问题回答 SQL注入攻击原理,如何防御? 原理:SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,使非法数据侵入系统. 防御: 1.对用户的输入进行校验,可以通过正则表达式,双"-"进行转换等. 2.不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取. 3.不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接. 4.不要把机密信息直

20145317彭垚《网络对抗》Exp9 Web安全基础实践

20145317彭垚<网络对抗>Exp9 Web安全基础实践 基础问题回答 SQL注入攻击原理,如何防御? SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意SQL命令的目的. 对于SQL注入攻击的防范,我觉得主要还是应该从代码上入手: 采用预编译语句集PreparedStatement,它内置了处理SQL注入的能力,只要使用它的setXXX方法传值即可.它的原理就是sql注入只对sql语句的准备(编译)过程有破坏作用,而Prep

20145301赵嘉鑫 《网络对抗》Exp9 Web安全基础实践

20145301赵嘉鑫 <网络对抗>Exp9 Web安全基础实践 实验后回答问题 (1)SQL注入攻击原理,如何防御 SQL注入攻击原理:SQL 是一门 ANSI 的标准计算机语言,用来访问和操作数据库系统.SQL 语句用于取回和更新数据库中的数据.SQL注入是一种通过操作输入来修改后台SQL语句达到代码执行进行攻击目的的技术.通过构建特殊的输入作为参数传入web应用程序,通过执行SQL语句进执行攻击者所要的操作,其主要原因是程序没有细致的过滤用户输入的数据,致使非法数据侵入系统. SQL注入