728x90 system10 [LOB] skeleton 코드 코드의 동작은 이전 문제들과 별다른 것이 없다. 하지만 다음의 조건들을 모두 우회해야 한다. 1. egghunter 환경변수를 쓰지 못함2. argv[1] + 47, 즉 shellcode의시작 주소가 \xbf이어야 함(스택 영역에 shellcode 적재)3. 버퍼 내 쉘코드 쓰기 불가4. argv[1]의 길이를 48로 제한5. argv 모두 초기화 이전 문제들과 달리 5번 조건이 추가되었다. 이전 문제에서 1-4를 우회하기 위해 인자에 shellcode를 쓰는 등의 행위를 했는데, 이를 초기화하는 것을 해결하여 buffer over flow 공격을 수행해야 한다.공격취약한점을 찾고 buffer over flow임을 알았고, 우회해야 되는 조건들을 알았으니 공격을 시작한다.인터넷을 통해 자료를 찾아보.. 2016. 9. 27. [LOB] vampire 코드 코드의 동작을 살펴보면, 기초적인 buffer over flow 공격인데, 추가적으로 RET의 주소가 0xbf 로 시작하고, 그 이후 0xff가 아닌지를 판별한다. 하지만 지금까지 공격했을 시, 0xbfff--- 였기 때문에 이를 우회하여야 한다.이를 우회하기 위해 다양한 시도를 해봣는데, 인자값이 엄청 크게 되면 스택의 주소가 밀려 0xbffe로 변경됨을 알 수 있었다. 따라서 인자 값에 매우 큰 값을 삽입하여 buffer over flow공격을 수행한다.공격취약한점을 찾고 buffer over flow임을 알았고, 우회해야 되는 조건들을 알았으니 공격을 시작한다. 1. argv[2]에 NOP 80000개 삽입 후 argv[1] 주소 확인 argv[1] = 0xbffec3b8 2. payload .. 2016. 9. 27. [LOB] troll 코드 코드의 동작을 살펴보면, argc를 검사함으로써 argv[0]과 argv[1] 밖에 공격에 활용할 수 없다. 그런데, argv[1]의 길이를 검사하기 때문에, argv[0]을 조작해야 한다.따라서 argv[0] 에 shellcode 를 작성하고, 그 영역을 RET가 가르키게 buffer over flow 공격을 수행해야 한다.공격취약한점을 찾고 buffer over flow임을 알았고, 우회해야 되는 조건들을 알았으니 공격을 시작한다. 1. shellcode를 이름을 갖는 파일 생성 최종적으로 공격을 하기 위해 argv[0]인 파일 이름에 shellcode를 적재하여야 한다. 따라서, shellcode를 이름으로 하는 심볼릭 링크 파일을 생성한다. 이전까지 내가 사용하던 shellcode에는 \x2.. 2016. 9. 27. [LOB] orge 코드 코드의 동작을 살펴보면, 이전 문제들과 거의 유사하다. 하지만 here is changed! 라는 이름으로 argv[0]을 검사하는 부분이 추가되었다. argv[0]은 시작하고자 하는 프로그램명이기 때문에, ./orge 로 실행할 경우는 길이가 6인 argv[0] 을 갖는다. 이를 77의 길이로 맞춘후 이전 문제와 같이 BOF 공격을 수행하면 된다.공격취약한점을 찾고 buffer over flow임을 알았고, 우회해야 되는 조건들을 알았으니 공격을 시작한다. 1. 77길이의 이름을 갖는 프로그램 생성하기 심볼릭 링크를 통해 77 길이를 갖는 argv[0] 조건을 맞추어 주도록 한다. ./ 까지 포함하기 때문에 75개의 c로 된 orge 심볼릭 링크 파일을 생성한다. 2. 이후의 공격이후의 공격은 b.. 2016. 9. 27. [LOB] darkelf 코드 코드는 이전 문제와 거의 유사하다. 하지만 check the length of argument 의 이름으로 첫번째 인자값인 argv[1] 의 길이가 48보다 큰지를 검사한다. 이를 우회하여 argv[2] 를 이용하여 buffer over flow 공격을 수행한다.공격취약한점을 찾고 buffer over flow임을 알았고, 우회해야 되는 조건들을 알았으니 공격을 시작한다.argv[1]은 buffer를 채우는데에 사용하고 argv[2]에 공격 코드를 적재하는 방식으로 공격을 수행한다. 1. 떨어져 있는 거리 구하기 (이전과 동일) 2. 인자 값 주소 확인하기(이전과 동일)argv[1] = 0xbffffbff 1. Payload 작성[40Byte Buffer] + [4Byte SFP] + [RET] 이.. 2016. 9. 27. [LOB] wolfman 코드 코드의 동작을 살펴보면, 이전 문제인 orc문제와 거의 유사하다. 하지만, 마지막에 buffer를 0으로 초기화하기 때문에 buffer에 shellcode 를 적재하는 buffer over flow는 불가능하다. 따라서 입력할 수 있는 인자값에 shellcode를 적재하여 이 주소를 RET가 가르키게 하여 공격을 수행해야 한다.공격취약한점을 찾고 buffer over flow임을 알았고, 우회해야 되는 조건들을 알았으니 공격을 시작한다.입력하는 인자에 shellcode를 갖이 입력하고, RET를 이 주소를 가르키게 한다. 1. 떨어져 있는 거리 구하기 RET, EBP 까지 쓰레기 값으로 채우기 위해 떨어져있는 거리를 구하도록 한다. buffer의 크기가 40이고, 어셈 코드를 통해 확인해도 40이다.. 2016. 9. 27. 이전 1 2 다음 728x90