ProFTPd Local pr_ctrls_connect Vulnerability - ftpdctl 漏洞及攻击代码分析

攻击代码网址:http://www.exploit-db.com/exploits/394/

1、执行环境:

1、ProFTPD 1.3.0/1.3.0a

2、编译ProFTPD时。--enable-ctrls选项必须打开

./configure --enable-ctrls

2、执行參数:

[email protected]:~# gcc 394.c -o 394

[email protected]:~# ./394 –s <option> [-p <option_path>] [-o <option_offset>]

參数-s后的值是攻击的两种不同的方式,值有1和2能够选择。第1种方式使用当前环境,第2种方式是使用ret-to-libc的方式。

注:return-to-libc 攻击中。其堆栈中的返回地址被替换为还有一条指令的地址,而且堆栈的一部分被覆盖以提供其參数。这同意攻击者调用现有函数而无需注入恶意代码到程序中。

參数 -o參数-p无太大意义。

不过帮助使用该攻击代码。

3、代码分析

代码运行命令为:[email protected]:~# ./394 –s 1

3.1分析程序參数

程序的第236行。是对394.c程序执行时的參数进行分析。getopt(int argc, char * const argv[ ], const char * optstring)用来分析命令行參数。

參数argc和argv是由main()传递的參数个数和内容。參数optstring 则代表欲处理的选项字符串。

选项字符串里的字母后接着冒号“:”。则表示还有相关的參数,全域变量optarg 即会指向此额外參数。然后以下就是针对不同的參数进行处理。因为终于起作用的仅仅有-s一个參数。以下将着重的分析-s參数。

getopt处理到-s參数后,因为optstring中冒号“:”的存在。optarg会指向-s的下一个參数,也就是1。

然后程序在246行将该參数值赋值给变量wybor。等待下一步处理。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGFuY2hhb3Fp/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >

3.2确定參数的有效性

因为394.c程序仅仅提供了2种漏洞攻击方式,所以程序中241行会将-s后的參数值限定为1或2。其它的不论什么值都视为非法,将导致程序直接退出。

此外,程序中的还有一个变量path,用于指定漏洞程序的绝对路径,值默觉得/usr/local/bin/ftpdctl。也正是ProFTPDserver的ftpdctl中调用了ctrls.c中的pr_ctrls_connect()函数。而该函数中的一个strncpy()是该漏洞的缓冲区溢出点。

在394.c的267行通过fopen()打开文件的方式确定,该路径下的文件是否有效。

3.3构造溢出数据并运行攻击

终于实施攻击的语句是298行和324行的execle(path,path,"-s",buf,0,sh);

int execle(const char *path, const char *arg, ..., char * const envp[]);

用execle函数能够把当前进程替换为一个新进程,path參数表示你要启动程序的名称包含路径名,arg參数表示启动程序所带的參数,一般第一个參数为要运行命令名。

将环境变量传递给须要替换的进程envp保存环境信息的数据

变量buf用于存放溢出数据,除了大量的无意义数据,最重要的是有/bin/sh的入口地址。当缓冲区溢出后。程序会被引导,跳转到/bin/sh,从而能运行随意指令。

构造溢出数据主要涉及到两个变量:buf[229]和sh[2],因为-s后的參数(1或2)决定了利用漏洞的两种不同方式,以下将针对这两种方式分开描写叙述:

方式1也就是wybor=1时,buf中除了前两个字节数据”/A”,其余227个字节所有为/bin/sh的入口地址,如图。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGFuY2hhb3Fp/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >

envp[]则是使用0x90作为填充字符。并在末尾写入事先构造好的shellcode。shellcode的主要作用是运行: setuid(0)、setgid(0)、/bin/sh和exit(0)。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGFuY2hhb3Fp/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >

方式2也就是wybor=2时,因为使用ret-to-libc的方式,buf中的数据除了第一个字节为‘/’,最后3字节依次为LIBC_SYSTEM地址、LIBC_NEXT__地址和/BIN/SH地址以外,其余225个字节均为填充字符0x41。

envp[]是使用‘’’作为填充字符并在结尾写入字符串”/bin/sh”。

3、分析结果

由上面的分析,能够看出,394.c程序主要是通过直接调用ProFTPDserver的命令ftpdctl -s来对漏洞实施攻击。之所以是这样,那是由于,命令ftpdctl中须要与server建立本地socket连接来进行进程间的通信。建立socket连接的时候,ftpdctl.c调用了在ctrls.c中874行定义的函数pr_ctrls_connect(char *socket_file)。

pr_ctrls_connect(char *socket_file)的主要作用是,创建AF_UNIX类型的流式套接字,并连接到server。用于连接的本地套接字地址为ctrl_sock。而ctrl_sock是struct sockaddr_un结构,它有两个參数sun_family、sun_path。

sun_family是协议族,赋值为AF_UNIX,用于本地进程间通信。sun_path是本地文件的路径,在程序中使用socket_file对sun_path赋值。

不幸的是在进行赋值时,使用了没有检查数据边界的strncpy(),能够看到在程序的923行写入内存的函数为strncpy(ctrl_sock.sun_path,socket_file,strlen(socket_file)),非常显然这个函数并没有对写入的数据进行边界检查。也就是说能够向大小为sizeof(ctrl_sock)的内存区域写入随意长度的数据。

