본문 바로가기

wargame21

[포너블] LOB 5 - orc LOB 5 - orc write up 환경변수 초기화 egghunter에 이어서 buffer 를 초기화하는 코드까지 추가되었다. 즉 직전 문제와 비교하면 버퍼에 쉘코드를 사용하지말고, 환경변수도 사용하지말라는건데 그 두 곳이 아닌 외부의 어딘가 쉘코드를 저장하라는 것이다. strcpy 함수 호출 다음인 main+194를 bp로 걸고 버퍼 주소값을 확인한다. 버퍼가 차지하는 메모리에 RET를 주면 초기화 돼버리기때문에 스택에서 버퍼를 제외한 적당한 메모리주소를 주어야한다. 위에서 확인 되는 적당한 주소 0xbffffb34를 주고 그 뒤에 놉슬레드와 쉘코드를 주면 ret된 후 놉 슬레드를 타고 가서 쉘코드가 수행 될 것이다. ./wolfman `python -c 'print "A" * 44 + "\x34\x.. 2021. 9. 30.
[포너블] LOB 4 - goblin LOB 4 - goblin write up 이번에는 고블린 ! 이번에는 오크가 보인다. 코드를 살펴보면 이전 문제들과 다르게 추가된 부분이 있다. egghunter라는 주석이 있는 부분인데, 찾아보니 memset 함수를 통해 환경변수를 초기화하는 작업이다. 그니까 이 문제는 환경변수를 사용하지않고 풀어야한다. 그리고 입력인자에 조건을 걸어놨는데 argv[1][47] != \xbf 즉 첫번째 입력인자의 48번째문자가 \xbf로 시작해야한다는 뜻 여기까지 정보만을 보고 대충 어림짐작해보면 버퍼가 40이고 int i 가 4바이트 sfp가 4바이트니까 48바이트를 더미로 덮고 RET를 주어야하는데 이때 47번째까지는 아무 의미없는 더미로 덮으면 되지만 48번째 문자는 \bf로 시작해서 RET 주소를 주어야한다는.. 2021. 9. 30.
[포너블] LOB 3 - cobolt LOB 3 - cobolt write up 이번 문제는 cobolt이다. goblin 이 보인다 이번에는 small buffer에 stdin 즉 입력이 추가되었다. 음 그냥 gremlin에서 공격한 방식으로 만든 페이로드를 입력에 넣으면 해결되는거 아닌가? 이 생각이 1차원적으로 들었다. 이렇게 실행하면 입력을 하게되는데 여기 입력에 페이로드를 넣어보려고 한다. 마찬가지로 버퍼의 크기가 작으므로 환경변수를 이용하자. export shellcode=`python -c 'print "\x6a\x0b\x58\x99\x52\x66\x68\x2d\x70\x89\xe1\x52\x6a\x68\x68\x2f\x62\x61\x73\x68\x2f\x62\x69\x6e\x89\xe3\x52\x51\x53\x89\xe1\xc.. 2021. 9. 26.
[포너블] LOB 2 - gremlin LOB 2 - gremlin write up gate 문제를 해결하고 얻은 gremlin의 password로 로그인하면 다음 문제가 열린다. 이번에는 cobolt가 보인다. 한번 열어보자 gate 문제와 똑같은거 아닌가했지만 buffer 의 크기가 16으로 작아진 것을 확인할 수 있다. 처음에 buffer가 작아진게 무슨 의미일까? 오히려 bof 공격을 사용하기 더 수월해진것 아닌가 생각했다. 지난 문제와 같은 방법으로 공격을 시도한다고 시뮬레이션해보니, 쉘코드를 작성하는 부분에서 막혔다. 쉘코드가 24바이트인데 버퍼의 크기가 16바이트 밖에 안되기때문에 버퍼에 쉘코드를 작성할 수 가 없었다. 이전 문제를 풀때도 버퍼에 크기를 작성하는 것 외에 환경변수를 이용하는 방법이 있었는데, 아마 gremlin에서.. 2021. 9. 26.