분류 전체보기

🌇│System_Study/🪙│Pwnable.kr

[Rookiss]loveletter

loveletter_WriteUp 보시면.. 마지막.. 중요한건 사랑..이야? -최지원 시련 당하셨을까요? 보니까 문제 이름이랑 결과랑 유사하던데 생각하면서 합시다. 파일을 받아서 열어보니까.. 실행파일이고 리버싱 할 부분이 너무 많아서 IDA 사용! 보시면.. 256(0x100)의 memset도 하였고(UAF X).. s 변수에 0x100만큼 fgets로 입력을 받기에 bof가 안되겠네요 그 이후 18번째 protect에 인자를 전달합니다. 또한 21번부터 25번까지 각 인자를 지닌 메모리를 적재하여 idx에 적재합니다 그리고 memcpy에서 prolog와 epilog는 각각 확인해봅시다. 해당 문자열을 반환하는군요! 또한 마지막으로 prolog와 protect 그리고 epilog를 전부 puts로 치..

🌇│System_Study/🪙│Pwnable.kr

[Rookiss]echo1

echo1_WriteUp 보시면.. echo service를 하고 있으며, 해당 다운로드 해서 확인해보라고 알려줍니다. 파일을 받아서 열어보니까.. 실행파일이고 리버싱 할 부분이 너무 많아서 IDA 사용! 참고로 echo는 그냥 return이라고 생각하시면 될 거 같습니다. 참고로 저는 리버싱 늅늅이라서 드럽게 못하거든요 그래서 길어지면.. 흐규 ㅠ 위 코드를 살펴보면 15번 줄에서 이름을 물어보며 저장을 v7에 저장합니다. 그리고 입력을 두 반복문을 통해 echo를 한다고 하는데 막상 실행하거나 아님 func을 보시면 정작 되는건 24번의 BOF echo뿐입니다. 보시면 s는 할당을 0x20만큼했으나 입력은 0x80까지 하는 모습을 보여줍니다. 그러므로 bof가 발생하게 되는거겠죠? 위에 보시면 Par..

🌇│System_Study/🪙│Pwnable.kr

[Toddle]fd

