일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 암호해독
- Kioptrix
- SQL Injection
- 권한상승
- SQLINJECTION
- Metasploit
- 해킹
- 모의해킹
- load of sqlinjection
- 시스템 해킹
- root권한
- smb
- 해킹도구
- 해킹툴
- 칼리리눅스
- Samba
- 침투테스트
- 스캔
- 취약점
- 스캐닝
- 내부침투
- 포트스캔
- Los
- web hacking
- Hacking
- 취약점분석
- 메타스플로잇
- 취약점 스캔
- sql
- CTF
- Today
- Total
감자 텃밭
[pwnkr] - passcode 본문
해당 문제와 함께 제공되는 소스코드는 아래와 같다.
welcome함수에서 이름을 입력받고 login함수에서 두 개의 패스코드를 입력받아 해당 조건문을 통과하면 플래그를 획득할 수 있다. 하지만 해당 두 정수를 입력하면 플래그가 출력되지 않는다 그 이유는 scanf의 함수 원형을 살펴보면
서식 문자 뒤에 변수를 입력할 때는 &함께 주소를 지정해줘야 한다 하지만 위의 코드대로 입력할세 passcode변수에는 쓰레기 값들이 들어가게 된다. 아래의 welcome함수에서는 문자 또는 문자열일 경우에는 해당 첫 번째 인덱스가 시작 주소를 가리키기 때문에 상관이 없다.
일단 해당문제를 분석하기 위해 gdb를 통해 두 함수를 살펴봤다.
welcome함수에서는 해당 name변수에 입력을 받는 위치는 ebp-0x70 위치에 입력받는다.
login함수를 살펴보면 0x10 위치에 passcode1가 입력받는다 이를 해석해보면 0x70 - 0x10 = 0x60
0x60은 10진수로 변환 할 경우 96이 나온다 즉 name함수를 100바이트만큼 입력받지만 입력을 받는 메모리 주소부분이 passcde1과 4바이트가 겹친다는 것이다. 그렇다면 96바이트만큼 더미 값을 채운 후 4바이트 부분 즉 passcde1의 부분을 passcde1 입력받는 후에 나오는 fflush함수의 got주소로 변환시켜 got overwirte 시키면 된다 그 후 첫 번째 입력값 받는 부분은 즉 fflush_got 부분에 우리가 입력하는 값이 들어간다 이 부분에 쉘을획득할 수 있도록 system함수를 넣어주면 된다
fflush의 got주소를 찾고
system함수의 윗 주소를 사용한다 그 이유는 즉 system("/bin/sh")를 실행시켜야 하기 때문이다 함수의 위에는 인자 값이 오기때문에 해당 인자값이 /bin/sh문자열일 것이다.
그 후 아래와 같이 페이로드를 작성하면 쉘을 획득할 수 있다.
여기서 입력값이 위와 같은 이유는 scanf로 입력받기 때문에 정수형으로 입력을 줘 여하기 때문이다.
'my_study > pwn.kr' 카테고리의 다른 글
[pwnkr] - input문제 (0) | 2021.09.01 |
---|---|
[pwnkr] - random (0) | 2021.09.01 |
[pwnkr] - flag (0) | 2021.09.01 |
[pwnkr] - bof 문제 (0) | 2021.09.01 |
[pwnkr] - collision문제 (0) | 2021.09.01 |