作者: admin

  • 欲望之地

    欲望之地

    祭祀

    这里是一片居住区,也是一片废墟。

    居住区是因为这里白天人声鼎沸,夜晚寂静如坟墓。

    如果你问我为什么我知道,我想告诉你,我也是其中的一员。

    在很多人的眼里,坟墓是一个很恐怖的事情,可是,我们曾经也是人。我们生活在这里已经有几千年比起你们的寿命多了不知道多少,可是却有很多人认为我们是不应该的存在。

    其实,有时候,晚上的我们就是你。只是你们都不知道罢了。

    在夜晚,当你们入睡的时候,我们就可以跳出你们的脑子,穿过一座座城市,来到自己的地方,这是我们的狂欢地,也是你们的居住区。

    我们在天台上跳舞,在树下漫步,在黑夜的灯光下看那些灯火辉煌里的人群还有不知名的建筑。

    我们站在黑夜里,看着这个不一样的世界,在钟声敲过十二点的时候,我们有一场的集体的狂欢。那是一场关于人类的祭祀。

    我们的神思大人,带着他找到的祭品,在黑夜里蒙上面纱,点亮篝火,在天空上的殿堂里狂欢。

    不是人人都可以成为我们的祭品,我们的祭品是那些美丽的漂亮的人,拥有强烈的欲望,是一个人,也是一个野兽。

    他们拥有无尽的欲望,带着不死不休的决心,想要踏碎这个世界,他们的欲望膨胀到黑夜里的晚上成为他们的殿堂,在黑夜里用思绪去碾压那些白天不能达到的欲望之都。

    神思大人每天都会带来这样的人群,他们是癫狂的美丽的“人类”在黑夜里,他们拥有最大的隐私权,没有人能够记住他们的样子,在第二天第一缕阳光照进来的时候,他们的身体会消散于空中,神思大人说那是达到心愿的结果,已奉献灵魂实体为祭品,找到自己的欲望之地,到达目的地。

    我经常想问神思大人,欲望之地到底是什么地方?

    可是神思大人总是说“你还小。小孩子不要问那么多”

    我还小?

    可是我已经可以走到世界上每一个角落了,我可以穿越很多人的大脑找到那些的欲望之地,神思说我还小,那我一定还很小。

    神思大人在我心里是一个很伟大的存在。很多人都说神思大人是我们世界上最强大的存在,但是我看到的他却是一个拥有苍白的面孔的男人。

    在很多时候是没有力量的飘在空中的虚无的存在。

    “神虚,你过来”

    神思大人又呼唤我了,每次这样的时候,我总是可以缩在他的怀里,度过一个温暖的夜晚。

    第二天醒来的时候,总是只看到一个背影,消失在我的视线里。

    这个地有一个温暖的名字——空城。

    因为这里拥有很多人,但是也没有人。

    欲望之地

    今天又到了祭祀的时候,神思大人这一次带来的是一个漂亮的女子,她拥有一头乌黑的头发,发光的眼睛,更意外的是他没有佩戴面纱。

    “神虚,你过来。“

    嗯。我走到了神思大人面前。

    “你不是想要看看欲望之地是什么?今天你可以去看看。“

    我很疑惑,我可以去?

    他将那个我变成了一缕发光的光圈放进那个女子的肚子里,看到他微笑的对我说“闭上眼“”

    我听话的闭上眼,仿佛进入一个温暖的地方。

    “是个女孩呀“

    一声啼哭,打破平静。

  • 我跟医生朋友聊了聊,为什么香港少见医闹

    我跟医生朋友聊了聊,为什么香港少见医闹

    汉字真是有意思。繁体字的“t”字,拆开来是:医、殳和酉。“医”是放箭的筐,是杀人的;“殳”则是木棒,也是杀人的;“酉”是药酒,才是救人的。“t”字把医生的精神体现得淋漓尽致――别人是杀人的,但医生是救人的。而把“t”简化成“医”,还真是一个深刻的隐喻。

    榆林产妇跳楼事件发生后,引发了太多的讨论。但在逻辑上,首先应该明确一点,那就是这并不一定是个与“女权”有关的命题。因为需要家属签字才能进行手术,病人自己即便神智清晰也无法做主,这是普遍存在的现象,并非特别出现在女性身上,或产妇身上。所以,不要往女权上扯。

    本次事件是再次深度剖析反思医疗制度的机会

    因为事件的冲击性太大,我几乎有生以来第一次和医生朋友聊了这么多。这是位非常知名、优秀的医生,讲起这件事,他显得有些激动,颇有微词,总结起来一句话:医疗制度太不保护医生了。例如,他说在出现医疗事故时“举证倒置”,即医生和医院是被“有罪推定”的。在以往乃至今次医疗事故后,各方竟然常常要求医院提供自己无过失的证据。那么,以后所有产房是不是都要装窃听器、摄像头呢?作为病人,你不要隐私了吗?

    无论如何,医生是世界上最伟大的职业之一。因为这份职业太专业了,没有任何人可以取代,也没有任何外行有资格对医生的专业指指点点。即便有些医生“谋财”,但至少不“害命”。好了,问题回到很多人关心的点――到底谁才有权决定产妇是否可以剖腹产?为什么神智清晰的产妇无权决定自己剖腹产?而非要等在产房外的家属来签名同意呢?其背后,完全是制度问题。

    在香港,因为我亲身进过两次产房陪产,所以还是比较清楚香港的这套流程。进产房前,产妇就要签署所有的文件。其中一份文件规定,如果顺产尝试一段时间后,医生认为不适合顺产,那么有权对产妇进行剖腹产。另外,医生基本上拒绝给产妇用无痛分娩,因为无痛分娩有失误率,麻药可能造成胎儿智力受损。总之,病人能决定的范围是有限的,基本上都是由医生决定。

    医生要面对的是常人难以想象的情景。医生是一份极其需要经验的工作。在医疗救治中,有些东西指标可以量化,例如药的用量。但是有的东西是不能量化的,例如病人是否危殆,这是许多综合因素的复合结果。所以,最前线的判断必须只能交给医生。如果不把权力交给医生,也就无权让医生负责。

    然而在很多情况下,由谁决定病人可以动手术的权力,就是这样被无厘头地推到了一般来说不会有专业医疗知识的病人家属手上。所有人都出于理性计算,保证自己的责任最小化,从而谁也不需要对这个系统负责,却诞生了最可悲的结局。还孕育了一个副产品,就是“医闹”。

    就我在香港的医疗经验来看,我几乎见不到香港发生过医闹。为什么会出现医闹?朋友认为,其中一个原因,是“医闹成本”太低――闹不成,几乎不用付法律责任;而闹成了,就会获得相应的好处。近年医院因为担心名声受损,故而非常惧怕医闹。

    在香港,医疗资源是充分市场化的。医生相对独立于医院。医生收取的是“医生费”,医生费可以自己定价,符合自己身价即可,如果过高,当然就没病人找你看病――都由市场调节。医生的收入是不与卖药挂钩的,所以香港医生常常劝病人少吃药。反观内地的一些医院,医生的很大一笔收入来自开药、化验,以至于很多人说内地医疗因此更“市场化”。非也。这种医疗资源配置是远远不够市场化的,收入和卖药挂钩,某种程度上是“利益结构”罢了,不是市场运作。仅仅允许“莆田系”这样的医疗资源部分市场化,或许比完全没有市场化还要糟糕。医疗资源只有彻底市场化,引入市场竞争,才能变好。

    当然,香港的医疗制度同样存在问题。实际上,你去全世界任何地区问当地老百姓医疗资源好不好,或许都不会有正面答案。为什么?因为医疗费用是如此昂贵,而人们普遍又认为政府需要为民众的医疗埋单,所以医疗是政府不能承受之重。推荐本书:《医学霸权与香港医疗制度》(佘云楚等合著,香港,中华书局,2017年6月)。

    我跟医生朋友聊了聊,为什么香港少见医闹香港TVB电视剧中经常有医疗题材作品

    香港的医疗制度问题,在于利益集团强烈的排外性。香港的医学利益集团坚不可摧,以至于出现令人哭笑不得的画面:一个蜚声世界的医学家,全世界争着要,但是却拿不到香港的医生执照。香港医学界,也几乎不从外地引入人才――这不是歧视某一地区,而是歧视全世界。

    内地的医疗制度问题,和香港地区的医疗制度问题,是两个不同方向上的极端――前者极不保护医生的权威,后者过度保护医生的权威。当然,假如从“唯结果论”的角度看,香港地区的医疗制度可能仍旧好一点。因为无论如何,香港目前毕竟已经是全球平均寿命最长的地区,这与高水准的医疗关系甚密。

    无数悲剧的发生,究竟能否令我们生存的环境变好呢?哪怕只是一点点。有一点可以确认,那就是无论你对医疗制度有怎样的抱怨,对医生有怎样的愤恨,很遗憾地通知你,令医生倒霉、没有安全感,最终受害的一定是病人自己――医生朋友如是说。

  • 穿透童年记忆的爆米花

    文/洋芋丝丝

    穿透童年记忆的爆米花

    炒爆米花的手艺人

    01

    “嘭”的一声,惊起远处树枝上的鸟雀扑簌扑簌地飞,爆米花出炉的标志性声音,总是会吓坏这些不知名的小动物,却乐坏了山村里的孩子们。

    崎岖蜿蜒的山路,将城市的喧嚣隔绝在乡村的宁静之外,唯一能让这座小村子有一点车水马龙意味的,就是每周六的赶集日。

    村头的马路被挤得水泄不通,靠近村口的空地上,几个炒爆米花的老人依次排序而坐,把木炭丢进炉子,用一根竹筒将鼓风机的出风口和炉子连接起来,掏出装爆米花的网兜,架起手摇爆米花机,准备工作就绪,便开始了一天的工作生涯。

    村民们把玉米剥成粒,装在麻布口袋里,再拿到集市上交给这些炒爆米花的老手艺人。为了让自己有时间去置办其他的东西,村民们一般会让自己的孩子在边上守着。一群孩子蹲守在火炉旁,眼巴巴望着被火焰灼烧的爆米花机,静待那震耳欲聋的“嘭嗵”声开启让他们垂涎欲滴的美味。

    闭塞的村子里,孩子们不像城里孩子有琳琅满目的吃食,爆米花就是他们日常生活里解馋的零食。

    手摇炉子的嘎吱声、鼓风机的呼呼声、炭火燃烧的噼啪声,混合着爆米花出炉时惊天动地的响声,在热气飘散的空气里交织出一曲乡村孩童心间最美的乐曲。

    02

    小时候,我最喜欢和母亲一起赶集。每次赶集前,母亲都会提前剥好一小袋玉米粒,小小的我提着袋子,心里是抑不住的欣喜,想象着金黄的玉米粒变成松脆可口的爆米花的画面,脚步都不由得轻快了几分。

    在众多炒爆米花的手艺人里面,母亲尤其喜爱张叔炒的爆米花,其实不止母亲,村里很多人都喜欢张叔炒爆米花的手艺。

    其他人炒爆米花,就是将玉米粒放进手摇爆米花机里,在手柄的计时器上设置好时间,到时便撬送机子底部的阀门,放掉里面由于热气交织所形成的压力,在开盖的一瞬间将机子的开口对准网兜,然后“嘭”的一声,被热力发酵得膨胀的爆米花便散发着袅袅的白烟,在网兜里跳着欢快的舞蹈,然后渐渐平静。

    至此,玉米粒蜕变成爆米花的历程,也就完结了。

    一道工序就炒出的爆米花,体积异常庞大,口感蓬松有余、但酥脆不足,味觉体验并不算佳。

    张叔炒的爆米花却不一样,历经三道工序的洗礼出炉的爆米花,香脆可口,玉米的清香味被完整锁住,嚼一口顿觉唇齿留香,回味悠长。

    我曾无数次得见张叔炒爆米花时的场景,如今虽已过去数年,但记忆仍旧清晰如昨,历历在目。

    03

    张叔炒制的爆米花之所以和别人不同,秘诀就在于炒爆米花的途中要加水,这是张叔祖传的工艺。

    在玉米炒到三分熟的时候,撬送阀门,把压力全部放掉;开盖,往爆米花机里面加水。加水亦有讲究,一般三斤玉米炒一锅,头一次要加一杯水。有余热的玉米被冰水一激,口感才会变酥。

    加水后要用棍子搅动几下,免得玉米粒变软会黏在一起。然后盖上盖子,继续放在炉火上炒制,体积开始蓬松的玉米粒撞击着砂制的爆米花机,光是听着“沙沙”声便能想象到最后出炉的爆米花,该是何等酥脆。

    张叔能够靠听玉米粒发出的碰撞声,分析何时该加第二次水。同样要把机子里的压力放掉,加水后也要搅拌,不同的是水的分量是第一次的一半,多一分不够脆,少一分口感则过于干涩,香气不足。

    加完第二次水以后,先要加大火力把机子里的水分快速蒸发,这时张叔右手摇动爆米花机,左手摇动鼓风机,大火炙烤他黧黑的脸庞,晶莹剔透的汗水在炉火的映照下,发出耀眼的光。

    最为关键的一步,是在恰当的时机减小火力,小火收干残余水分,爆米花的口感才够脆。

    这一步是最考验手艺人对时间的把控的,时间短了,爆米花略显绵软,不仅不够香,反而会黏牙;时间长了,爆米花有股焦糊气,令人难以下咽。而张叔总能把时间掌控得刚刚好,因而他炒的爆米花又香又脆,口感独特,久而久之,张记爆米花成了村里人公认的全村最好吃的爆米花。

    04

    张叔的生意越来越好,十里八乡的人慕名前来,就为了让张叔给他们炒爆米花。甚至城里的老板也开车到了村子里,想采购张叔独门秘制的“水苞花”。(西南土话把爆米花称为苞花)

    张叔把家搬到了镇上,开了一家小店,除了给人代炒爆米花以外,还收购玉米,把炒好的爆米花打包好,城里的老板会开车来运走。

    食品加工厂把张记爆米花分别裹上奶油、五香粉、辣椒面,做成了不同的口味,然后再包装好卖给城里的超市,普通的爆米花摇身一变,竟成了昂贵的吃食。

    很多人看中了“水苞花”的商机,前来拜张叔为师学习手艺,张叔毫无保留,悉心教导他们秘诀所在。

    老友们觉得张叔是个傻子,祖传的技艺随便传授给外人,留着自己发财多好。

    张叔总是笑着解释:“我就宝儿一根独苗,如今他念完大学在城里工作,也没人会继承我的衣钵了。与其死守手艺,不如造福乡亲,也算是积德行善了。”

    后来张叔被儿子接到城里,儿子不让他再做给人炒爆米花的活计,张记爆米花就这样消失在岁月里。虽然很多拜张叔为师的乡亲陆续开了店,但他们炒的“水苞花”和张叔相比,都欠缺了一种无法言说的味道。

    如今我已不是总角孩童,却仍对张叔炒的爆米花念念不忘,可惜那份独有的味道,终究尘封在童年的记忆里,再也寻不到了。

    【乡土故事&行业故事汇&微小说首次征文】:家乡老行当的故事

  • 没有爱的地方没有天堂

    每天一小步,看得见的进步。欢迎来到《酷炫漫画英语口语》。

    聪明看世情,糊涂一颗心。

    营营碌碌的生活,需要足够的聪明,我的理性逐渐耗尽,其实有几人又不是如此?这足以解释鸡汤味十足的文章为什么会在当下大行其道,理性需重补,聪明要升级,就像我自己,也时不时会摆出一副导师的模样,写写充满所谓正能量的文章,以后还会写,冒充意见大师,以为是给别人救命稻草,我知道这不是真实的自我。

    世情无非家财万贯,事业有成,家庭幸福,妻子漂亮,孩子乖乖,得者得意洋洋,不得者哀声叹气,惶惶不可终日。

    细思量,这些再好,能持续多久? 此中又将失去什么? 似乎总有某种东西,站在更高的地方不断地向我发出莫测高深的警醒,我知道那是我的糊涂心在起作用,那才是真我。

    它是真正的主宰,凡是曾在午夜徘徊,暗自哭泣的人,凡是曾痛失爱人,亲人,朋友之人,都能更强烈地感受它的存在,它说人生短暂,为何颠倒,不知用功,明心见性?

    它是身内真如,了明一切;它是金刚持杵,砸碎一切世俗幻象,直指真理,助人了脱生死;它是摩尼宝珠,尘尽光生,照破山河。

    千江有水千江月,它在身内,又在身外,感知人间一切俗情,自觉觉他,如明月高挂,人内心的各种小九九,定要照得无处遁形。

    到此为止,凡赏人,看事,望山,嗅花,听音,莫不自在,若有感动,皆可了达其思所想。偶听台湾才女郑华娟之小曲《天堂》,愿为之一译。

    天堂

    Heaven

    嘿 亲爱的

    不是我

    不想留在你身旁

    我以为天堂

    总是在远方

    Oh, my dear

    It’s not

    Not that I don’t

    Want to be around you

    I’ve always thought

    Heaven is beyond you

    嘿 亲爱的

    坦白说

    我的过去

    有几分很像你

    一样在寻觅

    Oh, my dear

    So to speak

    My bygones

    a little like yours

    were here to seek

    只是日日夜夜

    岁月过去

    走尽千万里

    我也曾向往

    也曾彷徨

    Day and night

    As time went by

    I walked miles after miles

    I expected

    I wandered

    梦想的路上

    我日日夜夜

    轻轻叹息

    只想告诉你

    没有爱情的地方

    没有天堂

    On the road to my dream

    Day and night

    I’ve gently sighed

    Just telling you

    Heaven will not forgive

    If no love is to give

    天堂郑怡 – 天堂

    没有爱的地方没有天堂

    这次的漫画与音乐有关。

    没有爱的地方没有天堂

    漫画素材:

    Yeah, that’s right… Ignore me, pal!  You don’t want an instrument of my excellence and awesomeness that would instantly make you a chick magnet and the envy of all your friends! No, you’d rather have a cheap piece of junk when you have a chance to be cool for, like, the first time ever.

    是的,对的,朋友,请忽略我。 你竟然不要我这样一个超好超棒的乐器,我可以瞬间让你成为一个少女杀手,你的朋友只能羡慕嫉妒恨。 天,当你生平第一次,第一次有机会耍酷,而你却宁愿要一块垃圾。

    这里通过对比,帮助我们记忆英语里的两个单词。caustic是指“挖苦的”,右边的是一把很会挖苦人的吉他,左边的acoustic guitar是指原声吉他。

    这确实是一支非常会挖苦人的吉他。对话中的一个重点词chick magnet.  Chick是口语,指年轻女子,轻薄的说法,常译为“小妞”。Magnet是磁石,一个人是磁石,那是魅力非凡,人见人爱。 Chick magnet,说成少女杀手,一点都不为过。

    了解世界,记忆词汇,欣赏漫画。每天一小步,看得见的进步!

    Gutta cavat lapidem.

    水滴穿石!

  • 孔子首先是一位优秀学生

    孔子首先是一位优秀学生

    提到孔子,他在我的印象中首先是一位优秀学生。

    作为一位学生最可宝贵的品质是认识到学习是生命成长的需要,而不是别人强加给你的一项无意义的、乏味的劳动。

    反观我们的学习,如果排除一些急功近利的目的,我们很多人早已丢掉书本,在手机中娱乐至死了。孔子十五有志于学,从此矢志不移,一心向学,兀兀穷年,乐此不疲,直至生命的最后时刻。

    西方有句学习的格言:终身努力,便成天才。天才除了天分,就是努力。许多姿质卓越,天份极高,但最终泯然众人,更别说名垂千古,开宗立派,泽被苍生了。

    尼采有句话叫天才即是疯子,如果没有一股执著专注劲,又何以显示其是天才呢;在他们认准的方向上一条道走到黑,即使撞了南墙,也心无悔意;即使失败,也是悲壮而不是悲惨,更不是悲哀。一个嘲笑那些为梦想打拼而失败的人,那才是真正无知的人,愚妄的可怜虫。

    可惜生活中这样的人太多。

    他们自诩为生命的智者,遇阻即退,浅尝辄止,人生的时光虽然漫长,但是细想起来,他们不过是蒙着眼睛推磨的驴子,一生都在原地转圈。他们的所谓人生意义也大都是从别人嘴里贩卖来的,他们的脑子是别人思想的跑马场;他们掌握着高超的生活技巧,信奉着随波逐流是最高明的航海术,生活教会了他们的“术”,却让他们远离了“道”。

    作为优秀学生的第二个品质便是专注。水能穿石,线能断木,靠得就是专注;学习上没有专注,终将无法体味到学习的乐趣和学习的本质。

    孔子跟师襄子学操琴。一支曲子反复弹,弹了十多天,即使是最笨的学生也早已演奏娴熟了。襄子不止一次地催促他再换一支曲子,孔子说:我还有掌握操琴的技艺呢!

    师襄子摇了摇头,走到一边,孔子正襟危坐,神情专注,他手抚琴弦,目送飞鸿,琴声悠然,宛如天籁。

    襄子说:我们可以更换一支新的曲子了吗?

    孔子摇了摇头,很谦卑地说:我还没有体味到这支曲子的内涵呢。

    日子飞快地流逝,孔子一直在这一支曲子上时而飞快地抚弄着,时而蹙首凝眸,目眺远方。当那支曲子在孔子的手下仿佛是从他生命中流淌出来一样的时候,师襄子拈须颔首,这支曲子的神韵除了孔子真的谁也没有这样能够畅快地演绎过。

    师襄子刚想劝他换一支曲子,孔子摇了摇头,摆了摆手,说出了自己心中的困惑:

    琴曲之中能够有这样的胸怀和气度,他会是谁呢?

    孔子寝食难安,辗转反侧,食不甘味,以至三月不知肉味,直至一天清晨,霞光之中,他满面红光,起坐觉吟,面向东方的朝阳拜了三拜,恭恭敬敬:

    他,面色黧黑,身材颀长,……,不是文王还能是谁?

    这时候师襄子避席起身,向学生孔子长揖下拜:我的老师教我的时候,说这支琴曲就叫《文王操》。

    这是孔子学琴的一个片断。

    我现在非常怀疑,那些关于博览群书的建议是开启蒙昧的良药,还是别有用心的误导?博览群书只能够增加与人聊天时候的谈资,别说触类旁通举一反三了,更不用说经时济世了。

    举一反三是孔子倡导的极高的学习境界。至少孔子的琴艺再也不需要弹奏别的琴艺来证明自己了,更不要说去考什么证书了。

    反观我们现在的教育更多的是举三反一,大搞题海战术,弄得苦不堪言,却收效甚微,为伊消得人憔悴,直教人不再想学习。

    在我知道的学生中有一位同学,她是某中学普通班的学生。进入普通班,至少说明他资质不是出类拔萃,但是凭借努力,她创造了一个神话,那就是以一个普通学生的身份考进了许多优秀学子梦寐以求的清华大学。问其个中原因,她只回答了一句话:

    在高三一年,我几乎把数学教材做了不下于16篇。

    这也许和孔子学琴有着异曲同工之处。学习上有许多信奉“一本书”主义的人最终收到良好的效果。

    孔子作为一位优秀的学生,他身上的品质很多,作为一个普通求学的学生,我们只要能明白,学习是我们生命尤其是精神成长的需要,并且懂得为学习用尽所有心思,这就足够了。

  • 妻子出轨之后

    晚饭的时候,他告诉她明天四点多要去西北出差。少则一星期,多则半个月。

    她说:“你咋不早说,好让我准备准备。”

    “有啥准备的,公司都准备好了。”他说。

    “我是说你要出门儿了,总得弄几个菜不是。这样简简单单的,出门儿也别扭。”说着她就把酒柜里的法国红酒拿了过来,“你把它打开,我再弄俩菜。”扭身进了厨房,一会儿功夫两个菜就端了上来。

    “来,今儿个我陪你喝两杯,就算是给你送行。”

    他说:“这又不是第一次,干嘛这么煽情。”

    她说:“说对了,这就叫以情送行。你抓紧时间,不仅吃饭调情,待会还要让你交公粮呐。”

    吃罢饭,他去洗澡,她整理他出差的物品。十点多钟,她就拉着他睡觉。折腾了个巴钟头,一切都才安静了下来。

    他很快进入了梦乡 ,而她的高潮才刚刚来。看着旁边睡得像死猪一般的他,心里还是痒的不行,翻来覆去难以入睡。寂寞难耐,她打开微信和她的主任聊了起来。她告诉主任明天他要出差,自己刚收完公粮,情绪还在高潮中,接着就把刚才拍的小视频发了过去。似叹气又似暗示地说“明天就将进入寂寞期。”夜深人静,她和主任一会儿文字聊,一会儿无声视频。渐渐勾起了主任的魂,慢慢稳住了自己的欲,直到人困马乏。

    早上四点他就醒了,申申懒腰,感觉浑身犯困。她对他说:“我很累,不下楼送你了,到南街你喝一碗牛肉汤补补吧。”他下楼了,她趴在窗户上看着他上了车。她蹦了起来,她庆幸一个短暂且自由的世界已经到来,一切快乐和美感将释放。越想越美,情不自禁拨通了主任的电话。

    他到汤馆喝了一碗肥汤,然后沿着观赏大道快走。边走边想,今天这套有没有纰漏?能不能套住狼?他暗自祈祷,但愿成功。

    他是偶然在她的微信里发现她的蛛丝马迹的。打那以后,他和平常没有什么不一样,可心里总像吃蝇子似的。被戴绿帽子的感觉,就像心被针扎。没有确凿的真凭实据,他绝不能采取任何动作。但他下定决心,对她的出轨就应该像对待电脑病毒一样,格机重装系统。他看看手机,时间还早。他继续往前走,他也没有心思观看周围的一切,他在设想钓住鱼的场景。他越想越觉着捣蛋,禁不住自己都笑了。

    他再看看时间,已出来一个半钟头了,设计时间已到,扭身就往回走。当他拿钥匙开门时怎么都打不开,里边被锁了。他敲门足足有五分钟,她才把门打开。“你怎么又回来了,我还以为是搞推销的那。”她说话间带有几分恐慌。

    “身份证忘带了”,说着就这屋到那屋来回转着乱翻腾。她也跟着他来回转,“你能不能坐下来稳稳食儿,让我给你找?”他没听她,继续开柜子翻床箱,弄的不亦乐乎。

    当他把卧室窗帘拉开的时候,她都已经瘫坐在地上。早已领教过厉害的她,明白这次后果的严重,她鼻子一把泪一把地发誓,以后再也不敢,请求原谅。

    那个站在窗户跟前的她的主任浑身发抖,平时人五人六的大主任,这时脸难看的能扭下来水。他被这突如其来的变故震惊了,尽管他经历过大风大浪 ,但这次是毫无心理准备。他后悔来的太莽撞,恨自己太忘乎所以。他现在最大的愿望,就是最好不发生肢体冲突,比较和平脱身,接下来只要是能用钱摆平的都不是事儿。他不能说什么,等着他有什么动作。他脑子就要爆了,还能说出什么。

    他没有动粗,也没有施暴,而是用手机把他和她的狼狈像录了下来,足足有十分钟。然后对他说:“你可以走了,接下来怎么做你懂的。”他慌忙穿上衣服,抱头鼠窜。接着他对她声厉内荏地说:“你也滚吧,再进这门腿打折。”

    处理完这一档子事,已是早上八点多。他泡了一杯茶,点了一支烟,那烟圈从他嘴里一个挨着一个冒出,且浓而圆。看得出他现在的心情比早上出去的时候还要好,他成功了。他把今天发生的一切当成是摘帽,而不是被戴绿帽。也正因为她的私欲膨胀不仅招致自己被扫地出门,而且还帮他清理了门户。他越想越高兴,顺手拨通了他属下的电话:“阿丽呀,乖,哥哥已把磁盘清空,就等你来重装系统啦,哈哈……”“对不起,我已到深圳,这边是配置很高的设备,我们正在做系统。”当他听完对方的回话,脸变得铁青,就像有人用破鞋底子扇过似的。

    绿帽子还要戴吗?他再次陷入了沉思。

  • 大学生常犯的误区你中了几个?

    大学生常犯的误区你中了几个?

    这就像是一个固有的规律。

    刚刚到大学时,总有学长学姐对我说“没事,一节课不上也没关系,大学嘛,不挂科才不正常!”

    配上学长学姐脸上不屑的笑,好像真的就是他们说的那么一回事。

    但是,新入大学的学弟学妹们,请你们听听我这个即将毕业的老学姐的建议,虽然不至于让你变得有多了不起,至少可以减少误区。

    大学生常犯的误区你中了几个?

    误区1——大学可以随意旷课和朋友去玩

    我只想说说出这种话的人,你旷课多少节了?请问你哪里了不起?

    是能让父母在亲友面前吹嘘,还是上了社会面试的时候可以当做资历?

    别逗了,你就是懦弱加自私!

    你明知到旷课让你变得无所事事虚度光阴,还死要面子的嘴上逞强,连正视自己都没有勇气。更让人不耻的是你居然还在新生面试夸夸其谈,误人子弟。

    我们来算一笔账,看看旷课有多亏。

    首先你交的学费里你缺的每节课的费用,等于白送给学校。

    其次你旷课和朋友出去玩又是一笔开销。

    最后,如果你不幸挂科补考,恭喜你,补考费也是不小的开支。

    那这时候说不定又有人反驳了,也有很多人旷课去做兼职啊,丰富自己啊,还能挣外快!

    这就不得不提我们的第二个误区了。

    误区二——兼职挣钱比上课重要

    拜托,现在大学生常做的兼职有哪些?发传单,话务员,服务生,举牌员……

    这些旷课都要去兼职的小可爱们我想问问,这些兼职和你的未来有多大联系?

    如果你未来想做这一些事,你完全可以不用浪费读大学那些钱,全心投入没准你还能带出几个团队,比你在学校耗着好多了。

    如果不是,这种学不到技术,积累不了人脉的临时兼职,于你而言就是歧途。

    拿着眼前的微薄工资,你好像比身边人过得好那么一点。但是亲爱的,你的人生不止有大学这3-4年啊!

    把眼光放的长远一点,至少不要为了眼前的芝麻,丢了西瓜。

    兼职是个累人的活,至少会消耗你的精神和体力。那你在学校的学习效率,交友效率,办事效率都将大打折扣,这样的你,毕业后拿什么和人家拼?

    所以,不要觉得兼职挣到一点小钱就很开心,丰富自己,多学多看才是硬道理。

    本事是自己的,别人嫉妒也没办法。

    大学生常犯的误区你中了几个?

    误区三——不入学生会不罢休

    其实我一直搞不懂,为什么新生一听你是学生会的就会很崇拜你,为什么?

    很多人凭着一份憧憬就盲目的加入学生会,总觉得好像这是一件非常了不起的事情。

    其实真没有!

    第一,学生会会占用你的大部分时间,你除了日常学习,需要参加各种学生会的活动,各种跑来跑去。但如果你只是执行任务的那一个,除了没主见我真不知道说你什么好。

    第二,学生会锻炼能力。这个其实不一定,因为学生会的交接都是循序渐进的,它有一个固定的流程,如果不是做到什么干部,说白了,你就是在帮忙打杂。

    当然学生会也有它的优势,比如优先评奖助学金,锻炼自己责任心,执行力等。

    但这些都不是你盲目加入学生会的理由,你应该先去了解学生会的性质,要做什么,能做到哪一步,再结合自身情况考虑要不要加入,而不是朋友一约就去了,事后退出就抱怨学生会怎么不好。

    误区四——报名各种社团

    这个是我也犯过的错误。大一那会我报了广播社,学生会,演讲与口才协会……一堆协会。

    刚开始感觉这些自己都感兴趣,都想学,然后打了鸡血一样。可是没过几天,各个社团活动时间冲突,我面临各种选择,不得不放弃一些社团,给人留下半途而废的印象。

    不仅如此,因为活动过多,导致我和室友在一起的时间也很少,连说点私房话的闺蜜都没有。持续了一段时间,我不仅累而且孤独。

    所以新生们,根据我扎心的经历,大学里社团最好不要超过3个,合适的话两个就可以了。因为你除了集体活动,还有自己的生活需要管理。

    而且学多不如学精,找到了兴趣钻研就好了。

    大学生常犯的误区你中了几个?

    误区五——因为是室友就强迫自己和她亲密

    这一点我身边很多人向我反应,我问及原因她就支支吾吾的说:我不想一个人吃饭,一个人逛街。

    那你想和不喜欢的人吃饭,和不喜欢的人逛街吗?

    因为是室友就一定要亲密吗?

    不,我才不要。

    生活已经够累,何必到了自己的狗窝还要戴上面具?

    室友是随机分配的,住在一起是缘分,有事大家各退一步好商量,不争不吵不刻意疏离就够了。

    何必非逼自己刻意和她亲密?明明三观不合,难不成打碎自己的三观去重新建一个?

    如果是那种很奇葩的室友呢?我简直不敢想象。

    亲密的朋友不一定就是住在一起的,在大学里,室友除了和你上课睡觉在一个空间,好像只要不争吵,和普通同学有什么区别呢?

    刻意了解,假装喜欢上不喜欢的人,不仅你自己累,还让她觉得虚伪。人都是敏感的,真喜欢和假喜欢时间久了就知道了。届时你如何自处?

    当然,如果你们刚好三观合,又聊得来,真是皆大欢喜。否则的话,我建议大家可以看得淡一点,多个志同道合的朋友一起出行,不刻意为难室友,多一份理解,其实也没什么大不了。

    好了,说了那么多误区,你中了几个呢?

    当然还有更多误区,欢迎大家评论留言。

    大学生常犯的误区你中了几个?

  • 门阀更迭,陈郡谢氏衰落,兰陵萧氏崛起

    门阀更迭,陈郡谢氏衰落,兰陵萧氏崛起

    当年,谢安的孙子谢混,少有美誉,号称风华江左第一。他喜爱山水不愿从政,与谢灵运、谢晦等人居住在乌衣巷中,成日清谈宴饮,怡然自得。

    好景不长,其父谢琰在镇压孙恩之乱时,因轻敌与谢混的两个哥哥同时罹难。谢混悲痛欲绝,为了维持家族地位,撑起谢氏门庭,他不得不登上政治舞台,接受了世袭的爵位蔡望公。

    谢混风姿绝伦,被东晋孝武帝选为女婿,将晋陵公主嫁与他为妻,婚后,谢混渡过了一段无忧无虑的时光。

    后来谢混因党同刘毅,被刘裕下狱,晋陵公主还没来得及搭救,仅隔一天便被处死。

    谢混死后,刘裕命晋陵公主改嫁给出身琅琊王氏的王练,公主虽坚决不从,但诏令命其必须与谢家断绝婚姻关系。谢混没有儿子,只有两个女儿,而且都还很年幼,公主无奈之下,把谢家的事全部托付给谢混的侄儿谢弘微。

    谢混家几世都是朝廷宰相辅臣,仅僮仆就有一千人之多,谢弘微为谢混经营生计,一文钱或一尺丝帛都登记入账。

    九年后,刘裕称帝即位,晋陵公主降封号为东乡君,在她老病将死的时候,朝廷终于准许她再回到谢家。东乡君进门以后,看到房屋如新,粮仓满满,还开垦了一些荒地,农田比以前还多,不由得感叹道:“谢混在世时,一直看重这个孩子,可以说是有知人之明,谢混可以虽死犹生了。”亲戚朋友看到这个情形,也不禁为之流泪。

    就在回到谢家的这一年,东乡君也去世了,无论官府还是谢氏家族都认为,谢家的金银财宝应归两个女儿,而田宅、奴仆应该归谢弘微所有,谢弘微却什么都不要,而且用自己的俸禄,安葬了东乡君。

    谢混的大女婿殷睿喜欢赌博,听说谢弘微不要谢家的财物,于是,夺取妻子的妹妹、伯母和两位姑母应得的谢家财产,用来偿还赌债。谢家人受谢弘微谦让精神的感化,没有任何争执。

    有人指责谢弘微说:“谢氏家族几代的家产,都成了殷睿一日之间的赌债,没有比这更不合理的事情了,而你却视而不见,就好像把财物都抛进江海之中却自以为清廉一样。假如为了博取一个清白的名声,而使家里生计困难,也是我认为不可取的做法。”

    谢弘微说:“亲戚之间争夺财物,是最卑鄙的事情,如今家里的人都还不干预,我怎么可以教她们去争!家产分多分少,总不至于匮乏,人死之后,谁还在乎身外之物!”

    谢弘微带病主持婶婶与谢混叔叔的合葬礼,结果病情加重,不治身亡,时年四十二岁。

    谢家的另一个人物,谢混的侄子,刘宋前秘书监谢灵运喜欢游历山川,探险搜奇,跟从他游玩的有几百人,往往在山林中伐木开路,当地百姓不胜惊恐,还以为是山贼前来抢劫。

    会稽太守孟顗一向与谢灵运有矛盾,上疏朝廷,指控谢灵运心怀不轨,阴谋叛乱,并且发动军队防备自己。谢灵运亲自到皇宫门前,为自己申辩,文帝刘义隆将他任命为临川内史。

    谢灵运任职后,仍然游玩放纵,完全不管郡中政事,被有关部门弹劾。同年,司徒刘义康派遣郑望生前往逮捕谢灵运。谢灵运却生擒郑望生,率领军队逃走,还写下诗句说:“韩国灭亡张良起,秦王称帝仲连耻。”

    朝廷派兵追赶讨伐,生擒谢灵运。廷尉上奏朝廷说,谢灵运率众反叛朝廷,论罪当处死刑。文帝爱惜他的才华,打算只免掉他的官职。彭城王刘义康却坚持认为,谢灵运的罪过不宜宽恕。最后,文帝下诏,谢灵运减罪一等,流放到广州。

    一段时间后,又有人告发谢灵运购买武器,结交武士,打算在夺取三江口后反叛,没有成功,刘义隆终于下诏,将谢灵运在广州就地斩首示众。谢灵运一生恃才傲物,放荡不羁,看不起别人,不注意小节,终于为自己招来大祸。

    李白诗中曾写道:谢公宿处今尚在,渌水荡漾清猿啼。

    因益州动乱频发,荆州刺史刘义庆任命周籍之率领二千士卒前去救援成都。

    叛军领袖赵广则从广汉来到郫县,构筑阵地,将数百个营盘互相连接。周籍之和裴方明等会合后合兵一处,共同进攻郫县,攻克郫县后,又进兵广汉击败了赵广。

    赵广等人先后逃回到涪城和五城,这时,裴方明才向外发布了益州刺史刘道济的死讯。

    而此时的梁州、南秦州刺史甄法护因治理不力,造成氐族和羌族部落对朝廷怀有二心,因此,宋文帝起用了北伐时弃城逃跑,此刻正在服刑的萧思话为此二州刺史。

    裴方明向叛军的大营涪城进军,先后将张寻、唐频等人击败,从此,赵广等人四处逃散,叛军瓦解。

    甄法护的哥哥,新任益州刺史甄法崇到达成都,逮捕了费谦并将其斩首,叛军领袖程道养率领二千余家逃入深山之中,其余党羽也各自统率部众隐藏在深山峡谷中,然而时常出山骚扰不绝。

    氐王杨难当趁刘宋新任的梁、南秦二州刺史萧思话尚未到任,而原刺史甄法护即将东下之机,大举兴兵,进攻梁州,攻克了白马城,俘虏了晋昌太守。随即,杨难当又攻打蒹葭,生擒了晋寿太守。甄法护闻讯弃城逃走,投奔洋川郡的西城。杨难当于是占据了汉中的广大地区,任命他手下赵温为梁、秦二州刺史。

    杨难当把他攻克刘宋汉中的捷报奏报给北魏朝廷,并把雍州逃到汉中的流民七千多家送往长安。

    宋文帝新委任的二州刺史萧思话抵达襄阳后,知道自己管辖的地盘已经被人所侵占,立即派萧承之为前锋,准备收复失地。萧承之立即出发,沿途招兵买马,募集了一千人后,进驻磝头。

    杨难当在汉中大肆烧杀抢劫,然后自己率众离开了汉中,向西返回仇池,留下赵温据守梁州,又派薛健屯驻在黄金山。

    萧思话命萧坦攻克了铁城戍,杨难当的部将赵温、薛健与蒲甲子,联合进攻萧坦的大营,被萧坦打败了,赵温等人只好撤退,盘踞在西水一带。

    刘宋临川王刘义庆派遣裴方明率领三千士卒前去援助萧承之,他们攻克并占据了黄金戍。赵温只能放弃州城,退保小城,薛健和蒲甲子则退保下桃城。

    萧思话率军随后赶到,与萧承之合兵攻打赵温等人,屡战屡胜。刘宋参军王灵济率领另一支队伍,直指洋川,攻击南城,攻克敌阵,生擒守将赵英。因南城粮草已空,无法供给军队,王灵济只好率兵撤退,并与萧承之会师。

  • 七夕闲谈——浅析牛郎织女故事中的男权思潮

    七夕闲谈——浅析牛郎织女故事中的男权思潮

    文/漪瞳

    近年已习惯七夕被当作爱情节日炒作,追本溯源即为牛郎织女的民间传奇。

    最初记载为——

    “天河之东有织女,天帝之女也,年年机杼劳役,织成云锦天衣,容貌不暇整。天帝怜其独处,许嫁河西牵牛郎,嫁后遂废织衽。天帝怒,责令归河东,许一年一度相会。

    涉秋七日,鹊首无故皆髡,相传是日河鼓与织女会于河东,役乌鹊为梁以渡,故毛皆脱去。”

    后被民间讹传为:某放牛郎趁某仙女临凡沐浴,窃取其衣物,令其无法返回家园,那位仙女遂被迫与之步入家徒四壁、穷困潦倒的同居生活,还莫名其妙产生感情,不仅为其劳作生子,更背叛双亲不肯回家, 最终被母亲带回犹恋恋不舍,每年七夕特意赶赴鹊桥只为见面。

    民间流传典故已耳熟能详,然其中意涵却很待考究。

    首先,女生通常不大可能喜欢初度见面即用卑劣手段满足私利的胁迫者(除非斯德哥尔摩症候群)。牛郎既窥视织女沐浴还盗窃衣物,更以此胁迫织女与之同居生活,其行径可谓寡廉鲜耻。织女对其初印象应该极差。愚昧蠢笨亦无法作为其脱罪借口。

    若排除斯德哥尔摩症候群,织女对牛郎产生感情更近乎毫无可能。织女生于仙境,成长于仙阙,其意识形态、教育背景导致与牛郎价值观差异迥然,牛郎无论德行亦或材干皆乏善可陈,对织女不具备任何吸引力,彼此间毫无共同语言,更无任何情感基础。即便阴错阳差被迫入住同屋,生活中也必然矛盾重重、辛酸悲伤,恨不能早离去早解脱,哪还可能存何眷顾留恋?

    那么,如此逻辑荒谬、悖于常理的故事又为何能流传千古、常盛不衰呢?

    先从故事中男女主角设置入手——

    男主即牛郎,穷困潦倒、愚昧无知、行为不端。

    女主即织女,仙姿佚貌、心灵手巧、温婉贤良。

    再看故事情节设置——

    优秀卓越的女主遭行为可耻的男主窃衣胁迫后,仿佛突然罹患斯德哥尔摩症候群,对其产生状若痴迷的感情,成为终日纺绩、侍夫育儿的家庭主妇。为此不惜与父母断绝联系。

    灵隽飘逸的仙女莫名成为荆钗布裙的主妇,居然还绝弃尊亲、无怨无悔、甘之如饴,其中“嫁乞随乞”的男权思想岂非昭然若揭?

    古代男权思想强调女性需恪守妇德,谨遵“三从四德”、“夫为妻纲”,任凭女性如何光彩夺目、惊采绝艳,也不能对夫婿存任何选择权,嫁入夫家只能以侍奉公婆、相夫教子、料理家事为己任,对母家情谊从此淡漠,事事以夫家为先。

    历史中类似“仙女临凡”的典故屡见不鲜,其背后的男权思想根深蒂固。男权者眼中,女性只能围绕家庭侍奉夫婿,供男性调度差遣,纵然仙女亦不能免俗。

    对于放牛郎窃衣强占仙女,众男权制拥戴者遂争相传颂,极力推崇佳丽无缘无故投怀送抱、任劳任怨奉献终生。

    无论男性如何懦弱无能、落魄潦倒,女性皆应毫无道理地对其趋之若鹜、矢志无渝,还假其名曰“坚贞爱情”,实为束缚女性之思想枷锁。

    牛郎织女的故事本无丝毫浪漫情怀可言,如此宣扬男权的典故若当今还被传颂推崇,无疑为对女性赤裸裸的侮辱。

    真正的感情必为势均力敌,彼此独立又能够互相吸引,绝非无条件顺从亦或甘为附属。

    值此七夕之夜,谨祝寰宇间:真情皆获善果,挚爱终成眷属。

  • 高通加解密引擎提权漏洞解析

    目录

    前言

    背景知识

    漏洞成因

    CVE-2016-6738漏洞成因

    CVE-2016-6738漏洞补丁

    CVE-2016-3935漏洞成因

    CVE-2016-3935漏洞补丁

    漏洞利用

    什么是提权

    利用方法回顾

    本文使用的方法

    CVE-2016-6738漏洞利用

    CVE-2016-3935漏洞利用

    参考

    前言 

    CVE-2016-3935 和CVE-2016-6738 是 360冰刃实验室发现的高通加解密引擎( Qualcomm crypto engine)的两个提权漏洞,分别在2016 年10月11月的谷歌android 漏洞榜被公开致谢,同时高通也在 2016年 10月11月 的漏洞公告里进行了介绍和公开致谢。这两个漏洞报告给谷歌的时候都提交了 exploit 并且被采纳,这篇文章介绍一下这两个漏洞的成因和利用。

    背景知识 

    高通芯片提供了硬件加解密功能,并提供驱动给内核态和用户态程序提供高速加解密服务,我们在这里收获了多个漏洞,主要有3个驱动

    高通加解密引擎提权漏洞解析

    高通加解密引擎提权漏洞解析

    qcedev driver  就是本文两个漏洞发生的地方,这个驱动通过 ioctl 接口为用户层提供加解密和哈希运算服务。

    高通加解密引擎提权漏洞解析

    加解密服务的核心结构体是 struct qcedev_cipher_op_req, 其中, 待加 /解密数据存放在 vbuf 变量里,enckey 是秘钥, alg 是算法,这个结构将控制内核qce引擎的加解密行为。

    高通加解密引擎提权漏洞解析

    哈希运算服务的核心结构体是 struct qcedev_sha_op_req, 待处理数据存放在 data 数组里, entries 是待处理数据的份数,data_len 是总长度。

    漏洞成因

    可以通过下面的方法获取本文的漏洞代码

    高通加解密引擎提权漏洞解析

    CVE-2016-6738漏洞成因

    现在,我们来看第一个漏洞 cve-2016-6738

    介绍漏洞之前,先科普一下linux kernel 的两个小知识点

    1) linuxkernel 的用户态空间和内核态空间是怎么划分的?

    简单来说,在一个进程的地址空间里,比 thread_info->addr_limit 大的属于内核态地址,比它小的属于用户态地址

    2) linuxkernel 用户态和内核态之间数据怎么传输?

    不可以直接赋值或拷贝,需要使用规定的接口进行数据拷贝,主要是4个接口:

    copy_from_user/copy_to_user/get_user/put_user

    4个接口会对目标地址进行合法性校验,比如:

    copy_to_user = access_ok +__copy_to_user // __copy_to_user 可以理解为是memcpy

    下面看漏洞代码

    高通加解密引擎提权漏洞解析

    当用户态通过 ioctl 函数进入 qcedev 驱动后,如果 command  QCEDEV_IOCTL_ENC_REQ(加密)或者 QCEDEV_IOCTL_DEC_REQ (解密),最后都会调用函数 qcedev_vbuf_ablk_cipher 进行处理。

    高通加解密引擎提权漏洞解析

    qcedev_vbuf_ablk_cipher 函数里,首先对 creq->vbuf.src 数组里的地址进行了校验,接下去它需要校验 creq->vbuf.dst 数组里的地址

    这时候我们发现,当变量 creq->in_place_op 的值不等于 1 时,它才会校验 creq->vbuf.dst 数组里的地址,否则目标地址creq->vbuf.dst[i].vaddr 将不会被校验

    这里的 creq->in_place_op 是一个用户层可以控制的值,如果后续代码对这个值没有要求,那么这里就可以通过让 creq->in_place_op = 1  来绕过对 creq->vbuf.dst[i].vaddr 的校验,这是一个疑似漏洞

    高通加解密引擎提权漏洞解析

    在函数 qcedev_vbuf_ablk_cipher_max_xfer 里,我们发现它没有再用到变量 creq->in_place_op 也没有对地址 creq->vbuf.dst[i].vaddr 做校验,我们还可以看到该函数最后是使用  __copy_to_user 而不是 copy_to_user 从变量 k_align_dst 拷贝数据到地址 creq->vbuf.dst[i].vaddr

    由于 __copy_to_user 本质上只是 memcpy,  __copy_to_user 的目标地址是 creq->vbuf.dst[dst_i].vaddr, 这个地址可以被用户态控制, 这样漏洞就坐实了,我们得到了一个内核任意地址写漏洞。

    接下去我们看一下能写什么值

    高通加解密引擎提权漏洞解析

    再看一下漏洞触发的地方,源地址是 k_align_dst ,这是一个局部变量,下面看这个地址的内容能否控制。

    高通加解密引擎提权漏洞解析

    在函数 qcedev_vbuf_ablk_cipher_max_xfer 的行 1160 可以看到,变量  k_align_dst 的值是从用户态地址拷贝过来的,可以被控制,但是,还没完

    高通加解密引擎提权漏洞解析

    1195调用函数 submit_req ,这个函数的作用是提交一个 buffer 给高通加解密引擎进行加解密,buffer 的设置由函数 sg_set_buf  完成,通过行 1186 可以看到,变量 k_align_dst 就是被传进去的 buffer , 经过这个操作后, 变量 k_align_dst  的值会被改变, 即我们通过__copy_to_user 传递给 creq->vbuf.dst[dst_i].vaddr 的值是被加密或者解密过一次的值。

    那么我们怎么控制最终写到任意地址的那个值呢?

    思路很直接,我们将要写的值先用一个秘钥和算法加密一次,然后再用解密的模式触发漏洞,在漏洞触发过程中,会自动解密,如下:

    1) 假设我们最终要写的数据是A, 我们先选一个加密算法和key 进行加密

    高通加解密引擎提权漏洞解析

    2) 然后将B作为参数传入 qcedev_vbuf_ablk_cipher_max_xfer  函数触发漏洞,同时参数设置为解密操作,并且传入同样的解密算法和key

    高通加解密引擎提权漏洞解析

    这样的话,经过 submit_req 操作后, line 1204 得到的 k_align_dst 就是我们需要的数据。

    至此,我们得到了一个任意地址写任意值的漏洞

    CVE-2016-6738漏洞补丁

    这个 漏洞的修复  很直观,将 in_place_op 的判断去掉了,对 creq->vbuf.src creq->vbuf.dst 两个数组里的地址挨个进行 access_ok 校验

    下面看第二个漏洞

    CVE-2016-3935漏洞成因

    高通加解密引擎提权漏洞解析

    command 为下面几个case 里都会调用  qcedev_check_sha_params 函数对用户态传入的数据进行合法性校验

    ·        QCEDEV_IOCTL_SHA_INIT_REQ

    ·        QCEDEV_IOCTL_SHA_UPDATE_REQ

    ·        QCEDEV_IOCTL_SHA_FINAL_REQ

    ·        QCEDEV_IOCTL_GET_SHA_REQ

    高通加解密引擎提权漏洞解析

    qcedev_check_sha_params 对用户态传入的数据做多种校验,其中一项是对传入的数据数组挨个累加长度,并对总长度做整数溢出校验

    问题在于, req->data[i].len  uint32_t 类型, 总长度 total 也是 uint32_t 类型, uint32_t 的上限是 UINT_MAX, 而这里使用了 ULONG_MAX 来做校验

    高通加解密引擎提权漏洞解析

    注意到:

    32 bit 系统,  UINT_MAX= ULONG_MAX

    64 bit 系统,  UINT_MAX = ULONG_MAX

    所以这里的整数溢出校验 64bit系统是无效的 ,即在 64bit 系统,req->data 数组项的总长度可以整数溢出,这里还无法确定这个整数溢出能造成什么后果。

    下面看看有何影响,我们选取 case QCEDEV_IOCTL_SHA_UPDATE_REQ

    高通加解密引擎提权漏洞解析

    qcedev_areq.sha_op_req.alg 的值也是应用层控制的,当等于 QCEDEV_ALG_AES_CMAC 时,进入函数 qcedev_hash_cmac

    高通加解密引擎提权漏洞解析

    在函数 qcedev_hash_cmac 里, line 900 申请的堆内存  k_buf_src 的长度是 qcedev_areq->sha_op_req.data_len ,即请求数组里所有项的长度之和

    然后在 line 911 ~ 920 的循环里,会将请求数组 qcedev_areq->sha_op_req.data[]  里的元素挨个拷贝到堆 k_buf_src 
    里,由于前面存在的整数溢出漏洞,这里会转变成为一个堆溢出漏洞,至此漏洞坐实。

    CVE-2016-3935漏洞补丁

    高通加解密引擎提权漏洞解析

    这个 漏洞补丁  也很直观,就是在做整数溢出时,将 ULONG_MAX 改成了 U32_MAX, 这种因为系统由 32位升级到64位导致的代码漏洞,是 2016 年的一类常见漏洞

    下面进入漏洞利用分析

    漏洞利用

    androidkernel 漏洞利用基础

    在介绍本文两个漏洞的利用之前,先回顾一下 android kernel 漏洞利用的基础知识

    什么是提权

    高通加解密引擎提权漏洞解析

    linuxkernel 里,进程由 struct task_struct 表示,进程的权限由该结构体的两个成员  real_cred  cred 表示

    高通加解密引擎提权漏洞解析

    所谓提权,就是修改进程的 real_cred/cred 这两个结构体的各种 id  值,随着缓解措施的不断演进,完整的提权过程还需要修改其他一些内核变量的值,但是最基础的提权还是修改本进程的 cred, 这个任务又可以分解为多个问题:

    怎么找到目标 cred ?

    cred 所在内存页面是否可写?

    如何利用漏洞往 cred 所在地址写值?

    利用方法回顾 

    高通加解密引擎提权漏洞解析 

    [来源]

    上图是最近若干年围绕 android kernel 漏洞利用和缓解的简单回顾,

    09 ~ 10 年的时候,由于没有对 mmap 的地址范围做任何限制,应用层可以映射0 页面,null pointer deref 漏洞在当时也是可以做利用的,后面针对这种漏洞推出了  mmap_min_addr  限制,目前 null pointer deref 漏洞一般只能造成 dos.

    11 ~ 13 年的时候,常用的提权套路是从  /proc/kallsyms  搜索符号  commit_creds  prepare_kernel_cred  的地址,然后在用户态通过这两个符号构造一个提权函数 (如下)

    高通加解密引擎提权漏洞解析

    可以看到,这个阶段的用户态 shellcode 非常简单, 利用漏洞改写内核某个函数指针 (最常见的就是 ptmx 驱动的 fsync  函数)将其实现替换为用户态的函数, 最后在用户态调用被改写的函数 , 这样的话从内核直接执行用户态的提权函数完成提权

    这种方法在开源root套件  android_run_root_shell 得到了充分提现

    后来,内核推出了kptr_restrict/dmesg_restrict 措施使得默认配置下无法从 /proc/kallsyms  等接口搜索内核符号的地址

    但是这种缓解措施很容易绕过android_run_root_shell  里提供了两种方法:

    1.      通过一些内存 pattern 直接在内存空间里搜索符号地址,从而得到  commit_creds/prepare_kernel_cred 的值;
    libkallsyms:get_kallsyms_in_memory_addresses

    2.      放弃使用 commit_creds/prepare_kernel_cred  这两个内核函数,从内核里直接定位到  task_struct cred   结构并改写
    obtain_root_privilege_by_modify_task_cred

    ·        2013 推出 text RO PXN 等措施,通过漏洞改写内核代码段或者直接跳转到用户态执行用户态函数的提权方式失效了android_run_root_shell  这个项目里的方法大部分已经失效 , PXN 时代,主要的提权思路是使用 rop

    具体的 rop 技巧有几种,

    1.      下面两篇文章讲了基本的 linux kernel ROP  技巧

    Linux Kernel ROP – Ropping your way to # (Part 1)/)

    Linux Kernel ROP – Ropping your way to # (Part 2)/)

    高通加解密引擎提权漏洞解析

    可以看到这两篇文章的方法是搜索一些 rop 指令 ,然后用它们串联  commit_creds/prepare_kernel_cred,是对上一阶段思路的自然延伸。

    1.      使用 rop 改写  addr_limit  的值,破除本进程的系统调用 access_ok 校验,然后通过一些函数如   ptrace_write_value_at_address 直接读写内核来提权 , selinux_enforcing 变量写0 关闭 selinux;

    2.      大名鼎鼎的  Ret2dir bypassPXN;

    3.      还有就是本文使用的思路,用漏洞重定向内核驱动的 xxx_operations  结构体指针到应用层,再用 rop 地址填充应用层的伪 xxx_operations  里的函数实现;

    4.      还有一些 2017 新出来的绕过缓解措施的技巧, 参考

    进入2017年,更多的漏洞缓解措施正在被开发和引进,谷歌的 nick正在主导开发的项目  Kernel_Self_Protection_Project   对内核漏洞提权方法进行了分类整理,如下

    Kernel location

    Text overwrite

    Function pointer overwrite

    Userspace execution

    Userspace data usage

    Reused code chunks

    针对以上提权方法,Kernel_Self_Protection_Project  开发了对应的一系列缓解措施,目前这些措施正在逐步推入linux kernel 主线,下面是其中一部分缓解方案,可以看到,我们回顾的所有利用方法都已经被考虑在内,不久的将来,这些方法可能都会失效

    ·        Split thread_info off of kernelstack (Done: x86, arm64, s390. Needed on arm, powerpc and others?) * Movekernel stack to vmap area (Done: x86, s390. Needed on arm, arm64, powerpc andothers?)

    ·        Implement kernel relocation andKASLR for ARM

    ·        Write a plugin to clear structpadding

    ·        Write a plugin to do formatstring warnings correctly (gcc’s -Wformat-security is bad about const strings)

    ·        Make CONFIG_STRICT_KERNEL_RWX andCONFIG_STRICT_MODULE_RWX mandatory (done for arm64 and x86, other archs stillneed it)

    ·        Convert remaining BPF JITs toeBPF JIT (with blinding) (In progress: arm)

    ·        Write lib/test_bpf.c tests foreBPF constant blinding

    ·        Further restriction ofperf_event_open (e.g. perf_event_paranoid=3)

    ·        Extend HARDENED_USERCOPY to useslab whitelisting (in progress)

    ·        Extend HARDENED_USERCOPY to splituser-facing malloc()s and in-kernel malloc()svmalloc stack guard pages (inprogress)

    ·        protect ARM vector table asfixed-location kernel target

    ·        disable kuser helpers on arm

    ·        rename CONFIG_DEBUG_LIST betterand default=y

    ·        add WARN path for page-spanningusercopy checks (instead of the separate CONFIG)

    ·        create UNEXPECTED(), like BUG()but without the lock-busting, etc

    ·        create defconfig “make” targetfor by-defaul
    t hardened Kconfigs (using guidelines below)

    ·        provide mechanism to check forro_after_init memory areas, and reject structures not marked ro_after_init invmbus_register()

    ·        expand use of __ro_after_init,especially in arch/arm64

    ·        Add stack-frame walking tousercopy implementations (Done: x86. In progress: arm64. Needed on arm,others?)

    ·        restrict autoloading of kernelmodules (like GRKERNSEC_MODHARDEN) (In progress: Timgad LSM)

    有兴趣的同学可以进入该项目看看代码,提前了解一下缓解措施,

    比如 KASLR for ARM, 将大部分内核对象的地址做了随机化处理,这是以后 androidkernel exploit 必须面对的;

    另外比如 __ro_after_init ,内核启动完成初始化之后大部分  fops 全局变量都变成 readonly 的,这造成了本文这种利用方法失效, 所幸的是,目前 android kernel 还是可以用的。

    本文使用的利用方法

    对照 Kernel_Self_Protection_Project  的利用分类,本文的利用思路属于  Userspace data usage

    Sometimesan attacker won’t be able to control the instruction pointer directly, but theywill be able to redirect the dereference a structure or other pointer. In thesecases, it is easiest to aim at malicious structures that have been built inuserspace to perform the exploitation.

    具体来说,我们在应用层构造一个伪 file_operations 结构体(其他如  tty_operations 也可以),然后通过漏洞改写内核某一个驱动的 fops  指针,将其改指向我们在应用层伪造的结构体,之后,我们搜索特定的 rop 并随时替换这个伪 file_operations  结构体里的函数实现,就可以做到在内核多次执行任意代码(取决于 rop) ,这种方法的好处包括:

    1.      内核有很多驱动,所以 fops 非常多,地址上也比较分散,对一些溢出类漏洞来说,选择比较多

    2.      内核的 fops 一般都存放在 writable data 区,至少目前android 主流 kernel 依然如此

    3.      将内核的 fops 指向用户空间后,用户空间可以随意改写其内部函数的实现

    4.      只需要一次内核写

    下面结合漏洞说明怎么利用

    CVE-2016-6738漏洞利用

    CVE-2016-6738是一个任意地址写任意值的漏洞,利用代码已经提交在  EXP-CVE-2016-6738

    我们选择重定向 /dev/ptmx 设备的 file_operations, 先在用户态构造一个伪结构,如下

    高通加解密引擎提权漏洞解析

    根据前面的分析,伪结构的值需要先做一次加密,再使用

    高通加解密引擎提权漏洞解析

    下面是核心的函数

    高通加解密引擎提权漏洞解析

    参数 src 就是 fake_ptmx_fops 加密后的值,我们将其地址放入  qcedev_cipher_op_req.vbuf.src[0].vaddr 里,目标地址 qcedev_cipher_op_req.vbuf.dst[0].vaddr  存放  ptmx_cdev->ops 的地址,然后调用 ioctl 触发漏洞,任意地址写漏洞触发后,目标地址  ptmx_cdev->ops  的值会被覆盖为 fake_ptmx_fops.

    此后,对 ptmx 设备的内核fops函数执行,都会被重定向到用户层伪造的函数,我们通过一些 rop 片段来实现伪函数,就可以被内核直接调用。

    高通加解密引擎提权漏洞解析

    比如,我们找到一段 rop 如上,其地址是 0xffffffc000671a58 其指令是 str w1, [x2] ; ret ;

    这段 rop 作为一个函数去执行的话,其效果相当于将第二个参数的值写入第三个参数指向的地址。

    我们用这段 rop 构造一个用户态函数,如下

    高通加解密引擎提权漏洞解析

    9*8 ioctl 函数在 file_operations 结构体里的偏移,

    *(unsignedlong*)(fake_ptmx_fops + 9 * 8) = ROP_WRITE;

    的效果就是 ioctl 的函数实现替换成 ROP_WRITE, 这样我们调用 ptmx ioctl 函数时,最后真实执行的是 ROP_WRITE, 这就是一个内核任意地址写任意值函数。

    同样的原理,我们封装读任意内核地址的函数。

    有了任意内核地址读写函数之后,我们通过以下方法完成最终提权:

    高通加解密引擎提权漏洞解析

    搜索到本进程的 cred 结构体,并使用我们封装的内核读写函数,将其成员的值改为0,这样本进程就变成了 root 进程。
    搜索本进程 task_struct  的函数  get_task_by_comm 具体实现参考 github 的代码。

    CVE-2016-3935漏洞利用

    这个漏洞的提权方法跟 6738 是一样的,唯一不同的地方是,这是一个堆溢出漏洞,我们只能覆盖堆里边的 fops (cve-2016-6738 我们覆盖的是 .data 区里的 fops )

    在我测试的版本里,k_buf_src 是从 kmalloc-4096 分配出来
    的,因此,需要找到合适的结构来填充
    kmalloc-4096 ,经过一些源码搜索,我找到了 tty_struct 这个结构

    高通加解密引擎提权漏洞解析

    在我做利用的设备里,这个结构是从 kmalloc-4096 堆里分配的,其偏移 24Byte 的地方是一个  struct tty_operations 的指针,我们溢出后重写这个结构体,用一个用户态地址覆盖这个指针。

    高通加解密引擎提权漏洞解析

    4128 + 536867423 + 7 *0x1fffffff = 632

    溢出的方法如上,我们让 entry 的数目为 9 个,第一个长度为 4128, 第二个为 536867423 其他 7个为0x1fffffff

    这样他们加起来溢出之后的值就是 632 这个长度刚好是  structtty_struct 的长度,我们用 qcedev_sha_op_req.data[0].vaddr[4096] 这个数据来填充被溢出的  tty_struct 的内容

    主要是填充两个地方,一个是最开头的 tty magic, 另一个就是偏移 24Bype  tty_operations 指针,我们将这个指针覆盖为伪指针 fake_ptm_fops.

    之后的提权操作与 cve-2016-6738 类似,

    高通加解密引擎提权漏洞解析

    如上,ioctl 函数在 tty_operations 结构体里偏移 12 个指针,当我们用 ROP_WRITE 覆盖这个位置时,可以得到一个内核地址写函数。

    高通加解密引擎提权漏洞解析 

    高通加解密引擎提权漏洞解析

    同理,当我们用 ROP_READ 覆盖这个位置时,可以得到一个内核地址写函数。

    高通加解密引擎提权漏洞解析

    最后,用封装好的内核读写函数,修改内核的 cred 等结构体完成提权。

    参考 

    android_run_root_shell

    xairy

    NewReliable Android Kernel Root Exploitation Techniques

     *