728x90

전체 글 201

fuzzing101 Exercise 1

Xpdf PDF 뷰어를 퍼징하고 cve-2019-13288 에 대한 크래시와 POC을 찾는 것이 목표입니다. CVE-2019-13288xpdf 4.01.01에서 parser.cc의 parset::getObj() 함수가 조작된 파일을 통해서 무한 재귀를 유발한다고 합니다.https://nvd.nist.gov/vuln/detail/CVE-2019-13288딱 봐도 스택 오버플로우 같습니다. 이 문제를 해결하게 되면 배우는 것이- 계측을 통한 대상 애플리케이션 컴파일- 퍼저(afl-fuzz) 실행- 디버거를 사용해 충돌 분류 환경Ubuntu 20.04.02 LTS에서 테스트 되었고, 퍼징 결과의 차이를 피하기 위해 동일한 OS 버전을 추천합니다. xpdf 3.0.2 다운wget https://dl.xpdfre..

python struct

python에서 정수, 문자열은 자유롭게 다룰 수 있다.하지만, C언어 스타일의 바이트 단위 데이터(바이너리 데이터)를 다뤄야 할때 문제가 발생한다.ex) 네트워크 패킷, 파일 포맷, 메모리 덤프 등등이런 것들은 전부 바이트 스트림으로 표현이 된다.ex)import struct# 정수 1024를 4바이트로 패킹data = struct.pack(" > 빅 엔디언! 네트워크 바이트 순서@ 시스템 기본= 시스템 기본 + 표준 크기 자료형 기호b signed charB unsigned charh shortH unsigned shorti intI unsigned intq long longQ unsigned long longf floatd doubles char[]p pascal string 여러 값을 패킹을 할 ..

코딩/파이썬 2025.09.08

[pwnable.kr] random

key ^ random 한 것이 0xcafebabe 일 경우에 플래그 값을 얻을 수가 있습니다.key는 사용자의 입력으로 받고, rand() 함수에 대해 알기만 하면 문제를 쉽게 해결 할 수 잇을 것 같습니다. rand() rand 함수는 랜덤한 숫자를 반환하는 함수입니다. 그런데 프로그램이 생성될 때 값이 정해지기 때문에 프로그램을 여러번 실행시켜도 동일한 값이 나옵니다. rand함수는 내부적으로 어떤 srand의 매개변수로 들어온 seed 값과 매칭되는 숫자가 정해집니다. 그래서 seed 값에 의해서 rand 함수의 결과값이 변할 수 있습니다. https://blockdmask.tistory.com/308 브포를 걸고 DWORD PTR [rbp-0x1c], eax 이므로 eax값이 어떤 값인지 알아보..

[pwnable.kr] cmd1

소스코드여기서 putenv 함수랑 strstr 함수만 알면 문제를 쉽게 풀 수 있습니다strstr 함수는 널 문자를 만날때까지 해당 문자열을 검색하는 함수입니다.putenv 함수는 환경 변수값을 수정하는 함수입니다. 그러면 ls 나 cat이나 이런 거는 사용이 안됩니다. 그래서 /bin/cat 방식으로 사용을 해야 겠습니다.블랙 리스트 기반입니다. 그러면 우회 방법이 존재한다는 것입니다../cmd1 "/bin/cat ./f*"

ELF x86 - Format string bug basic 2

#include #include #include #include int main( int argc, char ** argv ){ int var; int check = 0x04030201; char fmt[128]; if (argc snprintf 에서 argv[1] 을 통해 포맷 문자열이 그대로 들어간다. 그래서 %x 나 %n 이나 %hn 이나 등등 포맷 문자를 넣으면 포맷 스트링 취약점이 발생한다.check 변수 메모리 주소에 0xdeadbeef를 쓰면 되는 문제이다. 먼저 %x %x %x를 넣어서 스택의 값을 확인을 한다. 그리고 %hn 을 통해 2바이트 단위로 값을 덮어 쓴다.ex) 임의 주소 쓰기가 되는 이유%1234x%n -> 1234 글자 출력 -> 1234 = 길이가 지정한 주소에 기록된다..

워게임/root-me 2025.08.26

new 연산자 & delete 연산자

lazenca heap spray 공부하다가 new 연산자 나오길래 이참에 정리할겸 글 작성하게 되었다new 연산자동적 메모리 할당을 위한 연산자이다.int *p = new int; // int 크기만큼 heap에 메모리 할당*p = 10; new 연산자는 할당과 동시에 값을 지정할 수 도 있다.int *p1 = new int(5); // 값 5로 초기화int *p2 = new int(); // 0 으로 초기화delete 연산자배열 할당도 new 연산자로 할당할 수 있다.int *arr = new int[5];arr[0] = 1;arr[4] = 5;new 연산자로 메모리를 할당했다면, 반드시 delete로 해제해야한다.int *p = new int(10);delete p; // 메모리 해제int *arr..

코딩/c++ 2025.08.26

CodeQL

이론적인 부분은 구글에서 공부하면 될것같습니다(여러 자료들을 찾아보아도, 잘 안되길래 삽질을 통해서 아래와 같은 방식으로 했다.) CodeQLCodeQL은 Variant Analysis를 수행하는 정적 분석 도구이다.Variant Analysis : 알려진 취약점을 기준 삼아서 비슷한 유형의 취약점을 찾아내는 분석 방법이다.https://github.com/github/codeql/tree/main장점 : 패턴을 모델링하고 코드베이스에서 해당 패턴이 발생하는 부분을 빠르게 스캔할 수 있다는 것이다. 동작 방식CodeQL이 내부적 동작하는 과정대상 code를 데이터화하여 CodeQL Database를 생성CodeQL Database를 대상으로 CodeQL 쿼리로 질의쿼리 결과 분석 CodeQL Path 추..

sprintf 함수

printf는 화면에 출력하는 함수이다.sprintf는 출력 결과를 문자열 변수(버퍼)에 저장하는 함수이다.int sprintf(char *str, const char *format, ...);str : 결과를 저장할 문자 배열format : 출력 형식 문자열 (%d, %s, %x 등 사용 가능)... : 실제 넣을 값들반환 값은 저장된 문자열의 길이이다. 예제#include int main() { char buffer[100]; int age = 23; // 문자열을 buffer 안에 저장 sprintf(buffer, "저는 %d살 입니다.", age); // buffer에 저장된 내용을 출력 printf("buffer 내용 %s\n", buffer); ..

코딩/C언어 2025.08.22

astrogrep

astrogrep특정 텍스트 값만 입력하면 파일의 확장자를 가리지 않고 입력한 텍스트 값이 존재하는 모든 파일을 검색해준다.https://astrogrep.sourceforge.net/download/ Downloads - AstroGrepTranslation You can customize the language used in AstroGrep by placing a language xml file in the directory %appdata%\AstroGrep\Language or if using the portable version in the local directory under \Language. Note: The file(s) you place under that directastrogre..

프로그램 리뷰 2025.08.20
728x90