목록전체 글 (364)
hy30nq's blog
리버스 엔지니어링이나 바이너리 익스플로잇 과정에서 main 함수의 주소를 추적하거나, Base 주소를 활용하여 함수의 실제 메모리 주소를 계산하는 일은 매우 흔합니다. 이 글에서는 GDB와 PwnDbg를 활용하여 main 함수의 주소를 찾는 방법과, IDA와의 연동을 통해 이를 확인하는 과정을 설명합니다. 목차GDB와 PwnDbg 소개메모리 매핑 정보 확인 (vmmap)Base 주소와 main 함수 오프셋 추출IDA를 활용한 정확한 함수 오프셋 찾기계산을 통한 main 함수 메모리 주소 추적실제 예제와 코드 설명결론1. GDB와 PwnDbg 소개GDB(GNU Debugger)는 Linux 환경에서 널리 사용되는 디버거로, 실행 중인 프로그램의 상태를 분석하거나 메모리와 레지스터를 조작할 수 있습니다. P..
플라스크(Flask) 기반의 웹 애플리케이션에서 세션 쿠키는 중요한 정보를 담고 있어요. 이 쿠키가 안전하게 관리되지 않으면 중요한 데이터가 노출될 위험이 있답니다. 오늘은 Flask에서 세션 쿠키를 어떻게 해독할 수 있는지와 이를 예방하는 보안 대책에 대해 집중적으로 알아볼게요.1. Flask Unsign이란? 세션 쿠키 해독 도구flask-unsign는 Flask 애플리케이션의 서명된 세션 쿠키를 해독할 수 있는 강력한 도구예요. 일반적으로 Flask는 사용자 정보를 세션 쿠키로 생성해 클라이언트에 저장해요. 이를 통해 서버는 클라이언트의 상태를 유지할 수 있는데, 서명된 쿠키라 하더라도 flask-unsign 도구를 통해서 서명 키와 세션 데이터가 노출될 위험이 생기죠.2. Flask Unsign ..
오늘은 PHP에서 자주 발생하는 역직렬화 취약점에 대해 알아보고, Phar 파일을 활용해 어떻게 이를 악용할 수 있는지 설명드릴게요. 특히, 해킹 기법과 방어 방법을 간단히 정리하니, 보안에 관심 있으신 분들께 유용할 거예요! 💻1. PHP 역직렬화 취약점이란?PHP의 역직렬화는 직렬화된 데이터를 해제하면서 객체를 생성해주는 편리한 기능이에요. 하지만, 사용자 입력이 검증 없이 역직렬화될 경우, 악성 객체가 서버에서 동작할 수 있는 큰 보안 위험이 발생합니다. 특히 파일을 처리하는 과정에서 PHP는 내부적으로 역직렬화를 수행하곤 하는데요, 이때 직렬화된 데이터에 악성 코드를 포함시켜 공격할 수 있어요.PHP의 file_exists(), fopen(), file_get_contents()와 같은 특정 파..
해당 강의도 짤려 있다 그래서 일단 실제 문제를 풀기 위한 ida 사용법을 정리했다. ida 사용법 정리임의의 주소로 이동 단축키 : G함수 및 변수 이름 재설정 : NCross reference (Xref) : X함수 및 변수 타입 변경 : Y모든 문자열 조회 : 단축키 Shift + F12ascii 를 문자로 바꿔주는 단축키 : R중단점 설정(Break Point, F2) 및 실행(Run, F9)한 단계 실행(Step Over, F8)함수 내부로 진입하기(Step Into, F7)🤿디버깅을 중단(Ctrl-F2)→ 드림핵 정리BreakPoint(F2): 중단점을 설정합니다. 프로그램이 해당 지점에 도달하는 순간 정지합니다.Restart(Ctrl + F2): 디버깅을 중단합니다.Run(F9): 프로그램..
#include #include #include int main(int argc, char **argv){ volatile int modified; char buffer[64]; modified = 0; gets(buffer); if(modified != 0) { printf("you have changed the 'modified' variable\n"); } else { printf("Try again?\n"); }}강의가 짤려서 혼자 진행했다 해당 문제는 buffer를 덮어서 modified를 0을 넣으면 된다. 하지만 강의가 짤려서 진행을 할 수 없기에 해당 문제를 풀기 위한 어셈블리어를 정리했다. 어셈블리어 함수 - call인자가 있는 경우 함수 호출 규약에 따라..
참고 자료https://www.youtube.com/watch?v=DvuWTPqmD8I 스택: 메모리 한 부분: LIFO 방식 동작 자료 구조: PUSH, POP택은 한 방향으로만 데이터가 쌓임PUSH : 스택의 주소 4바이트 감소POP : 스택의 주소 4바이트 증가(32비트에서)→ 스택 구조 위에 있는 커널 영역을 침범하지 않기 위해서 프로그램에서는 스택은 서브루틴(함수)으로 인자 전달, 서부루틴 내부에서 사용하는 지역변수가 저장되는 공간 제공, 서부루틴이 종료될 때 되돌아가야 할 주소 저장 역할 수행→ 함수를 호출할 때 정확하게 인자를 스택으로 PUSH하고 서브루틴이 종료될 때 복귀 주소를 스에서 POP하는 것을 확인 가능 스택 프레임: 서브루틴(함수)이 가지는 자신만의 스택 영역: 서브루틴 내부에..
실행gdb "파일명"인텔형 어셈블리어로 보기set disassembly-flavor intel메인 함수 디스어셈블하기disas main브레이크 포인트 걸기b *main 메인 함수에 브레이크 포인트b *0x00000000004005bd 특정 주소에 브레이크 포인트b "숫자" eip로부터 상대적 위치에 브레이크 포인트브레이크 포인트 삭제deletedelete "번호"실행하기run "args" 처음부터 실행하기continue 멈춘 부분부터 계속 실행하기ni 한 스탭 실행 후 멈추기정보 확인info reg 레지스터 확인info reg "레지스터" 특정 레지스터 확인info break 브레이크 포인트 확인x/t "메모리 주소" 2진수로 확인하기 x/o "메모리 주소" 8진수로 확인하기 x/d "메모리 주소" 10..
보호되어 있는 글입니다.