Files
attack-defense-platform/panel/__pycache__/main.cpython-312.pyc
T

60 lines
12 KiB
Plaintext
Raw Normal View History

Ë
p³jöã ó¸—dZddlZddlZddlZddlZddlmZddlmZm Z m
Z
ddl m Z m
Z
mZddlmZddlmZej&j)dd «Zej&j)d
d «Zej&j)d d «Zee«j2Zed
¬«Zddddddœddddddœddddddœddd d!d"dœd#d$d%d!d&dœd'd(d)d'd*dœgZiZd+e fd,„Zd+e d-efd.„Z d-e!fd/„Z"dQd0e#d1e#d2e$fd3„Z%ej)d4e ¬5«d+e fd6„«Z&ej)d7e ¬5«d+e fd8„«Z'ejQd9«d+e fd:„«Z)ejQd;«d+e fd<„«Z*d+e fd=„Z+ej)d>«d+e fd?„«Z,ej)d@«d+e fdA„«Z-ejQdB«d+e fdC„«Z.ejQdD«dEe#d+e fdF„«Z/ejQdG«dEe#d+e fdH„«Z0ejQdI«dEe#d+e fdJ„«Z1ejQdK«dEe#d+e fdL„«Z2ej)dM«dEe#d+e fdN„«Z3ej)dO«d+e fdP„«Z4y)Ru·
Gemastik A/D Panel — web UI for the gemastik18-final receiver.
Serves a dashboard at / and proxies receiver API calls server-side so the
admin credentials stay out of the browser.
éN)ÚPath)ÚFastAPIÚRequestÚ
HTTPException)Ú HTMLResponseÚ JSONResponseÚRedirectResponse)Ú StaticFiles)ÚOptionalÚ RECEIVER_URLzhttp://127.0.0.1:18080ÚPANEL_ADMIN_USERÚadminÚPANEL_ADMIN_PASSzGemastik A/D Panel)ÚtitleÚblogposti'i&'ÚwebzFlask blog with exiftool + SSTI)ÚnameÚportÚsshÚcategoryÚdescÚcarbeatiø*i+ÚpwnzBinary exploitation menuÚcdnià.iö.zCDN/image proxy SSTIÚphewiÈ2iÞ2ÚcryptozPaillier crypto oracleÚsheeshi°6iÆ6zAES padding oracleÚwarmupi˜:i®:zGo file viewer (path traversal)Úreqcó—|jjdd«}|jd«syddl} |j |j dd«d«j
«}|jd«\}}}||fS#t$rYywxYw)NÚ
authorizationÚzBasic rú éú:) ÚheadersÚgetÚ
startswithÚbase64Ú b64decodeÚsplitÚdecodeÚ partitionÚ Exception)rÚauthr)ÚdecodedÚuserÚ_Úpws ú#/opt/gemastik18-final/panel/main.pyÚ _check_basicr5%sˆ€Ø �;‰;�?‰?˜?¨BÓ /€DØ �?‰?˜8Ô $ØÛðØ×"Ñ" 4§:¡:¨c°1Ó#5°aÑ#8Ó9×@Ñ@ÓBˆØ×'Ñ'¨Ó,‰ ˆˆa�Ø�bˆzÐøÜ òÙðús´A
A?Á? B Â
B ÚreturncóÔ—t|«}|r|dtk(r
|dtk(ry|jj d«}|t
vxrt
|t
j «kDS)Nrr$TÚ panel_token)r5Ú
ADMIN_USERÚ
ADMIN_PASSÚcookiesr'Ú _sessionsÚtime)rÚcredsÚtokens r4Ú _authorizedr@1sZ€Ü ˜Ó €EÙ ��q‘œZÒ'¨E°!©H¼
Ò,BØà �K‰K�O‰O˜MÓ *€EØ ”IÐ Ò @¤)¨EÑ"2´T·Y±Y³[Ñ"@Ð@ócó2—td«}dx}} |j«j«D]P}|jd«r|j dd«d}Œ*|jd«sŒ<|j dd«d}ŒR ||fS#t
$rY||fSwxYw)Nz#/opt/gemastik18-final/receiver/.envr"zADMIN_USERNAME=ú=r$zADMIN_PASSWORD=)rÚ read_textÚ
splitlinesr(r+r.)Úenv_pathÚuÚpÚlines r4Ú_receiver_authrJ9s¨€äÐ9Ó:€HØ €J€Aˆð
Ø×&Ñ&Ó(×3Ñ3Ó5ò *ˆDØ�‰Ð0Ô1Ø—J‘J˜s AÓ& qÑ)‘Ø—‘Ð!2Õ3Ø—J‘J˜s AÓ& qÑ)‘ñ  *ð
ˆqˆ6€Møô ò
Ø Ø
ˆqˆ6€Mð
ús‘ABÁ+B BÂBÚmethodÚpathÚbodycƒóK—t«\}}tjd¬«4ƒd{–—†}|j|t›|›�||f|�|nd¬«ƒd{–—†}|cddd«ƒd{–—†S7ŒB7Œ7Œ #1ƒd{–—†7swYyxYw­w)Né)Útimeout)r/Újson)rJÚhttpxÚ AsyncClientÚrequestr )rKrLrMrGrHÚclientÚresps r4Ú_proxyrWGs“èø€Ü Ó �D€A€qÜ× Ñ ¨Ô,÷ð°Ø—^‘^ F¬|¨n¸T¸FÐ,CØ+,¨a¨&¸tÐ?O±tÐUYð$ó[÷[ˆà÷÷òøð[øðø÷÷ñüsV‚(BªA-«B®'A3ÁA/ÁA3Á BÁ'A1Á(BÁ/A3Á1BÁ3BÁ9A< Á:BÂBú/)Úresponse_classcƒó€K—t|«s td«Stdz dz j«}t |«S­w)Nú/loginÚstaticz
index.html)r@r ÚBASE_DIRrDr)rÚhtmls r4Úindexr_Ns<èø€ä �sÔ Ü Ó)Ð)Ü �xÑ  ,Ñ .× 9Ñ 9Ó ;€DÜ ˜Ó Ðùs‚<>r[cƒó|K—t|«r td«Sttdz dz j ««S­w)NrXr\z
login.html)r@r rr]rD©rs r4Ú
login_pagerbUs7èø€ä�3ÔÜ Ó$Ð$Ü œ HÑ,¨|Ñ;×FÑFÓHÓ IÐIùs‚:<z
/api/logincƒó‚K—|j«ƒd{–—†}|jd«tk(r~|jd«tk(rft j
d«j
«}tj«dzt|<tddi«}|jd|ddd¬ «|Std
d «‚7Œ¦­w) Nr1Úpasséi€pÚokTr8Úlax)ÚhttponlyÚsamesiteÚmax_ageé‘zInvalid credentials) rQr'r9r:ÚosÚurandomÚhexr=r<rÚ
set_cookier)rÚdatar?rVs r4Ú api_loginrq[s�èø€à—‘“× €DØ ‡x�x�Óœ:Ò%¨$¯(©(°6Ó*:¼jÒ*HÜ—
‘
˜2“×"Ñ"Ó$ˆÜŸ9™9›;¨Ñ1Œ �%ÑܘT 4˜LÓ)ˆØ �‰˜
 u°tÀeÐU]ˆÔ^؈ Ü
˜Ð2Ó
3Ð3ð ús‚B?–B=—B'B?z /api/logoutcƒóxK—|jjd«}|rtj|d«ddiS­w)Nr8rfT)r;r'r<Úpop)rr?s r4Ú
api_logoutrtfs3èø€à �K‰K�O‰O˜MÓ *€EÙ Ü�
‰
�e˜TÔ"Ø �$ˆ<Ðùs‚8:có2—t|«s tdd«‚y)NrkzNot authorized)r@rras r4Ú
require_loginrvms€Ü �sÔ Ü˜CÐ!1Ó2Ð2ð rAz/api/challengescƒó0K—t|«dtiS­w)NÚ
challenges)rvÚ
CHALLENGESras r4Úapi_challengesrzssèø€ä�#ÔØ œ*Ð %Ð%ùs‚z /api/statuscƒó*K—t|«g}tD]±} tdd|d›�«ƒd{–—†}|jdk(r(t |j «j
d««nd}d} td|d›d �«}|j«r|j«j«}|ji|¥||d
œ¥«Œ³|ttj««d œS7Œº#t$r }d}Yd}~Œ�d}~wwxYw#t$rYŒ_wxYw­w) NÚGETz/check/réÈÚsuccessFr"z%/opt/gemastik18-final/receiver/flags/z.txt)ÚaliveÚflag)ÚresultsÚts)rvryrWÚ status_codeÚboolrQr'r.rÚexistsrDÚstripÚappendÚintr=)rr�ÚchrVrfÚer€Úfps r4Ú
api_statusrŒxs
èø€ä�#ÔØ€GÜò:ˆð Ü ¨°°F±° Ð'=Ó>×>ˆDØ59×5EÑ5EÈÒ5L”�d—i‘i“k—o‘o iÓ0Ô1ÐRWˆBðˆð ÜÐ=¸bÀ¹j¸\ÈÐNÓOˆBØ�y‰yŒ{Ø—|‘|“~×+Ñ+Ó-�ð �‰Ð8˜"Ð8 r°4Ò8Õ9ð:ð¤c¬$¯)©)«+Ó&6Ñ 7Ð7ð?ùäò Ø�Bûð ûôò Ù ð üsc‚DšC,¯C*°=C,Á-DÁ0ADÂ0:DÃ*C,Ã, DÃ5C<Ã7DÃ<DÄDÄ DÄ
DÄDÄDz /api/flagcƒórK—t|«|j«ƒd{–—†}|jdd«}|jdd«}|tD�cgc]}|d‘Œ c}vr t dd«‚|s t dd«‚t dd ||d
œ«ƒd{–—†}|j |jd œS7ŒŒcc}w7Œ$­w) NÚ challenger"r€ri�zUnknown challengez
Flag is emptyÚPOSTz/flag)rŽr€©Úreceiver_statusÚ
receiver_body)rvrQr'ryrrWrƒÚtext)rrprŽr€ÚcrVs r4Úapi_flagr•�s¬èø€ä�#ÔØ—‘“× €DØ—‘˜ bÓ)€IØ �8‰8�F˜BÓ €DجJÖ7 q˜˜6›Ò7Ñ7ܘCÐ!4Ó5Ð5٠ܘC Ó1Ð1ܘ °yÈ$Ñ)OÓP× P€DØ#×/Ñ/À$Ç)Á)Ñ LÐLð úò8ð Qús-‚B7¡B.¢1B7Á B0Á1B7ÂB5ÂB7Â0B7z/api/restart/{challenge}rŽcƒó„K—t|«tdd|›�«ƒd{–—†}|j|jdœS7Œ­w)Nr|z /restart/r�©rvrWrƒr“©rŽrrVs r4Ú api_restartr™šs>èø€ä�#Ôܘ ¨9¨+Ð6Ó7× 7€DØ#×/Ñ/À$Ç)Á)Ñ LÐLð 8úó‚A >¡Az/api/rollback/{challenge}cƒó„K—t|«tdd|›�«ƒd{–—†}|j|jdœS7Œ­w)Nr|z
/rollback/r�r—r˜s r4Ú api_rollbackrœ ó>èø€ä�#Ôܘ ¨I¨;Ð7Ó8× 8€DØ#×/Ñ/À$Ç)Á)Ñ LÐLð 9úršz/api/activate/{challenge}cƒó„K—t|«tdd|›�«ƒd{–—†}|j|jdœS7Œ­w)Nr|z