목록분류 전체보기 (365)
보호되어 있는 글입니다.
보호되어 있는 글입니다.
dreamhack 문제를 푸는데 dll injection 관련 문제가 나왔다. dll을 로드하여 exe파일을 만들어야 했다. 처음에 notepad로 확장자명을 바꾸어 만들었으나 dll을 로드하는데있어 잘 되지 않았다. 그래서 visual studio를 이용했다. #include #include int main() { HINSTANCE prob = LoadLibraryA("???.dll"); if (prob == NULL) { printf("dll 로드 실패\n"); return -1; } printf("dll 로드 성공"); return 0; } 해당 코드로 원하는 dll을 로드한 exe파일을 만들 수 있다. 옵션 창에서 빌드 -> 일괄 빌드를 눌러준다. 실행시 프로젝트 디렉터리에 exe파일이 생성되어있..
#include #include #include void init() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); setvbuf(stderr, NULL, _IONBF, 0); } void vuln() { char buf[0x30]; memset(buf, 0, 0x30); write(1, "> ", 2); read(0, buf, 0x60); } int main(void) { init(); vuln(); exit(0); } 저번 문제 warmup과 입력값의 크기만 다르다. ctftime에 writeup이 올라와 있다. from pwn import * context.log_level = 'Debug' binary = context...
보호되어 있는 글입니다.
Base64는 그대로 표현하면 64진법이다. 바이너리 데이터를 문자 코드에 영향을 받지 않는 공통 ASCII 문자로 표현하기 위해 만들어진 인코딩이다. 8비트짜리 바이트 3개를 6비트씩 4개로 쪼개어 Base64 코드 4개로 바꾸어 표현한다. example 원문 E 1 L 바이트 값 0x45 0x31 0x4C 2진수 0 1 0 0 0 1 0 1 0 0 1 1 0 0 0 1 0 1 0 0 1 1 0 0 변환 값 17 19 5 12 결과 R T F M 원문 'E1L' 을 인코딩하는 과정이다. 결과로 'RTFM' 이 나온다. $ echo -n E1L | base64 RTFM $ echo RTFM | base64 --decode E1L 리눅스에서의 인코딩 디코딩 과정이다. Base64 변환표 값 문자 값 문자 ..
#include #include #include void init() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); setvbuf(stderr, NULL, _IONBF, 0); } void vuln() { char buf[0x30]; memset(buf, 0, 0x30); write(1, "> ", 2); read(0, buf, 0xc0); } int main(void) { init(); vuln(); exit(0); } 해당 문제의 코드이다. 처음에 문제를 봤을 때 그냥 rop 쓰면 끝날 것 같은데?? 생각하며 ROPgadget들을 찾았지만 절망적이었다. 사용할 수 있는 가젯은 pop rbx, ret 밖에 없었다. csu도 없..