KDHzoot's Github

Code for study, project, etc

자세히보기

정보보안 16

[ebCTF 2013] pwn 200

brainfuck 관련된 문제이다. https://ko.wikipedia.org/wiki/%EB%B8%8C%EB%A0%88%EC%9D%B8%ED%8D%BD brainfuck은 컴퓨터 프로그래밍 언어로 미리 알고 있으면 문제를 푸는데 도움이 많이 된다. ida로 뜯어보니 shell이라는 함수가 있다. 누가봐도 ret값 변조 문제라서 brainfuck을 사용해 어떻게 메모리 값을 변조할지 생각해봤다. bf_main 함수를 보면 switch문이 두개가 있다. 살펴보니 첫번째 스위치문은 그저 문자 명령을 정수로 바꾸는 작업이어서 볼 필요가 없었다. 문제는 두번째 스위치문에 있다. >를 사용해서 p의 값을 증가시켜 ret까지 주소값을 이동할 수 있지만, str에서 참조할 때 4를 곱해서 참조하기 때문에 str의 ..

정보보안/CTF 2018.11.12

[CSAW CTF 2013] Exploitation4

static 컴파일된 문제라서 main함수의 시작을 먼저 찾아야한다. 먼저 우분투로 실행시켜서 뜨는 문자열을 기억한다. 그 다음 ida에 들어가서 ctl+1 한 뒤 string을 선택하면 프로그램 내에서 선언된 문자열이 모두 뜬다. 여기서 ctl+f 하여 welcome이 들어가는 문자열을 선택한 뒤 x를 누르면 그 문자열을 사용하는 함수로 이동하게 된다. (x는 함수나 변수가 호출되는 코드로 이동함) 이제 main함수를 분석하면 된다. 코드가 재귀함수처럼 똑같은 함수를 호출한다. 중요한 부분만 보면 자신의 ret값을 (본인 함수가 끝났을 때 돌아가야하는 코드 주소) 함수 시작 때 배열에 넣고 종료 전에 다시 가져와서 ret 값 덮어쓰기를 방지하는 것이다. v2의 주솟값을 인자로 넘겨주는 함수는 들어가보니..

정보보안/CTF 2018.11.12

[CSAW CTF 2013] Exploitation3

복잡한 쉘코드는 건너뛰고 생각하자. 코드를 따라가면서 읽다보면 대충 id와 password같은 문자열이 보인다. csaw2013S1mplePWD 입력하면 로그인이 되고 "Entry info: "가 뜬다. ida로 코드를 읽어보면 먼저 사용자가 버퍼에 입력할 entry의 길이를 입력하고 버퍼에 entry를 입력한다. 여기서 주의해야할 점은 entry의 길이가 1024미만이어야 한다는 것이다. 1234n = (signed __int16)entry_len;if ( (unsigned int)((signed __int16)entry_len + 1)

정보보안/CTF 2018.11.10

[CSAW CTF 2013] Exploitation2

main 코드가 엄청 길어서 당황했다. 게다가 소켓코드라서 뭔지 하나도 모른다. 대충 exploit2 실행시켜두고 cmd를 새로 켜서 페이로드를 작성했다. 소켓으로 로컬 31337포트에 연결하니 에러 없이 handle 함수로 넘어간다. main함수는 무시하기로 했다. 12345678910111213141516171819202122232425262728void __cdecl handle(int newsock){ unsigned int v1; // eax char buffer[2048]; // [esp+1Ch] [ebp-80Ch] unsigned int cookie; // [esp+81Ch] [ebp-Ch] cookie = 0; memset(buffer, 0, sizeof(buffer)); v1 = time..

정보보안/CTF 2018.11.09

[pwnable.kr] shellshock

기본적인 shellshock에 대한 문제이다. shellshock 취약점은 기존 쉘에서 쉘을 다시 호출 할 경우 환경변수를 로딩하면서 생기는 취약점이다. (아마도) export로 환경변수를 설정할 때 1export x='() { echo test; }'cs 로 설정해주면 x는 함수가 아니라 문자열로 인식된다. 이때 다시 쉘을 호출하게 되면 문자열을 둘러싸던 ''가 사라지면서 함수의 형태가 된다. 1x= () { echo test; }cs 근데 초반에 환경변수 설정을 1export x='() { echo test; }; /bin/cat flag'cs 로 해주었을 경우 다시 쉘을 호출하게 되면 환경변수 x가 함수가 되는 동시에 뒤에 붙어있는 /bin/cat flag 부분이 실행된다. 이때 호출되는 쉘의 권한..

[pwnable.kr] leg

leg문제는 arm을 보여주기위한 문제이다.어셈블리어 코드인데 어딘가 다르다.arm 기반으로한 코드이기 때문이다. 우리가 알아야 되는 것은 key1, key2, key3 함수의 리턴값이다. 코드를 보면 알겠지만 함수가 끝난뒤 항상 r0 레지스터에 있는 값을 어딘가로 복사한다.여기서 우리는 함수의 리턴값이 r0에 저장된다는 것을 알 수 있다. 그럼 이제 key함수들에서 r0이 어떻게 조작되는지만 알면 된다. key1 함수이다. r0는 r3의 값을 덮어쓰고 r3는 pc의 값을 덮어쓴다.따라서 리턴되는 값은 0x00008cdc에서 pc값이다.여기서 pc란 프로그램 카운터의 줄임말로 다음으로 실행되어야 하는 명령어를 가르킨다. 여기서 주의해야될 점은 arm에서의 pc계산 방법이다.arm에서 명령 실행단계는 4단..

[pwnable.kr] input

pwntools 사용법을 알려주기 위해 만든 문제 같다. 특별한 것 없이 코드에서 원하는 대로 프로그램에 입력을 해주면 된다. 입력방법을 찾아보느라 오래걸렸다. 기본 디렉토리에서는 파일을 생성할 수 없으므로안보이지만 존재하는 tmp 폴더로 들어가 자신의 폴더를 만들고거기에 flag와 elf파일을 복사해서 작업해야한다. exploit code123456789101112131415161718192021222324252627282930313233from pwn import * #setting argvs for stage 1argvs = [str(i) for i in range(100)]argvs[ord('A')] = "\x00"argvs[ord('B')] = "\x20\x0a\x0d"argvs[ord('C')..