본문 바로가기

wargame/LOB10

[포너블] LOB 6 - wolfman LOB 6 wolfman write up LOB 6 wolfman 라업입니다. 갈수록 점점 제약조건이 많아진다 이번에는 환경변수, 버퍼 초기화, 입력길이 제한 3가지의 제한이 걸렸다. 입력이 49글자 이상이면 안된다. 사실 이 문제는 보자마자 어떻게 풀이해야할지 아이디어가 떠올랐다. 전전 문제에 대한 풀이를 search하다가 argv[2]에 쉘코드를 넣고 푸는 방법을 봤었기때문에 길이 제한을 보자마자 그렇게 풀어야할 것 같았다. 즉 argv[2]에 nop+ 쉘코드를 주고, argv[1] 페이로드에는 44byte dummy + argv[2] 주소(ret) 를 주면 될 것이다. 그럼 argv[2]의 주소를 알아내는게 문제를 푸는 핵심이라고 보면 된다 [wolfman@localhost TMP]$ gdb -q .. 2021. 9. 30.
[포너블] 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.