20155338《网络对抗》Web安全基础实践
实验过程
WebGoat
在终端中输入 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(第一个)
将这段代码输入到输入框中,点击 search
出现如下登录框:
在登录框中输入用户名、密码:
点击登录后跳出弹框,其中包含用户输入的用户名、密码。攻击成功!
2、Stored XSS Attacks 存储型XSS攻击
打开 Stored XSS Attacks(xxs攻击第二个)
在Message框中输入
点击提交后弹出对话框,显示I am 20155338。攻击成功!
3、Reflected XSS Attacks 反射型XSS攻击
打开xss的第三个攻击,在code框中输入
点击Purchase出现对话框,显示I am 20155338。攻击成功!
CSRF攻击
1、Cross Site Request Forgery(CSRF)
查看页面右边Parameters中的 src
和 menu
值。
在title框中输入学号,message框中输入代码:
提交后生成一个链接20155338:
点击学号名即可查看用户操作的信息,攻击成功
2、CSRF Prompt By-Pass
查看页面右边Parameters中的src和menu值,并在title框中输入学号,message框中输入代码:
提交后生成一个链接20155338:
点击学号名即可查看用户操作的信息,攻击成功
SQL注入攻击
1、Numeric SQL Injection
我们看到这一题的选择框也是一个下拉框,在当前网页上无法修改,于是,我们使用 BurpSuite
抓包修改.
打开BurpSuite,在BurpSuite中依次选择 Proxy->Options->Add
添加一个端口,将绑定的端口设为5338,点击确认后会在Options下增加一行,勾选新形成的这一行:
点击浏览器右上方的更多选项卡,选择 preference
在页面左侧选择 advanced
,选择 network
页标签,在 connection
那一行选择 settings…
,在弹出的窗口中设置代理服务器和端口.
设置好代理后回到题目页面,点击Go,然后进入BurpSuite中依次选择 Proxy->Intercept
,可以看到已经抓到了包:
右键选择 send to repeater
,进入repeater页标签,选择Params将其中station的值改为101 or 1=1,点击Go运行,查看右侧代码可以看到包中的SQL语句为
SELECT * FROM weather_data WHERE station = 101 or 1=1
回到Proxy中点击 Intercept is on
对剩下的包不作处理,回到火狐发现已经成功。
2、Command Injection
我们看到这一题的选择框是一个下拉框,在当前网页上无法修改,于是,我们使用 BurpSuite
抓包修改
题目页面点击 view
,然后进入BurpSuite中,在 repeater
页标签的Params选项中先运行一次,查看数据都提交的位置:
然后修改HelpFile的值为 AccessControlMatrix.help"&&ifconfig
",其中的双引号是为了封闭原语句中的双引号,&&在命令行中是执行另外一条语句的意思,点击GO发现执行了ifconfig语句
回到题目发现显示破解成功。
3、Log Spoofing
在User Name文本框中输入 %0d%0aLogin succeeded !admin
达到欺骗登录效果,破解成功:
4、String SQL Injection
在输入框中输入Smith进行尝试,观察下方形成的输入语句,可以看到输入的Smith在两个单引号之间:
构造永真式 'or 1='1
,第一个分号用来闭合原输入语句的前一个分号,而第二个分号用来闭合原输入语句的后一个分号,使这条语句被强行拆分成为两条语句。
这样一来,攻击就成功了,可以显示所有用户的信息了。
基础问题回答
原理:
SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,使非法数据侵入系统。
防御:
1.对用户的输入进行校验,可以通过正则表达式,双"-"进行转换等。
2.不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
3.不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
原理:
XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码(如,HTML代码和客户端脚本)植入到提供给其它用户使用的页面中,攻击者可以利用XSS漏洞旁路掉访问控制。
防御:
1.特征匹配方式,在所有提交的信息中都进行匹配检查,一般会对“javascript”这个关键字进行检索,一旦发现提交信息中包含“javascript”,就认定为XSS攻击。
2.对所有用户提交内容进行可靠的输入验证,包括对URL、查询关键字、HTTP头、POST数据等,仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交,对其他的一律过滤。
原理:
CSRF跨站请求伪造,也被称为“oneclickattack”或者sessionriding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用,通过伪装来自受信任用户的请求来利用受信任的网站。是一种依赖web浏览器的、被混淆过的代理人攻击。
防御:
1.在form中包含秘密信息、用户指定的代号作为cookie之外的验证。
2.“双提交”cookie。某个授权的cookie在form post之前正被JavaScript代码读取,那么限制跨域规则将被应用。服务器需要在Post请求体或者URL中包含授权cookie的请求,那么这个请求必须来自于受信任的域。
3.用户在浏览其它站点前登出站点或者在浏览器会话结束后清理浏览器的cookie。