level19를 풀어보장. 힌트가 굉장히 짧다. 왜냐하면 권한을 상승시켜줄 system과 setreuid함수가 없기때문이지.그래서 내가 직접 system과 setreuid를 실행시켜서 풀어보려한다. 여기서 사용할 방법이 RTL이다.라이브러리에 위치해있는 setreuid와 system함수의 위치를 구하고, 각 함수들의 인자까지 구해서 익스플로잇에 적어주면 된다. 먼저 buf의 크기를 구해 스택을 얼마나 채울지 알아보고,setreuid 함수의 위치,setreuid 함수의 인자,system 함수의 위치,system 함수의 인자를 구해보자. gdb를 보자. main+3에서 40만큼 스택확장했다.그럼 buf의 크기 20만큼에 dummy20만큼이 되겠다. 다음으로 setreuid함수의 위치를 구해보자. b main..
level18을 풀어보장.이번문제는 좀 어렵다. c언어 능력이 필요한듯... hint를 먼저보자. 변수는 string[100],check,x,count가 있다.스택에 쌓이는 모양은 높은주소-> count x check낮은주소-> string 이런모양이다.우리가 입력을하면 string에 들어간다. 근데 check변수는 string보다 위에 있기 때문에 여태 우리가 하던 방식으로는 익스플로잇을 할 수가 없다. 일단 while문 안에 if조건으로 count가 100보다 크면 "what are you trying to do?"가 출력되고,check가 0xdeadbeef이면 shellout함수를 호출하는데 이 함수가 쉘 권한을 상승시켜준다. 역시 check에 도달해야 한다.해결법은 밑에 switch문에 있다.sw..
level17을 풀어보장. 이제 3문제만 더 풀면 ftz마스터당! 이거 다하면 LOB해야지! hint를 보자. 16번과 비슷하지만 setreuidrk main함수 내에 있다.처음에는 그냥 main문 실행하면 동기식으로 setreuid실행하는거 아닌가? 생각했다.근데 쉘을 실행시키는 함수가 없으니 권한만 상승되는 문제가 있다. 그럼 이 문제는 직접 쉘을 상승시켜줘야 한다.환경변수를 이용해보자. 먼저 gdb를 보자. 똑같이 56byte만큼 스택을 확장한 후, ebp-16에 0x8048490을 넣어줬다.0x8048490이 printit이라 생각하고 확인해보자. 맞다. 다시 main문에서 eax에 ebp-56의 값을 복사해주고,fgets를 호출했다. 별 다를 것 없이 buf시작부분에서 call함수까지의 거리가 ..
level 16을 풀어보장. 힌트를 먼저 보면 함수가 3개나 있다. 1.권한을 상승시켜주는 shell함수2. hello there을 출력하는 printit함수3. main문.main문은 int형 crap변수가 있고, call변수를 포인터 함수로 선언해 printit함수를 담았다.call함수를 실행하면 printit함수가 호출된다.buf 배열20byte를 선언하고 fgets함수를 사용해 48byte까지 입력을 받고,마지막에 call함수를 호출한다. 문제는 간단하다. printit대신 shell함수를 호출하면 권한이 상승된다. 그럼 call함수의 위치를 알아내고 shell의 위치를 알아내 call위치에 넣어주면 되겠다. main문을 살펴보자. main+3에서 0x38만큼,56byte만큼 스택을 확장하고,ma..
level 15를 풀어보장. 힌트를 보면 14번과 비슷하지만 check변수를 포인터로 선언했다. 일단 gdb를 보자. main+3과 main+6에서 0x38과0x4만큼 스택을 확장했다. 총 60만큼이다.main+21에 fgets가 있고 main+17에서 eax에 ebp-56의 값을 복사했다. 그럼 ebp-56에 buf가 있다.main+29에서 ebp-16의 값을 eax에 복사했고, main+32에서 eax의 값과 0xdeadbeef의 값을 비교한다. 그럼 ebp-16에 check가 위치해 있겠다. 그리고 main+38에서 jne 명령어가 있는데 이 명령어는 cmp결과 값이 거짓이면 해당 명령어를 실행한다. 즉 eax와 0xdeadbeef를 비교했을 때 거짓이면 main+77로 이동한다는 것이다. 그럼 c..
level14를 풀어보장. 포너블도 진입장벽이 높지만 장벽이 허물어졌을 때 쾌감은 역시 너무 좋당.아직 ftz정도의 레벨 밖에 못풀었지만 그래도 내 힘으로 풀었다. 힌트를 보장. 변수가 3개 있다. crap, check, buf.int형은 4byte니까 4+4+20 총 28byte만큼 필요하겠지?그리고 fgets로 45길이만큼 입력받아 buf에 저장한다.이전에 쓰던 gets는 길이를 체크하지 않았지만 fgets는 받는 길이를 체크한다.미리 말해보자면 fgets때문에 ret조작은 불가능하다. 하지만 if 조건에서 check값이 0xdeadbeef면 권한상승이 되니 ret조작은 필요없다. main+3에서 0x38만큼, 56만큼 스택이 확장되었다. 다음으로 main+6에서 4만큼 또 확장되어서 60 byte만..
level12를 풀어보장.처음이 어렵지 이해하면 level12는 별루 어렵지 않다. 문제를 보자. 똑같이 attackme와 hint가 있다. hint먼저 보장. 11번이랑 비슷한데 11번은 입력을 받고 실행했다면 12번은 실행 후에 입력을 받는다.이 점을 잘 생각해야 한다. main문을 보장. main+3,main+9에서 똑같이 0x108과0x8만큼 sub했다.스택이 264만큼 확장되었다. main+49에서 lea 0xfffffef8(%ebp),%eax 명령어가 있다.이건 ebp-264의 값을 eax에 넣었다는 의미이다.main+55에서 push eax한 걸 보니 ebp-264가 str배열의 위치인 것 같다. 사실 11번 문제와 풀이법은 똑같다.256만큼 str배열이고 8만큼 dummy,4만큼 sfp 총..
포너블을 시작했다.진입장벽이 너무 높다...어려워...달고나는 한 4번정도 읽어본 것 같다. 읽을 때마다 새롭게 알아간다. FTZ로 시작한 이유는 난이도도 있지만 스택에 대해서, 어셈블리어에 대해서 몸으로 배우기 적절하다 생각했기 때문이다. 근데 너무 어렵다... 후... level11에 접속한 후 목록을 보면 attackme가 있다. 이걸 공격하라는 것 같다.근데 소유자가 level12이다. 문제푸는데 뭔가 불편할 것 같으니 tmp파일에 넣어주자. level11의 소유가 되었다. 일단 힌트를 볼까. str변수에 256바이트만큼 공간이 할당되었고, setreuid가 있다. 그리고 strcpy함수로 입력받은 문자열을 str에 전달한다. 여기서 문제점이 strcpy함수는 입력받은 문자열의 길이를 체크하지 않..
- Total
- Today
- Yesterday
- Ethernet
- PCA
- 단순선형회귀
- porks
- automotive ethernet
- AVTP
- AVB
- one-to-many
- cuckoo
- 머신러닝
- 크로스 엔트로피
- 차량용 이더넷
- 논문 잘 쓰는법
- many-to-one
- Python
- many-to-many
- json2html
- 딥러닝
- 차량 네트워크
- 로지스틱회귀
- HTML
- automotive
- 이상탐지
- CAN-FD
- SOME/IP
- 케라스
- SVM
- 회귀
- problem statement
- AE
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |