일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- GeoJSON object too complex/large
- node
- expo
- 어셈블리어
- Unable to find the global bin directory
- credential error
- netlify variables
- Error:error:0308010C:digital envelope routines::unsupported
- 김골라
- aws ec2
- ogr2ogr
- AWS
- AWS CodeBuild
- 반응형 페이지 좌표 변환
- ERR_PNPM_NO_GLOBAL_BIN_DIR
- 이미지 좌표 추출
- rwdImageMaps
- Sequelize Error: Dialect needs to be explicitly supplied as of v4.0.0
- CSS
- S3
- NODE_VERSION
- EC2
- AWS CodePipeline
- react
- 설치완료안됨
- SASS
- nodejs
- 이미지 맵
- can't getting credentials
- C언어
- Today
- Total
ImFe's study
FTZ level9 풀이 본문
로그인 후 ls명령어를 사용하면 hint파일이 존재하는것을 알 수 있습니다. 이를 열면 위와같은 코드가 보이는데요.
일단 코드를 보면 buf2와 buf에 각각 10byte씩 할당되어있는 것을 볼 수 있습니다.
그리고 printf문에 It can be overflow라고 버퍼 오버플로우 공격이 가능함이 암시되어있네요.
그리고 fgets를 통해 buf에 40만큼을 입력받습니다. 여기서 버퍼 오버플로우 취약점이 발생하겠네요.
buf2가 먼저 선언되고 그다음 buf가 선언되었으므로 입력값이 buf를 넘기면 buf2까지 도달할 거 같습니다.
이런 방식으로 buf2의 값을 go로 바꿔주면 level10으로 올라갈 수 있는 쉘을 실행해주는거 같습니다.
권한이 없어서 tmp에서 작업하는게 좋겠네요.
vi편집기로 코드를 넣어준후 ESC를 누른 뒤 :을 누르면 마지막 행으로 가는데 여기서 wq!(저장 후 종료)를 입력하고 Enter를 입력해줍니다.
위 사진의 세번째 명령어를 통해 vi편집기로 작성한 파일을 C파일로 변환해줍시다.
이후 파일이 있는곳으로 이동 후 gdb -q (파일명) 명령어를 입력하여 분석해봅시다.
set di …까지만 치고 tab을 누르면 자동으로 완성이됩니다.
set disassembly-flavor intel을 입력한 후
disas main도 입력해 줍시다.
main+3: 40바이트 만큼 메모리를 할당합니다.
main+9:eax를 초기화합니다.
main+25:40(=0x28의 10진수)만큼 push
main+27:ebp-40의 주소를 eax에 복사
main+31:fgets 호출
main+42:ebp-24의 주소(=buf2)를 eax에 복사
main+45:eax push
main+46:ebp-40의 주소(=buf)를 eax에 복사
main+42와 main+46을 비교해보면 buf와 buf2사이에는 16바이트만큼 거리가 있네요.
영어,숫자는 1바이트이니까 16글자를 넣어주고 go를 입력하면 쉘이 실행되겠네요.
'FTZ' 카테고리의 다른 글
레지스터(register)란? (0) | 2020.04.07 |
---|---|
어셈블리어 기초- 진법 체계 (0) | 2020.03.25 |
FTZ training 6~10 정리 (0) | 2020.01.02 |
FTZ training 1~5 정리 (0) | 2020.01.02 |
FTZ training 로컬 환경 구축 (0) | 2019.12.22 |