技术杂谈-我也干过阿里偷月饼,但没被开除

发布: 2022-09-07   作者: Youcai   分类: Thinking 标签: security  可转载但要注明出处!

原创,手机阅读体验不错!大屏电脑放大到125%阅读效果更佳!

写在前面

出来已经有一段时间,个人感觉还是挺爽的,游山玩水,上山下海,读书写字,吃饱饭有空,再拍下街边的靓女,也难得陪下老母亲,就静静地听她说些,人生长河里经历的零零散散的碎事,也是别有一番滋味。虽然离财富自由还有很远很远的距离,但也提前短暂式感受了有钱人的快乐,挺不错的。可能现在经历的一切,都是为了以后更好的工作,诗与远方终将要好多好多的钱。家里人也没有怎样吹我找工作,但会通过一些人或事啊来提醒我,我妈刚还说10号就是中秋节了,今年没有你公司的月饼吃。岳父还特地打电话来说,今年给我呆到机会,寄个超大的拖罗饼你(茂名物质文化月饼)。德高望重的伯父,亲自传授人生大道理,男人要赚大钱才算真本事。挺感谢大家的关心。我前天还跟老婆说,写完5篇博客就认真投入找工作(已拒绝了4个offer,当然,也被二间心水公司拒绝了)。想来想去不知道写什么,有同事叫我写些裁员故事,感觉肯定会火,但会泄露内幕消息,不太好。再写技术吧,已经有一定篇数。可能最近听月饼这词太多,今早起来,激灵一闪,可以写篇信息安全类的散文,说不定有人喜欢,那就写吧。还有那个谁跟谁说,如果写够五篇,把我博客转到他手下100多号人的群,而且建议手下必读,有点激动,你可要说到做到。

温馨提示:为了更贴合主题,部分真实的故事经过了加工改造,如有类同,算你幸运,说声中秋节快乐。


说不完的乡情从月饼盒开始

2016年,阿里某员工因为技术手段抢月饼,被公司开除了,当时可轰动了整个互联网,但这风传到农村,可是另一番理解。

那时没有疫情,每年春节都回家,村里办大戏(类似东北的唱秧歌),亲贤叔侄,有钱的捐钱,有力的出力。我作为村里的第二代大学生,虽然没有大富大贵,但每年也是头部捐钱用户,也算是树立一种榜样,让更多人知道,读书有出路。虽说在这大城市里,很普通,是一粒沙,或一微尘,但回家也能体面的成为了别人榜样,每个人都有他的价值,要相信自己,不能妄自菲薄,好机会要慢慢等,姜太公钓鱼,愿者上钩。屋前屋后的爷爷奶奶就教育孙男孙女说,要认真读书,学习谁跟谁,在珠三角买车买屋,有本事回村捐钱。

当时捐完钱,回到家,刚好,七叔公带着他的孙子来我家,手里拿着他最质朴但又最有人情味的特产,土家鸡。他激动地说,听说你妈身体不好,杀个鸡煲吃,补补身体。我不好拒绝,拿出最好的糖果给他孙子吃。然后他拉着我的手说:“有本事啊,有本事,在珠三角买车买楼。真不容易,你知吗?我就看好你,你当年考上大学的时候,我偷偷地给了你爸500元,农村出个大学生太难了。”,停顿下,拿出裤兜里的水鬼烟,抽了起来,烟筒里的水咕咕作响,然后从他嘴里吐出阵阵烟圈,接着又说,“大有(我们村里的第一代大学生)考上大学的时候,你知道我多高兴吗?他家里也没有钱,我买了一担番薯,硬是给钱他爸,他爸不肯领,你说这不是村里的骄傲吗?还分什么你我。”,接着又抽了一会说,“你老豆对我也有恩,你老豆做村长的时候,我家媳妇生小孩,你老豆偷偷的给我记了二个星期的工分,而且别人都看不出来。为什么啊?你老豆也是读书人,会做账。”,他甚至有点微微激动地说,“没读书,有什么用?生产队那时分田分地,刚好碰上重选村长,你老豆没被选上,你看那帮人怎样搞,怎样都分不开,还不是叫你老豆出马,一下子就搞定了,所以说,国家发达还得靠读书人,叫得响是没有什么用的。”

