近来二三事(流水账)

信用卡上个月刷了4000块,上周周末,在去公司的路上还了2000多,还欠1000多。今天,睡到9点才起床,应该算懒觉吧,煮了点稀饭,跟GF把夏天用的物品等 晒晒,修理下坏的窗帘,重摆了电线的线路,省的每次都从窗户连到床上,过路都麻烦。之后,稍微清扫垃圾,便出门了。直奔招商银行,取钱之后,再跑到浦发银行,还了信用卡,又跑到中国银行,还了下个月的贷款。房贷卡是江苏的,在上海存5000,收了25块的手续费,真黑。

Continue reading


广发英雄帖-招聘广告(DBA、PHP开发、运维工程师、BI专员)

首先,我已经改行了,因此这个招聘和安全无关,不是招安全工程师的。其次,我现在所在的团队,是一个比较年轻的团队,无论是同事的平均年龄,还是公司的成立时间,或者是公司的收入状况。所以,如果你现在觉得自己充满激情,渴望学习和成长,耐得住性子,能做好在小公司待2年以上的准备,不太在乎加班多(不一定有加班费),不太计较眼前得失,希望和公司一起成长,渴望自己的努力在公司的成功道路上占据重要的比重(相对于大公司比较细分化的工作岗位),并且有志于往下列岗位发展,欢迎投递简历至 cfc4n # cnxct {dot} com ,最好来信注明薪资期望

Continue reading


apache RewriteMap MapSource自定义规则使用手记

10.1期间,一位朋友问我一个apache的 Rewrite规则中一个高级语法RewriteMap的用法问题。其想要实现的是这个功能,有个多用户的blog,用户访问的时候,是用三级域名访问的。比如http://cfc4n1.blog.cnxct.com,http://cfc4n2.blog.cnxct.com这种三级域名。在服务器上,是对三级域名做泛解析。每个三级域名都生成了一个静态的html主页文件。由于用户数量较多,linux ext硬盘格式上同一目录文件太多,检索文件的速度会有折扣,遂将文件打散到不同的目录下。打散方式是以用户名【三级域名中的cfc4n1,cfc4n2等】的MD5值的每隔两位作为一个目录。

Continue reading


wordpress博客永久地址的二次重写

在很久很久以前,从前有座山,山上有个庙,庙里有个和尚在讲故事,讲什么呢?从前有座山,山上有个庙,庙里有个和尚在讲故事,讲什么呢……
言归正传,很久以前,博客的URL是这种形式http://www.cnxct.com/cnxct/612/ 这种形式,后来呢,听网上SEOer说,为了更好的SEO,URL中包含关键词,可提高权重等等等等。遂打算把老的URL形式重写成

Continue reading


XTrap保护中的IDTHOOK恢复

最近比较懒什么东西都没学。研究了两天传说中的三大游戏保护中的一个,叫XTrap.据说是三个保护中最弱的一个。但是能力有限,还是没有过掉保护。哎,失败。不过从中学到了点知识。留个记录。
XTrap保护在驱动里用SSTD HOOK了NtDeviceIoControlFile,NtOpenProcess,NtOpenSection
NtProtectVirtualMemory 等几个API. Shadow SSDT也HOOK了 NtUserFindWindowex
NtUserSetWindowsHookEx等几个API。他还在应用层也HOOK了一些仿调试函数。这些防护可以通过简单的恢复来绕过。

Continue reading


如何精确查找PHP WEBSHELL木马?

上篇提到了关于网上流传查找PHP webshell的python脚本中,不严谨的代码并且给出了一个python的检测代码,同时,下文里也提到不能检测到反引号的命令执行的地方。今天,我想了下,现在把思路发出来。正则表达式该如何写?
分析:对于可移植性的部分共同点是什么?与其他正常的包含反引号的部分,区别是什么?
他们前面可以有空格,tab键等空白字符。也可以有程序代码,前提是如果有引号(单双)必须是闭合的。才是危险有隐患的。遂CFC4N给出的正则如下:【(?:(?:^(?:\s+)?)|(?:(?P<quote>[“‘])[^(?P=quote)]+?(?P=quote)[^`]*?))`(?P<shell>[^`]+)`】。

Continue reading


关于网上流传查找PHP webshell的python脚本中,不严谨的代码

不是闲着蛋疼,也不是批评谁,只是不忍心看到不严谨的代码在网上被疯传,误导初学者。以下引用的代码以及思路来自网络,只针对代码,不针对人。如有雷同,纯属巧合。
来自某大牛python版本的检测服务器上PHP代码中webshell的脚本代码片段如下:
findtype=[‘.php’,’.inc’] #要检查的文件后缀类型
keywords=[ [“eval\(\$\_POST”,”发现PHP一句话木马!”], [“(system|shell_exec|exec|popen)”,”发现PHP命令执行函数!”]]
然后,接着是python处理上面列表(数组),把每个列表的第一个元素作为正则表达式内容,然后进行匹配处理的。先看第一个检测“PHP一句话木马”的这个正则。【eval\(\$\_POST】这里转义了字符【_】,字符“_”不是元字符,不需要转义的,其实,转义也无妨,聪明的正则表达式引擎会识别修正的。来说下这个思路的遗漏之处。这里仅仅匹配字符串“eval(”后面的变量“$_POST”,如果是“$_GET”呢?如果是“$_REQUEST”呢?如果程序先把$_POST/$_GET/$REQUEST的key的变量先赋值给一个自定义的变量名,然后在用PHP的“eval”函数执行这个变量呢?是不是就查找不到了?其实,并不需要知道“eval”函数执行的变量名是什么,只要查找“eval(”即可,当然,还要注意“eval”函数后面可以有空格,tab键之类空白字符。上面的代码片段中,也没考虑到这一点。

Continue reading