분류 전체보기

🌇│System_Study/📕│Dreamhack_Hacking

seccomp

seccomp 문제 풀이 보호기법은 준수할 정도로 NX와 Canary.., Partial RELRO가 있는 모습 ASLR은 당연히 기본으로 되어 있겠네요.. ㅠ 전이랑 보호기법이 넘 ㅠ 이번엔 filter_list가 아닌 strict모드라서 read, write,exit..정도의 시스템 콜만 가능합니다. 아키텍처가 64니까 콜번호가 초과하지 않으면 호출이니까.. 0x400..을 맞추고 seccomp을 우회하는 건 잘 안될 듯 싶네요 그래서 방법을 찾던 도중 SECCOMP_MODE_STRICT에 집중 구글링한결과 Linux seccomp Linux의 Process Sandboxing 기법인 seccomp을 분석한다. ssup2.github.io seccomp(2) - Linux manual page sec..

🌇│System_Study/📕│Dreamhack_Hacking

Bypass SECCOMP-1

Bypass SECCOMP-1 문제 풀이 보호기법은 준수할 정도로 NX와 PIE, FULL ELRO가 있는 모습 ASLR은 당연히 기본으로 되어 있겠네요.. ㅠ 우리가 배웠던 sendbox가 있는 모습 seccomp가 친히 걸려있는군요 읽기, 쓰기, 실행 권한이 있는 페이지를 할당하고 이용자로부터 입력된 값을 사용한다.. sendbox의 함수에 allow의 리스트를 기반한다면 execve와 open, write가 안되네요.. 절망적인데? Exploit 설계 같은 기능을 하는 시스템 콜이 있는지 확인해야합니다. 시스템 콜에 대한 정보는 아래 링크에 Linux System Call Table for x86 64 · Ryan A. Chapman Linux 4.7 (pulled from github.com/to..

🌇│System_Study/📕│Dreamhack_Hacking

tcache_dup2

tcache_dup2 문제 풀이 이전이랑 보호기법도 똑같고 코드만 살짝 바뀐 모습으로 이전과 같이 실행하면 무한루프에 빠지기에 함수를 통해 p64 데이터 전송 과정에서 전송한 데이터와 다른 데이터가 찍히는 문제가 있었네요 실행해보면서 많이 막혔는데 그 부분만 수동으로 바꿔서 하면 될 듯 합니다. Exploit 설계 다른 부분도 마찬가지고 추가적인 인자를 입력하여 확인하는 부분과 modify가 추가된 모습입니다. 하지만 그러한 부분은 idx가 8을 초과하면 안된다.. 설명은 이전 내용에서 무지 많이 했으므로 여기선 이전 코드를 활용해서 작성해볼까요? 공격기법의 접근 방식도 유사하므로.. Exploit 위에서 다 설명했으니 추가적인 부분만 간단히 설명하고 넘어가겠습니다. 이 부분은 DFB의 부분의 기본이므로..

🌇│System_Study/📕│Dreamhack_Hacking

sint

sint 문제 풀이 이젠 여기선 기본적인 보호기법이 걸려있습니다 NX와 Partial RELRO이죠.. 보시면.. Type Error를 유발하라고 하는데.. 38번 라인의 검사에서 0은 검사를 안하는 부분을 확인 즉, 입력 한도를 넘을 수 있을 수 있기에 payload의 입력이 자유로워진다! 즉, 0을 넣고 bof를 일으켜서 get_shell을 하는거죠 또한 signal이 무슨 함수일까 검색해보니까.. Segment fault 즉 구문 오류 나면 get_shell을 실행하네요 그럼 이번에는 pwn를 사용하지 않고 할 수 있겠네요? Exploit 설계 esp가 0x104로 잡혀있네요.. 256byte로 할당됬는데 그럼 0x100이여야하는데 최적화 단계에서 0x104로 되었으므로 sfp와 ret 부분만 채워..

🌇│System_Study/📕│Dreamhack_Hacking

tcache_dup

tcache_dup 문제 풀이 NX와 Partial RELRO 그리고 Canary라니.. 코드를 살펴보고 취약점을 유추해야겠습니다 제목에서 보듯이 아마 DFB겠다만.. 코드를 보시면.. delete함수 부분을 보면, ptr[idx]을 해제 후 ptr 포인터를 초기화를 하지 않으므로 DFB 취약점이 존재합니다 또한 get_shell이 있기에 NX은 걱정 없네요 취약점을 그럼 다시 한 번 생각해본다면 GOT overwrite도 가능해보입니다. 그러기에 청크를 할당 후 두 번 해제 double free에서 그 내용을 조작 그리고 printf의 got 주소를 넣고 후에 get_shell의 주소를 넣어 overwrite.. Exploit 설계 힙 할당 후 Double free를 합니다. 여기서 청크의 next의 ..

🌇│System_Study/📕│Dreamhack_Hacking

validator

validator 문제 풀이 보호기법이 거의 없다고 할 정도네요..? 참고로 이번 문제는 바이너리만 주어서 이렇게 IDA를 사용했습니당 기본적으론 위와 같이 형성되어 있습니다 emeset을 한 후 validate 함수를 실행하네요 그 인자로는 s와 128을 주고요 각 반복문마다 조건문이 있네요 주석으로 DREAMHACK이라고 알려주네요.. 리버싱 못하는데 감사합니다 ㅠㅠ 우선 인자로 넘긴 배열이 DREAMHACK!으로 시작하며, 위에 함수에서 j = 11부터 j < 0x128만큼 s의 각 문자가 없어지나요? 먼저 입력 값에 대해 DREAMHACK! 문자열과 한 바이트씩 비교하고, 9 개의 문자 중 동일하지 않은 문자가 있다면 exit 함수를 통해 프로그램을 종료합니다. 위 조건을 만족하면 사용자가 입력한..

🌇│System_Study/📕│Dreamhack_Hacking

cmd_center

cmd_center 문제 풀이 어짜피 cmd_injection이라서 보호기법은 의미가 없을 거 같은데.. system 함수를 통해 명령어를 실행하므로 command injection이 발생할 가능성이 농후합니다. 또한 read(0, center_name, 100)의 부분에서 BOF가 발생하므로 이를 이용하여 cmd_ip값을 조작해봅시다! Exploit 설계 우린 center_name과 cmd_ip의 offset만 구해서 넣고 cmd injection하면 되겠죠 보시면 offset = 0x20만큼 차이가 나는군요 Exploit 위에서 다 설명했으니 추가적인 부분만 간단히 설명하고 넘어가겠습니다. 이 문제도 exploit.py를 굳이 사용할 필요가 없군요 A*0x20에 ifconfig(ip찾는 명령어);/b..

🌇│System_Study/📕│Dreamhack_Hacking

uaf_overwr

uaf_overwrite 문제 풀이 모든 보호 기법이 적용되어 있네요.. 와우 Dangling Pointer는 유효하지 않은 메모리 영역을 가리키는 포인터로써.. 코드가 상큼하네요 Dangling Pointer가 있다고 꼭 위험한 부분은 아니지만 경우에 따라 달라지므로 여기선 위험하겠죠 Human이랑 Robot은 구조체로 각 구조체 변수와 크기 동적 할당 해제를 할 수 있습니다 human_func함수와 robot_func 함수를 살펴보면, 구조체 변수를 위한 메모리 영역을 할당 시, 초기화 X memset()하라는 이야기구나! 라는 걸 한참 뒤에 알겠됬습니다 저는 할당해제하면 알아서 초기화 되는줄 알았는데.. 그럼 Human 구조체와 Robot 구조체의 크기는 같으므로, 한 구조체를 해제 다른 구조체를 ..

🌇│System_Study/📕│Dreamhack_Hacking

Tcache Poisoning

위 내용은 필수로 숙지를 해야지만 이 문제를 이해할 수 있으며, 설계 및 기본이 됩답니다. Tcache Poisoning 문제 풀이 Full RELRO와 NX가 걸려있는 모습입니다. 즉, hook overwrite 공격을 고려할 법 하군요 Tcache Poisoning을 활용으로 tcache를 조작해 임의 주소에 청크를 할당시키는 공격 기법입니다. 중복시킨 방법으로 앞에서 사용한 달링포인터도 위 방식의 활용이라고 할 수 있습니다.따라서 공격자는 중복으로 연결된(FIFO 형식의 더블 연결 리스트형식..그래서 공부하라고 했을까요?) frist /bin 등이 위와 같은 형식의 청크가 위와 같은 형식이라고 할 수 있습니다.따라서 중복으로 연결된 청크를 재할당 시, 그 청크는 할당된 청크이면서 동시에 해제된 청크..

🌇│System_Study/📕│Dreamhack_Hacking

Background: RELRO

RELRO(RELocation Read-Only) 등장배경 - ELF는 GOT를 활용해 반복되는 lib의 함수의 호출 비용 ↓ - GOT의 값을 채우는 방식은 여러가지 그중에 우린 Lazy Binding으로 취약점 우회 : 함수가 처음 호출될 때 함수의 주소를 구하고, 이를 GOT적는 방식 - Lazy binding 하는 바이너리는 실행 중 계속 업데이트를 해야해 GOT에 쓰기 ○ : RTL, Chain RTL, ROP로 이어짐 또한 ELF의 데이터 세그먼트에는 프로세스의 초기화 및 종료와 관련된 .init_array .fini_array 로써, 이 영역들은 프로세스의 시작과 종료에 실행할 함수들의 주소 저장 여기에 공격자가 임의로 값을 쓸 수 있다면, 프로세스의 실행 흐름이 조작될 수 있습니다. 이를 ..

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