분류 전체보기

Reversing Advanced

IDA "sp-analysis failed" 에러 해결 방법

함수를 디컴파일하는 과정에서 JUMPOUT()이 뜨면서 디컴파일이 정상적으로 안되는 경우가 있습니다. 이번 포스트는 이런 에러를 해결하고 함수를 정상적으로 디컴파일하는 방법을 소개합니다. asm 코드를 보면 "endp ; sp-analysis failed"라는 오류가 발생하면서 디컴파일이 수행되지않습니다. 해당 오류는 스택 포인터가 잘못 설정된 경우에 발생하는데요. 따라서 스택 포인터를 정상적인 값으로 다시 설정하면 오류를 해결할 수 있습니다. 다만, 필자는 스택 포인터를 바꾸는 방법으로 오류를 해결할 수 없었습니다. 여러가지 방법을 시도했지만, 전부 실패하고 함수를 재정의하는 방법만 성공했습니다. 따라서 함수를 재정의해서 정상적으로 디컴파일하는 방법을 공유하겠습니다. 먼저, 오류가 발생한 "endp ;..

Reversing Advanced

IDA를 이용한 바이너리 패치

IDA로 바이너리 코드를 패치하는 방법에 대해서 소개하겠습니다. 저는 target이라는 프로그램을 IDA로 패치해서 원하는 결과를 출력하는 것을 목적으로 진행할 것입니다. 실습하고 싶으신 분들은 다음 설명에서 C 코드 제공되니 직접 컴파일해서 따라해보시면 좋을 것 같습니다. ○ target.c#include #include int compare(const void *a, const void *b) { int num1 = *(int *)a; int num2 = *(int *)b; if (num1 num2) return 1; return 0;}void solution(int arr[], int arr_size, int num[], int num_size) { int N = arr..

System Hacking Advanced

Pwnable러를 위한 PwnDocker

안녕하세요. 오랜만에 게시글로 돌아온 "keyme"입니다. 요즘 pwnable에 빠져서 열심히 학습하고 있는데요. pwnable을 공부하면서 느낀점은 ubuntu 환경을 구축해서 동적디버깅하는 것이 필수라는 것입니다. 따라서 ubuntu 버전 별로 환경을 구축하는 방법을 고민했고 Docker로 구축하는 것이 가장 간편하다는 것을 깨달았습니다. 이번 글은 pwnable을 공부하시는 분들을 위해 ubuntu 버전 별로 Dockerfile을 공유하고자 작성했습니다. 다른 분들의 글도 참고했으나, 과거에 쓰신 것들이라 에러가 발생하는 경우도 있었고 개인적으로 추가하고 싶은 툴들도 있어서 추가/수정해서 신규 버전으로 업데이트 했습니다. 추가로 docker 명령어로 build, start & attach, cp 하..

System Hacking Advanced

Logical Bugs - Enviroment attack

○ Environment attack기본적으로 리눅스 명령은 파일에 의해서 동작한다. 리눅스에서 제공하는 명령어는 /bin, /usr/bin 등의 디렉터리에 위치한다. 명령어를 입력하면 환경 변수에 명시된 디렉터리에서 명령어를 탐색하고, 실행하기 때문에 명령어의 경로를 입력하지 않아도 된다. 보통 사용하는 ls, id, find, touch, cat, sh 등의 시스템 명령어들은 bin 디렉토리 내부에 정의된 파일들이 실행되는 구조다. PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"export 명령으로 환경변수들을 출력하면 여러가지 환경변수가 나오는데, 그 중에서 path 환경변수를 볼 수 있다. path 환경변수..

Web Hacking Advanced

OAuth 2.0

OAuth는 인터넷 사용자들이 ID, PW를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준이다. 즉, 현재 서비스의 ID와 PW를 입력하지 않고 인증할 수 있는 프로토콜이다. 예를 들어 Google에 로그인한 후 Google 자격 증명을 이용해서 현재 서비스에 액세스했다면 OAuth를 사용한 것이다. oAuth는 보통 SSO(Single Sign On) 시스템에서 사용한다. SSO는 1번의 로그인으로 여러 서비스를 이용할 수 있는 시스템을 뜻한다. 즉, SSO 시스템을 구축하기 위해서는 oAuth 프로토콜을 이용한 인증시스템이 필요하다. oAuth를 이용하는 시스템은 단순히 간단한 ..

Web Hacking Advanced

Prototype Pollution

JS prototype 개념prototype pollution을 이해하기 위해서는 JS의 object prototype과 constructor에 대한 개념을 알아야한다. 자바스크립트는 다음과 같은 특징이 있다.모든 것은 객체이고, 객체로서 동작하는 완전한 객체지향 언어다.var keyme = new Person('keyme');객체는 생성자의 prototype 객체를 상속한다.keyme라는 객체는 Person.prototype을 상속받는다.객체는 생성자 함수를 사용해서 만든다.생성자 함수 → Person()  prototype은 객체 지향 프로그래밍에서 상속을 구현하는 데 사용되는 중요한 개념이다. 모든 객체는 prototype을 가지고 있으며, 이를 통해 객체 간의 상속 및 속성, 메서드 공유가 가능하..

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