20154319 实验九web安全基础实践

 

一、实验内容

(1)webgoat开启;

(2)SQL、XSS、CSRF练习。

二、实验后问题回答

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

答:原理:SQL注入攻击是指攻击者利用Web应用程序无法对用户输入的数据进行合法性判断,通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,从而使非法数据侵入系统。

防御 :对所有用户提交的数据进行验证;更新和打补丁,通常程序和数据库中都存在黑客可以通过SQL注入而利用的漏洞,因此非常有必要使用程序补丁和更新。经常更改应用帐户的密码;使用管理员级别权限的时候不要连接你的数据库。

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

答:原理:XSS又称CSS,全称Cross SiteScript,跨站脚本攻击,是Web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式,所以容易被忽略其危害性。通过在网站接受正常文本输入的地方,输入Javascript脚本,用户的浏览器因为没有办法知道这段脚本是不可信的,所以依然会执行它。

防御:千万不要引入任何不可信的第三方JavaScript到页面里,一旦引入了,这些脚本就能够操纵你的HTML页面,窃取敏感信息或者发起钓鱼攻击等等;传统XSS防御多采用特征匹配方式,在所有提交的信息中都进行匹配检查。

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

原理:CSRF(Cross site request forgery),即跨站请求伪造,借用用户的身份,向web server发送请求,因为该请求不是用户本意,所以称为“跨站请求伪造”。

CSRF一般的攻击过程是,攻击者向目标网站注入一个恶意的CSRF攻击URL地址(跨站url),当用户访问某特定网页时,如果用户点击了该URL,那么攻击就触发了,我们可以在该恶意的url对应的网页中,利用 <img src="" /> 来向目标网站发生一个get请求,该请求会携带cookie信息,所以也就借用了用户的身份,也就是伪造了一个请求,该请求可以是目标网站中的用户有权限访问的任意请求。也可以使用javascript构造一个提交表单的post请求。

防御: 使用验证码,每一个重要的post提交页面,使用一个验证码,因为第三方网站是无法获得验证码的;使用token每一个网页包含一个web server产生的token, 提交时,也将该token提交到服务器,服务器进行判断,如果token不对,就判定是CSRF攻击。

三、实践过程

(一)webgoat开启

1.在kali端输入 java -jar webgoat-container-7.0.1-war-exec.jar ,开启webgoat:

 

在一段不长的等待之后,看到下面这个提示,就可以进行下一步了

2.在kali的浏览器中输入: localhost:8080/WebGoat  打开网页,然后使用默认用户名和密码进入,一般是都是WebGoat

 

(二)SQL练习

一、String SQL Injection(SQL字符串注入)

题目解读:

 

这个表单允许用户查看他们的信用卡号码。尝试注入一个SQL语句,能显示所有的信用卡号。

 

根据提示,先输入Smith,发现Smith出现在语句中的两个单引号之间。(在html里面就可以看到是用了id=102来识别选择的用户)

为了达到目的,让网页代码中的WHERE语句失效即可,通过上次实验中得到的知识,构造一个永真式 'or 1=1 就可以实现,成功得到了全部的信用卡号。

 

 

二、Database Backdoors(数据库后门)

题目解读:

 

根据提示先查看我的账户号码101,更新我的薪水为5000。

在本来应该直接输入user id=101的地方,输入如下SQL语句: 101; update employee set salary=5000 ,注入到数据库中,更新数据

提交,已经更新了。

 

第2步:使用字符串SQL注入,注入后门,创建新用户的时候会自动修改邮箱为设置的邮箱地址:john@hackme.com。

(因为当前的基础DB不支持触发器,所以实际上不会执行任何操作。)

注入语句 101; CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='john@hackme.com'WHEREuserid = NEW.userid 

语句是先输入了正常的101的ID,然后创建了一个触发器,当插入新的职员的时候设置邮箱地址,通过邮箱实现后门。

 

 

三、Log Spoofing(日志欺骗)

题目解读:

 

利用换行符伪造一个假的日志信息,登陆欺骗。使得用户名为“admin”的用户,在日志中显示“成功登录”。

在User Name文本框中输入 4319%0d%0aLogin Succeeded for username: admin ,其中%0d是回车,%0a是换行符,用两个符号来伪造成假日志信息,然后后面的语句就可以正常执行。

在灰色日志框中,有错误的uesrname为4319的日志信息,但是同时有成功登录的用户名为admin的日志信息,说明语句中4319后面的信息成功写到了日志中。

 

四、LAB:SQL Injection    Stage 1 String SQL Injection

题目解读:使用字符串SQL注入,在没有正确密码的情况下登录BOSS账号。

(1) 以用户Neville登录,按照之前的想法,在密码栏中注入永真式 ' or 1=1 -- ,但是登录失败,因为密码输到第八位就输不进去了。

