20155206《网络对抗》Web安全基础实践
20155206《网络对抗》Web安全基础实践
实验后问题回答
(1)SQL注入攻击原理,如何防御
攻击原理:SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意SQL命令的目的
防御手段:利用输入规则限制进行防御,不允许特殊字符输入
(2)XSS攻击的原理,如何防御
攻击原理:跨站脚本攻击,允许恶意用户将恶意Script代码注入到网页上,当用户浏览网页时,嵌入其中Web里面的Script代码会被执行,从而被攻击,其他用户在观看网页时就会受到影响。XSS攻击的主要目的是,想办法获取目标攻击网站的cookie,因为有了cookie相当于有了seesion,有了这些信息就可以在任意能接进互联网的pc登陆该网站,并以其他人的身份登陆,做一些破坏。
防御手段:过滤特征字符,限制用户输入,拒绝网页的可执行代码输入。
(3)CSRF攻击原理,如何防御
攻击原理:CSRF跨站请求伪造,也被称为“oneclickattack”或者sessionriding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用,通过伪装来自受信任用户的请求来利用受信任的网站。是一种依赖web浏览器的、被混淆过的代理人攻击。
防御手段:通过referer、token或者验证码来检测用户提交在form中包含秘密信息、用户指定的代号作为cookie之外的验证、定期清理保存的cookie
实验过程
、 在终端中输入java -jar webgoat-container-7.0.1-war-exec.jar
开启WebGoat
。
、打开浏览器,在地址栏输入localhost:8080/WebGoat
打开WebGoat
,选择默认账号、密码即可登陆成功。
XSS攻击
1、Phishing with XSS 跨站脚本钓鱼攻击
、跨站脚本攻击最大的魅力是通过HTML注入劫持用户的浏览器,任意构造用户当前浏览的HTML内容,甚至可以模拟用户当前的操作。实验的是一种获取用户名和密码的攻击
、 在webgoat找到xss攻击打开Phishing with XSS
、 编写一个包含用户名、密码的前端代码:
`
` 、 将这段代码输入到输入框中 ![](https://images2018.cnblogs.com/blog/1072276/201805/1072276-20180529101521499-164075335.png) 、 点击`search`出现如下登录框: ![](https://images2018.cnblogs.com/blog/1072276/201805/1072276-20180529101548402-32608387.png) 、 在登录框中输入用户名、密码(随意输入,目的是获取输入的信息): ![](https://images2018.cnblogs.com/blog/1072276/201805/1072276-20180529101637366-202241245.png) 、 点击登录后跳出弹框,其中包含用户输入的用户名、密码。攻击成功!
2、Stored XSS Attacks 存储型XSS攻击
、 存储型XSS的攻击基本流程:
a. 比如在某个论坛提供留言板功能,黑客在留言板内插入恶意的html或者Javascript代码,并且提交。
b. 网站后台程序将留言内容存储在数据中
c. 然后一个用户也访问这个论坛,并刷新了留言板,这时网站后台从数据库中读取了之前黑客的留言内容,并且直接插入在html页面中,这就可能导致了:黑客留言的脚本本身应该作为内容显示在留言板的,然后此时可能黑客的留言脚本被浏览器解释执行了。
那么黑客的脚本可以用来做哪些坏事儿呢?比如:
通过javascript获取用户的cookie,根据这个cookie窃取用户信息
重定向网站到一个钓鱼网站
重新更改页面内容,假装让客户输入用户名,密码,然后提交到黑客的服务器
、 打开Stored XSS Attacks
、 在Message
框中输入<script>alert("I am 20155206");</script>
、 点击提交后弹出对话框,显示I am 20155206
。攻击成功!
3、Reflected XSS Attacks 反射型XSS攻击
、 我们在访问一个网页的时候,在URL后面加上参数,服务器根据请求的参数值构造不同的HTML返回。
、 value可能出现在返回的HTML(可能是JS,HTML某元素的内容或者属性)中,
、 如果将value改成可以在浏览器中被解释执行的东西,就形成了反射型XSS.
、 有人会问,我怎么可能自己去把value改成可以执行的恶意代码呢?这不是自己坑自己吗.
、 但是一种情况是别人可能修改这个value值,然后将这个恶意的URL发送给你,或者别人,当URL地址被打开时,
、 特有的恶意代码参数被HTML解析,执行.它的特点是非持久化,必须用户点击带有特定参数的链接才能引起
、 打开Reflected XSS Attacks
、 在code
框中输入<script>alert("I am 20155206");</script>
、点击Purchase
出现对话框,攻击成功!
CSRF攻击
跨站请求伪造,尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。
4、Cross Site Request Forgery(CSRF)
、查看页面右边Parameters
中的src
和menu
值。
、在title
框中输入学号,message
框中输入代码:<img src='attack?Screen=src值&menu=menu值&transferFunds=转账数额' width='1' height='1'>
、提交后生成一个链接20155206
:
、点击学号名即可查看用户操作的信息,攻击成功
5、CSRF Prompt By-Pass
、 查看页面右边Parameters
中的src
和menu
值,并在title
框中输入学号,message
框中输入代码:
`
` ![](https://images2018.cnblogs.com/blog/1072276/201805/1072276-20180529102906309-1921046500.png) 、提交后生成一个链接 、 点击学号名即可查看用户操作的信息,攻击成功 ![](https://images2018.cnblogs.com/blog/1072276/201805/1072276-20180529102956234-485510094.png)SQL注入攻击
SQL注入攻击是黑客对数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。
6、String SQL Injection
、我们可以通过控制在输入框中输入的字符串,达到控制select语句的目的。
、 输入'or 1='1
,语句就变成SELECT * FROM user_data WHERE last_name = ''or 1='1'
,这句的意思就是查询lastname='' OR(或者)1='1'
,这里的1='1'
永远为真,所以成功通过。
7、Log Spoofing
、 利用日志的格式,使用换行等字符,欺骗管理员:Use CR (%0d) and LF (%0a) for a new line。
、 比如输入zf%0d%0aLogin Succeeded for username: admin
8、Numeric SQL Injection
、题目大意是这个表单允许使用者看到天气数据,利用SQL注入使得可以看见所有数据
、和之前的实验类似,只要加上一个1=1
这种永真式即可达到我们的目的
、使用inspect Element
对源代码进行修改,在任意一个值比如101
旁边加上or 1=1
;
、 使用FIERFOX的inspect Element
对其修改,可以右键Columbia
选择inspect Element
直接对这段代码修改
、 修改后成功
9、.Stage 1:String SQL Injection
、题目要求使用字符串SQL注入在没有正确密码的情况下登录账号boss
、用老套路,以用户Neville
登录,在密码栏中输入' or 1=1 --
进行SQL注入,发现登录失败
、查看了一下网页源码,发现输入框对输入的字符长度进行了限制,最多只允许输入8个字符
、对字符长度进行修改
、重新登录,登录成功
10、XPATH Injection
、题目要求是使用帐户Mik/Test123
,目标是试着去查看其他员工的数据。
、使用一个普通的用户名和密码,XPath会起作用,但是攻击者可能会发送一个坏用户名和密码,并在不知道用户名或密码的情况下,选择一个XML节点,如下所示:
Username: zf' or 1=1 or 'a'='a Password: zf
11、Blind String SQL Injection
、使用盲注进行爆破,在“Enter your Account Number”
输入
101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='5206520652065206'), 1, 1) = 'h' );
、根据返回的提示来判断name的范围,直至返回成功,然后把Jill输入表单,提交,如下图所示: