Պիտակների պահոցները՝ CyHub CTF 2022

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

17 Նոյեմբերի, 2023

#CyHubCTF2023

Սկսում ենք jailer տեղադրելով՝

root@srv0:~ # git clone https://github.com/illuria/jailer
Cloning into 'jailer'...
remote: Enumerating objects: 554, done.
remote: Counting objects: 100% (102/102), done.
remote: Compressing objects: 100% (62/62), done.
remote: Total 554 (delta 56), reused 76 (delta 35), pack-reused 452
Receiving objects: 100% (554/554), 188.74 KiB | 2.22 MiB/s, done.
Resolving deltas: 100% (361/361), done.
root@srv0:~ # cd jailer
root@srv0:~/jailer # make install
root@srv0:~/jailer # jailer version
v0.1.1
r00110

ապա տեղադրում ենք նոր ջեյլ ctfd֊ի համար՝

root@srv0:~ # jailer create -n -d ctf.cyhub.am -t eb -a 172.16.209.23 ctfd
Creating ctfd: Done!

ապա տեղադրում ենք ctfd֊ն՝

root@srv0:~ # jailer cons ctfd
# pkg install py39-pip git-lite
# cd /usr/local
# git clone https://github.com/CTFd/CTFd Cloning into 'CTFd'... remote: Enumerating objects: 16207, done. remote: Counting objects: 100% (5978/5978), done. remote: Compressing objects: 100% (1336/1336), done. remote: Total 16207 (delta 5146), reused 4772 (delta 4603), pack-reused 10229 Receiving objects: 100% (16207/16207), 30.92 MiB | 2.82 MiB/s, done. Resolving deltas: 100% (10334/10334), done.

հրաշալի։ սկսեմ տեղադրել՝

# cd CTFd/
# pip install -r requirements.txt

ստանում եմ տարբեր խնդիրներ, օրինակ՝

      error: [Errno 2] No such file or directory: 'go'
      This package requires Rust >=1.48.0.                                                           

երեւի պէտք է դեղադրեմ դրանք էլ, ձեռով՝

# pkg install go rust
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
The following 3 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
        go: 1.20,2
        go120: 1.20.8
        rust: 1.73.0

Number of packages to be installed: 3

The process will require 1 GiB more space.
169 MiB to be downloaded.

Proceed with this action? [y/N]: y
[ctfd.ctf.cyhub.am] [1/3] Fetching rust-1.73.0.pkg: 100%  131 MiB 137.5MB/s    00:01    
[ctfd.ctf.cyhub.am] [2/3] Fetching go-1.20,2.pkg: 100%    860 B   0.9kB/s    00:01    
[ctfd.ctf.cyhub.am] [3/3] Fetching go120-1.20.8.pkg: 100%   38 MiB  39.9MB/s    00:01    
Checking integrity... done (0 conflicting)
[ctfd.ctf.cyhub.am] [1/3] Installing go120-1.20.8...
[ctfd.ctf.cyhub.am] [1/3] Extracting go120-1.20.8: 100%
[ctfd.ctf.cyhub.am] [2/3] Installing rust-1.73.0...
[ctfd.ctf.cyhub.am] [2/3] Extracting rust-1.73.0: 100%
[ctfd.ctf.cyhub.am] [3/3] Installing go-1.20,2...
[ctfd.ctf.cyhub.am] [3/3] Extracting go-1.20,2: 100%

մի հատ էլ փորձենք՝

# pip install -r requirements.txt

