일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- JUCE라이브러리
- Nebula
- 연결리스트
- Docker
- 코딩
- go channel
- 공룡책
- JUCE
- JUCE library
- 리듬게임
- C++ gui 라이브러리
- LOB
- 알고리즘
- 자료구조
- C++
- 백준
- C언어
- c++ heap
- a tour of go
- 운영체제
- go
- C++ gui
- tour of go
- C++ library
- OS
- JUCE 튜토리얼
- vim-go
- gui
- BOJ
- 프로그래밍
- Today
- Total
목록Hacking (43)
CafeM0ca
위의 파일 올려놉니다.
보호되어 있는 글입니다.
입장 ID:vampire입장 PW:music world코드를 확인해보니 버퍼와 argv를 싹다 초기화 한다. 복사본을 만들자. 스택구조는 다음과 같다.buffer 40 | SFP 4 | RET 4 gdb로 열고 main+368부분에 브레이크 포인트를 잡자.공격 스크립트는 `python -c 'print "A"*44+"\xaa\xbb\xcc\xbf"'`이며스택을 확인해보자. 스택 최하단에 실행파일 이름공간이 보인다! 이 부분을 사용하자. 심볼릭 링크를 걸어주자. 여기서 쉘코드 뒤에 약간의 높을 넣어줘야 원활하게 실행된다.ln -s noteleks `python -c 'print "\x90"*100+"심볼릭 링크 쉘코드"+"\x90"*50'`사진상에는 skeleton으로 심볼릭 링크를 걸었지만 복사본으로 걸..
입장 ID:troll입장 PW:aspirin 소스코드가 많이 짧아졌다. argv[1][46]이 \xff면 종료된다. 스택이 쌓이게 되면 \xff에서 \x00까지 낮은주소로 향하게 된다. 스택 구조는 아래와 같다.buffer 40 | SFP 4 | RET 4 r `python -c 'print "A"*44+"\xaa\xbb\xcc\xbf"+"\x90"*130014'`를 해준 상태에서 esp를 확인해보니 리턴주소로 사용할 NOP의 주소가 \xff가 아니게 된다. payload./vampire `python -c 'print "A"*44+"&(argv[1][46]이 \xff가아닌 NOP)+"\x90"*130020"+"쉘코드"'` 다음 ID:vampire다음 PW:music world
입장 ID:orge입장 PW:timewalker 레벨이 올라갈때 마다 무언가 하나씩 추가되고 있다.인자는 2개이어야하며 환경변수 사용불가,argv[1][47]은 \xbf, argv[1]의 길이는 48이하, 버퍼 0으로 초기화, argv[1]초기화 된다. 인자가 2개이고 argv[1]과 버퍼가 초기화 되므로 argv[0]을 사용하자. 복사본을 만들고 심볼릭 링크를 걸어주자. main+317부분에 브레이크 포인트를 잡자.스택 구조는 아래와 같다.i 4 | buffer 40 | SFP 4 | RET 4 argv[0]의 주소를 0xbffff944에서 한번 더 들어가서 x/s 0xbffffa3f로 보면 argv[0]의 주소가 나온다. 주소를 구했으니 페이로드를 작성하자.복사본의 심볼릭링킹된 파일을 삭제하고 원본파..
입장 ID:darkelf입장 PW:kernel crashed wolfman.c에서 argv[0]의 길이가 77인지 확인하네요.파일 이름이 argv[0]입니다. 즉 파일이름의 길이를 심볼릭 링크를 통해서 77자를 맞춰주면 되는데요. 여기서 중요한건 ./home이라는 파일이 있으면 4글자가 아니라 ./도 포함되어 6글자가 됩니다. 심볼릭 링크는 ln -s 링크될파일 파일이름 이렇게 사용합니다. 스택 구조는 아래와 같습니다.buffer 40 | SFP 4 | RET 4 argv[2]의 주소를 구하고 리턴주소에 사용할 NOP 주소를 구합시다. 원본파일에 심볼릭 링크를 argv[0]의 길이가 77이 되도록 걸어주고 공격합니다.payload./`python -c 'print "A"*75'` `python -c 'p..
입장 ID:orc입장 PW:love eyuna 인자가 2개 이하인지 확인, 환경변수 초기화, argv[1][47]이 \xbf인지 확인, argv[1]의 길이가 48보다 큰지 확인, 버퍼 40바이트 0으로 초기화 하고 있다. gdb에서 main+278에 브레이크 포인트를 잡아주자. 스택구조는 아래와 같다.buffer 40 | SFP 4 | RET 4 여태까지 argv[1]에 nop을 넣고 쉘코드를 실행시켰는데 argv[1]이나 버퍼를 사용하지 못하니 argv[2]에다 nop을 올려놓겠다.argv[2]에 nop을 전달하는 방법은 아래와 같다.r `python -c 'print "A"*44+"\xaa\xbb\xcc\xbf"'` `python -c 'print "\x90"*200'` argv[2]의 주소를 찾아..
입장 ID: orc입장 PW: cantata 소스코드를 확인해보니 환경변수,버퍼를 초기화 하고 있다. argv[1][47]은 \xbf인지 확인도 한다. 복사본을 만들고 gdb로 확인해보자. main+230에 브레이크 포인트를 잡아준다. 사진을 보면 0xbffffa1c이전 줄에 AAAA 4바이트가 하나 있고 나머지는 다 0으로 초기화 되있는데 이 부분이 buffer를 0으로 초기화 한 부분이다. 스택 구조를 살펴보자. 스택구조는 아래와 같다buffer 40(초기화됨) | SFP 4 | RET 4 공격 스크립트는 아래와 같다."A"*44+"\xaa\xbb\xcc\xbf"+"nop"*200 어떻게 보면 이전 단계와 별 다를게 없다. 버퍼를 초기화 했냐 안했냐의 차이일 뿐이다.스택 상단의 argv[1]이 보인다..
입장 ID: goblin입장 PW: hackers proof 코드를 보니 cobolt에서 환경변수를 사용하여 공격에 성공했었는데 이번에는 환경변수를 0으로 초기화 해버린다.덤으로 argv[1][47]은 \xbf이여만 한다. 복사본을 하나 만들고 gdb로 확인해보자. 스택구조buffer 40 | SFP 4 | RET 4로 구성되었다. 공격은 gate에서 했던 방법으로 공격하겠다. 여기서 리턴 주소를 찾기위해 \xaa\xbb\xcc\xdd를 했었지만 이번에는 argv[1][47]에 \xbf가 있는지 검사하기 때문에 \xaa\xbb\xcc\xbf로 인자를 전달하겠다.그리고 nop 200개정도 넣어준다.스택에서 인자로 전달해준 nop이 있는 주소를 아무거나 사용하자 payload./orc `python -c '..
입장 ID: cobolt입장 password: hacking exposed 소스코드를 확인하자. goblin은 cobolt와 다른 점은 gets함수로 입력을 받고 있다.그리고 gets함수에서 오버플로우가 발생한다. 접근 방식은 이전 문제와 같이 환경변수를 사용하겠다. 환경변수에 쉘코드를 올려주고 환경변수 주소를 구하는 소스코드를 작성후 컴파일한 뒤 실행시킨다. 환경변수 주소: 0xbffffb59 스택상태는 아래와 같다.buffer 16 | SFP 4 | RET 4 페이로드는 아래의 구조로 입력한다."A"*20 | &(환경변수) 입력이 함수로 인자전달이 아닌 표준입력이므로 cat을 사용하여 전달하겠다.-cat은 표준입력으로 문자열을 받아서 그대로 출력해준다.->리다이렉션(python -c 'print "A..