일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- JUCE라이브러리
- go
- vim-go
- 알고리즘
- Nebula
- tour of go
- C++ library
- 코딩
- BOJ
- C++ gui
- 프로그래밍
- C++ gui 라이브러리
- 공룡책
- C++
- c++ heap
- LOB
- Docker
- C언어
- 백준
- OS
- JUCE library
- go channel
- JUCE
- 리듬게임
- a tour of go
- gui
- JUCE 튜토리얼
- 연결리스트
- 운영체제
- 자료구조
- Today
- Total
목록Hacking/LOB(Red Hat) (22)
CafeM0ca
ID:xavius PW:throw me away리모트BOF다. 서버쪽은 소켓생성-주소,포트설정-연결 대기-연결 수락/거절-메시지 주고받기-소켓제거클라이언트는 소켓생성-연결 신청-메시지 주고받기-소켓제거모카가 해야할꺼는 클라이언트다. 버퍼는 ebp-40부분에있다. 256바이트를 recv함수로받으니 오버플로우 취약점이 존재한다. 리버스 쉘코드를 사용할꺼다.peda에서 shellcode generate로 만들었다.12345678910111213141516171819202122from socket import *import struct p = lambda x: struct.pack("
ID:nightmarePW:beg for me표준입력이고 ret빼고 다 초기화해버린다. ebp-40이 버퍼다. ebp-44부분이 ret_addr 포인터다. 저부분이 \x90\x90이 아니면 ret_addr을 ++해준다. 따라서 \x90을 만날때까지 무한루프. 표준입력이니까 stdin버퍼에 쉘코드를 올리고 익스플로잇할꺼다.4번째(0x40015000)가 stdin버퍼의 시작점이다. A를 입력하면 stdin버퍼에 고스란히 남아있다. 스택은 아래와 같다.ret_addr 4| buffer 40 | sfp | ret ret_addr이 \x90\x90을 만날때까지 무한루프이므로 buffer에 \x90\x90을 채워주면 된다. exploit맨 앞에 $을 붙여서 6시간동안 삽질했다..(왜 안되는거지?ㅠㅠ 하면서..)
ID:succubusPW:here to stay checking &strcpy(0x8048410) strcpy have two parameter.(dest,src) strcpy's ret is "AAAA"So change ebp+48 address. using strcpydest is ebp+48. src is excuting shell address. put on buffer or argv[1] or anywere payload buffer(libc_system+system's ret+&/bin/sh+"\x90"*32+&strcpy+"AAAA"(fixed)+&(ebp+48 - AAAA)+&buffer&ebp+48 change to buffer's address.eip excute system("/bin..
ID:zombie_assassin PW:no place to hideMust use DO. To use system(), Call DO,GYE,GUL,YUT,MO. payload는 아래와 같다.A*44+&DO+&GYE+&GUL+&YUT+&MO+MO's ret+MO's parameter1(&/bin/sh)+"/bin/sh" 인자로 /bin/sh를 넘겨주면 쉘이 실행된다.일단 함수들의 주소를 구하자/bin/sh의 주소를 구하자 0xbffffc28이 /bin/sh주소다. exploit!
ID:assassinPW:pushing me away이전 문제에서 strcpy대신 strncpy를 사용한다. ret뒤로 페이로드를 구성 못하게할 셈. FakeEBP를 이용해서 풀어야한다.FakeEbp: leave,ret가젯을 이용하여 eip를 컨트롤한다.leave,ret명령어를 열어보면 //leave,ret을 에필로그라 함leave : mov esp ebp //esp를 ebp로 옮기고 pop ebp //스택 최상단(esp)에서 4byte를 빼고 ebp에 저장한다. pop되니까 당연히 esp값은 +4된다. (스택은 거꾸로 자란다.) ret : pop eip //스택 최상단에서 4byte를 빼고 eip는 스택 최상단을 가리킨다. jmp eip //eip가 가리키는 곳을 실행 return 값으로 leave,r..
ID:giant PW:one step closerhmm.. use ret sled.ret sled: return ret ret ret.... eip point next 4byte stackbuf | sfp | ret | ret's ret | ret's ret's ret| ret's ret's ret's ret| shellcode put on argv[1]Oh.. No addr. add stack addr(possible). after ret, instruction point NOP(sleeeeeeed) expoit maybe easy . this way will be use FC3
ID:bugbearPW:new divide this code get libc offset,execve offset.libc offset + execve offset = execve addr!popen is read from process One thing, you should know that execve addr is fixed any binary file! So. easily get execve addr.print execve == p execve in gdb copy original giant.c to ./tmp(mkdir tmp. tmp directory is acess any user) and add code at giant.c like pictureyou can check execve_addr..
RTL을 사용해야하는 듯 하다.RTL은 라이브러리로 리턴한다는 의미로 eip를 라이브러리 함수주소로 돌리면 된다. 쉘을 얻기 위해 system함수를 사용하여 인자로 /bin/sh를 실행하면 쉘이 실행될 것이다.우선 시스템 주소부터 찾아보자.gdb로 카피 파일을 열어서 적절한 곳에 bp를 걸어주고 print system하면 libc system주소가 나온다.->system함수 시작점: 0x40058ae0인자로 쓸 /bin/sh를 찾아야하는데 곰곰히 생각해보니 system함수도 /bin/sh를 실행하고 다른 명령을 받으므로 system함수 어딘가에 /bin/sh가 있을 것이다. 그 주소를 찾아서 인자로 넣어주면 된다. 일일이 찾을 순 없으니 /bin/sh를 찾는 소스코드를 작성하자.0x400fbff9가 /b..
입장ID:golem입장PW:cup of coffee problem_child에서 1바이트만큼 오버플로우된다. 버퍼오버플로우시킨 후 eip의 흐름을 보자인자 "\x90"*40+"A"problem_child+41에 break point를 잡고 ebp를 확인해보면 버퍼에 nop*40+A가 박혀있다. ebp를 보면 주소가 0xbffffc41다. 41번째 byte는 오버플로우된 바이트고 42,43,44번재 byte는 \xfc\xff\xbf가 박혀있는 상태다. 따라서 41번째 byte를 주소를 잘 맞춰주면 버퍼의 주소를 가르킬 수 있다는 의미고 이는 버퍼에 쉘코드를 올리면 쉘이 실행된다는 의미다. 쉘코드를 올리고 41번째 byte를 54로 맞춰보자.problem_child 에필로그전 ebp는 쉘코드 주소를 가리키고..