ահա, ստացուեց (։ կարգաւորում եմ ԴԲ֊ն ու միացնեմ՝

console.ctf.cyhub.am

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

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

4 Նոյեմբերի, 2023

Այո, լուրերը ճիշտ են՝ կազմակերպում ենք նոր Capture The Flag (գրաւիր դրօշը) մրցոյթ CyHub֊ի հետ։

Անցեալ տարի ուղիղ եթերով բլոգում էի թէ ինչպէս եմ կարգաւորում սերւէրները եւ առաջադրանքները։ Այս տարի էլ նոյն եմ անելու CyHub CTF 2023 պիտակի տակ։

Մի՛նչ։

#CyHubCTF2022

#CyHubCTF2023

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

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

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

#CyHubCTF2022

Արդէն կայ 20֊ից աւել խնդիր: Դեռ կայ 15+ ժամ մրցոյթի աւարտին:

Ոնց հասկացայ մեծ մասը մնում են գիշերը լուծեն:

Կէսգիշերից յետոյ աւելի ակտիւ կը բլոգեմ մանրամասների մասին:

Ասանկ Բաներ

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

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

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

Այսօր եղաւ ամէնավատ բանը, որը կարող է լինել CTF֊ի ժամանակ։

Task֊երը մի մասը սխալ էին աշխատում։ Ստիպուած եղայ FreeBSD֊ի մէջ տեղադրել Alpine Linux, ապա մէջը տեղադրել Docker որ աւելի արագ կարողանամ reproduce անել խնդիրները եւ տալ լուծումը։

Միւս տարի պէտք է մի քանի ամիս ծախսեմ եւ գրեմ Docker Wrapper մը Jailer֊ի համար։

Մանրամասները, իհարկէ, կը գրեմ CTF֊ի ժամանակ։ Իսկ հիմա պէտք է վազեմ, որ հասցնեմ մնացած բաները տեղադրել (։

Մինչ հանդիպում։

Ասանկ բաներ…

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

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

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

#CyHubCTF2022

Սկսենք Փայթոնական բաները տեղադրելով՝

pkg install -y py39-pip

Ապա տեղադրենք CTFd֊ն՝

root@ctfd0:~ # cd /usr/local/www/
root@ctfd0:/usr/local/www # git clone https://github.com/CTFd/CTFdCloning into 'CTFd'...
remote: Enumerating objects: 14857, done.
remote: Counting objects: 100% (94/94), done.
remote: Compressing objects: 100% (54/54), done.
remote: Total 14857 (delta 39), reused 73 (delta 34), pack-reused 14763
Receiving objects: 100% (14857/14857), 30.98 MiB | 16.73 MiB/s, done.
Resolving deltas: 100% (9137/9137), done.
root@ctfd0:/usr/local/www # cd CTFd/
root@ctfd0:/usr/local/www/CTFd # pip install -r requirements.txt

Հիմա սպասում ենք Python֊ական dependency֊ները քաշի։

Մէկ էլ ասում ա՝

      error: can't find Rust compiler

Օքեյ, դա էլ քաշենք՝

root@ctfd0:/usr/local/www/CTFd # pkg install -y rust

Նորից եմ աշխատեցնում pip install֊ը եւ ստանում եմ՝

      $ GOPATH=/tmp/tmplfo6wiyc go get -d
      error: [Errno 2] No such file or directory: 'go'

Օքեյ, հիմա էլ Go֊ն տեղադրենք՝

root@ctfd0:/usr/local/www/CTFd # pkg install -y go

Ու մի անգամ էլ pip install աշխատեցնելուց յետոյ ամէն ինչ տեղակայուեց։

Սկսեմ կարգաւորել config.ini ֆայլը։

Ահ, էստեղ գրած ա DATABASE_URL, աչքիս մի հատ էլ MySQL֊ի համար Jail սարքեմ՝

root@console:~ # jailer create -n -t eb -a 10.0.0.15 mysql0
root@console:~ # jailer nat add -i vtnet0 mysql0

Ապա տեղադրեմ MariaDB՝

root@console:~ # jailer cons mysql0
root@mysql0:~ # pkg install -y mariadb106-server

Ու նաեւ կարգաւորեմ նոր օգտատէր՝

root@mysql0:~ # mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.6.11-MariaDB FreeBSD Ports

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

root@localhost [(none)]> create database ctfd;
Query OK, 1 row affected (0.001 sec)

root@localhost [(none)]> create user ctfd@10.0.0.10 IDENTIFIED VIA mysql_native_password USING PASSWORD(“REDACTED");
Query OK, 0 rows affected (0.004 sec)

root@localhost [(none)]> grant all privileges on ctfd.* to ctfd@10.0.0.10 with grant option;
Query OK, 0 rows affected (0.003 sec)

root@localhost [(none)]> flush privileges;
Query OK, 0 rows affected (0.001 sec)

Դէ փորձարկենք՝

root@console:~ # jailer cons ctfd0
root@ctfd0:~ # mysql -h 10.0.0.15 -u ctfd -p ctfd
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 12
Server version: 10.6.11-MariaDB FreeBSD Ports

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

ctfd@10.0.0.15 [ctfd]> 

Թո՛յն։

Շարունակեմ մնացած կարգաւորումներն անել։

Երեւի կարելի է փորձել միացնե՞լ։ Տեսնենք՝

root@ctfd0:/usr/local/www/CTFd # python3.9 serve.py
 * Importing gevent and monkey patching. Use --disable-gevent to disable.
Traceback (most recent call last):
  File "/usr/local/www/CTFd/serve.py", line 23, in 
    app = create_app()
  File "/usr/local/www/CTFd/CTFd/__init__.py", line 199, in create_app
    url = create_database()
  File "/usr/local/www/CTFd/CTFd/utils/migrations/__init__.py", line 26, in create_database
    if not database_exists_util(url):
  File "/usr/local/lib/python3.9/site-packages/sqlalchemy_utils/functions/database.py", line 470, in database_exists
    engine = sa.create_engine(url)
  File "/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/__init__.py", line 488, in create_engine
    return strategy.create(*args, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/strategies.py", line 87, in create
    dbapi = dialect_cls.dbapi(**dbapi_args)
  File "/usr/local/lib/python3.9/site-packages/sqlalchemy/dialects/mysql/mysqldb.py", line 118, in dbapi
    return __import__("MySQLdb")
ModuleNotFoundError: No module named 'MySQLdb'

Ահ, լաւ հեսա դա էլ տեղադրեմ՝

root@ctfd0:~ # pkg install -y py39-mysqlclient

ու մի հատ էլ ենք աշխատացնում ու տեսնում ենք՝

Screen Shot 2022 12 08 at 10 07 15 PM

Ախ, վերջապէս (։

Ասանկ բաներ…

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

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

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֊ական բաներին (։

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

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

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

#CyHubCTF2022

Տղաները խնդրեցին որ այս տարի օգտագործենք CTFd հարթակը։ Ընդհանրապէս օգտագործում էինք RootTheBox֊ը։

CTFd֊ն գրուած է Python֊ով։ Այնպէս որ ընդհանրապէս բարդ չի լինի տեղակայել FreeBSD֊ի վրայ։

Այս տարի սերւէրները լինելու են հենց CyHub֊ի դատասենտրում, բայց հարթակը կը տեղադրեմ մի քանի տեղ, որ եթէ հոսանքի խնդիր ունենանք, ապա շատ արագ կարողանանք failover անել։

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