【土木人自学网安Day2】OWASP TOP10简单介绍及应用

 前言(每日一遍):

“初闻不明劝离意,回头已是提桶人”

 (本贴为自学记录贴) 

在食用前确保有以下基础(精选贴)

一、损坏的访问控制

二、加密失败

三、注入

四、不安全设计

五、安全配置错误

六、漏洞和过期组件

七、识别和身份验证失败

八、软件和数据完整性故障

九、安全记录和监控故障

十、服务器端请求伪造(SSRF)

 最新的OWASP TOP10可以在这里看到:OWASP Top Ten | OWASP Foundation

一、错误的访问控制(Broken Access Control) 

  •  是什么:简单理解就是在一个网站中,用户A能够访问他按理来说访问不了/不应该访问的页面,或者普通用户访问了被保护的页面——这就称之为错误的访问控制。
  • 有何影响:能让攻击者绕过认证,直接访问敏感文件。

 (一)不安全直接对象引用(IDOR  Insecure Direct Object Reference

 顾名思义,IDOR表明了一个直接对象的不安全引用,如

https://bank.thm/account?id=111111

该账户“111111”的id直接被引用在url中,若将id改为222222则会引发错误的访问控制 

二、 加密失败

  • 是什么:没有使用或者错误使用加密算法去保护敏感信息,如telnet就是明文传输的应用程序协议,因为明文传输的不安全性,后逐渐被密文传输的应用程序协议ssh替代。
  • 有何影响:最广为人知的例子就是中间人攻击(看这里),当终端之间通信的数据没有任何加密保护时,后果的严重性可想而知。

 例子:目标主机 10.10.54.226:81

网页本身除了有个login页面看没什么特点,因此考虑以下三点:1.对网页目录扫描 ;2.查看login页面;3.查看网页源代码;

1.目录扫描(略)
2.login页面没有什么特点,可以尝试是否具有弱口令存在(尝试,无弱口令)
3.源代码查看 

这里我们注意到在引入css时的路径存在问题,assets文件被放在了web服务器的根目录下,导致assets可被我们访问,因此我们试着访问assets路径。 

http://10.10.54.226:81/assets

发现assets 页面不仅泄露了组件信息(可在ex-db上看该版本是否存在漏洞),还存在一个webapp.db的数据库文件,我们将webapp.db下载到本地

发现是个sqlite数据库,我们使用相应语法查看数据库中的表信息 

6eea9b7ef19179a06954edd0f6c05ceb

初步判断是md5加密的密文(常见密文识别看这里),通过md5密文破译网站我们对该密文进行破解,得到密码为qwertyuiop弱密码,再通过login页面登录,得到flag

三、注入 

  • 是什么:当应用程序解析了用户控制的命令或者参数,常见的注入有sql注入及命令注入  
  • 有何影响:sql注入可能会允许攻击者通过sql语句调整或者删除数据库的数据或者窃取数据库信息。命令注入可让攻击者在输入端执行任意系统命令,从而可能让攻击者入侵服务器系统

(一)命令注入 

 上示网站允许用户进行输入,同时将用户的输入进行重组输出,该功能实现依靠以下代码

<?php
    if (isset($_GET["mooing"])) {
        $mooing = $_GET["mooing"];
        $cow = 'default';

        if(isset($_GET["cow"]))
            $cow = $_GET["cow"];
        
        passthru("perl /usr/bin/cowsay -f $cow $mooing");
    }
?>

其中 passthru函数在操作系统中执行命令后调用cowsay重组部分语句(绘画)输出给用户(具体介绍)。由于我们输入的内容原封不动的作为输出反馈给我们,我们可以尝试内联(将命令当成系统命令的语法而非单纯文本)命令注入,通过$(command)格式进行内联输入

 成功执行命令注入

四、不安全设计

  • 是什么:不安全设计并不是一种类似错误配置导致的漏洞,而是从程序设计之初就存在的一种缺陷。例如开发者在开发之初为了方便进行应用程序测试而关闭了验证码验证的功能,但是在应用程序发布之后忘记打开验证码验证的功能,从而导致的不安全设计。
  • 有何影响

(无实验)

五、安全配置错误 

  • 是什么:安全配置错误是原本可能有合适的安全配置但是实际上并没有正确设置而导致的安全问题,例如开放默认账户及密码、页面的错误消息过于详细以至于能让攻击者找到更多关于系统的信息、没有使用HTTP安全头、未关闭网站调试页面等。        
  • 有何影响:常见的有通过默认账户密码登录从而获取服务器敏感文件

 这里我们有目标ip

http://10.10.113.153:86

拿到目标地址后尝试进行目录扫描,这里我使用的是dirsearch 发现存在/console界面,尝试访问

发现可执行python命令,这里使用以下命令

import os; print(os.popen("ls -l").read())

解释命令

  • import os:导入Python的os模块,该模块提供了与操作系统交互的功能。
  • os.popen("ls -l"):使用os.popen()函数执行命令ls -los.popen()函数可以执行命令并返回一个文件对象,您可以使用该对象来读取命令的输出。
  • .read():使用文件对象的read()方法读取命令的输出。
  • print():使用print()函数将命令的输出打印到终端。

 

通过阅读app.py得到flag 

六、漏洞与过期组件

是什么:在进行目标侦查期间,可能会碰到一些常见的程序组件,并且这些组件由于没有及时进行版本更新从而存在可利用的漏洞
有何影响:如WordPress 4.6存在远程代码执行漏洞(RCE),允许攻击者在客户端远程执行服务器命令,对服务器造成影响

如访问目标网站如下 经过搜索发现nostromo 1.9.6在ex-db上存在远程代码执行漏洞等漏洞

通过下载及使用现成exploit即可利用

七、识别与身份认证失败 

  • 是什么:一些网站常用账户和密码作为登录的身份验证,但是一些身份验证机制配置不够完善以至于能够让攻击者在不知道账户密码的情况下进行登录,常见的分身认证失败诸如:能够允许攻击者通过暴力破解获得账户密码、弱口令密码、弱session cookie等
  • 有何影响: 如上

(一)运行重新注册的身份认证失败 

该案例意思是如果存在一个admin用户,在我们不知道密码的情况下, 可以通过注册“ admin”(注意,这里存在一个空格)用户,该用户登录后和admin用户属于同一用户。这里当我们尝试注册darren提示

此时我们注册“ darren”用户 ,并尝试用“ darren登录”

 成功获取flag

八、软件和数据完整性故障

  • 是什么:数据完整性的概念可以理解为,当你在网络上下载软件或者文件时,怎么确定该文件在传输过程中是否被修改或者在发生传输错误过程中被破坏?而软件和数据完整性故障自然而然可以理解成在网络上下载的文件可能是被攻击者篡改后的文件。
  • 有何影响:当下载到被攻击者篡改的软件和文件时,可能会发生无法预料的后果。

假如你从网上下载了一个名为“WinSCP-5.21.5-Setup.exe”的程序,你可以使用以下代码计算出该程序的哈希值

user@attackbox$ md5sum WinSCP-5.21.5-Setup.exe          
20c5329d7fde522338f037a7fe8a84eb  WinSCP-5.21.5-Setup.exe
                                                                                                                
user@attackbox$ sha1sum WinSCP-5.21.5-Setup.exe 
c55a60799cfa24c1aeffcd2ca609776722e84f1b  WinSCP-5.21.5-Setup.exe
                                                                                                                
user@attackbox$ sha256sum WinSCP-5.21.5-Setup.exe 
e141e9a1a0094095d5e26077311418a01dac429e68d3ff07a734385eb0172bea  WinSCP-5.21.5-Setup.exe

 通过相应的哈希算法计算出哈希值,然后与官网的哈希值进行比对,就可以判断该程序是否是官方认证的程序。

(一)软件完整性故障 

 当一个网站允许用户调用指定js字典时可能会出现以下代码

<script src="https://code.jquery.com/jquery-3.6.1.min.js"></script>

但是有可能该官方网站的该字典包被攻击者进行了篡改,因此可以通过一下方式进行更安全的调用

<script src="https://code.jquery.com/jquery-3.6.1.min.js" integrity="sha256-o88AwQnZB+VDvE9tvIXrMQaPlFFSUTR+nldQm1LuPXQ=" crossorigin="anonymous"></script>

该方式对字典进行了哈希值的判断,从而确保与官方认证到的字典属于同一字典 

(二)数据完整性故障 

设想一下,如果一个网站的会话令牌通过cookie来充当用户认证的凭证,而该cookie中则是利用用户的用户名。那么作为攻击者则可能通过篡改cookie中的用户名而达到登录其他用户的目的。这无疑是糟糕的,为了避免这个情况,一些网站通过使用JSON Web Tokens(JWT)来实现对用户身份的加密和认证,从而确保令牌的是本人所拥有而非篡改。下面简单介绍一下JWT:

JWT可以把你的键值对存储在令牌(tokens)中作为令牌的一部分,用来确保用户身份的完整性认证。而网站会向用户提供他们无法修改的键值对,以检查令牌的完整性。

至于为何用户无法修改这些键值对,有以下原因。首先,JWT可以看成三部分,第一部分包含元数据标识它是JWT,同时表明采用了算法(alg)HS256进行加密;第二部分包含了数据的关键信息,以payload来代指第二部分,这一部分的值和哈希值类似,如果你修改这一部分的值,则JWT的签名(signature)就与有效的签名不匹配,从而无法通过认证;最大的特点是第三字段,第二段类似哈希值的字符串并不是简单的哈希值,这段字符串涉及到一种仅服务器才有的秘钥签名,如果你篡改了该字段,你将无法产生与之匹配的第三段签名,除非你拥有网站服务器的秘钥。

这三段中任何一段都是使用的base64加密,如果对以上密文解密的结果如下:

由于第三部分采用了二进制数据,因此即使解码也无法正常得到数据。

而以前发生过实现JWT的库存在数据完整性故障,攻击者通过篡改JWT令牌中的部分数据从而达到更改JWT信息冒充其他用户的情况,在JWT的实现中发生了以下问题

1.header部分的alg(algorithm)加密的值改为了none

2.移除了第三部分,即移除了signature

因此如果发生这种情况,通过篡改JWT实现登录其他用户的方法也变得可行了。以下为实验(目标机器10.10.138.75)

 通过登录guest用户,查看令牌存储情况

接下来进行篡改 

返回后刷新,获得flag 

九、 安全记录和监控故障

  • 是什么:任何已上线的网站都应记录用户在网站期间执行的任何行为,如果没有安全日志记录,就无法快速溯源攻击者及预判攻击者的下一步行为和攻击工作。

十、服务器端请求伪造(SSRF) 

  • 是什么:攻击者可以强迫修改网站的报文,让网站向任何目的地发送攻击者的内容时,就称之为SSRF,这种漏洞通常出现在网站调用第三方链接时出现。
  • 有何影响: 攻击者可能通过强迫该网站与其他目的地址通信,以绕过权限不足的问题,枚举内部网络及端口等。

 从上图不难看出,网站在发送数据时向用户暴露了引用第三方的链接地址,如果将该第三方服务器地址srv3.sms.thm改为一个攻击者可控的网站,那么该网站就能接收到原本发送给srv3.sms.thm的api的值,有了这个api的值就能白嫖api接口。当然ssrf的影响不止如此,常见的影响如下

1.枚举服务器内部网络及端口

2.控制报文以实现突破访问控制界面

3.与内部无http的服务器通信,实现远程代码执行漏洞(RCE)

 实验开始:目标主机10.10.138.75:8087

该主机界面有一个download resume的按钮,可下载一份简历,查看前端代码发现是一个指向绝对url的链接

同时目录扫描发现该网站存在一个仅限于localhost访问的admin页面,

这时考虑是否可以用服务器端请求伪造去访问admin页面,首先我们尝试下是否可以进行ssrf,我们先使用burpsuite对下载简历操作进行拦截,让后将链接的地址替换为我们本机使用netcat监听的端口,首先我们监听4444端口

然后将拦截的链接替换,成功获得flag

既然获得flag那就结束了

  • 29
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值