不一会,我媳妇就端上了一碗高凉粉,家乡特色风味,里面的料好多,有瘦肉,有玉米,有韭菜,有香葱,有花生,还有豆腐皮等等。“七叔公,你趁热吃”,老婆一边说一边搬凳子,又说,“狗仔你也过来,不要吃糖了,有高凉粉,想吃簸箕吹,厨房里也有。”,狗仔说:“我要簸箕吹,加多点酱油。”,“好烈!”,我媳妇应声道。他俩爷孙快乐地吃起来,看着他们开心的样子,我也感到有能力招待别人是件美好的事,后来我跟老婆说,等我有钱,回家建了房,请全村一餐豪的,老婆说我臭美。

突然,七叔公说,“这个粉是你媳妇做的吗?”,我说是,他说:“手艺真好,味道好正,外家是那里的啊?”,“大涌新屋下边的人”,我应道,他说:“外家近好,知水知米,有什么事情好有个照应,嫁到四川云南的,父母想见女儿一眼都难!当生个叉烧”,我说各有各的好,说三弟家媳妇就很好啊。他应声道说也是也是。

又过了一会,七叔公说:“你什么公司上班啊?”,我说一间互联网公司,他说:“互联网公司好啊?”,我也来了兴趣,想七叔公这么大年几了,还知道什么是互联网,果真不一样啊。我好奇问:“你也知道什么是互联网吗?”,七叔公笑笑说:“不要看我老,但爱学习,经常听收音机,像阿里、腾讯这样的公司就是互联网。进去好难,在里面上班的,就是以前的官老爷,天上的文曲星,比范进中举还要难。”,我翘起大拇指说:“七叔公把炮,上知天文,下知地理,还知道什么吗?继续?”,七叔公说:“你还别说,我知道阿里是个互联网公司,是个好公司,老板爱员工,我听说,今年他们公司抢月饼活动,有一个人电脑坏了,没有抢到,然后月饼又分完了,老板怒了,把采购部经理给开除了,说为什么不多采购二盒,这老板了不起,是个青天大老爷,叫人佩服!”,我说是的是的,虽然事实真相不是这样,但这时候,美丽的谎言还是要的。

七叔公喝了口汤,然后催他孙子专心吃,突然又说:“你公司名叫什么啊?”,我说YY,他说:“名字可以喔,够简单,老板是那个大学毕业的?”,我说人民大学哲学系,他说:“这可是做宰相的料啊,周总理就是这个学校毕业的吧。”,我说好像不是,他说:“无所谓了,反正就是做宰相的料,去那里都有出色。”,我说这确实是。这时,他孙子不小心把装糖果的盒子打翻了,七叔公正要批评他吃饭不专心。我看到被打翻的盒,正是YY送给员工的月饼盒,连忙对七叔公说:“七叔公,不要批评他了,你看,这个盒就是我公司的定制月饼盒,狗仔没有打翻,我都不知道。”

七叔公对这个盒赞不绝口,说我公司是良心企业,这个盒都做得这么漂亮,我见七叔公这么喜欢,就送他孙子玩,他说,这可以,还给他们每人一个大红包,他硬是不肯收,不过最后扭不过我,收了。七叔公激动地说,有钱没钱,回家过年,你回来,我就过来坐坐,吹吹水,吃个粉,就满心欢喜了,你老豆死得早,要不,就有福了,说着说着,他眼里有了泪光。我也目送他俩离开,心情久久不能平静。


中秋活动偷月饼

七叔公都说了,YY是个良心企业,我认,因为氛围确实很好。公司过年过节,都会搞些活动。印象中,2016年那个中秋,跟阿里偷月饼同一年同一月,说不定还是同一日,又要搞活动。活动内容好简单,就是拍一张团队的照片,写下一段感人的文字,放到公司平台里投票,共投五天,票数前三胜出。奖金是3000元团建费用+每人一盒月饼(情节虚构了一下哈),大家都挺开心的,三天时间不到,就有投票项50个。

