티스토리 뷰
goblin을 풀어보자.
이번엔 egghunter가 존재한다.
환경변수를 못쓰게 되었다.
일단 buffer를 40바이트 할당했고,
int i가 존재한다.
첫번째 if문에서 넘겨주는 값이 2보다 작으면 안된다고 하고,
//egghunter부분에서
for문으로 환경변수의 값을 0으로 memset하고,
if문에서는 두번째로 넘겨주는 인자의 47번째 인덱스,
즉 ./orc `pyhton~~~~ 에서 `python~~이부분의 47번째 인덱스의 값이 /xbf여야 한다.
그리고 strcpy로 입력을 받는다.
문제를 어떻게 풀까..
buffer도 쉘코드를 다 넣을만큼 충분하지 않으니 argv[1]의 자리를 이용하자.
argv[1]는 우리가 작성하는 익스플로잇인 `python ~~`이다.
위치는 문제를 풀면서 확인해보장.
gdb를 확인해보자.
스택을 44만큼 확장했다.
ebp-40이 buffer의 시작위치이다.
44가 왜 아닐까 생각해보니
i가 존재한다.
buffer선언하고 i선언했으니 i가 buffer보다 위에 있겠다.
그럼 ret는 44에서 시작해 4만큼이겠다.
gdb에서 확인해보자.
먼저 argv[1]을 입력받은 직후에 break를 걸어주자.
그리고 argv[1]을 아래처럼 넣어준다.
\xbf\xbf\xbf\xbf부분은 위에서 if문을 우회하기 위해서이다. 아무튼 \xbf만들어가면 되니까.
그러고 buf에 값이 들어갔는지 확인해보면
우리가 넣은 값이 낮은 곳과 높은 곳 2군데에 존재한다.
뭐지?
왜냐하면 strcpy함수가 argv[1]의 값을 복사해 buffer에 넣어주기 때문에 둘 중하나는 argv이고 다른 하나는 buffer이다.
근데 잘 생각해보면 argv[1]이 더 높은위치에 있다는 걸 알수 있다.
스택에서 더 높은 위치에 있는 argv에 값을 먼저 넣어주고,
그걸 낮은위치에 있는 buf에게 전달한다.
그러니 argv[1]에 nop sled를 입력한 후 argv[1]의 적당한 위치를 return값으로 전달하면 argv[1]의 위치로 return하겠지?
그럼 다시확인해보자.분명 gdb다시 실행하면 값이 밀린다.
적당히 0xbffffde4로 return하게 하겠다.
이렇게 익스플로잇했다.
스택 채우고,ret에 argv[1]의 위치 넘겨주고 쉘코드까지 흘러갈수 있도록 nop을 조금 채워준뒤 쉘로 마무리.
풀렸따.
'포너블 > LOB' 카테고리의 다른 글
LOB wolfman 풀이 (0) | 2020.08.25 |
---|---|
LOB orc 풀이 (0) | 2020.08.25 |
LOB cobolt풀이 (0) | 2020.08.24 |
LOB gremlin풀이 (0) | 2020.08.24 |
LOB gate 풀이 (0) | 2020.08.19 |
- Total
- Today
- Yesterday
- SVM
- many-to-one
- 논문 잘 쓰는법
- HTML
- porks
- 회귀
- 딥러닝
- PCA
- 단순선형회귀
- cuckoo
- Ethernet
- json2html
- automotive ethernet
- 크로스 엔트로피
- Python
- 케라스
- one-to-many
- SOME/IP
- AVB
- AE
- 로지스틱회귀
- 차량 네트워크
- 차량용 이더넷
- automotive
- 머신러닝
- CAN-FD
- 이상탐지
- many-to-many
- AVTP
- problem statement
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |