KDHzoot's Github

Code for study, project, etc

자세히보기

정보보안/pwnable.kr 8

[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')..

[pwnable.kr] random

rand()함수와 srand()함수의 차이점을 알면 풀 수 있다. rand()함수는 한번 실행되면 값이 고정돼서 변하지 않는다.gdb로 뜯어서 key값에 저장된 난수 값을 확인하면 쉽게 풀 수 있다. 255는 16진수로 ff이다.ff 좌우에 0x00007ffd와 0x6b8b4567이 있다.0x00007ffd는 다시 실행해보니 값이 바뀌었으므로 key값은 0x6b8b4567이다. 입력과 key를 xor 했을 때 0xdeadbeef가 나와야 되므로입력은 0xdeadbeef에 key를 xor한 값이다. exploit code

[pwnable.kr] passcode

치킨은 맛있다. c코드만 보면 쉬워보인다. 그런데 해보면 segfalt가 뜬다.scanf에서 인자를 변수의 주솟값이 아니라 변수의 값 자체를 넘겨주기 때문이다. 따라서 system함수를 실행시키기 위한 다른 방법을 찾아야한다.먼저 생각해 볼 수 있는 것이 welcome에 있는 name 배열을 이용하여 welcom 함수의 ret를 system함수로 조작해주는 것이다.그러나 입력받는 값이 100글자이고 canary가 걸려있어 bof는 안된다.마찬가지로 nx가 걸려있어서 shellcode도 안된다. 여기서 알아내기 힘든것이 name배열의 96에서 100번째 글자 4바이트가login 함수의 password1의 위치이다. 어셈블리어 코드를 보면 welcome 함수와 login 함수의 호출이 바로 인접해서 일어남으..

[pwnable.kr] echo1

NX는 안걸려있지만 서버환경상 aslr이 걸려있으므로 스택영역에 쉘코드를 쓰고 그 주소를 RET값에 넣는 방법은 안된다. bss영역은 aslr이 적용되어도 주소가 변하지 않음으로 id가 bss영역에 있는 것을 이용하여 쉘코드를 실행 시킬 수 있다. 버퍼오버플로우가 발생하는 echo1함수다. 먼저 id에 "\xff\xe4" 값을 넣는다.이는 어셈블리어로 jmp esp명령어와 같다. >>> payloaddump(40) + id_addr(8) + shellcodex64는 주소가 8바이트이다.쉘코드도 x32와 다른 코드를 사용해야한다. echo1함수의 에필로그에서 leave ret후 eip는 id의 주소를 가르키고 esp는 id_addr다음 쉘코드를 가르키게된다.id에는 jmp esp명령이 있으므로 eip가 e..