如何精确查找PHP WEBSHELL木马?

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

关于网上流传查找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键之类空白字符。上面的代码片段中,也没考虑到这一点。

snoopy.class.php中_striplink方法的正则分析

对于已经习惯8点左右起床上班的我来说,生物钟在早上8点左右,准时醒,有时候想赖床,但也无法再次入睡。起床洗漱,打开电脑,玩了两局web的三国杀,逛逛论坛,觉得饿了,才去煮点面条吃。回来继续,无意中打开PPC,看到一位网友“落叶人生”同学的帖子问一个正则问题,纠结了一下是否解释一下,以便给对方释疑解惑,也加固自己的知识。犹豫半天,觉得还是写下吧。下面正题:

PPC链接http://bbs.phpchina.com/thread-189797-1-1.html

preg_match_all(“‘<\s*a\s.*?href\s*=\s*([\"\'])?(?(1)(.*?)\\1|([^\s\>]+))[^>]*>?(.*?)‘isx”,$document,$links);
对于一般的规范链 接能很好的使用,但不知道为什么对href=后面的网址不含引号的情况无法提取成功,哪个朋友帮分析下?谢谢!

其实,我没明白他的意思是想提取链接地址href后面的内容的,还是提取整个标签a中间的所有。

在下面的回帖中,他提到了这个正则来自snoopy.class.php的_striplink方法中的正则,遂到sf.net上下载一份原版到本地。

周末记事-还是我的老爷机


06年买的主机箱+飞利浦CRT显示器,07年更换电源风扇,08年上半年分别更换了主板,硬盘,下面年,在内存最低价的时候,99块包快递买了DDR2 667的内存条一根,更新了老内存。09年再次更换了电源风扇,10年由于换地方住,搬家,桌子太靠墙,CRT大屁股显示器放不下,买了优派的22寸液晶显示器,鸟枪换炮了,哈。CRT显示器忍痛割爱以50元的价格卖给了小贩,哎,心痛。接着,鼠标又不灵了,更换了鼠标。从06年坚守到现在的器件只有CPU、主机箱、显卡,光驱、键盘了。昨天晚上,10点半左右,老爷机又突然间罢工了,顿时,我心急如焚呀,心想即将到来的周末,作为宅男,我不能接受。赶紧调试吧。首先,我以为是天气太热,导致CPU温度过高,激活主板自动保护策略,强制关机的。赶紧把CPU风扇拿出来,放到空调边吹了会,装上去之后,开机,还是不行,主板灯亮了,但是CPU风扇不转,而且,电源也没反映,我愕然了,难道电源又坏了不成?好吧,我认输,周末再说吧,睡觉。

SSDT HOOK


这是我写的第一个驱动程序,呵呵。虽然烂了点,但是有纪念意义。放在这里留个纪念,这个程序用到了,SSDTHOOK 应用程序和驱动程序
通信等知识,代码比较凌乱。
先简单说一下SSDT HOOK。应用程序的API在使用的时候要调用系统的低层的API,那么系统如何找到对应的API呢?在系统里有一张表。
System Services Descriptor Table,系统服务描述符表。在这个表里就有各种系统API的地址,我们只要把这些地址改成我们自己函数的地址。那么结果大家可想而知了,系统就会调用我们的API了。道理就是这么简单。

PHP中正则表达式对UNICODE字符码的匹配


我们在来分析一下这个网友写的正则表达式【[chr(128)-chr(256)]+】,正则表达式的PCRE引擎是如何解释这个正则的呢?首先,我们要知道,在正则表达式中,中括号【[]】表示字符组,字符组中除了连接符【-】只外,都不是元字符,也就是说,都是普通字符,当然,如果连字符出现在第一个,或者不是标识两个字符之间范围的,都是普通的字符横杠“-”罢了。这里的chr(128)只是标识ASCII码为128(确切的说,ASCII码只是0-127个,128到其他的,应该不叫ASCII码了。),但是在正则里,他仍然代表【c、h、r、(、1、2、8、)】(顿号不是,只是区分易读的)这八个字符罢了。这个正则里的连接字符,是哪些范围呢?很明显,这里的连接字符的范围是【)-c】,“)”ASCII码为0×29,也就是十进制的41;“c”的ASCII码为0×63,也就是十进制的99,那么,他这个连接字符的范围就是ASCII 41(chr(41))到ASCII 99(chr(99))之间的字符。

发现个好玩的代码改写MBR


前几天看关于mbr被改写,导致无法进入主引导项,只能看到mbr显示的东西。而且,重装系统也不会重写mbr部分的引导。只能通过DOS里执行fdisk /mbr来清除掉,然后重写才能完成。今天,闲着没事,写了代码,小试一下。

LO**网购物小记


上上上周,也就是6月11号左右,温度比较高,偶尔小雨,天气阴沉,适合蚊子生长繁殖,蚊虫很多,夜里,疯狂的咬俺。遂到LO**网站淘了一番,最终选择一款蚊帐,加1块钱送了个凉席药物枕头,送了个小闹钟。心想,过2-3天肯定送到,再晚也就4-5呗,都在上海,结果,一个星期,两个星期过去了,还没送到。今天早上,听到门铃声,正在猜想这会是谁按的呢?快递?我没买东西啊。。。开了门之后,才知道N天前网购的蚊帐送来了。赶紧付款,拿货。打开之后,我无语了。好漂亮的闹钟。下面上图。

eval、gzinflate、 base64_decode三函数加密的代码在线解密


其实,这边日志的主题不是想写被eval、gzinflate、 base64_decode三函数加密的代码的在线解密的。主要写生活中的两三件事。

其一,刘威同学生了个儿子,在这里恭喜一下。俺又多了个侄子,年底回家,连他结婚的喜酒,跟小侄子的见面礼一并给了。(此人已经生子,还未结婚,大家一起来鄙视一下,当然,你也可以羡慕一下。)

二,前天下午听姐姐说晚上跟今天早上,还有中午打电话回家,都没人接听。我听了之后,有点心慌,也假装镇定到下班回家,先是打了电话到大姐家,接电话的是外甥,其也说也曾经尝试了几次,也是没接通,然后,决定明天去我父母家看望一下(中考完毕),顺便带点农副产品。我听了之后,却愈加担心,也有点欣慰。担心的是家里的电话为什么没人接,欣慰的是外甥很懂事了,也很孝顺他的姥姥,也就是我的父母。接着,我又尝试几遍,仍未有响应。又打了一通电话,后得知家里电话坏了,才放下心来。继续坚持每周一个电话回家。

升级ubuntu内核,virtualbox提示Kernel driver not installed (rc=-1908)出错


今天,我闲的蛋疼,更新来ubuntu内核,重启之后,也没在意,为了PS一张图,GIMP用起来不方便,遂开虚拟机virtualBox,进XP,用PhotoShop来操作,结果,VirtualBox却提示“ernel driver not installed (rc=-1908)”,我还没来得及点确定,又提示
The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Re-setup the kernel module by executing
‘/etc/init.d/vboxdrv setup’
as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.

第 3 页,共 23 页12345...1020...最旧 »

CNXCT小组的博客 is Stephen Fry proof thanks to caching by WP Super Cache