일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- ZIP 파일구조
- 네트워크 보안
- ftz
- Multimeida
- 는 하지마...
- 윈도우 프로세스 종류
- CTF-D
- html
- slack space
- 정보처리기사 필기 합격
- vinetto
- pythonchallenge
- 포렌식
- Multimedia
- 네트워크관리사2급
- disk
- Window process
- 2022시작
- N0Named
- 디지털포렌식 with CTF
- 실기
- memory
- 슬퍼유
- 24시간의 전사
- 디지털포렌식
- 생활코딩
- blkls
- 윈도우 프로세스
- network
- 생활코딩 html
- Today
- Total
ssoL2 TISTORY
lob [Level2] gremlin > cobolt (1) 본문
하롱하롱 ~~~ 여러분
ssoL2가 또 왔습니다 ㅎㅎ
이번에는 LOB Level2인 gremlin > cobolt writeup 인데요 !
실력은 많이 부족하지만 열심히 준비 했으니까 잘 봐주시고 ~~
피드백 해주실 거 있으시면 댓글 남겨주시면 감사하겠습니다 ㅎ3ㅎ
START ~~~~
login : gremlin
password : hello bof world
ls -al
cobolt가 만든 cobolt 파일 발견 !
바로 cat cobolt.c해서 어떤 프로그램인지 분석해보자
level1의 gate > gremlin과 같은 형태지만
buffer의 바이트가 256 > 16으로 줄어들었다 !
취약점은
level1과 같은 strcpy 으로 인한 bof(buffer over flow) 이고,
어떻게 해결할 것인가 고민해야 한다
근데, 16바이트라서 buffer에 shellcode를 넣을 수가 없어 ㅜ3ㅜ
shellcode는 25바이트니까 !
그럼 이 shellcode를 어디에다 넣어서 해결해야 할까?
방법은 세 가지 ! (내가 아는..)
1. 환경 변수를 이용해서 혹은 2. 파일이름에 올리거나 3. argv[2]에 넣는 것
근데 현재 왕초보인 ssoL2가 할 수 있는 방법은
1과 3뿐인데
이번 문제는
1번 환 경 변 수를 이용해서 풀어보겠어용 ~!
흑 !!!!!!!!!!!!!!!!
LOB 풀면서 매우매우 중요한 단계지만
첫 게시물에서 못올려서 아차 싶었답니다 ㅜ3ㅜ
LOB 문제를 풀기 전에 로그인 하고 나서 가장 먼저 해야 할 일은
bash2를 해줘야 합니다 !
꼭 기억하세요
export 명령어를 하면 환경변수를 모두 볼 수 있습니다 ~
사진으로는 첨부를 못했지만 ㅜ ㅇ ㅜ
mkdir shellcode를 해서 shellcode 디렉토리를 만들고
이 안에서 풀었습니다
푸는데 전혀 지장없습니다 ㅎㅎ
저도 왜 만들었었는지 ㅎㅎ;;
export 환경변수이름=`python -c 'print "쉘코드 25바이트"'` 해주면 되는 데요
제가 처음 풀 때 계속 안만들어져서
왜그러지 고민했었는데
export 환경변수이름 = `python -c 'print "쉘코드 25바이트"'`
위에 처럼
이름과 파이썬 사이에 띄어쓰기 절대 하면 안되요 !
그래서 계속 환경변수가 안되던 ㅜ3ㅜ
참고하시길 바라요 ㅎ3ㅎ
환경변수를 만들어 줬으면
이를 이용해줘야겠죠 !
어떻게 이용하는지 궁금하시죵 ?
일단 vi 편집기를 사용해서 code.c를 만들어 봅시다 ~
위 사진은 code.c를 만들어 놓고 vi를 쓴 상태에요 ! 혹시나 궁금해 하실까봐 ㅎㅅㅎ
getenv라는 함수는 환경 변수를 가져오는데요 !
뭔지 궁금하시죠 !
저도 궁금해서 찾아봤는데요
여기 들어가서 참고하시면 좋을 거 같아용
그래서 gcc -o KEY code.c
즉, gcc -o 환경변수 소스파일
이 명령어로 이제 컴파일 시키고
ls 해서 보면
KEY 파일이 만들어져 있음을 볼 수 있는데요
./KEY 하면
환경변수가 담긴 즉, shellcode가 있는 주소를 출력해주십니다
왜냐면 아까 code.c에서 getenv로 %x > 16진수로 출력하도록 해줬으니까여 ~~
자 이제 파이썬으로 짜기만 하면 완료
cd .. 으로 shellcode라는 디렉토리에서 나간다음
16바이트의 buffer과 이전 ebp를 \90인 nop으로 채워주고
return address에 아까 구한 주소를 넣으면 끝 ㅎㅎ
다음 게시물에서 만나욤
안뇽 ~~~~~~~~~~
'challenge > pwn' 카테고리의 다른 글
pwnable.kr [flag] (0) | 2019.07.09 |
---|---|
pwnable.kr [bof] (0) | 2019.07.08 |
pwnable.kr [collision] (0) | 2019.07.08 |
pwnable.kr [fd] (0) | 2019.07.08 |
lob [Level1] gate > gremlin (4) | 2018.11.03 |