orge를 풀어보장.어려웡...혼자풀기에는 어려워서 풀이를 봤다.풀이보면서 어떻게 푸는건지 감 잡은 다음, 블로그에 혼자 풀면서 정리해서 올렸다. 또 추가됐다. argc, 즉 인자의 개수는 2개여야 하고, argv[1]을 0으로 초기화 해버린다.그럼 우리는 argv[1]도 못쓰고, argv[2]도 못쓴다....남은건 argv[0]이다. 원래는 argv[0]에 파일이름을 넣었다. ./orge처럼근데 이번엔 ./orge 대신 ./\x~~~~ 같이 쉘코드를 넣을거다.그럼 argv[0]의 위치를 알아낸 후 ret를 argv[0]의 위치로하면 쉘이 실행되겠지? 그럼 일단 쉘코드 이름을 가진 파일을 만들어보자.이름은 nop sled를 타기위해 nop과 쉘코드로 구성한다.여기서 쉘코드는 /이 없어야 한다. 왜냐하면 ..
darkelf를 풀어보장. 또 비슷한데 하나만 추가되었다. //here is changed! 해서 argv[0]의 길이가 77이여야 한다고 한다. argv[0]이면 ./orge에 해당하는 부분인데 이 길이를 77로 맞춰줘야 한다.어떻게 할까. 1. ......................../orge 하는 방법2..//////////////////../orge로 하는 방법3. ./aaaa..aorge로 하는 방법 첫번째와 세번째는 안되니까 두번째로 하자. 익스플로잇은 그냥`python -c 'print"."+"/"*72+"orge"'`로 하면된다. 나머지는 wolfman과 똑같은거 같다.
wolfman을 풀어보장. c파일을 확인해보니 별걸 다 막는다. 일단 buffer를 40만큼 할당했고,i가 있다. orc에서 추가 된건 argv[1]의 길이가 48보다 크면 안된다느 점이다.여태 우리가 썼던 방식으로는 못푼다. 해결방법은 argv[2]를 쓰면된다. gdb를 보자. 44만큼 스택을 확장했고, buffer의 위치는 ebp-40이다. 이제 argv[2]를 사용하는 방법을 생각해보자.평소에 우리가 사용하는 익스플로잇에서 ./orc가 argv[0]이였고, `python~~~`여기가 argv[1]이였다.그럼 argv[1]다음에 공백을 하나 주고 값을 주면 argv[2]가 들어가지 않을까? 이렇게 공백을 줄수 있다. 값이 들어갔는지 확인을 해보면 argv[2]의 값인 0x42까지 잘들어갔다. 그럼 a..
orc를 풀어보장. c파일을 보면 goblin과 비슷한데 buffer hunter가 추가되었다.buffer의 값을 모두 0으로 만든다.goblin때도 buffer는 사용하지 않고 풀었으니 상관없을 것 같다.buffer 40만큼 할당하고, i가 존재하고,strcpy로 값을 받아준다. 똑같이 풀어보자. gdb에서 buffer의 위치를 확인해보면 스택이 44만큼 확장되었다.왜냐하면 i도 똑같이 있기 때문이다. 그럼 40만큼 buffer할당하고 4만큼 sfp할당하면 44에서 ret이 시작된다.그리고 47번째 인덱스가 \xbf여야한다고 했다. 그럼 값을 넣어서 argv[1]의 위치를 찾아보자. 입력값을 받은 직후에 break문을 걸어주고, 값을 넣어주었다. 들어가는 값을 확인해보니buffer와 argv[1]의 위..
goblin을 풀어보자. 이번엔 egghunter가 존재한다.환경변수를 못쓰게 되었다.일단 buffer를 40바이트 할당했고,int i가 존재한다. 첫번째 if문에서 넘겨주는 값이 2보다 작으면 안된다고 하고,//egghunter부분에서for문으로 환경변수의 값을 0으로 memset하고, if문에서는 두번째로 넘겨주는 인자의 47번째 인덱스,즉 ./orc `pyhton~~~~ 에서 `python~~이부분의 47번째 인덱스의 값이 /xbf여야 한다. 그리고 strcpy로 입력을 받는다. 문제를 어떻게 풀까..buffer도 쉘코드를 다 넣을만큼 충분하지 않으니 argv[1]의 자리를 이용하자.argv[1]는 우리가 작성하는 익스플로잇인 `python ~~`이다.위치는 문제를 풀면서 확인해보장. gdb를 확인..
FTZ 마지막 20번 문제는 아직 못 풀었다.일단 lob시작함. gate를 풀어보장. 시작하기전에 꼭 bash2를 입력해주자. gremlin.c를 열어보면 이렇다. buffer배열에 256만큼 할당.입력값이 2보다 작으면 argv error를 출력하고 끝낸다.2보다 크면 strcpy함수로 buffer배열에 입력값을 저장.buffer 출력. strcpy함수에서 bof 취약점이 있다. 익스플로잇은 ret 조작으로 해보자. buffer에서 Ret까지의 거리를 알아보자. main+3에서 256만큼 스택을 확장했다.main+9에서 ebp+8과 1을 비교했다. 그리고 main+13에서 ebp+8이 1보다 크면(jg) main+38로 이동 하라고 한다. exit함수를 뛰어넘어 strcpy함수로 바로 가라는 것 같다...
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..
- Total
- Today
- Yesterday
- SVM
- one-to-many
- cuckoo
- 논문 잘 쓰는법
- PCA
- automotive ethernet
- 이상탐지
- HTML
- AE
- 회귀
- many-to-many
- problem statement
- 차량 네트워크
- 케라스
- SOME/IP
- json2html
- 크로스 엔트로피
- AVTP
- 딥러닝
- Ethernet
- porks
- many-to-one
- 단순선형회귀
- automotive
- 로지스틱회귀
- CAN-FD
- 차량용 이더넷
- Python
- 머신러닝
- AVB
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |