-
PHP 7.3-8.1 disable_functions bypass - UAF Exploit Flow 분석
PHP 7.3-8.1 disable_functions bypass [concat_function] 개요PHP 환경에서 파일 업로드를 통해 웹쉘을 올릴 수 있었지만 Disable_Function으로 인해 OS 명령어를 실행할 수 있는 함수들이 모두 막혀 있었다. 이러한 환경에서 PHP 버전이 맞다면 범용적으로 OS 명령어를 실행할 수 있는 PoC를 Github에서 발견하게 되었고 이를 활용해 리버스 쉘을 실행할 수 있었다. PoC Github 링크 exploits/php-concat-bypass/README.md at master · mm0r1/exploitsPwn stuff. Contribute to mm0r1/exploits development by creating an account on GitHu..
-
PHP Filters Chain 기법
PHP Filters Chain 개요 PHP Filters Chain이란 무엇일까요? PHP Filters Chain 이란 PHP에 존재하는 Wapper과 Conversion Filter들을 활용해 임의의 코드 조각 또는 String을 생성하는 방법 입니다. 그렇다면 우리는 왜 PHP Filter Chain을 사용 할까요? CTF 문제에서 LFI 취약점이 발생할 수 있는 include 계열의 함수들에는 ".php"로 끝나는 파일만 삽입할 수 있도록 소스코드가 작성 되어있는 경우가 많습니다. 이런 경우 우리는 서버내 존재하는 PHP 파일을 삽입할 수 있습니다. 하지만 우리가 원하는 코드를 실행시키기는 어렵습니다. 이때 PHP Filters Chain 기법을 활용하면 위 문제 상황을 해결할 수 있습니다. P..
-
x86 환경 어셈블리어 정리
x86 환경 어셈블리어 아키텍처 관련 내용 아키텍처란? - x86 아키텍처 설명 아키텍처의 정의와 종류 별 특징 아키텍처의 정의와 종류 별 특징 아키텍처란? 컴퓨터 아키텍처는 컴퓨터 시스템의 기본 설계 및 조직 구조를 말한다. 여기에는 CPU, 메모리 및 I/O 장치와 같은 하드웨어 구성 요소의 사양과 이들 y0un.tistory.com x86 아키텍처는 잘 알려져 있고 널리 사용되는 마이크로프로세서 아키텍처로 1978년 인텔에서 처음 소개됐다. 어셈블리 언어는 기본 하드웨어와 직접 작업하는 기본 수준에서 컴퓨터를 프로그래밍하는 데 사용되는 저수준 프로그래밍 언어다. x86 아키텍처의 어셈블리 언어 명령어는 몇 가지 범주로 나눌 수 있다. 아래 어셈블리어들은 x86 계열 어셈블리어의 일부분이다. Data..
-
NDK와 JNI란?
NDK와 JNI NDK와 JNI의 용어 차이 NDK(Native Development Kit) : Android OS에서 C/C++ 언어를 사용하게 하기 위한 개발 도구 Android는 아키텍쳐, 버전별 기본적으로 환경구성(라이브러리 및 ls 와같은 명령어 등)이 다르다. 그래서 NDK를 통해 개발 해야 하는건데, NDK로 개발시 Android 아키텍쳐 및 버전에 따라 자동으로 컴파일 할 수 있으므로 매우 편하다. JNI (Java Native Interface) : Java에서 C/C++로 작성한 로직을 사용하게 해주는 인터페이스 JNI는 말 그대로 저수준의 언어(C/C++)로 작성된 로직을 Java 코드에 로드하여 사용할 수 있게 도와주는 인터페이스(쉽게 말해서 문법)이다. Android NDK(Na..
-
Shell Code 제작 - x86,i386
Shell Code 제작 - x86,i386 Shell Code란? Shell Code란 Shell(/bin/sh 등)을 실행시키는 일련의 어셈블리 코드라고 할 수 있다. 보통 Shell Code는 해당 아키텍쳐 환경에서 사용되는 함수 호출 규약을 따르기 때문에 찾아보고 직접 어셈블리 코드를 작성하며 만들어 보았다. 필자는 linux x86 환경이고 cdecl방식으로 c언어 컴파일을 진행 했다. myshell 바이너리 제작 우선 본격적인 Shell Code를 제작하기 전에 해당 사이트에서 execve System Call의 인자값들을 살펴보았다. x86 환경에서 리눅스 4.14 기준으로 System Call의 종류와 인자 값을 확인 할 수 있었다. 우리가 사용할 execve는 eax, ebx, ecx, ..
-
PHP 7.3-8.1 disable_functions bypass - UAF Exploit Flow 분석
PHP 7.3-8.1 disable_functions bypass [concat_function] 개요PHP 환경에서 파일 업로드를 통해 웹쉘을 올릴 수 있었지만 Disable_Function으로 인해 OS 명령어를 실행할 수 있는 함수들이 모두 막혀 있었다. 이러한 환경에서 PHP 버전이 맞다면 범용적으로 OS 명령어를 실행할 수 있는 PoC를 Github에서 발견하게 되었고 이를 활용해 리버스 쉘을 실행할 수 있었다. PoC Github 링크 exploits/php-concat-bypass/README.md at master · mm0r1/exploitsPwn stuff. Contribute to mm0r1/exploits development by creating an account on GitHu..
-
Raspberry Pi 5를 활용한 SOP 8-Pin Flash Dump
Raspberry Pi 5를 활용한 SOP 8-Pin Flash DumpSOP(Small Outline Package) 8-PinSOP는 대표적인 표면 실장형 타입의 직접 회로(IC)입니다.SOP의 Pin은 8핀 부터 시작해 수십 개의 핀을 가지고 있을 수 있으며, 크기와 작고 무게가 가볍기 때문에 소형 전자 기기에 많이 사용됩니다.이번 실습에서 사용하는 SOP는 8-Pin입니다.XMC사의 25QH16CHIG 칩입니다. 상세 칩의 Pin 정보는 아래와 같습니다. /CS(Chip Select Input)입력(I) 핀으로, 칩을 활성화하거나 비활성화하는 신호를 받습니다.이 핀이 저전압일 때 칩이 활성화되어 통신이 가능하며, 고전압일 때는 통신이 비활성화됩니다.DO(Data Output)입출력(I/O) 핀..
-
PHP Filters Chain 기법
PHP Filters Chain 개요 PHP Filters Chain이란 무엇일까요? PHP Filters Chain 이란 PHP에 존재하는 Wapper과 Conversion Filter들을 활용해 임의의 코드 조각 또는 String을 생성하는 방법 입니다. 그렇다면 우리는 왜 PHP Filter Chain을 사용 할까요? CTF 문제에서 LFI 취약점이 발생할 수 있는 include 계열의 함수들에는 ".php"로 끝나는 파일만 삽입할 수 있도록 소스코드가 작성 되어있는 경우가 많습니다. 이런 경우 우리는 서버내 존재하는 PHP 파일을 삽입할 수 있습니다. 하지만 우리가 원하는 코드를 실행시키기는 어렵습니다. 이때 PHP Filters Chain 기법을 활용하면 위 문제 상황을 해결할 수 있습니다. P..
-
SQL Injection 취약점 자동 침투 시험 도구의 설계 및 구현 논문 탐구
SQL Injection 자동화 논문 탐구 SQL Injection 자동화 침투 도구 관련 논문을 찾아보게 된 이유 버그바운티를 하던 어느날 정말로 운이 좋게 Blind SQLi 포인트를 찾게 되었습니다. 해당 포인트는 정말 그 수많은 패킷 중에 숨겨져 있었어서 모든 패킷에 대하여 공격해보지 않는 이상 찾을 수 없는 희귀한 포인트이기도 했습니다. 운이 좋지 않으면 찾을 수 없는 포인트였던 만큼 다음에 비슷한 취약점이 있는 포인트에서 확실하게 찾아내고 싶었고, 어떠한 방법이 있을까 생각해보고 관련 자료가 있는지 찾아보던 중 SQLMap등 여러 SQLi 자동화 점검툴을 접했습니다. 현재 나와 있는 SQLi 자동화 점검툴은 대부분 오탐이 매우 클 수 밖에 없는 구조라는 걸 인지했고 더욱 확실하게 SQLi 을 ..
-
NoSQL Injection
NoSQL Injection NoSQL NoSQL은 비정형 데이터의 저장 필요성 및 빅 데이터의 발달으로 인해 매우 큰 대량의 데이터를 처리하기 위해 등장 했습니다. NoSQL은 단순 검색 및 추가 작업에 있어서 매우 최적화된 키-값 저장 기법을 사용하여, 응답속도나, 처리 효율 등에 있어서 매우 뛰어난 성능을 나타냅니다. RDBMS와는 달리 키-값을 사용해 데이터를 사용하며, 여기에서도 RDBMS와 마찬가지로 Injection 공격이 발생할 수 있습니다. MongoDB MongoDB는 JSON 형태인 Document를 저장하며 아래와 같은 특징을 가지고 있습니다. 스키마를 따로 정의하지 않아 각 콜렉션(Collection)에 대한 정의가 필요하지 않습니다. JSON 형식으로 쿼리를 작성할 수 있습니다...
-
Shell Code 제작 - x86_64
Shell Code 제작 - x86_64 Shell Code란? Shell Code란 Shell(/bin/sh 등)을 실행시키는 일련의 어셈블리 코드라고 할 수 있다. 보통 Shell Code는 해당 아키텍쳐 환경에서 사용되는 함수 호출 규약을 따르기 때문에 찾아보고 직접 어셈블리 코드를 작성하며 만들어 보았다. 필자는 linux x86_64 환경이고 cdecl방식으로 c언어 컴파일을 진행 했다. myshell 바이너리 제작 우선 본격적인 Shell Code를 제작하기 전에 해당 사이트에서 execve System Call의 인자값들을 살펴보았다. x86_64 환경에서 리눅스 4.14 기준으로 System Call의 종류와 인자 값을 확인 할 수 있었다. 우리가 사용할 execve는 rax, rdi, r..
-
Shell Code 제작 - x86,i386
Shell Code 제작 - x86,i386 Shell Code란? Shell Code란 Shell(/bin/sh 등)을 실행시키는 일련의 어셈블리 코드라고 할 수 있다. 보통 Shell Code는 해당 아키텍쳐 환경에서 사용되는 함수 호출 규약을 따르기 때문에 찾아보고 직접 어셈블리 코드를 작성하며 만들어 보았다. 필자는 linux x86 환경이고 cdecl방식으로 c언어 컴파일을 진행 했다. myshell 바이너리 제작 우선 본격적인 Shell Code를 제작하기 전에 해당 사이트에서 execve System Call의 인자값들을 살펴보았다. x86 환경에서 리눅스 4.14 기준으로 System Call의 종류와 인자 값을 확인 할 수 있었다. 우리가 사용할 execve는 eax, ebx, ecx, ..
-
Mybatis
Mybatis Mybatis란? MyBatis는 관계형 데이터베이스와 Java 애플리케이션의 프로그래밍을 좀 더 쉽게 할 수 있게 도와주는 Java 기반 개발 프레임워크입니다. 개발자는 별도의 구성 파일에서 기본 SQL 문을 관리하면서 개체 지향 방식으로 데이터베이스를 사용할 수 있으며, 일반 SQL 쿼리기능 을 비롯하여 저장 프로 시저, 고급 매핑과 같은 강력한 기능을 지원하고, 이를 통해 JDBC코드와 매개 변수의 중복을 최소화 할 수 있습니다. 또한 SQL 쿼리들과 애플리케이션을 분리할 수 있기 때문에 더 쉽게 유지 관리 할 수 있습니다. Mybatis를 사용하는 이유 SQL 매핑: MyBatis는 간단한 XML 또는 주석 기반 구성을 사용하여 Java 개체를 SQL 문에 매핑합니다. 이렇게 하면 ..
-
월패드에 전원 인가하기
월패드에 전원 인가하기 문제 상황 현재 가지고 있는 월패드의 전원선이 없어 부팅을 하지 못했다. 직접 AS 센터에 물어보니 단지내에 직접 설치된 월패드면 AS가 불가능 하다고 해서 직접 만들어서 사용하기로 했다. 1. 제품 스팩 파악 월패드의 뒷면에 자세히 보면 정격 입력 DC 12V, 2.5A 를 사용하고 있었다 고객 센터에서 직접 안내받아 회로도를 구할 수 있었고 확인해보니 CN500 PWR 부분에 전원이 인가 되어야 함을 알았다. 2. 기자재 준비 솔더링에 필요한 기자재들을 준비해 보았다. 도구들을 조립하니 나름대로 구색이 나와서 만족스러웠다. 3. 충전기 준비 전원 인가에 사용할 충전기는 똑같이 정격 출력 12V 2.5A 짜리를 구매하여 사용하였다. 보면 끝이 월패드 충전부와 맞지 않아 잘라서 솔..
-
Raspberry pi를 활용하여 패킷 스니핑 하기
Raspberry pi를 활용하여 패킷 스니핑 하기 Raspberry pi 패킷 스니퍼 및 분석 환경 구성 원래 하고 싶었던 IoT 장비 분석을 위해 집에 있는 라즈베리파이를 활용하여 패킷 스니퍼를 제작하고자 했다. 라즈베리 파이에 내장되어있는 유무선 기능을 통해 유선(eth0)으로 오는 패킷을 무선(wlan0)으로 route하는 라우터를 만들고 라즈베리파이에서 tcpdump를 통해 패킷을 도청 할 수 있었다. 또한 편리한 분석 환경을 위해 dhcp 설정, 공유폴더를 설정했다. 집에 있는 라즈베리파이는 3B+ 이며, 약간의 설정을 통해 누구나 충분히 패킷 스니퍼를 제작할 수 있다. Raspberry PI dhcp 서버 설정 라즈베리 파이에서 eth0 으로 연결될 기기와 원활한 통신을 위해 dhcp 서버 ..
-
안드로이드가 부팅 될 때 동작 순서
안드로이드가 부팅될 때 동작 순서 안드로이드 Android는 Google에서 개발한 모바일 운영 체제(OS)입니다. Linux 커널을 기반으로 하며 주로 스마트폰, 태블릿 및 기타 모바일 장치와 같은 터치스크린 장치용으로 설계되었습니다. 또한 Android는 다양한 기기를 지원하여 IoT 기기에 많이 사용 됩니다. 1. BootLoader 동작 기본 부트로더는 장치의 하드웨어 구성 요소를 초기화한 다음 일반적으로 별도의 메모리 파티션에 저장되는 보조 부트로더를 로드합니다. 보조 부트로더는 Android 커널을 로드하고 현재 하드웨어에 문제가 있는지 확인하는 과정을 거치고 기기가 정상 상태인지 확인합니다.. 2. Kernel 초기화 부트로더가 Android 커널을 로드하면 커널 초기화 프로세스가 시작됩니다..
-
BoF(Buffer Over Flow) 공격이란?
BoF(Buffer Over Flow) 공격 BoF란? BoF(버퍼 오버플로) 공격은 프로그램이 고정 크기 메모리 버퍼에 원래 보관하도록 설계된 것보다 더 많은 데이터를 쓸 때 발생하는 보안 취약점입니다. 초과된 데이터는 인접한 메모리 위치로 오버플로되어 충돌, 데이터 손상과 같은 예기치 않은 동작을 일으키거나 심지어 공격자가 임의 코드를 실행할 수 있도록 허용할 수 있습니다. BoF의 종류 버퍼 오버플로(BoF) 공격은 대상이 되는 메모리 영역과 사용되는 기술에 따라 여러 유형으로 분류할 수 있습니다. BoF 공격의 주요 유형은 다음과 같습니다. 1. Stack Buffer Overflow: 이는 스택 메모리 영역에서 오버플로가 발생하는 가장 일반적인 유형의 BoF 공격입니다. 공격자는 스택의 반환 주..
-
x86, x64 레지스터
x86, x64 레지스터 레지스터 레지스터는 CPU(Central Processing Unit)가 요청을 처리하는 데 필요한 데이터를 일시적으로 저장하는 기억장치이다. x86 레지스터 86-32비트 환경 레지스터는 아래와 같습니다. 1. 범용 레지스터: 이 레지스터는 산술, 데이터 이동 및 논리와 같은 다양한 연산에 사용됩니다. x86 아키텍처에는 EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP 등 8개의 범용 레지스터가 있습니다. 2. 세그먼트 레지스터: 작은 데이터의 임시 저장 공간으로, 연산 처리 및 데이터의 주소를 지정하는 역할을 합니다. 컴퓨터의 장치들을 제어하는 역할 또한 수행합니다. 6개의 세그먼트 레지스터는 CS, DS, SS, ES, FS 및 GS입니다. 3. 명령어..
-
USER32.dll GetDlgItemTextA Function
GetDlgItemTextA Function USER32.dll USER32.dll은 창 관리, 입력 처리, UI 컨트롤 및 구성 요소, 대화 상자 및 메뉴, 그래픽 및 페인팅, 사용자 상호 작용 등 필수 기능을 제공합니다. GetDlgItemTextA 이 함수는 대화 상자에서 텍스트를 검색하는 데 사용됩니다. 함수 이름의 'A'는 ANSI 문자 집합을 사용함을 나타냅니다. GetDlgItemTextW라는 함수의 유니코드 버전도 있습니다. UINT GetDlgItemTextA( [in] HWND hDlg, [in] int nIDDlgItem, [out] LPSTR lpString, [in] int cchMax ); 파라미터 총 4개의 파라미터가 있으며 자세한 내용은 아래와 같습니다. hDlg: 컨트롤이 ..
-
USER32.dll GetMessageA Function
USER32.dll GetMessageA Function USER32.dll USER32.dll은 창 관리, 입력 처리, UI 컨트롤 및 구성 요소, 대화 상자 및 메뉴, 그래픽 및 페인팅, 사용자 상호 작용 등 필수 기능을 제공합니다. GetMessageA GetMessageA는 USER32.dll 라이브러리에서 내보낸 Windows API 함수입니다. 이 함수는 호출 스레드의 메시지 큐에서 메시지를 검색하며 일반적으로 Windows 애플리케이션의 메시지 루프에서 사용됩니다. 함수 이름의 'A'는 ANSI 문자 집합을 사용함을 나타냅니다. GetMessageW라는 함수의 유니코드 버전도 있습니다. BOOL GetMessageA( [out] LPMSG lpMsg, [in, optional] HWND hW..
-
USER32.dll DispatchMessageA Function
DispatchMessageA Function USER32.dll USER32.dll은 창 관리, 입력 처리, UI 컨트롤 및 구성 요소, 대화 상자 및 메뉴, 그래픽 및 페인팅, 사용자 상호 작용 등 필수 기능을 제공합니다. DispatchMessageA DispatchMessageA는 USER32.dll 라이브러리에 존재하는 Windows API 함수입니다. 이 함수는 Windows 응용 프로그램의 메시지 루프에서 호출 스레드의 메시지 큐에서 검색된 메시지를 처리를 위해 적절한 창 프로시저로 디스패치하는 데 사용됩니다. 함수 이름의 'A'는 ANSI 문자 집합을 사용함을 나타냅니다. DispatchMessageW라는 함수의 유니코드 버전도 있습니다. LRESULT DispatchMessageA( [i..
-
USER32.dll TranslateMessage Function
TranslateMessage Function USER32.dll USER32.dll은 창 관리, 입력 처리, UI 컨트롤 및 구성 요소, 대화 상자 및 메뉴, 그래픽 및 페인팅, 사용자 상호 작용 등 필수 기능을 제공합니다. TranslateMessage TranslateMessage 함수는 가상 키 메시지를 문자 메시지로 변환하는 Windows API 함수입니다. 이 함수는 일반적으로 Windows 응용 프로그램의 메시지 루프에서 키보드 입력을 처리하는 데 사용됩니다. BOOL TranslateMessage( [in] const MSG *lpMsg ); 파라미터 MSG* 인수는 GetMessage 또는 PeekMessage 함수를 사용하여 호출 스레드의 메시지 큐에서 검색된 메시지 정보를 포함하는 M..
-
x86 환경 어셈블리어 정리
x86 환경 어셈블리어 아키텍처 관련 내용 아키텍처란? - x86 아키텍처 설명 아키텍처의 정의와 종류 별 특징 아키텍처의 정의와 종류 별 특징 아키텍처란? 컴퓨터 아키텍처는 컴퓨터 시스템의 기본 설계 및 조직 구조를 말한다. 여기에는 CPU, 메모리 및 I/O 장치와 같은 하드웨어 구성 요소의 사양과 이들 y0un.tistory.com x86 아키텍처는 잘 알려져 있고 널리 사용되는 마이크로프로세서 아키텍처로 1978년 인텔에서 처음 소개됐다. 어셈블리 언어는 기본 하드웨어와 직접 작업하는 기본 수준에서 컴퓨터를 프로그래밍하는 데 사용되는 저수준 프로그래밍 언어다. x86 아키텍처의 어셈블리 언어 명령어는 몇 가지 범주로 나눌 수 있다. 아래 어셈블리어들은 x86 계열 어셈블리어의 일부분이다. Data..
-
DLL 이란?
DLL 이란? DLL의 정의 DLL(Dynamic Link Library)은 여러 프로그램에서 공유할 수 있는 재사용 가능한 코드와 데이터를 포함하는 Windows 운영 체제의 라이브러리다. DLL은 수학 함수, 그래픽 출력 또는 입력/출력 작업과 같이 여러 프로그램에 필요한 공통 기능을 구현하는 데 자주 사용된다. DLL은 정적 라이브러리와 비슷하지만 컴파일 시간에 프로그램에 연결되지 않고 런타임에 동적으로 로드된다. 이를 통해 프로그램은 프로그램 자체에 모든 코드를 포함하지 않고도 DLL에서 제공하는 기능을 사용할 수 있다. 따라서 DLL은 코드를 모듈화하고 프로그램 크기를 줄이는 데 유용한 방법이다. DLL은 프로그램의 기능을 업데이트하거나 수정하는 데에도 유용하다. 새 버전의 DLL이 생성되면 해..
-
어셈블리 핸드레이 및 함수 구조
어셈블리 핸드레이 및 함수 구조 어셈블리 핸드레이란? 어셈블리 핸드레이(assembly handray)는 어셈블리어를 C언어로 복원시키는 작업을 의미한다. 일반적으로 바이너리를 디버거로 디컴파일을 하면 바이너리에 대한 어셈블리 코드를 볼 수 있다. 이때 이 어셈블리 코드는 숙련자가 아니고서는 명시적으로 의미를 알아보기 힘들다. 그러므로 어셈블리 핸드레이 실습 통해 프로그램의 구조에 대해 자세히 배울 수 있다. 함수 프롤로그란? 어셈블리 코드에서 함수 프롤로그란 함수가 호출될 때 그 함수의 영역을 설정하는 일련의 어셈블리 코드를 뜻한다. 아래의 명령어와 같은 구조로 이루어져 있다. push ebp // 이때 push 되는 ebp는 함수가 호출되기 전 함수의 ebp다. mov ebp, esp // 전 함수의..
- 방문자수
전체 방문자
오늘 방문자
어제 방문자