fd_WriteUp 보시면.. 엄마! 리눅스 파일 디스크립터(fd)에 대하여 알아보고 싶어요~ 라고 하네요(패드립..) ssh로 연결해서 하는건데 파일 받아서 하는게 좋겠죠? 그래서 받는 방식이 SCP로써.. 리눅스 scp 사용법 - 제타위키 다음 문자열 포함... zetawiki.com 위 명령어나 이미지를 보시고 하시면 됩니다.. (참고로 파일 전체를 받는게.. 잘 안되서 따로 따로 했는데 ㅠ) 해당 C file을 살펴보면.. 6번째를 보시면 인자에서 2개 이상으로 안 넣으면 에러를 토하고.. 그러므로 argv에 하나만 넣습니다(어짜피 argv[1]은 path이기 때문이죠) len에서 read의 함수를 입력할 거기에 read의 fd는 0이여야 입력을 받습니다. 여기서 fd(atoi로 ascii to ..

🌇│System_Study/🪙│Pwnable.kr

[Toddle]passcode

passcode_WriteUp 보시면.. 엄마가 패스 기반의 로그인 시스템을 만들라고 해서 컴파일 할때는 문제가 없었어요 물론 컴파일하는데 오류가 좀 뜨는데 그걸 누가 신경쓰겠어요.. 라고 합니다. 파일을 받아서 열어보니까.. 위 코드를 살펴보면 정수를 입력받는데 주소의 명시(&)가 되지 않았습니다. 그럼 입력받았을 때 입력값이 아닌 해당 위치의 값이 읽어드린다는 사실을 알 수 있습니다. 보호기법을 보니까.. 하 RTL과 같은 공격기법을 해야할거 같습니다. 또한 NX가 걸려있기에 외부의 정보는 못 불러오겠군요 Exploit design 그럼 welcome과 login은 한 번 살펴봅시다. (참고로 위치한 주소는 아래에서 확인함) C코드가 있으니까 보면서 인자를 확인하면 name이라는 0x70 passco..

🌇│System_Study/🪙│Pwnable.kr

[Toddle]collision

collision_WriteUp 보시면.. 이번엔 아빠가 MD5 hash을 이용해서 충돌된 하루를 만들었어? 나도 이런걸 원해요! 라는 거 같은데.. 뭔.. 해당 C file을 살펴보면.. hashcode에 0x21DD09EC로 저장되어 있으며, 핵심은 check_password입니다. 나머지는 인자를 2개.. 즉 1이상 넣으시고 첫 인자를 넣었을때 길이가 20줄..로 맞춰야합니다. 그리고 check_password에 변조된 인자와 위 hashcode와 비교합니다. 즉, 인자값이 20이여야하며, hashcode와 check_password의 함수를 거친 값이 같아야합니다. Exploit design 위 코드를 살펴보면, IP(argv[1]의 인자값)을 받아서 5개로 쪼개서 똑같은 값을 5번 int(4by..

🌇│System_Study/🪙│Pwnable.kr

[Toddle] flag

fd_WriteUp 보시면.. 파파(아빠?)가 선물을 보장해서 가져왔어요! 열어볼까요? 라고 합니다. 밑에 이것은 작업을 되돌리는 거고 너가 필요한건 이진수라고 합니다... 파일을 받아서 열어보니까.. 바이너리 형식으로 그냥 열면 막 깨져서 나오겠죠 그럼 이걸 복원해봅시다. 이건 그럼.. 리버싱 문제이겠군요(잘 못하는데 ㅠ) 일단 hex로 바로 확인해봅시다. ELF(리눅스 실행)이 두개가 중복되며 밑에 UPX!라고 하는게 존재합니다. 그럼 압축이 되었구나.. 라고 느낌이 오는군요 그럼 UPX가 무엇인지 알아볼까요? UPX(Ultimate Packer for eXecutables)로써 여러 OS에서 수많은 파일 포맷을 지원하는 오픈 소스 실행 파일 압축 프로그램입니다. GitHub - upx/upx: UP..

🌇│System_Study/🪙│Pwnable.kr

[Toddle]bof

bof_WriteUp 나나가 말햇어요 bof가 얼마나 일반적인 소프트웨어 취약점이라고요 맞나요? 라는데.. 아무래도 보안 취약점 첫 실습이 bof인 것을 보면 저도 공감합니다.(모든게 여기서 시작..) 보시면 저런식으로 다운로드 받으면 됩니다. 보호기법이.. bof만 쓰라고 하시는군요.. 코드를 보시면 func의 키 값을 미리 넣고 8번 라인의.. 조건문에서 비교합니다. 근데 앞에서 gets에서 포멧 설정과 크기를 명시하지 않았기 때문에 bof가 발생합니다. Memory Corruption: Stack Buffer Overflow 스택 버퍼 오버플로우(Stack Buffer Overflow) 세계 최초의 웜이라고 불리는 모리스 윔도 이 공격을 통해 전파됨 보안 공부를 모르는 개발자도 알만큼 유명하고 역사..

🌇│System_Study/📕│Dreamhack_Hacking

Overwrite _rtld_global

Overwrite _rtld_global 프로그램에서 리턴 명령어를 수행하면 lib와 로더에서 다양한 함수 호출! HTML 삽입 미리보기할 수 없는 소스 모든 보호기법이 적용된 모습 아무래도 로더를 우회하여 실행해봐야겠네요 exploit 설계 lib 및 loder base addr 계산 예제에서 제공한 stdout 주소를 통해 lib_base를 구하고 "/lib64/ld-linux-x86-64.so.2"가 맵핑된 로더의 베이스 주소를 알아봅시다. 라이브러리와 로더가 맵핑된 주소의 간격은 일정하기 때문에 디버깅을 통해 간격을 알아내고 오프셋을 계산해 알아봅시다. _rtld_global 구조체 계산 로더의 베이스 주소를 알아냈다면, rtld_global 구조체의 심볼 주소를 더해 해당 구조체의 주소를 알아내..

🌇│System_Study/📕│Dreamhack_Hacking

rtld

참고로 rtld는 return to LD library 라고 추측하시는 분이 있으시더라고요 저도 어느정도 그러지 않을까?(여기 로되리안처럼 ㅎ) rtld HTML 삽입 미리보기할 수 없는 소스 stdout이 출력되니까 lib_base를 구하며, 임의 주소 쓰기 취약점이 존재합니다. get_shell()함수가 있으므로.. stdout이 출력되니까 lib_base를 구하며, 임의 주소 쓰기 취약점(전에 했던)이 존재 get_shell() 함수가 있으므로 NX도 우회되고 나머지 취약점은 인자로 하니까 ㅇㅋ 즉, 임의 주소 쓰기 취약점을 이용 dl_rtld_lock_recursive를 get_shell()로 덮어 쉘을 따면 셸을 획득할 수 있겠습니다. 아니면 Partial RELRO니까 GOT Overwrite..

Jastes
'분류 전체보기' 카테고리의 글 목록 (7 Page)