ctrl_sock是在函数pr_ctrls_connect()中定义的局部变量,发生函数调用时计算机会在动态存储区为之开辟大小为sizeof(ctrl_sock)的内存存储区,与此同一时候动态存储区也会用于保存函数调用时的现场信息和函数返回地址,这就为缓冲区溢出攻击创造了条件。也正如394.c源代码凝视中所说,我们能够通过控制socket_file的长度来使缓冲区发生溢出。

的确394.c正是利用这个漏洞,构造了含有/bin/sh返回地址的超长数据。在调用ftpdctrl时使用參数-s来替换正常的socket_file路径。当ctrls.c运行strncpy()时。这个超长的shellcode使得缓冲区溢出,从而转去运行/bin/sh,以此来达到攻击的目的。

时间: 2024-11-05 15:49:11

ProFTPd Local pr_ctrls_connect Vulnerability - ftpdctl 漏洞及攻击代码分析的相关文章

XSS漏洞自动化攻击工具XSSer

XSS漏洞自动化攻击工具XSSer XSS是Web应用常见的漏洞.利用该漏洞,安全人员在网站注入恶意脚本,控制用户浏览器,并发起其他渗透操作.XSSer是Kali Linux提供的一款自动化XSS攻击框架.该工具可以同时探测多个网址.如果发现XSS漏洞,可以生成报告,并直接进行利用,如建立反向连接.为了提供攻击效率,该工具支持各种规避措施,如判断XSS过滤器.规避特定的防火墙.编码规避.同时,该工具提供丰富的选项,供用户自定义攻击,如指定攻击载荷.设置漏洞利用代码等.

mssql2005存手工注入漏洞附攻击方法- 寒龙网出品

/**/跟空格的作用一样,有的时候可以过一些过滤爆库语句,修改红色部分的数字挨个猜出库 /**/and/**/(select/**/top/**/1/**/isnull(cast([name]/**/as/**/nvarchar(500)),char(32))%2bchar(124)/**/from/**/[master].[dbo].[sysdatabases]/**/where/**/dbid/**/in/**/(select/**/top/**/1/**/dbid/**/from/**/[

关于elasticsearch1.4.3以下版本安全漏洞的攻击过程复现

elasticsearch1.4.3以下有几个版本可以执行groovy脚本,这个被利用后可以直接调用widows的cmd命令和linux的shell.网上有一些文章,但是写的不够接地气,这里我复现了这个漏洞的攻击过程,重新写下. 第一步:安装Firefox的Hackbar插件,安装好好,如图所示: 第二步:在浏览器地址栏敲:http://localhost:9200/_search?pretty,注意这里可以是你自己全文检索服务器的IP和端口号,然后点击回车: 第三步:选择Enable Post

SQL防漏洞注入攻击小结

3///   4/// 判断字符串中是否有SQL攻击代码  5///   6/// 传入用户提交数据  7/// true-安全:false-有注入攻击现有:  8public bool ProcessSqlStr(string inputString)  9{ 10    string SqlStr = @"and|or|exec|execute|insert|select|delete|update|alter|create|drop|count|\*|chr|char|asc|mid|su

CVE-2014-0322漏洞成因与利用分析

CVE-2014-0322漏洞成因与利用分析 1. 简介 此漏洞是UAF(Use After Free)类漏洞,即引用了已经释放的内存,对指定内存处的值进行了加1.其特点在于攻击者结合flash实现了对漏洞的利用,第一次分析这种IE+Flash组合的漏洞利用因此写下此文档作为记录. 2. 实验环境 操作系统:Win7 SP1 浏览器:IE 10.0.9200.16798(补丁打到MS14-010(KB2909921)) 漏洞编号:CVE-2014-0322 微软补丁:MS14-012 3. 漏洞

【连载】从安全攻击实例看数据库安全(二)安全攻击方法分析

回顾: 在上一章中主人公卡尔采用多种攻击方法对好运公司的网络信息系统进行攻击,通过MAC地址欺骗取得了与公司内部网络的连接,通过口令破解,以远程方式登录公司内部服务器,通过缓冲区溢出漏洞闯进了操作系统并拥有最高权限,最关键的是卡尔以好运公司信用卡信息为目标,通过三种途径,包括web应用的文件上传漏洞.SQL注入攻击和绕过合法应用的方法,批量导出数据库中大量的敏感信息. 攻击的方法多种多样,这些方法有的在上面攻击的实例中用过,有的随攻击对象的情形而变化,但也是有规律可循的.总的来说,攻击是一步一步

Linux内核竞争条件漏洞-导致远程代码执行

导读 *本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担. 运行了Linux发行版的计算机设备,如果内核版本小于5.0.8的话,将有可能受到一个内核竞争条件漏洞的影响,并导致系统无法抵御远程网络攻击.潜在的攻击者可以利用Linux内核中net/rds/tcp.c的rds_tcp_kill_sock TCP/IP实现缺陷,从而触发设备的拒绝服务(DoS)状态,并在受影响的设备上实现远程代码执行.攻击者可以通过特制的TCP数据包对存在漏

来自云计算大会上的无线网攻击案例分析

来自云计算大会上的无线网攻击案例分析 阅读全文 URL

【DDOS】DNS放大拒绝服务攻击代码

/* DNS 头定义 */ struct dnshdr { unsigned short id; unsigned short flags; unsigned short qdcount; unsigned short ancount; unsigned short nscount; unsigned short arcount; }; #pragma pack(pop) int t_raw_socket = 0; int t_scr_ip = 0; int t_dns_ip = 0; int