Page cover

πŸ”°[Knight CTF 2023] Writeup Web

Mở Δ‘αΊ§u

GiαΊ£i nΓ y lΓ  giαΊ£i Δ‘αΊ§u nΔƒm 2023 mΓ  team mΓ¬nh chΖ‘i, giαΊ£i nΓ y chα»§ yαΊΏu nαΊ·ng về Reverse về mαΊ£ng web chỉ cΓ³ 2 bΓ i nαΊΏu bαΊ‘n nΓ o Δ‘am mΓͺ Reverve thΓ¬ cΓ³ thể xem blog bαΊ‘n mΓ¬nh cΓ³ viαΊΏt wu cα»§a giαΊ£i nΓ y ở Δ‘Γ’y.

Get me

Ở bΓ i nΓ y thΓ¬ GET flag tα»« API về thΓ¬ lΓΊc truy cαΊ­p vΓ o link giao diện lΓ  mα»™t chuα»—i json nhΖ° nΓ y.

NΓ³ hiện ra mΓ¬nh khΓ΄ng thể GET nΓ³ được mΓ¬nh sαΊ½ dΓΉng curl để post mα»™t cΓ‘i gΓ¬ Δ‘Γ³ lΓͺn trang web.

ddd

NhΖ° message thΓ΄ng bΓ‘o thΓ¬ cαΊ§n gα»­i cho nΓ³ mα»™t url thΓ¬ chΓΊng ta cΕ©ng sα»­ dα»₯ng curl để post lΓͺn.

NΓ³ trαΊ£ về cho chΓΊng ta mα»™t link để truy cαΊ­p vΓ  lαΊ₯y flag.

Analys

Khi truy cαΊ­p vΓ o trang web chΓΊng ta cΓ³ thể thαΊ₯y được giao diện nhΖ° sau:

Theo đề bΓ i thΓ¬ web nΓ y được code bởi framwork Flask thΓ¬ nhα»―ng lα»— hα»•ng liΓͺn quan tα»›i Flask thường sαΊ½ lΓ  SSTI, Path or Directory traversal/Local File Inclusion ....

MΓ¬nh Δ‘Γ£ check nhΖ°ng trang web lα»—i SSTI nhΖ°ng khΓ΄ng cΓ³ lα»—i gΓ¬ xαΊ£y ra hΓ¬nh nhΖ° parameter khΓ΄ng nhαΊ­n, mΓ¬nh nghΔ© nΓ³ lΓ  lα»—i khΓ‘c cΓ³ thể lΓ  LFI (VΓ¬ trong source code cΓ³ parameter lΓ  filename). MΓ¬nh sα»­ dα»₯ng Burp Suite để check.

Nếu như chúng ta thay đổi parameter xem có lỗi gì xảy ra hay không ?

Xong!!! Lα»—i ngoαΊ‘i lệ xuαΊ₯t hiện nhΖ° nΓ y:

Mα»™t phαΊ§n trong chαΊΏ Δ‘α»™ Werkzeug debug mode thΓ¬ cΓ³ thể xem được Δ‘oαΊ‘n code chα»©a parameter Δ‘Γ³:

PhΓ’n tΓ­ch Δ‘oαΊ‘n code trΓͺn chΓΊng ta thαΊ₯y được trang web dΓ­nh lα»—i Local File Inclusio/Path Traversal

NgoΓ i ra khi truy cαΊ­p mα»™t file name khΓ‘c ngoΓ i home thΓ¬ cΕ©ng xuαΊ₯t hiện lα»—i khΓ΄ng tΓ¬m thαΊ₯y template nhΖ° dΖ°α»›i:

Oke, quay lαΊ‘i lα»—i Local File Inclusio/Path Traversal mΓ  trang dΓ­nh phαΊ£i, nhΖ° Δ‘oαΊ‘n code trΓͺn chΓΊng ta Δ‘Γ£ phΓ’n tΓ­ch thΓ¬ filename được replace cΓ‘c kΓ½ tα»± nΓ³i Δ‘ΓΊng hΖ‘n được decode url 2 lαΊ§n nΓͺn bypass filter ../ bαΊ±ng cΓ‘ch double encode url.

LΓΊc nΓ y chΓΊng ta sαΊ½ gα»­i nΓ³ lΓͺn xem cΓ³ thể khai thΓ‘c khΓ΄ng ?

