본문 바로가기

Security118

[Dreamhack System Hacking] STAGE 4 - 함께실습 [함께실습] Stack Buffer Overflow [Exploit Tech : Return Address Overwrite] 1. 실습 코드 - 이번 실습에 사용할 예제 코드 // Name: rao.c // Compile: gcc -o rao rao.c -fno-stack-protector -no-pie #include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } void get_shell() { char *cmd = "/bin/sh"; char *args[] = {cmd, NULL}; execve(cmd, args, NULL); } int main() { char buf[0x28]; init(); printf(.. 2022. 1. 30.
[Dreamhack System Hacking] STAGE 4 [Calling Convention] - 함수 호출 규약 1. 함수 호출 규약 1) 함수 호출 규약 - 함수의 호출 및 반환에 대한 약속 - 함수 호출 규약 적용하는 것은 일반적으로 컴파일러의 역할 2) 종류 - x86 아키텍처 ① cdecl ② stdcall ③ fastcall ④ thiscall - x86-64 아키텍처 ① System V AMD64 ABI의 Calling Convention ② MS ABI의 Calling Convention 2. x86호출 규약 : cdecl 1) cdecl - x86 아키텍처는 레지스터의 수가 적어 스택을 통해 인자를 전달 - 인자를 전달하기 위해 사용한 스택을 호출자가 정리함 - 스택을 통해 인자를 전달할 때는 마지막 인자부터 첫번째 인자까지 거꾸로 스택에 pu.. 2022. 1. 23.
[Dreamhack System Hacking] STAGE 3 [gdb 설치] 1. 디버거 1) 디버거 - 버그를 없애기 위해 사용하는 도구 - 프로그램을 어셈블리 코드 단위로 실행하면서 실행결과를 사용자에게 보여줌 - 개발자 -> 작성한 코드의 문제점을 명확하게 찾을 수 있게 됨 - 해커, 리버스 엔지니어 -> 버그 탐색의 효율을 높일 수 있게 되어 취약점 발견이 쉬워짐 2. gdb & pwndbg 1) 실습 예제 주어진 코드를 작성해서 c 파일을 만든 뒤 컴파일 해주고 디버깅을 시작한다. 리눅스는 실행파일의 형식으로 ELF를 규정하고 있다고 한다. ELF는 크게 헤더와 여러 섹션들로 구성 헤더 : 실행에 필요한 여러 정보 섹션 : 컴파일된 기계어 코드, 프로그램 문자열을 비롯한 여러 데이터 포함 ELF 헤더 중에 진입점이라는 필드 존재 -> 운영체제는 ELF를 .. 2022. 1. 23.
[Dreamhack System Hacking] STAGE 2 - shell_basic 보호되어 있는 글 입니다. 2022. 1. 23.
[XSS Game] Level 6 alert를 실행시킬 외부 파일을 요청하게 하라고 하고 있다. 일단 주어진 화면을 조작해보려고 했지만 따로 입력창이나 버튼 같은 게 없기 때문에 조작해야하는 건 url일 것이라고 생각했다. 이 이후로 소스코드를 참고하여 url 뒤쪽을 조작해보다가 이것만으로는 한계가 있어서 힌트를 일부 살펴보았다. 1. # 뒤에 오는 게 로드된 스크립트의 url에 영향을 미친다. 2. 가젯 url의 보안 체크가 정말로 풀 프루프인 것인가? (풀 프루프 : 제어계 시스템이나 제어 장치에 대하여 인간의 오동작을 방지하기 위한 설계) 일단 이 정도만 확인해보고 좀 더 살펴보았다. 힌트에서 얘기해준 대로 # 뒤의 내용을 바꿔주었더니 페이지 상에서 from 뒤에 입력한 내용이 들어가는 것을 확인할 수 있었다. 아래의 소스코드 마지.. 2022. 1. 23.
[XSS Game] Level 5 이번에도 마찬가지로 스크립트를 삽입하여 alert 팝업을 띄우라고 하고 있다. 문제 설명을 보니 DOM에 새로운 요소를 넣지 않고도 공격자들이 공격을 할 수 있다고 한다. 일단 주어진 화면을 확인해보았다. Sign up 버튼을 누르면 주소가 위와 같이 변한다. 이메일을 치고 Next 버튼을 누르면 위의 화면이 뜨고 몇초 뒤에 다시 처음 화면으로 돌아간다. 한번에 감이 오지 않아서 힌트를 조금 참고해봤다. 1. 제목이 힌트 2. url 파라미터를 봐라 제목으로 봐서는 프로토콜에 문제가 있는 듯 했다. 프로토콜은 정보기기 사이 즉 컴퓨터끼리 또는 컴퓨터와 단말기 사이 등에서 정보교환이 필요한 경우, 이를 원활하게 하기 위하여 정한 여러 가지 통신규칙과 방법에 대한 약속 즉, 통신의 규약을 의미한다. 뭔가 데.. 2022. 1. 23.
[Dreamhack System Hacking] STAGE 2 [Computer Architecture] 1. 컴퓨터 구조 1) 컴퓨터 구조 - 컴퓨터가 효율적으로 작동할 수 있도록 하드웨어 및 소프트웨어의 기능을 고안하고 이들을 구성하는 방법 - 컴퓨터 기능 구조에 대한 설계, 명령어 집합구조, 마이크로 아키텍처, 기타 하드웨어 및 컴퓨팅 방법에 대한 설계 포함 2) 컴퓨터 기능 구조에 대한 설계 - 효율적인 연산을 위해 컴퓨터에 필요한 기능들을 고민, 설계하는 분야 - ex. 폰 노이만 구조, 하버드 구조, 수정된 하버드 구조 3) 명령어 집합구조(CPU 명령어에 대한 설계) - CPU가 처리해야하는 명령어 설계하는 분야 - ex. ARM, MIPS, AVR, 인텔의 x86 및 x86-64 등 2. 폰 노이만 구조 1) 컴퓨터의 핵심 기능 - 연산, 제어, 저장.. 2022. 1. 16.
[XSS Game] Level 4 이번 문제도 단순히 스크립트를 삽입하여 자바스크립트 alert를 띄우라고 하고 있다. 주어진 것은 이렇게 생긴 화면과 Create timer를 누르면 타이머가 작동되는 기능이다. 아래에 타이머가 있어서 시간을 5초로 바꿔서 작동시켰더니 url 맨 끝에 ?timer=5가 붙는 걸 확인할 수 있었다. 이번에도 소스코드를 확인해보았는데 잘 모르겠어서 힌트를 참고해보았다. 힌트 1번에 startTimer 함수가 어떻게 호출되는지를 잘 봐보라고 하고 있다. 소스코드에서 startTimer가 사용되는 부분을 찾아보았다. 이 부분과 다른 부분을 보니 시간을 입력하는 창의 입력 값이 timer라는 id 값을 가지고 이를 onload에 가져와서 사용된다는 것을 알 수 있었다. 위의 코드를 참고하여 startTimer 함.. 2022. 1. 14.
[XSS Game] Level 3 이전 단계의 문제들처럼 스크립트를 삽입해서 자바스크립트 alert 팝업을 띄우라고 한다. 하지만 입력을 할 수 없기 때문에 url 주소창을 수정하라고 이야기하고 있다. 실제로 화면을 보니 값을 입력하는 데는 없었고 오로지 주소창만 수정 가능했다. 그리고 이미지 1, 2, 3 창을 넘나들 때마다 url위의 숫자가 1, 2, 3으로 바뀌는 것을 확인했다. html += ""; 일단 아무것도 없는 상태에서 고민을 하다가 스크립트 태그에 alert를 넣어서 해보았는데 역시나 작동되지 않았다. 잘 모르겠어서 소스코드를 살펴보다가 위의 코드를 발견했다. 아까 이미지 1, 2, 3을 왔다갔다 할 때마다 url 뒤에 있는 숫자가 바꼈었는데 이를 통해 그 수가 위의 코드의 num에 해당하는 값일 거라고 예상했다. 저 i.. 2022. 1. 14.