분류 전체보기
-
LEVEL 04 goblin write-upSystem hacking training/Hackerschool LOB 2018. 3. 16. 01:32
[문제] extern 키워드로 외부변수를 불러와 0으로 초기화 해주는 것을 볼 수 있다.environ이라는 변수명만 봐도 환경변수를 초기화 해준다는 것을 알 수 있다. 따라서 exploit하기 위해서 자주쓰던 환경변수를 사용할 수 없다. 그렇기 때문에 스택에 쉘코드를 올려 실행을 해야한다.[시나리오] | char buffer[40] | SFP | RET | 스택은 위와 같이 쉘코드가 들어갈 충분한 크기를 가지고 있다.따라서 buffer에 19byte의 dummy(\x90)과 쉘코드 25byte를 넣어준다. gdb로 입력값이 들어가는 위치중 \x90에 해당하는 위치의 주소를 구하여 return address에 덮어주면 쉘을 띄울 수 있다. ※ gdb로 분석을 하기 위해 tmp 디렉토리를 만들어줬고, 그 안..
-
LEVEL 03 cobolt write-upSystem hacking training/Hackerschool LOB 2018. 3. 15. 21:13
[문제] 이번 문제도 간단한 bof 문제인걸 알 수 있다. buffer가 16byte인데 gets() 의 사용으로 인해서 bof 가 일어난다. gets() 는 문자열의 길이를 제한하지 않기 때문에 buffer에 입력을 받는다면 buffer의 영역을 넘어서 return address를 변조할 수 있다. 예상되는 스택은 이러하다. | char buffer[16] | SFP | RET | 버퍼가 작으니 쉘코드를 스택에 직접 올리는 방법은 제한된다. 따라서 환경변수에 쉘코드를 올리고, 쉘코드를 넣은 환경변수의 주소를 return address 로 변조하면 쉘을 띄울 수 있다. like this..
-
LEVEL 02 gremlin write-upSystem hacking training/Hackerschool LOB 2018. 3. 15. 18:53
[문제] buffer가 16byte이고, strcpy()로 인해서 Overflow가 발생할 수 있다. 스택의 모습은 이러하다. | char buffer | SFP | RET | 따라서 16byte + SFP 4byte 를 dummy 값으로 채워주고, return address 를 shellcode의 주소로 변조하면 된다. 이와 같이 shellcode 를 환경변수로 올려주고 페이로드를 이와같이 작성하여 익스하면 된다.
-
LEVEL 01 gate write-upSystem hacking training/Hackerschool LOB 2018. 3. 11. 17:52
LOB 첫 번째 문제를 풀었다. 문제풀이에 앞서 Redhat Linux 6.2는 기본적으로 bash의 버전이 1.14버전이다.이 버전에서는 0xff를 인식하지 못하는 버그가 있다고 한다.0xff 가 0x00과 같은 역할을 하게된다.따라서 중간에 0xff가 들어가게되면 strcpy()같은 문자열을 복사하는 함수에서 복사를 하는 도중 끊기게 된다.그렇지만 bash2는 이 버그를 고친 2.3버전이기 때문에 bash2를 사용하여야 Payload에 0xff를 넣을 수 있다. 이러한 점을 알고있어야한다. 따라서 /bin/bash 대신 /bin/bash2를 사용하여 문제를 풀이하였다. ID : gate / PW : gate 로 로그인을 하면 gremlin 이라는 바이너리와 gremlin.c 라는 c 파일이 존재한다...
-
Pico CTF 2013 ROP2 write-upCTF Write-Up 2018. 3. 10. 16:40
Pico CTF 2013 ROP 2 문제를 풀이했다. [바이너리] 메모리 보호 기법 확인을 해보면 이렇게 Partial RELRO 와 NX가 걸려있는것을 확인 할 수 있다. 실행을 했을때 rop1 과 동일하게 Hello, World 만 뱉어준다. [Think-1]메모리 보호 기법중 NX 가 걸려있으므로 쉘코드를 스택에 올려서 쉘을 띄울 수는 없다.또 Partial RELRO가 적용되어서 .got를 제외한 섹션은 Read-Only 이다.ASLR은 자체적으로 걸어두었다. 바로 정적분석을 위해 IDA로 열어봤다. main() 의 모습이다.저 중 vulnerable_function() 가 있는데 주석을 달아놓은것 처럼 140byte를 입력하면 SFP가 덮이고, overflow가 일어난다. vulnerable_f..