보호되어 있는 글입니다.
보호되어 있는 글입니다.
SSP(Stack Smashing Protector)는 카나리를 이용해 스택이 망가졌는지 확인한다.카나리는 스택 버퍼와 스택 프레임 포인터 사이에 삽입되는 랜덤 값이다. 이 카나리는 main함수가 호출되기 전에 생성된 값을 스레드마다 전역 변수로 사용되는 TLS(Thread Local Storage)에 저장되는데, 모든 스레드가 하나의 카나리 값을 사용하기 위해서이다. security_init()함수는 _dl_setup_stack_chk_guard()함수에서 반환한 랜덤 카나리 값을 설정한다.Thread_SET_STACK_GUARD는 TLS영역의 header.stack_guard에 카나리 값을 삽입한다.그냥 뭐 이런게 있다고 생각한다. ssp 예제는 드림핵 문제를 풀어보자.https://dreamhack..
RTL이란 Return To Libc 라는 기법으로 libc에 들어있는 함수를 불러와 실행시키는 방법이다.PLT와 GOT에 대해 알아야 하는데 https://watchout31337.tistory.com/152여기서 알아보자. rtl은 libc에 있는 함수의 주소를 이용해서 실행중인 코드에 존재하지 않는 함수를 사용할 수 있다.이 방법으로 스택이나 힙에서 쉘 코드 실행을 막아주는 dep을 우회할 수 있다. 쉘 코드를 실행할 필요 없이 함수 자체를 불러오는 방법으로. 이런 간단하지만 취약점이 있는 코드를 보자.strcpy함수로 argv[1]을 buf로 복사했다.하지만 길이를 체크하지 않기 때문에 취약점이 발생한다. buf의 크기인 128을 넘어 sfp와 ret를 조작할 수 있다. 이렇게 실행하면 이렇게 나..
buf의 크기는 0x40만큼이고, read함수를 이용해 0x400만큼을 buf에 입력한다. buf는 0x40만큼 받을 수 있는데 0x400만큼 입력하니 취약함. write함수로 fd가 1이니 sizeof(buf)만큼 buf를 출력한다. ROP는 현재 수행중인 프로그램 코드 안에 존재하는 함수가 ret에 닿기 전에 우리가 넣어놓은 어셈블리어들을 먼저 실행시키는 방법이다. ROP를 알기 위해서는 먼저 plt와 got의 개념을 알아야한다. https://watchout31337.tistory.com/152?category=906340 간단히 말하면 plt는 got의 위치를 가리키는 주소, got는 라이브러리에 있는 함수의 위치를 가리키는 포인터 주소.라고 생각 할 수 있겠다. plt -> got -> 라이브러..
pwntools를 이용하면 좀 더 편하게 어셈을 분석할 수 있다고 한다.예를 들어 gdb를 이용하면 직접 어셈을 분석해서 어디가 입력값의 시작이고, 변수의 위치를 파악해야 했는데 pwntools를 설치하면 이런 것들이 자동으로 분석된다. 이렇게 말이다. 일단 설치 방법은 1.apt-get install python2.7-dev python-pip -> pwntools는 python2.7버전을 이용한다.2.pip install pwntools3.apt-get install libcapstone-dev이렇게 설치하면 된다. 설치 완료 후 설치가 잘 됐는지 확인하는 방법은 파이썬을 실행해 주고 이렇게 모듈을 임포트해봐서 별 문제 없으면 잘 설치된 것이다. 이제 pwntools를 사용하는 방법을 알아보자. 지금..
스택 2번 문제임. ftz를 풀어보면 비슷한 유형을 볼 수 있다.sup대신 shell 주소를 넣으면 실행되겠지 바로 gdb를 보면일단 0x90만큼 스택을 확장했다.main+57에서 ebp-0x8c가 buf의 시작 주소인 것 같다.그리고 main+74에서 ebp-0xc를 복사하고 실행하는걸 보니 func함수의 주소인 것 같다.140-12=128만큼 스택을 채우고 shell의 주소를 찾아 넣어주자. shell의 주소는 0x8048516이다.
root-me system의 첫번째 문제임 굉장히 쉽다.그냥 check위치 확인한 다음, 버퍼 채우고 check위치에 deadbeef로 채워주면 된다. start the challenge를 눌러 접속해도 되고, ssh access로 접속해도 된다. ch13이 문제인 것 같다. gdb로 열어보면 대충 이정도면 보자. 처음에 스택을 0x3c만큼 확장하고, main+51을 확인해보면 ebp-0x44(68)위치가 buf시작점이라는걸 알 수 있다. 그리고 main+88에서 ebp-0x1c(28)에 check의 위치를 파악했다. buf의 크기가 40이랬으니 buf가 끝나면 바로 check가 나온다. 그럼 40만큼 더미값을 넣고 deadbeef를 넣어주면 끝.
너무어렵다이문제... 함수가 3개 있다. login,welcome,main.일단 main에서 welcome을 호출하고 login을 호출한다. welcome함수를 보면name 배열 100바이트를 주고,이름을 scanf로 받는데 &name이 아닌 그냥 name으로 받는다. 이상하네 login함수는passcode1,2를 주고,passcode1을 입력하는데 또 그냥 passcode로 받는다.fflush(stdin)을 실행하는데 이 함수는 입력버퍼를 초기화하는 함수이다.즉, 앞에서 받은 passcode1을 초기화 한다는 의미이다.그리고 passcode2를 받는다.passcode1 == 338150 && passcode2 == 13371337이면 풀린다고 한다. 그냥 넣어보면 seg fault가 뜬다.이건 scan..
출처 : https://bbolmin.tistory.com/33https://g-idler.tistory.com/57https://gdtbgl93.tistory.com/149https://bpsecblog.wordpress.com/2016/03/07/about_got_plt_1/ 먼저 프로시저가 뭔지 알아보자. 프로시저란?프로시저란 매개변수는 존재하지만 반환값이 없는 함수이다.특정 로직만 처리 후 종료한다. PLT와 GOT에 대해 알기전에 동적 링크와 정적 링크에 대해서도 알아야 한다. 정적링크와 동적 링크우리가 코드를 작성한 후 컴파일을 하는 과정에서 링킹이라는 단계가 필요하다. 링킹이란 단계는 printf()함수와 같이 헤더에 포함되어 있는 함수들을 불러와 오브젝트 파일과 연결한다. 여기서 오브젝트 ..
- Total
- Today
- Yesterday
- PCA
- 머신러닝
- 이상탐지
- SVM
- Python
- 차량용 이더넷
- AVTP
- 회귀
- many-to-one
- 단순선형회귀
- json2html
- 딥러닝
- 논문 잘 쓰는법
- CAN-FD
- Ethernet
- 크로스 엔트로피
- HTML
- 차량 네트워크
- problem statement
- automotive ethernet
- AE
- cuckoo
- automotive
- porks
- SOME/IP
- one-to-many
- 케라스
- 로지스틱회귀
- many-to-many
- 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 |