일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- pwnable.kr
- 두근두근 자료구조
- 파이썬
- 정렬 알고리즘
- windosw 문자열
- System
- PHP
- Stack
- Java
- ftz level13
- ftz
- 재귀
- web
- 시간복잡도
- 큐
- level13
- 자료구조
- windosws wbcs
- 백준
- 미로 탐색 알고리즘
- 파일 시스템
- OSI
- 스택
- 암호수학
- LoB
- c언어
- War Game
- HTML
- SWiFT
- C
- Today
- Total
나의 기록, 현진록
ftz level20 다음은 hint의 내용이다. setreuid는 있지만 /bin/sh은 존재하지 않다. ret 주소를 수정하기엔 fgets의 입력 크기가 79 밖에 되지 않는다. printf 문을 보자. printf문은 보통 포맷 스트링을 활용하여 출력하는데 코드에서는 포맷스트링을 사용하지 않고 입력 받는대로 bleh에 저장된 값이 printf에 의해 그대로 출력된다. 포맷 스트링을 입력해보자. %x을 입력하면 부호 없는 16진수가 출력 그 위치에 대한 주소이다. AAAA는 어디에 저장될까. 4번째부터(12byte) 저장되는 것을 확인 했다. printf부터 bleh 변수의 거리는 12byte이다. 포맷 스트링 버그를 이용해보자. ret까지의 거리를 확인하려고 했으나 gdb로 확인할 수 없다. 그렇다..
ftz level19 다음은 hint의 내용이다. setreuid 와 /bin/sh이 없다. ret 값에 setreuid와 /bin/sh이 포함된 쉘코드를 넣으면 된다. ret까지의 거리를 알아보자. 0x28은 40이고 44byte부터 ret의 주소이다. 페이로드 작성
ftz level18 다음은 hint의 내용이다. 좀 길지만 핵심은 check 변수에 0xdeadbeef가 있으면 shellout 함수를 실행하고 shellout 함수의 내용은 문제를 풀기 위한 코드가 있다는 것이다. check 변수의 거리를 알아내자 main+91을 보면 ebp-104와 0xdeadbeef을 비교한다. ebp-104가 check 변수이다. ebp-104에 0xdeadbeef를 넣어야 한다. 페이로드를 작성해야 하는데 hint의 내용을 조금 더 알아보자. switch 문의 default를 보면 표준 스트림으로 받아온 문자열을 string 배열 count 위치에 저장할 것이다. count는 0으로 초기화되어 있다. 그러나 string 배열이 check 배열보다 더 높은 주소에 있다. 즉, ..