본문 바로가기

분류 전체보기

(153)
[Dreamhack] Return to library 보호 기법에 카나리와 NX가 포함되었다. #include #include const char* binsh = "/bin/sh"; int main() { char buf[0x30]; setvbuf(stdin, 0, _IONBF, 0); setvbuf(stdout, 0, _IONBF, 0); // Add system function to plt's entry system("echo 'system@plt"); // Leak canary printf("[1] Leak Canary\n"); printf("Buf: "); read(0, buf, 0x100); //buf ~ canary 거리+1 만큼 입력해 canary 앞 \x00을 제거하면 printf("Buf: %s\n", buf); //카나리 출력 가능 // ..
[Dreamhack] ssp-001 #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } void get_shell() { //쉘을 띄워주는 함수 system("/bin/sh"); } void print_box(unsigned char *box, int idx) { //원하는 인덱스의 box 값을 출력 printf("Element of index %d is : %02x\n", idx, box[idx]);..
[Dreamhack] Return to shallcode Canary found. 카나리 방어 기법이 걸려있다. #include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } int main() { char buf[0x50]; //80 bytes만큼 할당 init(); printf("Address of the buf: %p\n", buf); printf("Distance between buf and $rbp: %ld\n", (char*)__builtin_frame_address(0) - buf); //buf의 주소와 buf ~ $rbp 의 offset을 출력 printf("[1] Leak the canary\n"); printf("Input: "); fflush(stdou..
보안 직무 조사 및 취업 희망 기업 PT 발표
[pwnable.kr] bof 아래는 다운받은 bof.c 코드이다. #include #include #include void func(int key){ char overflowme[32]; printf("overflow me : "); gets(overflowme);// smash me! if(key == 0xcafebabe){ system("/bin/sh"); } else{ printf("Nah..\n"); } } int main(int argc, char* argv[]){ func(0xdeadbeef); return 0; } main 함수의 func()에서 key = 0xdeadbeef를 위쪽 func()처럼 key = 0xcafebabe 로 바꿔주면 쉘을 띄워준다. gets 함수를 통해 입력을 받는데, 입력값의 길이를 제한하지 ..
[Dreamhack] basic_exploitation_000 환경정보를 살펴보면, 보호기법이 아무것도 적용되지 않고 있다. #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } int main(int argc, char *argv[]) { char buf[0x80]; initialize(); printf("buf = (%p)\n", buf); scanf("%141s", buf); return 0; } main 함수를 보면 buf..
[SWING] Pwnable 02 - 함수 호출 함수 호출 함수 호출 규약은 함수의 호출과 반환에 대한 약속이다. 함수를 호출하거나 반환할 때 프로그램의 실행 흐름은 다른 함수로 이동한다. 함수를 호출할 때 호출자(Caller)의 상태(Stack Frame) 및 반환 주소(Return Address)를 저장하는데, 이는 함수가 호출한 함수가 반환되고 이동했던 실행 흐름이 다시 원래의 함수로 돌아올 때를 위함이다. 호출자(Caller)는 피호출자(Callee)가 요구하는 인자를 전달해주고, 피호출자의 실행이 종료될 때 반환 값을 전달받는다. 컴파일러가 작성된 코드를 컴파일할 때, 코드에 명시된 혹은 CPU 아키텍처에 적합하며 지원되는 함수 호출 규약을 적용한다. 아키텍처 x86 (32bit) 아키텍처: 레지스터가 적다 -> 스택으로 피호출자의 인자를 전..
[Dreamhack] XSS-1 #!/usr/bin/python3 from flask import Flask, request, render_template from selenium import webdriver from selenium.webdriver.chrome.service import Service import urllib import os app = Flask(__name__) app.secret_key = os.urandom(32) try: FLAG = open("./flag.txt", "r").read() except: FLAG = "[**FLAG**]" def read_url(url, cookie={"name": "name", "value": "value"}): cookie.update({"domain": "127.0.0..