20174323张加欣-Exp9 Web安全基础
1.WebGoat安装
- 下载WebGoat:网址https://github.com/WebGoat/WebGoat/releases/tag/7.0.1
- 在有该文件的条件下,输入命令
java -jar webgoat-container-7.0.1-war-exec.jar,开启WebGoat。
- 运行一段时间之后命令行出现
Starting ProtocolHandler,证明开启成功。
- 打开浏览器访问:
localhost:8080/WebGoat
- 可以发现右侧未出现项目栏,这是需要重新下载jdk。
- 下载jdk:网址https://pan.baidu.com/s/18QGn2Tc2kDNJVflqwfgghA
- 建立目录,将下载的jdk复制过去并解压。
sudo mkdir -p /usr/local/java sudo cp jdk-8u161-linux-x64.tar.gz /usr/local/java cd /usr/local/java sudo tar xzvf jdk-8u91-linux-x64.tar.gz
- 配置环境变量,输入指令:
sudo vim /etc/profile
- 并将以下代码复制到文件结尾:
JAVA_HOME=/usr/local/java/jdk1.8.0_161 PATH=$PATH:$HOME/bin:$JAVA_HOME/bin export JAVA_HOME export PATH
- 通知系统java的位置。
sudo update-alternatives --install "/usr/bin/java" "java" "/usr/local/java/jdk1.8.0_161/bin/java" 1 sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/local/java/jdk1.8.0_161/bin/javac" 1 sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_161/bin/javaws" 1 sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_161/bin/javaws" 1
- 设置默认JDK。
sudo update-alternatives --set java /usr/local/java/jdk1.8.0_161/bin/java sudo update-alternatives --set javac /usr/local/java/jdk1.8.0_161/bin/javac sudo update-alternatives --set javaws /usr/local/java/jdk1.8.0_161/bin/javaws
- 重新载入profile:
source /etc/profile
- 通过
java -version 以及
javac -version即可看到是否安装完成,安装完成后,重启电脑即可。
- 重新打开浏览器,使用管理员账号登录。
2.SQL注入攻击
2.1 数字型SQL注入(Numeric SQL Injection)
- 左侧课程栏选中Injection Flaws ->Numeric SQL Injection ,点击Go!按钮,可查询Columbia的天气情况。
- 在网页中间的下拉框处右键选择Inspect Element
- 之后可以在右侧对网页源代码进行修改,找到名字为
station
的select
元素,在第一项101后面添加" or 1=1 ",修改后点击
Go!
- 查询到了所有城市的天气情况。
2.2 日志欺骗(Log Spoofing)
- 左侧课程栏选中
Injection Flaws ->
Log Spoofing
- 在User Name文本框中填写
zjx%0d%0aLogin Succeeded for username: admin,其中
%0d
是回车,%oa
是换行符,可以让注入信息转行显示。
- 点击登录后,可以看到我们注入的语句在第二行显示出来了。
2.3 字符串型注入(String SQL Injection)
- 左侧课程栏选中
Injection Flaws ->
String SQL Injection
,输入Smith可查询Smith的信用卡信息。
- 现在要设法使得可以查询源码中所有用户的信用卡信息。
- 在User Name文本框中填写
Smith' or 1=1--
- 可以看到绿色小勾,攻击成功。
2.4 数据库后门(Database Backdoors)
- 左侧课程栏选中
Injection Flaws
->Database Backdoors,文本框中输入
101可查询该用户的相关信息。
- 接下来我们尝试用数据库后面对其进行攻击。
- 比如输入语句
101; update employee set salary=8888888
成功将该用户的工资变成8888888,攻击成功。
- 还可以输入
101 or 1=1;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20174323@zjx.com' WHERE userid = NEW.userid
,这个设置可以使表中添加新用户时其邮箱为我设置的假邮箱。
3.XSS攻击
3.1 跨站脚本钓鱼攻击(Phishing with XSS)
- 利用XSS可以在已存在的页面中进一步添加元素,编写一个含有文本框、提交按钮的表单的代码:
- 左侧课程栏选中
Cross-Site Scripting (XSS) ->
Phishing with XSS,在文本框中搜索下列代码,可以看到页面中增加了一个登录的表单。
- 编写一段脚本读取被攻击者在表单上输入的用户名和密码信息,将这些信息发送给捕获这些信息的 WebGoat。
- 将上面两段代码合并搜索,进行登录操作,提交之后可以看到返回了输入的用户名和密码。
3.2 存储型XSS攻击(Stored XSS Attacks)
- TItle文本框输入任意信息 ,在Message文本框中输入
<script>alert('You've been attacked!')</script>
,点击提交后,点击创建的帖子,会弹出一个对话框,说明攻击成功。
3.3 反射型XSS攻击(Reflected XSS Attacks)
- 序列号文本框中输入
<script>alert('You've been attacked!')
,点击购买按钮,会弹出一个对话框,说明攻击成功。
4.CSRF攻击
4.1 Cross Site Request Forgery
- 点击
XSS ->
Cross Site Request Forgery(CSRF)
- 现在需要在文本框中输入一段包含图片的Html代码,链接到一个网站。
- 输入
<img src="http://localhost:8080/WebGoat/attack?Screen= 2078372&menu=900&transferFunds=5000" width="1" height="1" />
- 点击出现的链接,可以发现攻击成功。
4.2 CSRF Prompt By-Pass
- 点击
XSS
-> CSRF Prompt By-Pass - 方法同上,文本框中输入代码:
<iframe src="attack?Screen=1471017872&menu=900&transferFunds=5000"> </iframe> <iframe src="attack?Screen=1471017872&menu=900&transferFunds=CONFIRM"> </iframe>
- 点击出现的链接,可以发现攻击成功。
5.问题回答
5.1 SQL注入攻击原理,如何防御?
- SQL注入:是一种注入攻击,可以执行恶意SQL语句。它通过将任意SQL代码插入数据库查询,使攻击者能够完全控制Web应用程序后面的数据库服务器。攻击者可以使用SQL注入漏洞绕过应用程序安全措施;可以绕过网页或Web应用程序的身份验证和授权,并检索整个SQL数据库的内容;还可以使用SQL注入来添加,修改和删除数据库中的记录。
- 防御:
- 不要使用动态SQL:避免将用户提供的输入直接放入SQL语句中;最好使用准备好的语句和参数化查询,这样更安全。
- 不要将敏感数据保留在纯文本中:加密存储在数据库中的私有/机密数据。
- 限制数据库权限和特权:将数据库用户的功能设置为最低要求;这将限制攻击者在设法获取访问权限时可以执行的操作。
5.2 XSS攻击的原理,如何防御?
- XSS攻击:是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
- 防御:
- 在服务器端设置cookie的时候设置 http-only(只允许http或https请求读取cookie), 这样就可以防止用户通过JS获取cookie。
- XSS防御HTML编码,将不可信数据放入到html标签内(比如div、span等)的时候需要进行html编码。
5.3 CSRF攻击原理,如何防御?
- CSRF攻击:是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法,攻击者盗用了你的身份,以你的名义发送恶意请求。造成的问题包括:个人隐私泄露以及财产安全。
- 防御:
- 服务端进行CSRF防御:服务端的CSRF方式方法很多样,但总的思想都是一致的,就是在客户端页面增加伪随机数。
- 每次的用户提交都需要用户在表单中填写一个图片上的随机字符串。
- 不同的表单包含一个不同的伪随机值。
6.实验中遇到的问题
- 问题1:第一次启动WebGoat时,遇到了网页左侧没有课程的情况。
- 参考了同学的博客,知道是编译后的java程序与Linux上的java Se版本不一致导致这种情况的发生,于是重新下载jdk,进行配置(具体方法上面有写),解决了问题。
- 问题2:在做CSRF攻击中的Cross Site Request Forgery时,在文本框中输入代码,点击提交后,显示的是blackmailed。
- 其实只要阻止这个blackmailed就可以,页面会自动弹出来一个选项,勾上选项就可以解决,这里忘记截图了。
7.实验感想
- 这是最后一次实验了,没想到今年是在家完成9个实验,这与之前在学校的感受完全不同。以前做实验的时候,遇到问题可以直接抱着电脑找同学询问,但是在家,只能通过网络问一下同学,更多的还是要自己多去查看学长学姐及同学的博客,去网上搜寻解决办法,其实这更加的锻炼了我独立思考,解决问题的能力。
- 之前做实验的时候,总盼望着实验早点结束,但现在真的是最后一个实验,竟然还有一点不舍。这门课,不单单是老师讲同学听的授课方式,而是通过多次的实验,让我们亲身体会各种网络攻防的知识,但是这门课让我收获最多的还是上面说的更加的锻炼了我独立思考,解决问题的能力。
- 最后,还是要感谢老师这学期的教导,感谢帮助过的同学们~