Անդրանիկ Վարդանեան

8 Դեկտեմբերի, 2022

#CyHubCTF2022

Որոշեցի հարթակը տեղադրել Vultr֊ում, իրենց տրամադրում են FreeBSD մեքենաներ։

Խնդիրը նրանում է, որ իրենց մեքենաները աշխատում են UFS֊ով, սակայն ինձ պէտք է OpenZFS ֆայլային համակարգը։

Կարող եմ ստանալ վիրտուալ դիսկեր օգտագործելով truncate հրամանը։

root@console:~ # truncate -s 40G /usr/local/disk0.img
root@console:~ # zpool create zjails /usr/local/disk0.img
root@console:~ # zpool list
NAME     SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
zjails  39.5G   129K  39.5G        -         -     0%     0%  1.00x    ONLINE  -
root@console:~ # sysrc zfs_enable=“YES”
zfs_enable: NO -> YES

Իհարկէ, առաջին բանը որ տեղադրում եմ հետեւեալ ծրագրերն են՝

  • tmux
  • vim
  • git-tiny

git-tiny֊ն պէտք է նրա համար, որ տեղադրեմ illuria֊ի կողմից ստեղծուած Jailer ծրագիրը՝

root@console:~ # git clone https://github.com/illuria/jailer
Cloning into ‘jailer’…
remote: Enumerating objects: 447, done.
remote: Counting objects: 100% (447/447), done.
remote: Compressing objects: 100% (206/206), done.
remote: Total 447 (delta 301), reused 384 (delta 238), pack-reused 0
Receiving objects: 100% (447/447), 136.34 KiB | 7.57 MiB/s, done.
Resolving deltas: 100% (301/301), done.
root@console:~ # cd jailer/
root@console:~/jailer # make install
root@console:~/jailer # jailer init
Enable the jail service first: Done!
Setting jailer_dir in rc.conf: Done!
Creating ZFS dataset zjails/jails with the mount point /usr/local/jails: Done!

Առաջին հերթին պէտք է քաշեմ ՕՀ֊ի պատկեր (image) Jailer֊ի համար՝

root@console:~/jailer # jailer image fetch
Fetching 13.1-RELEASE: Done!

Ապա պէտք է ցանցերը կարգաւորեմ։ Երեւի աւելի լաւ կը լինի առանձին IP հասցէ տամ այդ jail֊ին։

Սկսեմ bridge network կարգաւորելով.

root@console:~ # sysrc cloned_interfaces=“bridge0”
cloned_interfaces:  -> bridge0
root@console:~ # sysrc ifconfig_bridge0="inet 10.0.0.1 netmask 255.255.255.0 up”
ifconfig_bridge0:  -> inet 10.0.0.1 netmask 255.255.255.0 up
root@console:~ # service netif restart bridge0
/etc/rc.d/netif: WARNING: bridge0 does not exist.  Skipped.
Created clone interfaces: bridge0.
Starting Network: bridge0.
bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        ether 58:9c:fc:10:d8:4f
        inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255
        id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15
        maxage 20 holdcnt 6 proto rstp maxaddr 2000 timeout 1200
        root id 00:00:00:00:00:00 priority 32768 ifcost 0 port 0
        groups: bridge
        nd6 options=1

Հիմա արդէն կարող եմ ստեղծել նոր container օգտագործելով Jailer֊ը՝

root@console:~ # jailer create -n -t eb -a 10.0.0.10 ctfd0
Creating ctfd0: Done!

Ապա միացնում ենք IP forwarding֊ը՝

root@console:~ # echo 'net.inet.ip.forwarding=1' >> /etc/sysctl.conf
root@console:~ # service sysctl restart

Մնում է firewall֊ի մէջ աւելացնել հետեւեալ կարգաւորումները, /etc/pf.conf ֆայլում՝

include "/etc/jail.conf.d/.pf.nat.jailer.conf”
include "/etc/jail.conf.d/.pf.rdr.jailer.conf”

Ու վերջում, ստեղծում ենք այդ ֆայլերը՝

root@console:~ # touch /etc/jail.conf.d/.pf.rdr.jailer.conf
root@console:~ # touch /etc/jail.conf.d/.pf.nat.jailer.conf

Ապա կարգաւորում ենք NAT եւ Redirection՝

root@console:~ # jailer nat add -i vtnet0 -a  140.82.57.32  ctfd0
Reloading pf rules.
root@console:~ # jailer rdr add -i vtnet0 -a  140.82.57.32  ctfd0
Reloading pf rules.
root@console:~ # pfctl -sn
nat on vtnet0 inet from 10.0.0.10 to any -> 140.82.57.32
rdr pass on vtnet0 inet from any to 140.82.57.32 -> 10.0.0.10

Ապա ստուգենք։

root@console:~ # jailer cons ctfd0
root@ctfd0:~ # pkg install -y nginx0
root@ctfd0:~ # service nginx enable
nginx enabled in /etc/rc.conf
root@ctfd0:~ # service nginx start

Screen Shot 2022 12 08 at 5 44 10 PM

Օքեյ։ Անցնենք Python֊ական բաներին (։

Պատասխանել մեյլով