2026-09-23 16:37:58 +08:00
<!DOCTYPE html>
< html lang = "id" >
< head >
< meta charset = "UTF-8" >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" >
< meta name = "team-id" content = "0" >
< title > Panduan SSH — Gemastik A/D</ title >
< style >
: root { --bg : #0b0e14 ; --panel : #151a23 ; --panel2 : #1d2430 ; --line : #2a3444 ; --txt : #e6edf3 ; --dim : #8b98a9 ; --accent : #38bdf8 ; --green : #34d399 ; --red : #f87171 ; --purple : #a78bfa ; }
* { margin : 0 ; padding : 0 ; box-sizing : border-box ; }
body { background : var ( -- bg ); color : var ( -- txt ); font-family : 'Segoe UI' , system-ui , sans-serif ; min-height : 100 vh ; }
. wrap { max-width : 800 px ; margin : 0 auto ; padding : 24 px 16 px 60 px ; }
header { display : flex ; align-items : center ; gap : 12 px ; margin-bottom : 24 px ; flex-wrap : wrap ; }
. logo { width : 42 px ; height : 42 px ; border-radius : 10 px ; background : linear-gradient ( 135 deg , #38bdf8 , #6366f1 ); display : flex ; align-items : center ; justify-content : center ; font-weight : 800 ; font-size : 20 px ; color : #fff ; }
h1 { font-size : 22 px ; }
. sub { color : var ( -- dim ); font-size : 13 px ; }
. card { background : var ( -- panel ); border : 1 px solid var ( -- line ); border-radius : 14 px ; padding : 20 px ; margin-bottom : 16 px ; }
. card h2 { font-size : 15 px ; margin-bottom : 12 px ; color : var ( -- accent ); }
h3 { color : var ( -- purple ); margin : 18 px 0 8 px ; font-size : 14 px ; }
p , li { font-size : 13 px ; color : #c9d4e3 ; line-height : 1.7 ; }
ol , ul { padding-left : 20 px ; }
. sshbox { background : var ( -- panel2 ); border : 1 px solid var ( -- line ); border-radius : 8 px ; padding : 10 px 12 px ; font-family : ui-monospace , monospace ; font-size : 12 px ; overflow-x : auto ; margin : 6 px 0 ; }
code { background : var ( -- panel2 ); padding : 2 px 6 px ; border-radius : 5 px ; font-size : 12 px ; }
. warn { background : #3a1414 ; border : 1 px solid var ( -- red ); border-radius : 8 px ; padding : 12 px ; font-size : 13 px ; color : #fca5a5 ; margin : 10 px 0 ; }
a { color : var ( -- accent ); }
table { width : 100 % ; border-collapse : collapse ; font-size : 13 px ; margin : 8 px 0 ; }
th , td { text-align : left ; padding : 8 px 6 px ; border-bottom : 1 px solid var ( -- line ); }
th { color : var ( -- dim ); font-weight : 500 ; }
</ style >
</ head >
< body >
< div class = "wrap" >
< header >
< div class = "logo" > G</ div >
< div style = "flex:1" >
< h1 > 📖 Panduan SSH & Attack</ h1 >
< div class = "sub" > Gemastik 18 Final — Attack & Defense</ div >
</ div >
</ header >
< div class = "card" >
< h2 > 🎯 Konsep Attack & Defense</ h2 >
< p > Setiap tim punya < b > 6 challenge container</ b > yang harus dijaga (< b > defense</ b > ) dan bisa menyerang container tim lain (< b > attack</ b > ). Setiap container menyimpan < b > flag</ b > yang nilainya dicek panitia secara berkala (SLA). Kalau service mati atau flag berubah, tim kamu < b > kehilangan poin SLA</ b > .</ p >
< p style = "margin-top:8px" > Kamu menang dengan: (1) menjaga service tetap hidup, (2) < b > mencuri flag</ b > dari tim lawan dan submit, (3) mencegah tim lawan mencuri flag kamu.</ p >
</ div >
< div class = "card" >
< h2 > 🔐 Login SSH</ h2 >
< h3 > Cara 1 — Web Terminal di Portal Tim</ h3 >
< ol >
< li > Buka < b > portal tim kamu</ b > (domain dari panitia).</ li >
< li > Login dengan < b > password SSH tim</ b > .</ li >
< li > Tab < b > 🖥️ Terminal SSH</ b > → pilih challenge → < b > Sambung</ b > .</ li >
2026-09-26 16:37:40 +08:00
< li > Langsung masuk sebagai user yang tertera di dropdown — < code > ctfuser</ code > untuk 6 challenge native GEMASTIK XVIII, < code > root</ code > untuk challenge XVI/XVII import — tanpa perlu aplikasi SSH.</ li >
2026-09-23 16:37:58 +08:00
</ ol >
< h3 > Cara 2 — SSH Client (opsional)</ h3 >
2026-09-26 16:37:40 +08:00
< div class = "sshbox" > ssh < USER> @43.134.105.109 -p < PORT_SSH> </ div >
2026-09-23 16:37:58 +08:00
< p > Contoh: untuk challenge < code > blogpost</ code > tim 1, port SSH = < code > 31022</ code > .</ p >
</ div >
< div class = "card" >
< h2 > 🧭 Command Penting</ h2 >
< table >
< tr >< th > Command</ th >< th > Fungsi</ th ></ tr >
< tr >< td >< code > cat /flag.txt</ code ></ td >< td > Lihat flag tim kamu sendiri</ td ></ tr >
< tr >< td >< code > ls /app /srv /opt /home</ code ></ td >< td > Cari file source/service</ td ></ tr >
< tr >< td >< code > ps aux</ code ></ td >< td > Lihat proses yang berjalan</ td ></ tr >
< tr >< td >< code > ss -tlnp</ code ></ td >< td > Lihat port yang dibuka service</ td ></ tr >
< tr >< td >< code > systemctl status</ code ></ td >< td > Cek service (kalau ada)</ td ></ tr >
< tr >< td >< code > cat /etc/passwd</ code ></ td >< td > Daftar user lokal</ td ></ tr >
</ table >
</ div >
< div class = "card" >
< h2 > ⚔️ Alur Attack</ h2 >
< ol >
< li > Buka tab < b > 🎯 Target Musuh</ b > di portal — lihat daftar domain/port tim lain.</ li >
< li > Analisa service lawan dari < b > source code di container kamu sendiri</ b > (biasanya sama).</ li >
< li > Cari vuln (SSTI, path traversal, RCE, crypto oracle, dsb).</ li >
< li > Exploit service lawan → baca < code > /flag.txt</ code > mereka.</ li >
< li > Submit flag di tab < b > 🚩 Submit Flag</ b > → < b > poin masuk ke leaderboard</ b > .</ li >
</ ol >
< div class = "warn" > ⚠️ Jangan sampai flag tim kamu bocor! Ganti password SSH rutin (via panitia), dan jangan tinggalkan flag di tempat umum.</ div >
</ div >
< div class = "card" >
< h2 > 🛡️ Alur Defense</ h2 >
< ol >
< li > Pastikan service < b > selalu hidup</ b > — SLA dicek panitia berkala.</ li >
< li > Patch vuln yang bisa dipakai lawan (jika tahu).</ li >
< li > Jangan ubah < code > /flag.txt</ code > — mount < b > read-only</ b > , tidak bisa diubah dari dalam container.</ li >
< li > Pantau < code > ps aux</ code > / log — kalau ada aktivitas mencurigakan, restart via panitia.</ li >
</ ol >
</ div >
< div class = "card" >
< h2 > 📞 Butuh Bantuan?</ h2 >
< p > Hubungi panitia untuk: reset password SSH, restart container, atau lapor service down. Portal ini untuk peserta — panel admin terpisah.</ p >
2026-09-23 17:02:52 +08:00
< p style = "margin-top:8px" >< a href = "/team/0" data-portal-link > ← Kembali ke portal tim</ a ></ p >
2026-09-23 16:37:58 +08:00
</ div >
</ div >
< script >
const TEAM_ID = parseInt ( document . querySelector ( 'meta[name="team-id"]' ). content || '0' , 10 );
2026-09-23 17:02:52 +08:00
document . querySelectorAll ( '[data-portal-link]' ). forEach ( a => a . href = `/team/ ${ TEAM_ID } ` );
2026-09-23 16:37:58 +08:00
</ script >
</ body >
</ html >