분류 전체보기(324)
-
Pwndbg 동적 디버깅으로 RTL 32bit, RTL 64bit 풀기 - Ubuntu Linux
- RTL 32bit 풀이 이 문제에서는 아래와 같이 rtl32_1이라는 실행파일이 주어집니다. memset() 함수로 buf를 정리해주고, printf()로 "Input me : "라는 문자열을 출력해줍니다. 다음 줄에서 read() 함수로 0x58(10진수로 88)만큼 buf를 입력받습니다. 그런데 위에서 선언된 buf를 보면 크기가 0x48(10진수로 72)이므로, 이 부분에서 BOF가 일어난다는걸 알 수 있습니다. payload를 구상해보면 'a'를 buf 크기(0x48)만큼 + sfp 4 + system + dummy 4 + /bin/sh 정도로 구성 될 것 같습니다. system과 /bin/sh를 어떻게 실행시켜야할까....하고 고민하다가 IDA로 파일 안에 있는 모든 문자열을 열어보았습니다...
2021.07.19 -
RTL_Core 풀이
안내 문자열을 출력해주고, gets() 함수로 s를 입력받습니다. 그리고 if문으로 가면 check_passcode() 함수에 s를 인자 값으로 넣은 리턴 값이 hashcode와 같냐는 조건이 보입니다. hashcode는 이따가 주소 값을 좀 찾아보도록 하겠습니다. 그럼 이제 check_passcode() 함수를 분석해보겠습니다. v2라는 int형 변수를 선언해서 0으로 초기화해줍니다. 그리고 0~5까지 for문을 돌려서 a1(main() 함수에서의 s)의 인자 값을 4byte씩 증가시키며 v2에 더해줍니다. 그리고 누적된 v2를 리턴합니다. 이제 hashcode의 주소 값을 확인해보겠습니다. 0C0D9B0A7(10진수로 3235492007) s에는 저 주소를 넣어주고 뒷부분을 0으로 채우면 될 것 같습..
2021.07.18 -
RTL_World 풀이
int __cdecl main(int argc, const char **argv, const char **envp) { int result; // eax int v4; // [esp+10h] [ebp-90h] char buf; // [esp+14h] [ebp-8Ch] void *v6; // [esp+94h] [ebp-Ch] void *handle; // [esp+98h] [ebp-8h] void *s1; // [esp+9Ch] [ebp-4h] setvbuf(stdout, 0, 2, 0); handle = dlopen("/lib/i386-linux-gnu/libc.so.6", 1); v6 = dlsym(handle, "system"); dlclose(handle); for ( s1 = v6; memcmp(..
2021.07.17 -
PLT와 GOT
- PLT란? PLT는 *Procedure Linkage Table의 약자입니다. 파일 내부가 아닌 다른 외부 *라이브러리의 함수를 호출할 때 연결을 해주는 테이블입니다. * 리턴 값이 없는 함수 * 소프트웨어를 개발할 때 컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임 이렇게 정의만 말하면 조금 어렵게 느껴질 수도 있습니다. 추가적인 설명과 함께 예시를 들어보겠습니다. 우선 PLT가 필요한 상황과 필요하지 않은 상황이 있습니다. Dynamic Link를 할 때는 PLT가 필요하고, Static Link를 할 때는 PLT가 필요하지 않습니다. 그 이유는 무엇일까요? Static Link는 Link 단계에서 라이브러리를 바이너리에 포함시킵니다. 그 말인 즉슨, 별도의 외부 파일이나 라이브러리가 없어도 실행..
2021.07.17 -
[BOJ 15924] 욱제는 사과팬이야!!
https://www.acmicpc.net/problem/15924 15924번: 욱제는 사과팬이야!! 첫째 줄에 구사과가 선물을 가져가는 경로의 수를 출력한다. 경로가 너무 많아질 수 있으므로 1,000,000,009 (109 + 9)로 나눈 나머지를 출력한다. www.acmicpc.net - 문제 요약 지도의 가로, 세로 크기인 N, M과 도착지 X를 포함한 지도가 주어진다. 지도는 E(i, j+1로 이동), S(i+1, j로 이동), B(i+1, j 또는 i, j+1로 이동)로만 이루어져 있다. 욱제가 도착지 X에 선물을 놓을 때 구사과가 선물을 가져가는 경로의 수를 구하시오. 이때, 경로의 수는 1,000,000,009로 나눈 나머지를 출력하시오. - 알고리즘 정리 우선 경로의 수를 구하라고 하는..
2021.07.17 -
[BOJ 15927] 회문은 회문아니야!!
https://www.acmicpc.net/problem/15927 15927번: 회문은 회문아니야!! 팰린드롬이란 앞으로 읽으나 뒤로 읽으나 같은 문자열을 말한다. 팰린드롬의 예시로 POP, ABBA 등이 있고, 팰린드롬이 아닌 것의 예시로 ABCA, PALINDROME 등이 있다. 같은 의미를 가지는 여러 단어들을 www.acmicpc.net - 문제 요약 알파벳 대문자로 이루어진 문자열이 주어졌을 때, 팰린드롬이 아닌 가장 긴 부분 문자열의 길이를 구해 보자. 이때 부분 문자열을 이루는 글자는 연속해야 한다. 팰린드롬이 아닌 부분 문자열이 없다면 -1을 출력한다. - 알고리즘 정리 우선 가장 긴 팰린드롬을 만들기 위해서는 문자열의 양 끝 문자가 달라야 합니다. Tast case 2를 예로 들면 "P..
2021.07.15