20145236《网络对抗》Exp9 web安全基础实践
20145236《网络对抗》Exp9 web安全基础实践
一、基础问题回答:
- SQL注入攻击原理,如何防御
- SQL Injection:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
- 利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
- 对用户的输入进行校验,可以通过正则表达式,或限制长度,对单引号和双"-"进行转换等。应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装,把异常信息存放在独立的表中。
- XSS攻击的原理,如何防御
- XSS(cross-site scripting跨域脚本攻击)攻击是最常见的Web攻击,其重点是“跨域”和“客户端执行”。有人将XSS攻击分为三种,分别是:Reflected XSS(基于反射的XSS攻击)、 Stored XSS(基于存储的XSS攻击)、 DOM-based or local XSS(基于DOM或本地的XSS攻击)
- 过程 :攻击者发现XSS漏洞——构造代码——发送给受害人——受害人打开——攻击者获取受害人的cookie——完成攻击
- 预防措施:
- 反射型:前端在显示服务端数据时候,不仅是标签内容需要过滤、转义,就连属性值也都可能需要。 后端接收请求时,验证请求是否为攻击请求,攻击则屏蔽。
- 存储型: 首要是服务端要进行过滤,因为前端的校验可以被绕过。当服务端不校验时候,前端要以各种方式过滤里面可能的恶意脚本,例如script标签,将特殊字符转换成HTML编码。
- CSRF攻击原理,如何防御
- CSRF(Cross-site request forgery)跨站请求伪造,由于目标站无token/referer限制,导致攻击者可以用户的身份完成操作达到各种目的。根据HTTP请求方式,CSRF利用方式可分为两种, GET类型的CSRF和post类型的CSRF
- 过程:攻击者发现CSRF漏洞——构造代码——发送给受害人——受害人打开——受害人执行代码——完成攻击
- 目前主流的做法是使用Token抵御CSRF攻击
二、实践过程记录
开启webgoat
- 在在终端中输入
java -jar webgoat-container-7.0.1-war-exec.jar开启webgoat,直到出现INFO: Starting ProtocolHandler ["http-bio-8080"] - 打开浏览器,在浏览器中输入
localhost:8080/WebGoat进入webgoat。(注意"WebGoat"大小写敏感),进入webgoat(用户名和密码默认便可)
(一)SQL注入
Numeric SQL Injection
- 这一步中用到了burpsuite做代理。
- 该题并没有文本框让我们直接进行输入操作,我们只能通过滑动文本框选择地点,sql语句的生成代码可能是写在web页面的源码中,也可能是在后台服务中进行,但是无论是哪一种,表单都需要将搜集到的信息写进数据包中通过网络传输给后台,这就给了我们篡改的机会
- 我们先随便选择一个地点并进行查询,根据其反馈的sql语句来看,我们需要修改的就是
station部分,之后我们就需要用到另一个工具burp-suite,通过将burp-suite设置浏览器的代理服务器,作为中间服务器,这样我们就可以截获从浏览器中发送出去的所有数据包,并将其中内容修改成我们想要的样子 - 打开
burp-suite在proxy的options选项中添加新的代理(默认为8080,不过被apache2占用了) - 修改了浏览器的代理服务器之后,随便选择一个城市就会发现
burp-suite中已经抓到了我们刚刚发送出去的数据包
Log Spoofing
- 题意是要我们使用管理员admin身份完成登录,其实就只是要根本的目的是将管理员admin登录成功这一条记录写进日志中
- 首先我们进行尝试,无论我们输入什么username,日志都显示登录失败
- 这次我尝试对输入的username做出一些改变输入guest ok来查看反馈结果
- 这样我们就有一个思路如果我们输入任意用户名之后,接上我们想要写进日志里的记录是不是就达到了我们的目的,于是我们在考虑换行符的编码的情况下可以这样构造这样一条语句
guest%0aLogin Succeeded for username:admin最后结果显示欺骗成功
String SQL Injection
- 通过输入查询的语句使得整张表得以显示,在其中输入
' or 1=1;-- - 此时注入的SQL语句为
SELECT * FROM user_data WHERE last_name = '' or 1=1;--',即查询表中所有信息
Stage 3 Numeric SQL Injection
- 这个实验要求我们以larry的身份登录,实现对Neville的profile信息的浏览,首先跟上一次实验的方式一样登陆上去,这样点击
ViewProfile是无效的 - 在代理中将行为从
Login改为ViewProfile - 将ID改为Neville的ID,并让将其置于首位
112 or 1=1 order by salary desc-- - 成功看见了Neville的信息。
Blind Numeric SQL Injection
- 按照题目的意思是,我们可以验证已经输入的数字是否合法,例如
101,因此我们可以构造条件1 AND 条件2,观察最终结果是否合法来判断条件2是否为真 - 例如我们可以构造
101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 5236 );来验证其设定的pin值是否大于5236,按照这个原理,我们可以不断的缩小所要搜寻的pin的值,直到找到该pin值 - 不过我不是很理解的是,为何不通过直接输入数字观察结果为valid或者invalid来判断该数字大于还是小于pin值,通过二分法同样可以一步一步逼近设定的pin值,并不知道为何还需要注入
Blind String SQL Injection
- 基本思路类似于之前的盲数字注入,只是猜测的对象变成了字符所对应的ascii码,从根本上来说其实还是一种对数字的猜测
- 构造
101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), x, y) = 'h' );来测试出我们需要的字符串到底是啥 - 因为这个测试次数较之上一个实验要多,所以完全依靠手工输入的工作量太大,使用
burp-suite中的intruder中的payloads来进行爆破,一一测试所有可能性
(二)XSS攻击
Phishing with XSS 跨站脚本钓鱼攻击
- 在菜单栏中依次选择
Cross-site scripting,phishing with xss,这个攻击类似于上一个练习的一个进阶版,不仅能插入script标签还能插入其他标签构成完整的web代码(如下)
</form>
<script>
function hello(){
alert("hello,5319");
}
</script>
<form>
<br><br><h2>please input your stu_number and pwd</h2><br><br>
stu_number:
<br><input type="text" name="stunumber"><br>
password:
<br><input type="password" name="pwd"><br>
<input type="submit" name="submit" value="login" onclick="hello()">
</form>
- 伪造网页,把获取的用户名和密码传给
WebGoat/capture name="login" value="login" onclick="hack()点击login后,执行hack(),获取用户名密码,并弹窗Had this been a real attack... Your credentials were just stolen.User Name ="你的用户名 " Password = "你的密码"
Stored XSS Attacks 存储型XSS攻击
- 基于存储的xss攻击,把攻击者的数据存储在服务器端,攻击将伴随着攻击数据一直存在。
- 在Message里输入
<script>alert("It's 5236!");</script> - .出现超链接,点击会弹出:
It's 5236! - 可以利用填入的脚本来盗取信息。
- 攻击代码存储在服务器端,每次加载就会执行。
Reflected XSS Attacks
- 基于反射的xss攻击
- 在输入框中注入
<SCRIPT>alert(document.cookie);</SCRIPT>得到cookies - 也可以输入指定的URL值,这里的效果为弹出方框
http://www.targetserver.com/search.asp?input=<script>alert("hello20145236");</script>
(三)XSCF攻击
CSRF(Cross Site Request Forgery)
- 在message里输入
<img src='attack?Screen=280&menu=900&transferFunds=100000' width='1' height='1'>这其中,280是我网页的scr,900是我的网页的menu,100000是转钱数额 - 点击
submit,方才的代码就会被执行
CSRF Prompt By-Pass
- 与上个实验类似,同样是通过邮件的方式进行恶意请求,这里添加了请求确认的要求,所以需要两个iframe模块,输入如下:
<iframe src="attack?Screen=自己的src&menu=自己的menu&transferFunds=5000"> </iframe>
<iframe src="attack?Screen=自己的src&menu=自己的menu&transferFunds=CONFIRM"> </iframe>
三、实验总结与体会
这一次的实验用到了webgoat,在其中做了关于SQL注入、XSS攻击和CSRF攻击,由于是全英文的网页所以对英文能力也有一定的考验==,在上一次的web基础实验中我对SQL注入、XSS攻击的理解只是表面的理解,实现的功能也很简单,这些知识点在这一次的实验中得到了很直观的学习,并且这一次的实验也警示我们,做网站编程的时候一定要对用户输入的信息做一个合法性的判断,不然会非常危险。
20145236《网络对抗》Exp9 web安全基础实践的更多相关文章
- 20155211 网络对抗 Exp9 Web安全基础实践
20155211 网络对抗 Exp9 Web安全基础实践 基础问题回答 SQL注入攻击原理,如何防御? 原理:SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语 ...
- 20155326《网络对抗》Web安全基础实践
20155326<网络对抗>Web安全基础实践 实验后回答的问题 SQL注入攻击原理,如何防御? 原理:SQL注入攻击指的是在Web应用对后台数据库查询语句处理存在的安全漏洞,通过构建特殊 ...
- 20145308 《网络对抗》Web安全基础实践 学习总结
20145308 <网络对抗> Web安全基础实践 学习总结 实验内容 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 基础问题回答 (1)SQL注入攻击原理, ...
- 20145326蔡馨熤《网络对抗》—— Web安全基础实践
20145326蔡馨熤<网络对抗>—— Web安全基础实践 1.实验后回答问题 (1)SQL注入攻击原理,如何防御. 原理: SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程 ...
- 20155206《网络对抗》Web安全基础实践
20155206<网络对抗>Web安全基础实践 实验后问题回答 (1)SQL注入攻击原理,如何防御 攻击原理:SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查 ...
- 20155305《网络对抗》Web安全基础实践
20155305<网络对抗>Web安全基础实践 基础问题回答 SQL注入攻击原理,如何防御? 原理:SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL ...
- 20155307《网络对抗》Web安全基础实践
20155307<网络对抗>Web安全基础实践 基础问题回答 SQL注入攻击原理,如何防御? 原理:SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL ...
- 20155311《网络对抗》Web安全基础实践
20155311<网络对抗>Web安全基础实践 基础问题回答 SQL注入攻击原理,如何防御? 原理:SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL ...
- 20155338《网络对抗》Web安全基础实践
20155338<网络对抗>Web安全基础实践 实验过程 WebGoat 在终端中输入 java -jar webgoat-container-7.0.1-war-exec.jar 开启W ...
- 20145216史婧瑶《网络对抗》Web安全基础实践
20145216史婧瑶<网络对抗>Web安全基础实践 实验问题回答 (1)SQL注入攻击原理,如何防御 攻击原理: SQL注入攻击指的是通过构建特殊的输入作为参数传入web应用程序,而这些 ...
随机推荐
- jquery中innerwidth,outerwidth,outerwidth和width的区别
在jQuery中,width()方法用于获得元素宽度: innerWidth()方法用于获得包括内边界(padding)的元素宽度, outerWidth()方法用于获得包括内边界(padding)和 ...
- HTTP 错误 500 调用loadlibraryex失败
HTTP 错误 500.0 - Internal Server Error 调用 LoadLibraryEx 失败,在 ISAPI 筛选器 C:\Windows\Microsoft.NET\Frame ...
- Linux常用基本命令:三剑客命令之-awk格式化动作
我们之前说过,awk是一个超强的文本格式化工具,而本文的printf动作就是经常用来做格式化文本的.使用方式跟c语言的printf差不多. 1,printf默认不会回车换行 ghostwu@dev:~ ...
- python爬虫入门---第二篇:获取2019年中国大学排名
我们需要爬取的网站:最好大学网 我们需要爬取的内容即为该网页中的表格部分: 该部分的html关键代码为: 其中整个表的标签为<tbody>标签,每行的标签为<tr>标签,每行中 ...
- git命令详解( 三 )
此篇为git命令的第三篇 目录 git Pull 模拟团队合作 Git Pull 在上一篇的结尾我们已经知道了如何用 git fetch 获取远程的数据, 现在我们学习如何将这些变化更新到我们的工作当 ...
- .Net Core(二)EFCore
EFCore与之前的EF基本类似,区别在于配置的时候有一些差异:也取消了DB First和Model First,仅保留广泛使用的Code First模式:也不再支持LazyLoad.这里就感受一下 ...
- Kotlin入门(12)类的概貌与构造
上一篇文章提到泛型函数appendString是在类外面定义,这不免使人疑惑,类里面又该怎样定义成员函数呢?为解答这个疑问,接下来的几篇文章将好好描述一下Kotlin如何操作类及其对象,本篇文章先对类 ...
- (网页)Http状态码大全(200、404、500等)(转CSDN)
当我们从客户端向服务器发送请求时 服务器向我们返回状态码 状态码就是告诉我们服务器响应的状态 通过它,我们就可以知道当前请求是成功了还是出现了什么问题 状态码是由3位数字和原因短语组成的(比如最常见的 ...
- python:序列化与数据持久化
数据持久化的方式有: 1.普通文件无格式写入:将数据直接写入到文件中 2.普通序列化写入:json,pickle 3.DBM方式:shelve,dbm 相关内容: json pickle shelve ...
- MongoDB设置
添加mongodb用户组 groupadd mongodb 添加mongodb用户 useradd mongodb -g mongodb 将mongodb启动项目追加入rc.local保证mongod ...