20165107 网络对抗技术 Exp9 Web安全基础
实验要求
本实践的目标理解常用网络攻击技术的基本原理,做不少于7个题目,包括(SQL,XSS,CSRF) Webgoat实践下相关实验。
基础问题问答
1、SQL注入攻击原理,如何防御
SQL注入攻击原理:是指通过构建特殊的输入作为参数传入Web应用程序,输入执行SQL语句进而执行攻击者所要的操作。如在用户名、密码登输入框中输入一些‘,--,#等特殊字符,实现引号闭合、注释部分SQL语句,利用永真式实现登录、显示信息等目的。
如何防御: 检查变量数据类型和格式;对无法确定固定格式的变量,进行特殊符号过滤或转义处理;绑定变量,使用预编译语句。
2、XSS攻击的原理,如何防御
XSS攻击的原理:是一种网站应用程序的安全漏洞攻击。攻击者通过往Web页面里插入恶意html标签或者javascript代码,当用户浏览该页或者进行某些操作时,利用用户对原网站的信任,诱骗用户或浏览器执行一些不安全的操作或者向其它网站提交用户的私密信息。
如何防御:表单提交或者url参数传递前,对需要的参数进行过滤;检查用户输入的内容中是否有非法内容。
3、CSRF攻击原理,如何防御
CSRF攻击原理:全称为跨站域请求伪造,核心本质是窃取用户的Session,或者说Cookie,因为目前主流情况Session都是存在Cookie中。攻击者并不关心被害者具体帐号和密码,因为一旦用户进行了登录,Session就是用户的唯一凭证,只要攻击者能够得到Session,就可以伪装成被害者进入服务器。
如何防御: 通过referer、token或者验证码来检测用户提交;避免全站通用的cookie,严格设置cookie的域。
实验步骤
一、WebGoat准备工作
WebGoat是OWASP组织研制出的用于进行web漏洞实验的应用平台,用来说明web应用中存在的安全漏洞。其运行在带有java虚拟机的平台之上,并提供了一系列web安全学习的教程,来指导用户利用这些漏洞进行攻击。
下载jar包:webgoat-container-7.0.1-war-exec.jar
终止占用8080端口的其他进程:
因WebGoat默认使用8080端口,所以开启前先用netstat -tupln | grep 8080查看端口是否被占用,如果被占用,用kill 进程号终止占用8080端口的进程。
普通安装,命令行输入java -jar webgoat-container-7.0.1-war-exec.jar
浏览器转:localhost:8080/WebGoat 直接用guest默认用户名密码登录即可,开始练习。
二、SQL注入攻击
1、命令注入(Command Injection)
概念:命令注入攻击对任何一个以参数驱动的站点来说都是一个严重威胁。这种攻击技术背后的技术方法,简单易学,能造成大范围的损害,危及系统安全。
目标:可以在目标主机上执行任何系统命令。
操作方法:右键点击页面,选择inspect Element审查网页元素对源代码进行修改,在复选框中任意一栏的代码,右键单击后,选择Edit At Html进行修改,添加"& netstat -an & ipconfig"
点击view
,可以看到执行指令后的网络端口使用情况和IP地址,攻击成功。
2.数字型注入(Numeric SQL Injection)
概念:注入数字型数据(如:永真式)达到注入的效果。
目标:该例子通过注入SQL字符串查看所有的天气数据。
操作方法:
右键点击页面,选择inspect Element
审查网页元素对源代码进行修改,在选中的城市编号Value值中添加or 1=1
显示所有城市的天气情况说明攻击成功。
3.日志欺骗(Log Spoofing)
概念:通过在日志文件中插入脚本实现欺骗。
目标:灰色区域代表在 Web 服务器的日志中的记录的内容,我们的目的是使用户名为“admin”的用户在日志中显示成功登录。
操作方法:
在左侧点击Injection Flaws
-> Log Spoofing
,我们就之前打开WebGoat时表格上显示的用户webgoat
进行攻击。在User Name
中填入webgoat%0d%0aLogin Succeeded for username: admin
,即利用回车%0D
和空格%0A
让其在日志中两行显示。之后我们输入密码,点击Login
,可以看到webgoat
在Login Fail
那行中显示,我们自己添加的语句在下一行中显示。
4.SQL 注入(LAB: SQL Injection)
Stage 1: 字符串型注入(Stage 1: String SQL Injection)
操作方法:右键点击页面,选择inspect Element
审查网页元素对源代码进行修改,将password密码框的最大长度限制改为18。
Stage2:以用户Neville(admit)登录,输入密码hello‘ or ‘1‘ = ‘1
,得到所有人员列表,攻击成功。
5.字符串注入(String SQL Injection)
概念:通过注入字符串绕过认证
目标:下面的表格,允许用户查看他们的信用卡号码。尝试通过 SQL 注入将所有信用卡信息显示出来。尝试的用户名是“Smith”。
操作方法:输入查询的用户名Smith‘ or 1=1--(Smith 和1=1都成了查询的条件,而1=1是恒等式,因此能查询到表里面的所有数据),得到所有用户的信用卡号码,攻击成功。
6.数据库后门(Database Backdoors)
首先验证一下语句,在user ID输入:101; update employee set salary=5000,可以看到更新的数据。
进行注入101; CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email=‘[email protected]‘WHEREuserid = NEW.userid
并创建后门。
7、字符串型盲注入(Blind String SQL Injection)
目标:找到 pins 表中 cc_number 字段值为 4321432143214321 的记录中 pin 字段的数值。pin 字段类型为 varchar。输入找到的数值并提交,实现本题目。
操作方法:与数字型盲注入类似,只是将注入的数字换为字符串。
例如:输入101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number=‘4321432143214321‘), 1, 1) < ‘M‘ )
;取得 pin 字段数值的第一个字母,并判断其是否比字母“M”小
SUBSTRING 语法为 SUBSTRING(STRING,START,LENGTH)
使用二分法进行测试,最后得到pin字段。
三、XSS攻击(Cross‐Site Scripting)
1.XSS 钓鱼(Phishing with XSS)
目标:创建一个 form,要求填写用户名和密码。将数据提交到 http://localhost/WebGoat/catche r?PROPERTY=yes&user=catchedUserName&password=catchedPasswordNam
操作方法:
利用XSS可以在已存在的页面中进一步添加元素,包括两部分:
受害人填写一个表格;服务器以读取脚本的形式,将收集到的信息发送给攻击者。
编写一段脚本读取被攻击者在表单上输入的用户名和密码信息,将这些信息发送给捕获这些信息的 WebGoat。
编写一个带用户名和密码输入框的表格
<form name="20165107lyl"> <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>
在Search
框中输入该代码,则在下面出现输入用户名和密码的表单。
接下来,我们编写一段脚本文件,一旦受害者在表单中输入用户名和密码,则信息会传给捕获这些信息的WebGoat。
在Search框中输入该代码,则出现表单。
输入用户名和密码后,我们可以看到服务器返回登录名和密码。
2.存储型XSS攻击(Stored XSS Attacks)
目标:写入非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容
操作方法:在title中任意输入字符,留言板中输入<script>alert("I am 20165107lyl. You‘ve been attacked!!!");</script>。
3. 反射型XSS攻击(Reflected XSS Attacks)
原理:攻击者利用一个脚本创建一个URL,受害者一旦点击它就会受到攻击。
在Enter your three digit access code:
栏中输入脚本<script>alert("Hey! You‘ve been attacked!");</script>
,点击Purchase
,成功显示警告框,内容就是我们在脚本中注入的内容。
四、CRSF攻击
1、跨站请求伪造(CSRF)
写一个URL放进Message框,使其他用户不可见,设置成一个隐藏图片,用户一旦点击就会触发一个CSRF事件;
在Message里输入<img src="http://localhost:8080/WebGoat/attack?Screen=&menu=900&transferFunds=5000" width="1" height="1" />
;
点击该消息,页面就会下载这个消息并显示,就会执行转走用户的存款。
2、绕过 CSRF 确认(CSRF Prompt By-Pass)
message框中输入:
<iframe src="attack?Screen=[scr]menu=[menu]&transferFunds=5000">
</iframe>
<iframe src="attack?Screen=[scr]&menu=[menu]&transferFunds=CONFIRM">
</iframe>
查看消息,看到转账消息。
实验体会
本次实验基于Webgoat完成,实践过程中我对SQL注入、XSS和CSRF有了全新认识和理解。此次实验环节较多,所以我们一定理清实验思路,知道自己目前在做什么操作,每一步的目的是什么,下一步要做什么,最终达到什么样的实验效果,这样才能更好地理解整个攻击过程,从而更好地完成实验任务。
原文地址:https://www.cnblogs.com/3523108059lyl/p/10927140.html