(2) 查看网页源码,发现输入框对输入的字符长度进行了限制,最多只允许输入8个字符,于是修改代码,将长度限制改为30.

                            

(3) 再重新使用永真式登录,登录成功。

 

 

五、Stage 3Numeric SQL Injection

题目要求:通过注入语句,浏览到原本无法浏览的信息。通过一个普通员工的账户larry,浏览其BOSS的账户信息。

(1) 先用上一题的办法登录Larry的账号。在密码框里输入 ' or 1=1 -- ,登录后点击ViewProfile浏览员工的信息,发现我们只能看见Larry一个人的工资信息。

 

 

(2) 在网页代码中分析一下ViewProfile按钮,发现这个地方是以员工ID(Larry的ID是101)作为索引传递参数的。而要实现通过一个普通员工就能来浏览老板账户信息,则需要永真式加入都ID中。

则把其中的Larry的代码中的value值改为 101 or 1=1 order by salary desc -- ,这样在查看Larry时老板的信息也会显示。

(3)可以看到是welcome back Larry的,说明是Larry的账户,但是首先显示的是Nevile,说明是成功查看到老板的了。 

 

 

(二)XSS练习

六、Phishing with XSS(跨站脚本钓鱼攻击)

题目解读:

翻译有点垃圾,不过也就是在搜索框中直接输入要进行xss攻击的代码

(1) 编写前端代码并在输入框中注入这段前端代码。(代码是参考的学姐学长的)

 

将上面的代码输入到搜索框中

 

(2) 点击搜索,就会在界面上出现一个要求输入用户名密码的表单,这个时候用户输入了用户名和密码,就会传到之前代码中的网址里面。

 

 

(3) 点击登录,WebGoat会将刚刚输入的用户名和密码在提示框中显示,用户名和密码也就泄露了。

 

 

(4) 攻击成功

 

 

七、Stored XSS Attacks(存储型XSS攻击)

题目解读:

 

就是可以在发帖子的时候,创建非法的消息内容,可以导致其他用户访问时出现的不是正常执行的内容,而是我们的写的内容。

(1)   输入标题hello,然后在message中输入一串代码: <script>alert("i am 4319");</script>  

(2)   再次点击刚刚创建的标题,成功弹出窗口,攻击成功。

 

 

八、Reflected XSS Attacks

题目解读:

 

也就是输入错误的用户信息后,服务器检验输入有误,会返回错误页面并将错误内容展示出来

输入代码 <script>alert("4319");</script> ,就会弹出对话框:

 

(三)CSRF练习

九、Cross Site Request Forgery (CSRF)

题目解读:

 

通过有的网页,填写邮件的方式伪造一个转账请求。

(1) 查看自己电脑的Screen和menu的值:

 

(2)输入命令 <iframe src="attack?Screen=scr&menu=menu&transferFunds=4319"></iframe> 

(3)打开刚刚写的邮件,可以看到:

 

也就是转账成功了

十、CSRF Prompt By-Pass

题目解读:与CSRF课程类似,您的目标是向包含多个恶意请求的新闻组发送电子邮件:第一个转移资金,第二个请求确认第一个请求被触发的提示。URL应该指向这个CSRF提示的攻击servlet,通过 CSRF-prompt-by-pass的屏幕、菜单参数和一个额外的参数“转账金额”,它具有一个数字值,比如“5000”来启动一个传输,一个字符串值“确认”完成它。您可以从右边的插图复制该课程的参数,创建“攻击”格式的URL。屏幕= xxx和菜单= yyy和转移资金= ZZZ”。无论谁收到这封电子邮件,恰巧在那时被认证,他的资金将被转移。

 

也就是说利用CSRF进行冒名操作转账,不过这次包括了两个请求,一是转账请求,二是确认转账成功请求,即需要额外传递两个参数给服务器,用户认证了之后钱就被传出去了

(1)查看Screen和menu的值

 

(2)直接在message中写入攻击代码:

<iframesrc="attack?Screen=scr&menu=menu&transferFunds=5000"></iframe>
<iframesrc="attack?Screen=scr&menu=menu&transferFunds=CONFIRM"></iframe>

 

(3)点击了CONFIRM按钮,成功转出去5000:

 

 

 

完成列表:

                         

 

四、实验体会

这是最后一个实验了,我一共做了十个小实验,除此之外还尝试了另外两个,只不过到发博客之前都没有成功,一个是显示天气的,一个是转账金额的,之后再尝试一波吧。这次的实验,让我初步了解了一下三种攻击(SQL、XSS、CSRF)是怎么实现的,三种不同的攻击都有自己的特点吧,感觉在平时上网中要是遇到的攻击,我可能会上当好多次,莫名其妙的邮件或者是在欺骗下输入用户名密码什么的,看来还是谨慎一点啦。

 

posted on 2018-05-22 20:01  154319张武璐  阅读(667)  评论(0编辑  收藏

导航