我是第三天快下班才知道有这个活动,因为工作太认真,把公文里的内容忽略了。知道后三下五除二,拍好团队照,快速上传到投票平台,但票数跟第三名还是相差很远。我手下一个亲信大神张大嘴跟我说,有点迟了,除非老大以你的影响力到大群里叫,否则很难拿到奖了。但这次也真奇怪,我第一个想到的不是做广告拉票,而是破解,为什么会有这种想法呢?因为听说投票系统是一个刚毕业的硕士生写的。我跟张大嘴说:“不,这次我不在大群里喊,我去偷,用技术去偷。”,张大嘴半信半疑。

下班后,周围的人基本走光了,一牌寂静,非常有搞黑客的氛围,我开始了行动,我直接按下浏览器F12,然后点击他的投票连接。

重大发现:投票系统请求是一个GET请求,其中voteItem就是我的投票项,当你点击页面投票按钮时,会自动根据你当前登录的session定位到那个用户,然后投票:

curl http://x.x.x.x/vite.do?voteItem=120

那就简单了,因为这个投票系统登录的会话跟OA登录的会话是同一个,也就是说,如果在OA系统,发一个贴,吸引别人来点,那么就能成功帮我投票,然后我搞一个虚假广告,吸引大伙来点,当时的OA贴大概是这样。

需求

记得当时约晚上11点,排名第一的已有400票,但它的负责人还很认真,还在大群里拉票。然后我在群里也放出风声,明天一定要超越你,超得让你服服贴贴,对方还发了个笑脸说,大佬你见鬼吧,你才32票,想超我,做梦去。算吧,先回家,不跟他争,那晚我梦到了跟嫦娥把洒言欢的场景,嫦娥拉着我的手说,哥,你不要这么坏。

第二天上班,正常是9.30分到,但那天故意迟点到,10.30才到公司,然后他们炸开窝了,妈的,不会吧,我的投票数,已达480票,比第一名超了差不多80票,这虚假广告打得效果还不错,我团队的同学惊呆了。到500多票的时候,从OA系统里删除了那个广告贴。

然后我跟开发这个系统的同学说明了破解方法,你这个是GET请求,太容易破解了,安全点,改成POST请求吧,我就偷不了啦。等他们修复好系统后。我也在群里公开了破解方法。但负责本次活动的行政大神,宣判我投票有效,因为他们认为我这个Idea不错,而且也只有我发的贴才有这么多人点,并且原来三名中奖变成四名中奖,也即不影响公平性,那次团建,我们HI翻了天,第一次吃上大龙虾。同时也感谢公司的不杀之恩。


第二次交锋

时间大概又过了一个月,行政又搞活动,又有投票,但奖品小点,300以内的生活用品,不是团建费用,所以无必要去争。但负责开发的前端同学上次被我这样一搞,有点怕,所以他们增加了一名人手,相互Reveiw代码,方法是对的。但活动为了特出交互性,增加了一个可以评论的功能,比如说:“靓仔你好帅啊,我好喜欢。”,然后活动又开始了。因为这次奖品实在太小,我不想搞。但开发的小哥比较自信,跟我说:“Hey, 帅哥,这次,我们有二个人开发,怕你难破解咯。",被这么一说,又上心头,我跟他说,我再搞你一次,但这次不拿奖。

然后我打开浏览器,按F12,又跟踪一下请求流程,我发现,他们自己可能也不知道,前端正常提交时,JS类库会过滤一些特殊标签。如<script>alert</script>,但他服务端没有过滤。我说,妈蛋,有点水,不过也不能怪他们,他们是临时性帮忙开发的前端团队同学,后端水平不高。然后我又用curl post了一些像下面这样的script数据上去,伪代码哈,现场手写的,有错误请指正:

curl -X POST -d "id=562&comment=<script>function(){$.Post('http://x.x.x.x/vite.do?voteItem=120')}</script>"  https://x.x.x.x/comment.do

当进来看评论时,这段脚本<script>(function(){$.Post('http://x.x.x.x/vite.do?voteItem=120'))();}</script>会原封不动地显示在页面里,那就是JS脚本,作用相当于一次ajax的post请求,如果用户访问到这个页面,就自动帮忙投一票,我就试了1小时,票数增加得很快,又跟他们说明了原理,他们又得改,当然这次我不要奖。


第三次交锋

经常前二次的交锋,前端的开发小哥开始对我有点佩服了,见面就叫我大神,搞得挺不好意思的,其实这些原理挺简单的,稍稍学习一下就懂。然后他们也开始学习XSS攻击技术,然后又来了第三次行政活动。这次他们上线后,不敢叫我破解了,叫我指导,那就指导咯。这次他们做得挺好的,没有了GET请求,也没有了脚本注入这些,看起来是完美了,我一时半载也没有找出问题。然后活动进行到了最后一天,我就随意查看下页面源码,发现他们使用了不同的登录AppId,而这次AppId跟某线上产品功能的AppId是一样的。这是什么意思,也就是说使用相同AppId认证生成的session是可以通过认证的。然后他应该没想到,线上那个应用的服务端就是我。但这次破解难点,得写Java代码,伪程序如下。

//取到这个用户的session值,我是服务端,我能轻易取到我appId下的用户session,有点监守自盗的意思。
String session =  getSession(appId);
//初始化一个请求类,如OkHttp
OkHttp okHttp = new OkHttp("http://x.x.x.x/vite.do?voteItem=120");
//交联这个session
okHttp.setSession(session);
//请求服务
okHttop.post();

完美,这个破解方法,试了几个Ok后,就关闭了程序。这里破解有一个严格条件,相同appId的session,也就是监守自益,外部破解机率小。但也给我们一个提醒,像公司的企业级统一登录,分配了不同appid的应用,你不要随便共享使用。当时我跟张大嘴说,这招利害不,他是目瞪口呆。但也提醒他,这招是有职业道德的,不能监守自盗,只能研究。当然那个前端小伙,如果他现在没有看到这个文章,他应该也不知道有这么一会事。


其它安全知识

1、URL参数没有认证,如查询某个用户的计薪数据,他没有使用认证过的UID,而是通过URL参数里获取,那么改变一下URL参数,就可能获取别人的计薪数据。这个点看似简单,但这错误十几年前就见很多人犯,直到现在。

2、没有认证的cookie值,一般像登录成功或认证通过后,我们可能会写一些数据到cookie里,如uid=100,但这些cookie数据是可以在浏览器端改的,如果服务端直接依赖于这些cookie数据而不做认证,那么你可能就会出错。有二个非常典型的例子:1、前东家,相亲网,有些回复功能是收费的,就可以修改cookie的uid值来免费取到别人的回复信息,后面把这些坑修了。 2、管理后台权限超越,如我是普通用户权限,另一个是管理员,如果我登录成功后,我把cookie值改成管理员,如果后端不加认证,就可能发生超越权限问题。

3、存储型注入或其它,暂时不说先,安全的点还是挺多的,这个得你平时注意与积累,否则你开发出来的东西可能会被破解或注入,当然,现在的总体基础设施都很完备,想像以前一样破解玩一把也不是件容易的事,就像以前的病毒,到处到是,现在都没有了。


总结

很久很久以前吧,经常帮公司发QQ的推广邮件,QQ邮箱系统会做各种封杀,然后我们就突破各种规则,像字符编码啊,使用不同发件人(如1万个邮件),不同的内容,想尽办法给用户发相亲邮件。从那时起,开始关注网站安全的问题,还是挺有趣的,如利用Struct漏洞登录别人的服务器,如利用cookie注入提升权限。后来我们网站也很多人来攻击,因为相亲费升到3999时,黄牛党也来了,通过各种注入来搞破坏,在对抗实战中,积累了一些技能,但感觉远远不够的,所以本文章只能说是入门吧,希望能起到启蒙的作用。当然你有什么牛技或可以系统学习的资料也可以给我分享,Respect。