전체 보기

    [pwnable.xyz] UAF

    문제 풀이 환경 : Ubuntu 16.04 낚였다. 별거 없는 문제다. 📝 Analysis > · edit_char 핵심 함수인데 문제 이름 때문에 다른 데에서 헤맬 수 있다. strchrnul 함수가 오늘의 주인공이다. 이 함수의 기능은?? 더보기 https://gawoori.net/strrchr-3-linux-%EB%A7%A4%EB%89%B4%EC%96%BC-%ED%8E%98%EC%9D%B4%EC%A7%80/ 요약: 찾는 문자가 없으면 문자열의 제일 끝을 리턴한다. ✨ Thinking 처음에는 문제 이름 때문에 힙 문제인줄 알고 열심히 분석하다가 문득 떠오른게 edit 함수 기능 이용하면 뒤로 다 덮을 수 있겠네? 싶어서 바로 해봤다. 제대로 낚였다. ㅋㅋ 🧩 Exploit Scenario 1. sa..

    [pwnable.xyz] strcat

    문제 풀이 환경 : Ubuntu 16.04 처음에 길을 잘못 들 뻔했는데 다행히도 잘 해결했다. 📝 Analysis > 대충 name을 strcat 해주는 프로그램이다. · main 메뉴에 따라 기능이 실행되는 모양을 하고 있다. 1번 메뉴: strcat의 기능을 구현해놓은 것처럼 보인다. 2번 메뉴: desc 전역 변수에 설정된 주소를 참조해서 값을 수정할 수 있다. 왠지 전역 변수인 만큼 값 변경 후 수정을 해주면 될 것 같은 기분이 든다. 3번 메뉴: FSB(Format String Bug) 해보세요! 라고 어필하고 있지만 함정에 걸리지 말자. 더 간단한 방법이 있다. · read_int32 이 함수는 기본적으로 메뉴의 기능을 선택하기 위해 존재한다. 처음에는 malloc, free의 존재와 mai..

    [pwnable.xyz] J-U-M-P

    문제 풀이 환경 : Ubuntu 16.04 생각보다 간단했던 문제다. 📝 Analysis > Canary를 제외하고는 초록초록하다. 3번 메뉴는 뭔갈 leak 해주고, 1번은 Segmentation fault가 뜬다. · main 초기 세팅을 살펴보면, 미티게이션에서 canary 없었던 이유가 나만의 canary 만들기 때문이라는 걸 유추할 수 있다. v6(rbp - 0x8)에는 PIE offset + 0xba0 값을 먼저 저장해준다. 메뉴별 기능을 살펴보자. 메뉴 number 기능 1 v5(rbp - 0x10)에 저장한 나만의 canary 값이 전역 변수 canary 값과 같을 때 v6의 값을 주소로 call을 해준다. (어셈블리어로 보면 그렇다.) 2 v6의 하위 4Byte와 select를 xor 해..

    [pwnable.xyz] SUS

    문제 풀이 환경 : Ubuntu 16.04 📝 Analysis > 다행히도 풀밭이 아니다. · main main은 메뉴별 기능을 사용자로부터 입력받고 해당 기능에 맞는 함수를 호출해줄 뿐이다. · create_user 문제 이름에서도 밝혔듯이 하나의 유저 공간만을 할당해준다. 이미 저장된 힙 공간이 있다면 그냥 값을 수정해주는 기능밖에 하지 못한다. 그런데 여기서 수상한 점은 쓸데없이 큰 공간을 할당해주고 있다는 것이다. 무려 0x1060 만큼이나 말이다. 무언가 힌트가 될 것 같으니 기억해두자. · print_user 그냥 cur 전역 변수의 값을 가지고 프린트해주는 함수다. · edit_user cur 전역변수에 저장된 값을 기준으로 Name과 Age를 수정해주는 함수다. create_user 함수에..

    동아리 활동 #2

    21.02.27(토) 08:30 ~ 10:30 [활동 내용] 지난번 과제 설명 리눅스 사용 어셈블리어 기초 강의 수의 체계 - 2, 10, 16진수에 대하여 메모리 세그먼트와 오프셋 레지스터 기본적인 명령어들 리눅스 명령어들에 대하여 지난번에 내 준 과제를 바탕으로 헷갈렸던 부분과 고쳐야 할 부분에 대한 질문을 받았었다. 리눅스에는 많은 명령어들이 있기 때문에 자주 쓰는 것들 위주로 공부했다. 나머지 자잘한 것들은 실습을 통해 배워보며 그때그때 사용해보기로 했다. 어셈블리어 기초 어셈블리어 기초에 대한 강의 자료들을 탐색하던 도중, vangelis 분이 작성하신 좋은 자료를 발견해서 이를 바탕으로 강의를 진행하였다. (강의 파일: index-of.co.uk/Assembly/vangelis.pdf) 시스템..

    동아리 활동 #1

    [활동 내용] 오리엔테이션 동아리 규칙 설명 앞으로의 운영 방식 사이버 윤리 시스템 해킹 시연 BOF 문제 접근 방법 주소 읽기 stack 간단한 구조 취약점 발견 리눅스 기본 명령어 [cd, ls, chmod, pwd, find, uname] 등등 동아리 운영 첫날인 만큼 오리엔테이션을 진행하였다. 처음부터 시스템 해킹과 리버싱을 위한 기초부터 시작하면 왜 배워야 하는지, 왜 이런걸 알아야 하는지 몸으로 와 닿지 않을 것 같아 문제 하나를 가지고 시연을 하였다. 이후 시연에서 사용했던 linux의 간단한 쉘 명령어들과 이외의 기본 명령어들에 대한 추가 설명을 했다. 이후 동아리 방침 및 다음 회차 일정 조정을 진행하고 사이버 윤리를 설명했다. 다음 주까지의 목표는 주어진 과제를 해오는 것이다. [ Re..

    Level 17 → Level 18

    Please login with your admin account to retrieve credentials for natas19. Username: Password: 이번에도 소스를 자세히 살펴보도록 합시다. Session과 관련된 문제라는 것을 알 수 있습니다. 일단 세션을 가리키는 Cookie 값을 살펴보도록 하겠습니다. 현재는 50이라는 값을 가지고 있군요. PHPSESSID 라는 쿠키는 서버에서 설정할 세션 값의 ID를 나타냅니다. 그리고 소스를 봤을 때 세션 ID가 존재하는 범위는 1~640 사이입니다. 이제 저희가 할 일은 Bruteforce로 어떤 값이 'admin'의 값을 1로 갖고 있는지만 찾아내면 됩니다. 다음은 해당 파이썬 코드입니다. [natas18.py] ''' NATAS 18 ..

    Level 16 → Level 17

    '); mysql_select_db('natas17', $link); $query = "SELECT * from users where username=\"".$_REQUEST["username"]."\""; if(array_key_exists("debug", $_GET)) { echo "Executing query: $query"; } $res = mysql_query($query, $link); if($res) { if(mysql_num_rows($res) > 0) { //echo "This user exists."; } else { //echo "This user doesn't exist."; } } e..

    Level 15 → Level 16

    필터링을 적용했다고 하는데 소스를 보고 어떤 문자들이 필터링되는지 살펴봅시다.