분류 전체보기
![[FTZ] level17 (Write-Up)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FcteKJ8%2FbtqwGjP4Sra%2FAAAAAAAAAAAAAAAAAAAAAC-YlWpFWBRoSR98ciCg6x0vs_HTXP4GNmVKUb7-K1SR%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DHByzjJiPtLJqTQmnJI%252BrGR66%252FIw%253D)
[FTZ] level17 (Write-Up)
hint를 열어봤다 16번문제랑 생긴게 매우 비슷하다. 근데 Shell함수가 없으니 Shell code를 만들어서 printit에서 실행시키면 될것같다. 16번이랑 위치까지 똑같다. 그러면 면 환경변수로 쉘코드를 만들어보자 그다음에 쉘코드를 받도록 프로그램을 만들어보자 이런식으로 말이다. 실행을 시켜보이 주소가 0xbffffe40이라는것을 알 수 있다. 그러면 buf와printit의 거리가 40인것을 생각하고 페이로드를 짜보자 성공!
![[FTZ] level16 (Write-Up)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fn8YgV%2FbtqwFBhuB13%2FAAAAAAAAAAAAAAAAAAAAALPpPIdDHqujdyX0b8RCccJWFG8tbD2zTZ2uhAgob8DI%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DI%252FA1plZryig1TOpIvMqmBLYmo70%253D)
[FTZ] level16 (Write-Up)
hint를 풀어보자 이번에는 함수 포인터가 있다. call = printit이니까 Hello there!이 출력될것이다. buf는20인데 48만큼입력을 받는것을 이용하여 call을 했을때 쉘을 따도록 해보자 일단 gdb로 뜯어보자 이러하다 main+24에서 buf를 를 할당받고 main+6은 포인터함수를 할당받는거라고 추측한다. buf는 ebp-56-56이고 포인터 함수는 ebp-16이니까 거리는 40이다. 우리는 ebp-16에있는 함수를 shell함수로 바꿔야 하니까 shell함수의 시작주소를 봅시다. 0x080484d0이 시작주소인것을 확인할 수 있다. 그러면 포인터함수와 buf의 거리가 40인것을 이용해봅시다. 성공!
![[FTZ] level15 (Write-Up)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FKHczD%2FbtqwDtEIxVi%2FAAAAAAAAAAAAAAAAAAAAACNLhYldvOj8kNoTWC7-lzyhpY18lWvwN2GaAIMLaxb-%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DlsT0B01ZRNavuyK6%252BmE%252B8udmve0%253D)
[FTZ] level15 (Write-Up)
hint를 한번 보자 14번 문제에서 check가 포인터 ㅇ:이수로 바뀌었다. check의 주소값을 deadbeef로 바꿔주면 된다. 일단 gdb로 뜯어보자. check를 main+32근처에서 검사를 하는것같다. 다시한번 gdb로 deadbeef를 찾아보자. 0x80484b2에 deadbeef가 있다. 그러면 이제 check에 복붙을 하면 될것 같다. 성공!
![[FTZ] level14 (Write-Up)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FZUKjS%2FbtqwD2GHd2I%2FAAAAAAAAAAAAAAAAAAAAADEyfFrjHOahhp3tMuU6jMmDtMir4TGnCINbMFYAAaYg%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DmWKHdj2KR6WPmJIJ6pApMzBkQIA%253D)
[FTZ] level14 (Write-Up)
hint를 한번 보자! check의 값이 0xdeadbeef이면 쉘을 띄운다 그렇다면 check의 값을 덮어 씌워주면 될것 같다. buf의 크기가 20이지만 45만큼 입력을 받는다. gdb로 뜯어보면 요렇게 되있다. buf와 check의 거리는 56-16이므로 40이다. 성공!
소켓 프로그래밍 보고서
소켓이란? --------------------------------------------------------------------------------------------------------------------------------- 네트워크 소켓(network socket)은 컴퓨터 네트워크를 경유하는 프로세스간의 통신의 종착점이다. 오늘날 컴퓨터 간 통신의 대부분은 인터넷 프로토콜을 기반으로 하고 있으므로, 대부분의 네트워크 소켓은 인터넷 소켓이다. 네트워크 통신을 위한 프로그램들은 소켓을 생성하고, 이 소켓을 통해서 서로 데이터를 교환한다. 소켓은 RFC 147에 기술사항이 정의되어 있다. //위키백과 -------------------------------------------------..
![[FTZ] level13 (Write-Up)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FLDMs1%2Fbtqv9rOmLAD%2FAAAAAAAAAAAAAAAAAAAAAFtJG28AKQUABIhZXZNA_YKstXRmmWREPvcBeMsGavl5%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DeOZSsI9bSoEKbKx2taj%252FKlW8UQY%253D)
[FTZ] level13 (Write-Up)
hint를 보자! 입력한 값을 buf[1024]에 저장하고 i가 0x1234567가 아니면 프로그램이 죽는다.... 이 문제는 strcpy를 이용해서 시도해야 되는데 i를 잘 피해야 된다... 일단 gdb로 한번 봐보자! 을 보면 0x418(1048)만큼 할당을 하고 를 보면 0x1234567dmf [ebp-12]에 넣는것을 볼 수 있다. buf에는 1024만큼 할당되고 남은 24중에서[ebp-12]의 바로 윗 부분인 12는 dummy이다. [ebp-12]에 i의 값인 4이고 남은8은 dummy 그리고 SFP는 4이고 RET가 나온다. 그러면 buf랑 dummy를 A로 채우고 i는 0x1234567로 채우고 dummy랑 SFP를 A로 채운뒤 RET를 덮으면 될것이다. 일단 환경변수를 등록해주고 shell..
![[FTZ] level12 (Write-Up)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FdxuKnX%2FbtqwcIAUo3h%2FAAAAAAAAAAAAAAAAAAAAAKOovodcDq0JxWziPq2tRFC91dDxnnbnBHde4p2PsgUl%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DT8dBLN39Pt5FnaFnTuvhrEnKCJU%253D)
[FTZ] level12 (Write-Up)
hint를 열어보자! 이 코드는 사용자가 입력한 문자열을 똑같이 출력하는 코드이다. gets는 입력받는 문자열에 제한이 없기때문에 저기서 문제가 발생할것 같다. gdb로 한번 뜯어보자! 에서 esp에 0x108(264)만큼 공간을 할당해 주었고 그 밑에 에서 esp에 0x8(8)만큼의 dummy값이 들어가 있다. 그러면 264-8인 256이 str의 공간이고 8만큼의 dummy 그리고 4만큼의 spf를 지나서 4만큼의 ret이 나온다. 따라서 256+8+4 만큼인 268을 임의의 값을 채워주고 쉘 주소를 입력해서 ret값을 변조 시킬 수 있다. tmp로 가서 쉘코드를 환경변수에 등록한다. getenv함수를 이용하여EGG라는 환경변수의 주소 값을 가져오는 코드 작성 실행을 해보니 환경변수의 주솟값은 0xb..
git 보고서
git란 무엇일까 git은 컴퓨터 파일의 변경사항을 추적하고 여러 명의 사용자들 간에 해당 파일들의 작업을 조율하기 위한 분산 버전 관리 시스템이다. 그래서 git은 중앙 서버에 소스코드를 저장하는것이아닌 여러pc와 저장소에 나눠서 저장을 한다. 중앙서버에 저장을 하는것이 아니라서 같은 파일을 동시에 작업하는것이 가능하므로 개발자들끼리 주고받을 필요가 없다. Commit 파일 및 폴더의 추가또는 변경 사항을 저장소에 기록하려면 'Commit'을 해야된다. 커밋 버튼을 누르면 변경이력이 시간순으로 저장이됩니다 git 용어 Repository : 저장소를 의미한다. 저장소는 작업 내역, 태그, 가지치기 혹은 브랜치에 따라 버전을 저장한다. 저장소를 통해 작업자가 변경한 모든 작업 내역을 확인 할 수 있다. ..