NhΖ°ng cΓ³ mα»™t Δ‘iều lαΊ‘ lΓΉng lΓ  khi double encode thΓ¬ submit trα»±c tiαΊΏp trΓͺn trang thΓ¬ nΓ³ hiện ra thΖ° mα»₯c nhΖ°ng qua Brup Suite thΓ¬ khΓ΄ng mΓ  cαΊ§n thΓͺm mα»™t lαΊ§n encode nα»―a thΓ¬ mα»›i xuαΊ₯t hiện.

VαΊ­y lΓ  Δ‘Γ£ khai thΓ‘c thΓ nh cΓ΄ng lα»—i LFI, bΓ’y giờ chΓΊng ta sαΊ½ thα»­ dọc file app.py trong thΖ° mα»₯c app mΓ  chΓΊng ta Δ‘Γ£ biαΊΏt ở phαΊ§n trΓͺn:

Đọc thΓ nh cΓ΄ng Δ‘oαΊ‘n code file app.py:

Sau mα»™t lΓΊc thα»­ đọc cΓ‘i file khΓ‘c nhau để kiαΊΏm flag tα»« thΖ° mα»₯c home vΓ  app thΓ¬ nhαΊ­n ra khΓ΄ng tα»“n lαΊ‘i mα»™t file nΓ o flag.txt, lΓΊc nΓ y để cΓ³ thể đọc được toΓ n bα»™ file cα»§a mΓ‘y chα»§ trΓͺn thΓ¬ chΓΊng ta cαΊ§n RCE. NhΓ¬n Δ‘oαΊ‘n code trΓͺn thΓ¬ tΓ‘c giαΊ£ để debug=True thΓ¬ lΓΊc Δ‘Γ³ chΓΊng ta cΓ³ thể RCE qua debug console:

Console sαΊ½ thường bα»‹ khΓ³a Δ‘i vΓ  cαΊ§n mΓ£ pin để mở nΓ³ ra, sau mα»™t lΓΊc research thΓ¬ mΓ¬nh đọc được ở trang HackTricks bypass Pin Code.

ChΓΊng ta sαΊ½ xem xΓ©t Δ‘oαΊ‘n code generate PIN code ở phΓ­a:

  • VΓ  giΓ‘ trα»‹ cαΊ§n để cΓ³ thể exploit lΓ  Δ‘oαΊ‘n code nΓ y:

  • username is the user who started this Flask

  • modname is flask.app

  • getattr(app, '__name__', getattr (app .__ class__, '__name__')) is Flask

  • getattr(mod, '__file__', None) is the absolute path of app.py in the flask directory (e.g. /usr/local/lib/python3.5/dist-packages/flask/app.py). If app.py doesn't work, try app.pyc

  • uuid.getnode() is the MAC address of the current computer,str (uuid.getnode ()) is the decimal expression of the mac address

  • get_machine_id() read the value in /etc/machine-id or /proc/sys/kernel/random/boot_id and return directly if there is, sometimes it might be required to append a piece of information within /proc/self/cgroup that you find at the end of the first line (after the third slash)

To find server MAC address, need to know which network interface is being used to serve the app (e.g. ens3). If unknown, leak /proc/net/arp for device ID and then leak MAC address at /sys/class/net/<device id>/address.

Convert from hex address to decimal representation by running in python e.g.:

VαΊ­y lΓ  nhα»―ng dα»― liệu chΓΊng ta cαΊ§n khai thΓ‘c cΓ³ thể khai thΓ‘c được tα»« lα»—i LFI nhΖ° sau:

Exploit

LΓΊc Δ‘αΊ§u chαΊ‘y payload nhΖ°ng nΓ³ cho mΓ£ PIN sai nhΖ°ng mα»™t lΓΊc đọc kα»Ή thΓ¬ thαΊ₯y:

Payload cuối cùng như sau: (Thay hàm băm md5()->sha1())

Sau khi chαΊ‘y file trΓͺn chΓΊng ta cΓ³ PIN-CODE: 695-086-043

Truy cαΊ­p vΓ o console để RCE: (Done)

RCE thΓ nh cΓ΄ng thΓ¬ việc kiαΊΏm flag quΓ‘ dα»… dΓ ng:

CαΊ£m Ζ‘n cΓ‘c bαΊ‘n Δ‘Γ£ đọc bΓ i viαΊΏt!!! HαΊΉn gαΊ·p lαΊ‘i ở giαΊ£i tiαΊΏp theo...πŸ‘Œ

Last updated