20154313 刘文亨 EXP9

20154313实验九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的浏览器中输入: localho

 

st: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 4313");</script>  
(2)   再次点击刚刚创建的标题,成功弹出窗口,攻击成功。
 
 

 


八、Reflected XSS Attacks
题目解读:
 

 


也就是输入错误的用户信息后,服务器检验输入有误,会返回错误页面并将错误内容展示出来
输入代码 <script>alert("4313");</script> ,就会弹出对话框:
 

 

(三)CSRF练习
九、Cross Site Request Forgery (CSRF)
题目解读:
 

 


通过有的网页,填写邮件的方式伪造一个转账请求。
(1) 查看自己电脑的Screen和menu的值:
 

 


(2)输入命令 <iframe src="attack?Screen=scr&menu=menu&transferFunds=4313"></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:
 
 
 

 


完成列表:
                         
 
四、实验体会
这次最后一个实验,总体来说比较简单,做了这么多个实验,学的比较乱,懂得不是很多,希望再梳理梳理,并且以后有机会好好巩固。

posted @ 2018-06-07 19:23  20154313_刘文亨  阅读(82)  评论(0编辑  收藏