일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 해킹툴
- 해킹도구
- 시스템 해킹
- 스캔
- 해킹
- smb
- SQL Injection
- 메타스플로잇
- 침투테스트
- SQLINJECTION
- 칼리리눅스
- 권한상승
- 취약점
- web hacking
- load of sqlinjection
- 스캐닝
- 내부침투
- Samba
- CTF
- Metasploit
- 포트스캔
- 취약점 스캔
- 암호해독
- sql
- 취약점분석
- Los
- 모의해킹
- Kioptrix
- root권한
- Hacking
- Today
- Total
감자 텃밭
basic_fsb 본문
이번에 풀어볼 문제는 basic_fsb라는 문제이다 제목에서부터 유추 가능하듯 FSB(포맷 스트링 버그)를 이용한 문제이다.
해당 문제를 실행시켜보자
특정 문자를 입력받고 그대로 출력해준다
해당 문제에 적용되어있는 메모리 보호기법을 확인해보자
아무것도 적용되어있지 않다
일단 해당문제를 분석하기 위해 GDB를 통해 유추해보자
main함수에서는 특별한게 없어 보인다 call부분에서 호출되는 vuln함수를 살펴보면
fgets로 입력을받고 snprintf함수와 printf를 사용한다 해당 프로그램을 명확히 분석하기 위해 IDA를 사용
vuln함수를 살펴보면 fgtes함수를 통해 s변수에 1024바이트만큼 이력받고 snprintf함수를 통해 400u(1024바이트)만큼 입력받기 때문에 bof는 통하지 않는다 또한 s변수에 있는 값을 format에 옮긴 후 printf함수를 통해 출력한다
이때 printf함수에 포멧스트링(서식문자)가 포함되어있지 않은걸 보니 저기서 fsb가 일어난다고 보면 된다.
이번 문제에서는 printf_got overwrite를 이용할 것이다.
해당 프로그램에 숨겨진 함수가 있는지 찾아보자
flag라는 함수를 찾았다 해당 함수는 시스템 함수를 통해 bin/sh를 실행시켜준다
그럼 우린 리턴되는 printf의 got에 해당 flag함수의 주소 값으로 변경시키면 된다는 것이다!!
일단 해당 문제를 실행시켜 어느 부분에 값이 들어가는지? 확인해봤다
확인 결과 두 번째 부분에서 바로 입력한 AAAA의 아스키코드값인 41414141 이 들어간 걸 알 수 있다.
그럼 이제 우리가 알아야 할 것은
printf의 got주소와 flag함수의 주소의 바이트수이다
printf함수의 got주소는 0x804a00c이며
flag함수는
주소이기 때문에 해당 값을 바꾸면
134514100이나 온다 하지만 여기서 4바이트를 빼줘야 한다 그 이유는 정확히 모르지만 got와의 거리가 4였나... 이건 좀 더 알아봐야겠다
그럼 134514096이다 이제 공격코드를 작성해보자
나는 공격코드를 아래와 같이 작성하였다.
해당 프로그램을 실행시키면 성공적으로 쉘이 획득되는 것을 볼 수 있다.
FSB가 가장 이해하기 어려운 거 같다.. 좀 더 공부를 해봐야 할 거 같다.