LOB:Darkknight→Bugbear

LOB 2018. 4. 11. 19:04

bugbear.c의 코드이다.


주석에 RTL이라고 적혀있고, 이번엔 argv[1][47]에 0xbf면 exit하도록 바뀌었다.


RTL은 Return To liblary 의 약자로, 라이브러리 내의 함수로 점프하여 쉘을 실행하는것이다.

(http://itsaessak.tistory.com/270?category=977991)


간단히 말해서 위의 코드의 경우 스택에


┌──────────┐

│             buffer[40]            │ 

├──────────┤

│                  SFP                  │ 

├──────────┤

│                 addr                 │ 

├──────────┤

│                  argc                 │ 

├──────────┤

│                argv[0]               │ 

├──────────┤

│                 .......                  │



처럼 넣을 예정이다.


addr에는 시스템함수의 주소를 넣고, argv[0] 에 /bin/sh를 넣어 라이브러리에서 /bin/sh를 실행하게 하는 것이다.


gdb로 아무 프로그램이나 열어서 시스템 함수의 주소를 구해보자.



그냥 main에다 BP를 걸고 run한 후, p system을 하면 주소를 볼 수 있다.

0x40058ae0이 시스템의 주소인 것을 알 수 있다.



이 코드는 /bin/sh의 주소를 구해오는 코드이다. shell로 시스템의주소를 넣고, memcmp로 /bin/sh와 같은지 계속 비교해나간다. 


실행 결과 /bin/sh의위치가 0x400fbff9인것을 알 수 있다.


즉 44바이트로 SFP까지 덮은 후, system함수의 주소 0x40058ae0을 넣은 후, 4바이트를 또 채우고 /bin/sh의 주소 0x400fbff9를 인자로 넣어주면된다.


./bugbear `python -c 'print "A"*44 + "\xe0\x8a\x05\x40" + "AAAA" + "\xf9\xbf\x0f\x40"'`








'LOB' 카테고리의 다른 글

LOB:Giant→Assasin  (0) 2018.05.01
LOB:Bugbear→Giant  (0) 2018.04.30
LOB:Golem→Darkknight  (0) 2018.04.11
LOB:Skeleton→Golem  (0) 2018.04.10
LOB:Vampire→Skeleton  (0) 2018.04.09
블로그 이미지

천재보다는 범재

,