목록워게임 (9)
학습 기록일지
웹 2레벨 문제. 예전에 안풀어서 풀어봄 힌트가 너무 친절하다... flag파일의 절대경로와, 어떤 취약점이 이용되는지까지 알려줌 LFI 도움(PHP Wrapper) : https://opentutorials.org/module/4291/26819 첫번째 index.php 파일은, 맨 하단에 php스크립트로 page 인자를 받아와 .php를 붙여 include 해주는걸 알수있음 include 함수는 해당하는 파일의 내용을 출력하고, 스크립트가 있다면 실행한다. 따라서 PHP 취약점에 종종 사용되곤 함 두번째 list.php 파일의 소스를 해석하자면, ../uploads/ 경로 내의 파일을 읽어서 태그로 감싸 출력해준다. 결과는 아래 이미지 참고 마지막으로 view.php 는 file 인자로 해당 파일 안..
웹 3레벨 login관련 문제이다. writeup을 작성할때 https://codethief.io/ko/sending-simultaneous-requests-using-python/ 도움이 많이됨 #!/usr/bin/python3 from flask import Flask, request, render_template, make_response, redirect, url_for, session, g import sqlite3 import hashlib import os import time, random app = Flask(__name__) app.secret_key = os.urandom(32) DATABASE = "database.db" userLevel = { 0 : 'guest', 1 : 'ad..
드림핵 웹 3레벨 문제 문제를 풀때는 할만했는데 정리하려고 할때마다 머리가 따뜻해지는거같음 CSP를 다루며 관한 자세한 설명은 아래 링크 참고 https://krampus.tistory.com/96 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 #!/usr/bin/env python3 import os import shutil from time import sleep from urllib.p..
2레벨 마지막 문제이다. 문제의 보호기법을 이러하다 sint 문제의 소스코드 Line 6~19 : 기본설정 Line 21~24 : /bin/sh 주입이 가능한 get_shell 함수 Line 26~48(Main) : - 28 : buf를 256크기만큼 선언 - 29 : int 형 size 선언 (초기화 X) - 33 : Segmentation Fault 인터럽트가 발생하면 get_shell 함수가 실행되게 설정한다 - 36 : 숫자를 입력받는다 - 38~42 : 만약 입력받는 숫자가 256보다 크거나, 0보다 작다면 프로그램을 종료함 - 44,45 : read함수로 입력을받는데.... 문제의 요지가 에러발생시켜서 get_shell을 실행시키는게 목표인거같다.(아마도) 문제의 흐름은 다음과 같다. Size..
드림핵 레벨2 3번째 문제이다 out_of_bound 취약점을 다룰거같다. OOB(Out Of Boundary) 취약점이란 버퍼의 길이를 벗어나는 인덱스에 접근할 때 발생하는 취약점이다. checksec 로 보호기법을 검사해보면, NXbit, Partial RELRO 메모리 보호기법을 제외한 CANARY 가 활성화되어있는걸 확인할 수 있다. out_of_bound의 소스코드를 해석해보자 7 Line : 전역변수 name을 16크기로 선언 9~13 Line : 포인터변수 command를 10크기로 선언. cat, ls, id, ps, file ./oob를 담고있음 14~27 Line : 기본세팅 29~44 Line (Main) : - 31 : idx 정수형 변수 선언 - 33 : 기본세팅 함수 실행 - 3..
드디어 포너블 레벨2로 넘어옴 checksec 명령어로 확인시 NX bit와 RELRO Partial 보호기법이 걸려있는걸 확인할 수 있음 문제의 C언어 소스이다. 2레벨로 넘어오자마자 코드가 길어진 기분이든다. 소스를 분석해보자 Line 7 : 전역 cp_name을 256크기로 설정 Line 9 ~ 12 : 전편과 마찬가지로 쉘에 접근할 수 있는 get_shell 함수 존재 Line 14 ~ 27 : 기본 세팅값. 일정시간이 지나면 연결종료 Line 29 ~ 35 : 함수명 cpy. 내부에서 real_name이란 256크기의 버퍼를 세팅하고, cp_name에 있는 값을 real_name으로 복사한다. 리턴. Line 36 ~ 47 : 진입하자마자 알람설정. 최대 cp_name 의 크기만큼(256) 값을..
포너블 1레벨 마지막 문제이다. 생각보다 시간이 많이 안나고 머리도 안좋아서 문제푸는 속도가 갈수록 느려지고있다... 전 문제와 마찬가지로 FSB문제 gdb 로 checksec 확인시 NX-bit와 RELRO 보호기법이 걸려있는걸 확인할 수 있다. 소스코드를 확인해보면 initialize로 알람을 걸어준다. 전편과 마찬가지로 get_shell 함수가 존재하며, heap_buf를 0x80만큼 할당하였다. 입력해준 값이 sprintf 함수를 통해 0x90 만큼 stack_buf 에 저장해준다. 이때 sprintf 가 길이제한과 서식지정자가 없어 FSB취약점이 발생한다. sprintf함수를 이용하여 printf 함수의 got 주소를 get_shell 주소로 덮거나 return 주소를 get_shell로 덮으면..
드림핵 포너블 두번째문제 NX bit 보호기법을 우회하는 기본적인 RTL 문제이다. 삽질한 문제. 삽질 안하는 문제 찾기가 더 힘들듯 위 명령어로 문제풀때 확인해보면 좋음 셸코드 작성시 활요하면 좋을거같다 디버깅 상태를 보여줌? > 리틀엔디언은 그대로 찍힘 (78 56 34 12 => 78 56 34 12) 문제시작 문제의 소스코드이다. main 함수에 gets(buf)로 취약점이 존재하는걸 확인할 수 있다. buf의 크기는 0x80이며, 친절하게도 read_flag라는 함수가 존재한다. 따라서 목적은 저 함수를 호출하는것 서버 접속시 몇초 뒤 종료되며, 종료되기 전 인자를 입력해줄 수 있다. 디버깅 상태에서 read_flag 함수의 주소는 0x80485b9 이다 >> \xb9 \x85 \x04 \x08..