목록2024/04 (9)
Iriton's log
Description 이 문제는 서버에서 작동하고 있는 서비스(basic_exploitation_000)의 바이너리와 소스 코드가 주어집니다. 프로그램의 취약점을 찾고 익스플로잇해 셸을 획득한 후, "flag" 파일을 읽으세요. "flag" 파일의 내용을 워게임 사이트에 인증하면 점수를 획득할 수 있습니다. 플래그의 형식은 DH{...} 입니다. 취약점 분석 a#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, ala..
https://eunginius.tistory.com/entry/Exploit-Tech-Return-Address-Overwrite Exploit Tech: Return Address Overwrite *본 포스트는 Dreamhack - Systemhacking Lecture 을 참고하여 작성되었습니다. 분석 취약점 분석/트리거 // Name: rao.c // Compile: gcc -o rao rao.c -fno-stack-protector -no-pie #include #include void init() { setvbuf(stdin, 0, 2, 0); eunginius.tistory.com 위 글에 Exploit까지 다 나와 있는데, 본 포스트는 단지 pwntools 사용에 익숙해지기 위해 작성된 ..
*본 포스트는 '유선배 SQL개발자 과외노트' 도서를 참고하여 작성되었습니다.01. 관계형 데이터베이스 개요데이터베이스용도와 목적에 맞는 데이터들끼리 모아서 저장여러 사람이 공유하고 사용할 목적으로 통합 관리되는 정보의 집합관계형 데이터베이스RDB(Relational Database)모든 데이터를 2차원 테이블 형태로 표현한 뒤 각 테이블 간의 관계를 정의하는 것으로 시작RDBMS는 이러한 RDB를 관리감독하기 위한 시스템Oracle, SQL Server, MySQL 등등TABLE세로 열을 Column가로 행을 Row관계형 데이터베이스의 기본 단위일반적으로 데이터베이스는 여러 개의 테이블로 구성테이블 형태로 데이터 조회/변경SQL(Structured Query Language)DB에서 데이터를 다루기 위..
*본 포스트는 Dreamhack - Systemhacking Lecture 을 참고하여 작성되었습니다. 분석 취약점 분석/트리거 // Name: rao.c // Compile: gcc -o rao rao.c -fno-stack-protector -no-pie #include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } void get_shell() { char *cmd = "/bin/sh"; char *args[] = {cmd, NULL}; execve(cmd, args, NULL); } int main() { char buf[0x28]; init(); printf("Input: "); scanf("%s", buf..
welcome Description 이 문제는 서버에서 작동하고 있는 서비스(welcome)의 바이너리와 소스 코드가 주어집니다. "접속 정보 보기"를 눌러 서비스 정보를 얻은 후 플래그를 획득하세요. 서버로부터 얻은 플래 dreamhack.io 리버싱 문제를 풀다가 nc 명령어로 지정된 호스트와 포트번호를 활용해서 서버에 접속할 수 있다는 걸 깨달았기에 써먹어 봤다. 플래그가 바로 떴다. 허무... 그래도 코드 분석을 해보자. flag 폴더를 연다. fseek 함수는 파일 포인터를 이동시키는 함수이다. ftell은 현재 위치를 long 타입 정수형으로 출력한다. 현재 위치가 파일의 끝이기 때문에(SEEK_END로 끝까지 이동했다.)파일 전체 크기를 반환해서 flag_len 변수에 넣은 거다. 다시 처음..
simple-operation Description 우리의 친구 아모가 미션을 주었습니다. "내가 원하는 결과가 나오도록 값을 입력해 줘!" 주어진 바이너리를 분석하고 알맞은 값을 입력하면 플래그가 출력됩니다. 플래그는 flag 파일에 dreamhack.io 풀이 코드의 흐름을 먼저 보자. 17-20: flag 파일을 열어서 파일 디스크립터를 fd 변수에 담는다. 45바이트만큼 읽어서 buf 변수에 받고 다시 닫는다. 21: 난수를 v6에 저장한다. 24: v7에는 사용자 입력값을 받는다. 25: v6 ^ v7 은 XOR 연산을 의미한다. 26: snprintf 함수는 출력 결과를 문자열 버퍼에 저장하는 함수이다. 버퍼의 크기를 지정하여 버퍼 오버플로우를 방지하는데 여기서는 9uLL로 지정했다. 9는 버..
*본 포스트는 Dreamhack - Systemhacking Lecture 을 참고하여 작성되었습니다. 스택 버퍼 오버플로우 스택의 버퍼에서 발생하는 오버플로우 버퍼 CS에서 버퍼는 데이터가 목적지로 이동되기 전에 보관되는 임시 저장소의 의미로 사용된다. 데이터 처리속도가 다른 두 장치가 있을 때, 이 둘 사이에 오가는 데이터를 임시로 저장해 두는 것은 일종의 완충 작용을 한다. 이해를 돕기 위해 키보드에서 데이터가 입력되는 속도보다 데이터를 처리하는 속도가 느린 프로그램이 있다고 가정해 보자. 사 이에 별도의 장치가 없다면 키보드의 입력 중에 프로그램에서 수용되지 못한 데이터는 모두 유실될 것이다. 이런 문제를 해결하고자 수신 측과 송신 측 사이에 버퍼라는 임시 저장소를 두고 이를 통해 간접적으로 데이..
*본 포스트는 Dreamhack - Systemhacking Lecture 을 참고하여 작성되었습니다. 함수 호출 규약 함수의 호출 및 반환에 대한 약속을 말한다. 한 함수에서 다른 함수를 호출할 때, 프로그램의 실행 흐름은 다른 함수로 이동한다. 그리고 호출한 함수가 반환하면 다시 원래의 함수로 돌아와서 기존의 실행 흐름을 이어나간다. 따라서 함수를 호출할 때는 반환된 이후를 위해 호출자(Caller)의 상태(Stack frame) 및 반환 주소(Return Address)를 저장해야 한다. 또한, 호출자는 피호출자가 요구하는 인자를 전달해줘야 하며, 피호출자의 실행이 종료될 때는 반환 값을 전달받아야 한다. 함수 호출 규약을 적용하는 것은 일반적으로 컴파일러의 몫이다. 컴파일러가 호출 규약에 맞게 코..