metasploit 魔鬼训练营 学习笔记(2) 第四章(web一些漏洞与防止)
第四章的主要内容是相关于网络渗透的一些web板块的知识,首先书中提出对于web的渗透攻击具有以下几点特点,首先web应用具有:
广泛性:当前的web应用无处不在,对于任何的app或者是网站都是与web相关的,而这就导致web应用的相关漏洞无处不在,对于攻击者来说是永远不会缺乏目标的。
简单性:技术门槛比较低,初学者可以通过很短时间的学习就可以搭建一个网站,但这样的网站很明显是有安全缺陷的,很容易就能被攻击者进行攻击利用。
防火墙可绕过性:在web应用中防火墙的策略配置(管理员的相关配置)很容易导致防火墙形容虚设。
安全机制不够成熟:目前的许多http层面的认证授权技术的发展仍然处于滞后的情况所以很多认证代码是存在问题的。
隐蔽性:在互联网上许多地方无法对浏览或者是攻击行为无法或者是难以记录,很容易通过代理等手段绕过审计。
变化性:对于目前的网络环境来说,许多公司或者是组织的网站需要根据业务的变化而变化,例如发布一个活动,就要搭建一个新的页面或者是平台,即使单一来说是安全的,但是假如两个网站相连接就会出现这样那样的问题,同时网站的权限设置也有可能会出现问题。
利益性:对于web攻击来说,通过DDos也好,web渗透也好,可以对客户终端造成许多影响,可以从而获得很高的利润。
4.1 web漏洞相关
这里在学校的时候也学到过许多相关的知识,对于这一点来说书中的内容并不比在学校学的多,所以这里就复习一下在学校学到的一些知识。
4.1.1 sql注入
1.原理
首先在owasp中top1是sql注入,sql注入的相关原理是:将不受信任的数据作为命令或者是查询的一部分发送到解析器中,从而网站运行了你所输入的数据。简单来说就是把攻击者的相关语句去当作命令或者是命令中的一部分进行了运行。
注入漏洞一般出现在sql查询语句中等,攻击可以使解析器再没有授权的时候执行了非预期的命令或者是访问数据。这里会导致数据丢失、破坏或者是泄露,甚至能导致主机完全被接管。
2.一般的使用环境
可以是在网站的登录页面,也可以是数据的查询页面,类似下面的这样的页面。
在我写的页面中是一个比较简单的一个漏洞的页面。在mysql数据库中建立了一个web库,在库中新建了一个users表,在表中设置了三个列:ID、username、password等字段。
当进行正确的登录的时候,界面如下
当错误登陆时,界面如下
来看一下这个页面的源代码
<?php$conn=mysqli_connect("127.0.0.1","root","root") or die("数据库连接失败");mysqli_select_db($conn,"web") or die("选择的数据库不存在");$name=$_GET['username'];$pwd=$_GET['password'];$sql="select * from users where username='$name' and password='$pwd'";$query=mysqli_query($conn,$sql);$arr=mysqli_fetch_array($query);if(is_array($arr)){echo "select * from users where username='$name' and password='$pwd'";
?>
这里我们没有进行任何一项对输入字符串的过滤或者转义操作,并且将数据与命令语句直接结合在了一起。所以假如我们在上面中输入'就可以闭合之前的单引号,并且在之后的数据当作命令进行运行例如在密码中填入 ' or '1 =1 这样在之后语句执行时,无论前面的条件判断是true还是false, 1=1 这个条件是一直满足的。所以可以跳到true中并且爆出所有的表。
3. 通常如何测试
1. 首先利用单引号测试是否存在注入,例如 http://localhost/sqli/?id=1'
这样然后对语句进行猜测 猜测查询语句是否是
select *from users where id ='$id' LIMIT 0,1
测试这样的语句2' and '1' ='1 或者是在最后语句中加入--+来讲后面的语句注释掉,页面回显正常则证明是单引号字符型注入。
2. 再对于数据库表中的列数或者是关键词进行猜测。利用order by 进行猜测。
在查询语句中最后假如order by 3 ,例如这样
http://localhost/sqli/?id=1' order by 3--+
假如回显正常,order by 4回显不正常则说明该表一共有3列。
再利用union select 查看在回显中有哪些回显的区域。
3. 利用显示位爆破数据库名,表名,列名,字段信息等
①数据库版本:id = -1' union select 1 ,version (),3 --+
②查看当前数据库: id = -1' union select 1, database(),3--+
③查看所有的数据库名称:
id= -1' union select 1,(select group_concat(schema_name)from information_schema.schemeta),3--+
④查询所有表名:
id = -1' union select 1,2,(select group_concat (table_name)from information_schema.tables where table_schema ='security')--+
⑤查询users表的列名:
id = -1'union 1,2,(select group_concat (column_name) from information_schema.columns where table_name ='users')--+
⑥查询users表中所有的用户名和密码:
id = -1' union select 1,(select group_concat (username)from security.users),(select group_concat (password)from security.users)--+
4. 如何防御
防止原理:将数据与命令语句、查询语句分割开来
最佳选择为:使用安全的API,完全避免使用解释器,或者是提供参数化界面的接口。
或者是使用白名单的方式进行输入,禁止用户输入不合法的字符。或者还是利用一些函数将那些非法字符进行转义。
Web端
1)有效性检验。
2)限制字符串输入的长度。
服务端
1)不用拼接SQL字符串。
2)使用预编译的PrepareStatement。
3)有效性检验。(为什么服务端还要做有效性检验?第一准则,外部都是不可信的,防止攻击者绕过Web端请求)
4)过滤SQL需要的参数中的特殊字符。比如单引号、双引号。例如mysqli_real_escape()函数进行过滤。
4.1.2 失效的身份认证
通过错误使用应用程序的身份认证和会话管理功能,攻击者会破译密码、密钥或者会话令牌,从而冒充其他用户身份。
漏洞原理
1.允许凭证填充(撞库攻击)
2.允许暴力破解或者是其他自动攻击
3.使用弱密码或者是众所周知的密码,如‘admin’ 或者是123456
4.使用弱的或者是失效的验证凭证,忘记密码程序,例如“基于知识的答案”
5.使用明文存储或者是弱加密的密码
6.缺少多因素身份验证
7.成功登录后不更新会话ID
8.不正确的使会话ID失效,即用户的会话或者是认证令牌没有正确注销或者失效
漏洞防止
1.多因素身份验证:防止自动填充密码或者是暴力破解。
2.执行弱密码检查:测试新的密码是否是弱密码,参照网上所传的弱密码列表。
3.设置正确的密码策略:比如说设置合适的密码长度、复杂性和循环策略
4.对于所有的输出结果使用同样的消息反馈,防止账户枚举攻击
5.限制或逐渐延迟失败的登陆尝试,并且记录所有的失败信息在服务器端
6.使用复杂的新会话ID,且会话ID不能保留在URL中
4.1.3 敏感数据泄露
许多Web应用程序和API无法保护敏感数据,攻击者可以通过窃取或修改未加密的数据来实施诈骗、身份盗窃或者其他犯罪行为。未加密的数据容易受到破坏和窃取,所以应该对敏感数据进行加密,包括:传输过程中的数据(是否明文传输)、存储的数据(是否被加密)、浏览器的交互数据。
防止策略就是①对系统处理、存储、传输的数据进行分类,并且按照分类进行访问控制。②对于没有必要存放的重要的数据应尽快清楚。③确保存储的敏感数据加密④使用最新的强大的标准算法和密码参数,并且确保密码管理到位。⑤确保传输过程中的数据进行加密,确保数据加密被强制执行。⑥禁止缓存包含敏感数据的相应。
4.1.4 XML外部实体
这一块还没太搞明白,以后再修改
4.1.5 失效的访问控制
未对用户实施恰当的访问控制,攻击者可以访问未经授权的功能或者是数据:
1.访问其他用户账号 2.查看敏感文件 3. 修改其他用户的数据 4. 更改访问权限
4.1.6 安全配置错误
最常见 ,通常包括:不安全的默认配置,不完整的临时配置,开源云存储,错误的http报头配置,包含敏感信息的详细错误信息。
对于这种的漏洞防止其实很简单,对于操作系统、框架、库和应用程序进行安全配置,并且及时打补丁修补和升级。
4.1.7 跨站脚本攻击(XSS)
当网站中包含不受信任的、未经恰当验证或转义的数据,或使用可以创建HTML或者Javascript的浏览器API更新现有的网页时,会出现XSS缺陷。
攻击者往web页面里插入恶意脚本代码,当用户浏览该网站时,嵌入其中的恶意代码被执行。
三种类型:①反射型XSS②存储型XSS③基于DOM的XSS
攻击者能够在受害者的浏览器中执行脚本,并劫持用户会话、破坏网站或将用户重定向到恶意网站。
例如
<?php$XssReflex = $_GET['input'];echo '你输入的是 :<br> '.$XssReflex;?>
这里是在文本框内直接进行了get与输出,并没有进行任何类型的转换转义。
漏洞模拟利用。 输入<script>alert(123)</script>,这样浏览器就会进行弹窗,弹窗的内容就是123
防御:
①对于所有用户提交内容进行可靠的输入验证
②保护所有敏感的功能,以防止机器人自动执行或被第三方网站执行。利用htmlspecialchars进行转义。
4.1.8 命令执行漏洞
该漏洞是服务器端将用户的输入执行的过程中,却意外执行了其他的命令。例如
这里没有对input的值进行一些过滤与格式的规范,所以可以利用管道符来进行命令执行漏洞的利用,例如 输入127.0.0.1| ls,这样就利用了这个漏洞。
防御
这里漏洞修补的主要思想是将输入的input数据按照“:”来分成四部分,将其中特殊字符过滤掉(转化为空),随后判断过滤后的字符串的四个部分是不是都是int类型的数字,如果是数字类型的话就执行ping命令,如果不是就输出错误语句。
4.1.9 文件包含漏洞
漏洞页面源代码
<?phpinclude($_GET['input']);?>
这里漏洞的主要语句就是 include()与 input 直接结合但是没有进行相关的处理,导致可以运行其他文件的 php 代码。
漏洞利用
找到一个文件,上面写好了文件包含漏洞的测试代码——phpinfo
这里与文件上传不一样的是选择执行的文件是服务器端的文件,所以防御策略最简单的是设置白名单,允许白名单中的相关文件执行,而不需要的文件不允许执行就可以解决。
4.1.10 文件上传漏洞
漏洞页面源代码
这里直接上传文件,没有对文件类型以及文件内容做任何过滤
对于php文件可以直接上传
通过抓包可以确定文件被上传到upload文件夹中,没有进行改名操作,在url中直接进行访问可以得到运行的结果。
漏洞防御页面源代码
首先对所上传文件的后缀名,文件名以及文件大小来进行对文件的过滤,后缀名的确认使用的是白名单,只允许上传jpg/png文件,同时如果文件过大也会进行拒绝上传
接下来是对jpg文件上传的处理,首先利用imagecreatefromjpg函数将上传的图片生成新的图片,防止上传的图片在图片标识符末尾添加恶意命令执行,然后再次对文件的格式进行判定,防止是后缀名欺骗,同时unlink处理,然后在随机一个字符串作为上传的服务器端的文件名,保存新生成的图片,原上传的图片unlink处理掉。
防御的方式:
①利用白名单过滤后缀名,用md5处理文件名
②防止00截断攻击,判断文件大小,再生成新图片文件,然后抛弃源文件。
metasploit 魔鬼训练营 学习笔记(2) 第四章(web一些漏洞与防止)相关推荐
- C++ Primer 学习笔记(第四章:表达式)
2019独角兽企业重金招聘Python工程师标准>>> ##C++ Primer 学习笔记(第四章:表达式) [TOC] ###4.1 基础 左值和右值: 当一个对象被用作右值的时候 ...
- 机器学习理论《统计学习方法》学习笔记:第四章 朴素贝叶斯法
机器学习理论<统计学习方法>学习笔记:第四章 朴素贝叶斯法 4 朴素贝叶斯法 4.1 朴素贝叶斯法的学习与分类 4.1.1 基本方法 4.1.2 后验概率最大化的含义 4.2 朴素贝叶斯法 ...
- javascript学习笔记(第四章图片库--初步了解)
javascript学习笔记(第四章图片库–初步了解) 通过前三章的学习我们已经对这个新的语言有了一个了解,js的语法基本和C语言一致,我们可以通过调用一些document对象中的函数来对实现一些很简 ...
- Python入门:对Excel数据处理的学习笔记【第四章】字符串类型处理技术
注:该学习笔记是根据曾志贤老师编写的<从Excel到Python,用Python轻松处理Excel数据>所学习整理的笔记. 第四章 字符串类型处理技术 目录 第四章 字符串类型处理技术 一 ...
- 【OpenCV 学习笔记】第四章: 色彩空间类型转换
第四章: 色彩空间类型转换 为什么有色彩空间这个概念? 世界本是无颜色的,我们人类看到的各种有色光只是特定波长的电磁波能够刺激人眼的锥体细胞,进而在人脑中形成颜色信号而已,实际上电磁波的波长域是非常广 ...
- 信息安全工程师学习笔记《第四章》
第四章 网络安全体系与网络安全模型 本章内容主要包括: 第一,讲述了网络安全体系的基本概念以及相关安全模型,主要包括机密性模型.完整性模型.信息流模型.信息保障模型.能力成熟度模型.纵深防御模型.分层 ...
- 数据结构学习笔记(第四章:串)
第四章:串 4.1 串的定义和实现 串的定义 串的实现 1.定长顺序存储实现 2.堆分配存储表示 3.块链存储表示 4.2 串的模式匹配 简单的模式匹配算法 改进模式匹配算法(KMP算法) KMP算法 ...
- 数字图像处理学习笔记4第四章 图像变换 附实验
第四章 图像变换 附实验 前言 图像变换:为达到某种目的将原始图像变换映射到另一个空间上,使得图像的某些特征得以突出,以便于后面的处理和识别. 4.1连续傅里叶变换 一维变换 用傅里叶变换表示的函数特 ...
- 2021-11-04 《计算机操作系统》(第四版)学习笔记:第四章
文章目录 第四章 存储器管理 4.1 存储器的层次结构 4.1.1 多层结构的存储器系统 4.1.2 主存储器与寄存器 4.1.3 高速缓存和磁盘缓存 4.2 程序的装入和链接 4.2.1 地址以及映 ...
最新文章
- 自定义监听器 java
- 区块链BaaS云服务(16)天德链TDBC“监管”
- kafka->Flink->ElasticSearch(Java形式)
- httpurlconnection 封装_不要再封装各种Util工具类了,看看这个框架
- js 延迟几秒执行ifarme_Node.js调试之llnode篇
- 【英语学习】【English L06】U04 Adventure L1 I want to watch a ballet show there
- Sql Server 列转行 Pivot使用
- linux中自动化日志分析,Shell项目案例7-应用日志分析
- 关于webapp的一点思考
- 多边形面积的求法(已知每个点的坐标)hdu2036
- 940mx黑苹果驱动_【必看】黑苹果安装显卡支持列表
- 用户账号被盗,京东回应:都怪QQ!库克:从来没获取过FB用户数据!
- 硝烟中的 Scrum 和 XP-我们如何实施 Scrum
- 关于Http的一些基础内容
- 区块链软件公司:区块链技术三大主要特性的优势
- leetcode (Image Smoother)
- 计算机如何开启多个用户,电脑上如何打开多个微信账号?
- vue3实现鼠标左键拖拽画矩形框框选功能
- linux c控制进程并发量,浅谈Linux环境下并发编程中C语言fork()函数的使用
- MySQL inet aton函数_有个统计需求,需要对IP进行分类统计,Mysql提供了inet_aton()和inet_ntoa()函数进程处理。具体可以查看官方手册。INET_ATON(e...
热门文章
- 干掉 Warnings(洁癖篇)
- Linux系统常用的Xshell运行命令-新手入门级
- 李永乐(一)行列式计算——笔记
- 2018年湖北省大学程序设计竞赛 D. Who killed Cock Robin(树形DP)
- 并行程序设计实验——高斯消元
- 化“整”为“零”,明道云为企业信息化提速(一)
- 西安邮电大学计算机课程表,西安邮电大学2013-2014-01学期课程表(45页)-原创力文档...
- origin如何绘制多条折线_如何用origin绘制数据变化折线图
- python公众号文章阅读量_史上最快、最笨的公众号文章阅读数、在看数采集,哈哈...
- Android多个音频源采集,Android音频开发之音频采集的实现示例