一个echo文件的程序 [转载]
2004-11-07 02:13
435 查看
上次用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是不是生成了^_^
另外问一下,在这种情况下,还有没有别的上传文件的方法?
呵呵,还好,难不到我。就将就那个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是不是生成了^_^
另外问一下,在这种情况下,还有没有别的上传文件的方法?
相关文章推荐
- 一个简单的php文件上传程序
- 如何把一个java程序打包成exe文件,运行在没有java虚拟机
- 如何把一个java程序打包成exe文件,运行在没有java环境里
- 用myeclipse如何将java程序生成一个.exe可运行文件?
- 与众不同 windows phone (38) - 8.0 关联启动: 使用外部程序打开一个文件或URI, 关联指定的文件类型或协议
- 写一个注册的小程序,账号和密码都存在文件里面
- 对于一个文件夹中的所有txt文件进行遍历的程序
- 未能加载文件或程序集“Oracle.DataAccess”或它的某一个依赖项。试图加载格式不正确的程序。
- 64位系统 IIS7.0配置.net网站时报错:未能加载文件或程序集“XXX”或它的某一个依赖项。试图加载格式不正确的程序。
- 9-6 文件比较。写一个比较两个文本文件的程序。如果不同,给出第一个不同处的行号和列号。
- 未能加载文件或程序集“Oracle.DataAccess”或它的某一个依赖项。试图加载格式不正确的程序。
- 1.编写一个简单的C语言程序:计算输入多个整数的平均值,并将此程序分割成多个小文件。 2.为第1题中的程序编写makefile文件,用make编译后改成返回最小值,再编译,观察有多少文件不需要重新
- 一个非常简洁的验证码程序(转载)
- WINDOWS 2008下未能加载文件或程序集“XXX”或它的某一个依赖项。试图加载格式不正确的程序解决办法
- 创建一个窗口程序(JFrame),标题栏起名为“浏览器”,有一个菜单条,有“文件”、“编辑”、“查看”3个菜单。“文件”菜单有两个菜单项,一项是“打开”,一项是“保存”,“打开”项做成子菜单,有两个菜
- Windows系統下如何区分一个PE文件是否是32位程序还是64位程序?
- IIS配置遇到的问题——未能加载文件或程序集“Oracle.DataAccess”或它的某一个依赖项。试图加载格式不正确的程序。
- 自己以前用C#写的简单升级程序源码(比如更新一个安装包或者压缩文件),带进度条,支持续传
- 一个简单实用的遗传算法c程序(转载)
- Linux操作系统的简单指令及如何使用vim编写一个程序,然后使用gcc查看【预处理】、【编译】、【汇编】、【链接】各阶段文件的内容。