목록2025/01 (9)
6kittylog

요것도 내부 스터디 준비하면서 풀어야 하는 문제 요건 이제 upx 패킹에 대한 문제이다. 그냥 Register now하면 이렇게 뜬다. 먼저 패킹이란 무엇이고 UPX가 무엇이닞 짚고 넘어가자. 패킹이란? -> 컴프레서와 프로텍터로 나뉨 압축! 다만, zip과 다른 부분은 확장자는 그대로 실행 파일 확장자를 유지, 파일의 코드나 PE구조를 압축하는 것이 패킹의 주요 포인트. 이중에 하나가 UPX 패킹, Ultimate Packer fo Executables https://github.com/upx/upx/releases Releases · upx/upxUPX - the Ultimate Packer for eXecutables. Contribute to upx/upx development by creat..

내부 스터디 준비하면서 풀어야 하는 문제 이걸 풀기 위해서는 먼저 안티 디버깅을 알아야 한다. 여기서 쓰인 안티 디버깅이 뭔지부터 파악해보자 이 프로그램은 디버거 프로그램을 탐지하는 기능을 갖고 있다. 디버거를 탐지하는 함수의 이름은 무엇인가 디버거에서 실행해봤더니 아니나 다를까 이렇게 문자열이 출력된다. ida로 열었더니 이부분이 딱 보인다. 저 함수는 대표적인 안티 디버깅 방법 중 하나이다. 구글링에서 찾은 해당 함수 그대로 인용하자면.. https://iforint.tistory.com/52가장 간단한 디버거 탐지 윈도우 API 함수이다. 이 함수는 PEB 구조에서 IsDebugged 필드를 찾아 디버그가 동작 중인지 판단하여 동작 중이 아니라면 0, 동작 중이라면 0이 아닌 값을 반환한다. 그..

대충 이러하다. ida로 까보자 int __cdecl main(int argc, const char **argv, const char **envp){ __int64 v3; // rax __int64 v4; // rax __int64 v5; // rax __int64 v6; // rax __int64 v7; // rax __int64 v8; // rax __int64 v9; // rax __int64 v10; // rax __int64 v11; // rax __int64 v12; // rax __int64 v13; // rax __int64 v14; // rax __int64 v15; // rax __int64 v16; // rax __int64 v17; // rax __in..

위 그림 참고해서 SSTI 취약점을 확인해보자 jinja2 엔진을 사용한다. SSTI는 엔진에 맞는 라이트업을 찾아보았다. 참고자료 정리는 접은 글 더보기 Server-Side Template Injection(SSTI)라온화이트햇 핵심연구팀 임재연core-research-team.github.io *SSTI템플릿을 사용하여 웹 어플리케이션을 구동-> 이때 user input이 템플릿 구문으로 인식되면 RCE까지 이어질 수 있는 취약점 템플릿이 여러개라서 문제마다 구문이 다름 보통은 {{4*4}}이던데 이 문제는 대괄호 [[...]] 구문은 값을 출력해줌 %나 #을 이요해서 주석, 반복문 등으로도 구문 삽입 가능 아래서 "".__class__에 접근할 건데 이게 뭐냐면 python 특수 attrib..
문제를 조건에 맞게 해결할 때 사용하는 라이브러리 from z3 import *s = Solver()일단 Solver()로 인스턴스 생성 x = Int('x')s.add(x > 0)s.add(x add()로 제약 조건 추가 result = s.check()check()로 해당 조건으로 문제가 해결되는지 판단 sat(가능) unsat(불가능) unknown(몰라) if s.check() == sat: m = s.model() print(m[x])sat일 시(가능하다면) model()로 해 반환 추가 기능은 코드로 한 번에 정리 # push()와 pop(), 스택 관리 s.push() # 현재 상태 저장s.add(x == 5)s.pop() # 이전 상태로 복원# reset() 초기화 ..

그냥 읽으라고 한다 설명에 script 쓰라고 하는데.. 안 써봐서 약간의 노가다를 각오하고 풀고 라업 참고해서 배워보려한다(변명하자면 script 예시가 잘 안 보여서 어떻게 쓰는지 숙지가 안됐다) 어떤 연쇄적인 리스트에 대해 malloc 해주고 append_list하는 코드이다. append_list 함수를 읽어보자. __int64 unknown_func1(){ return (unsigned int)cnt;} cnt를 return한다 __int64 unknown_func2(){ int v1; // [rsp+0h] [rbp-4h] return (unsigned int)(9 * (3 * (v1 + 5) - 7));}v1에 대한 계산값을 출력한다. __int64 generate_flag(){ ..
보호되어 있는 글입니다.

아마도 중간자 공격을 말하는 것 같다. 접속해보면 이렇게 intercept하고 send할 수 있는 형태이다. Alice(개인키 a)meBobshared secret=K1->intercept->send->shared secret=K2shared secret=K1iv, ciphertext이것 역시 K1으로 만들어짐 이러면 구해야 할 값은 K1이다. pow(alice가 처음 보낸 값,alice에게 보낼 때 사용한 key,p)하면 K1을 구할 수 있다. 내가 쓸 key와 내용을 random으로 만들어준다 deriving symmetric keys에서 사용했던 코드 살짝 바꿔서 플래그를 구하면 된다
cryptohack starter 스테이지 하나씩 풀어보자 정수 modulo N으로 이루어진 set은 덧셈과 곱셈을 포함하여 R이 된다. n=p(소수)일 때, set 내 모든 요소의 역원은 존재한다. 때문에 R은 F가 가능하다. 이 F를 finite field(?) Fp라고 한다. Diffie-Hellman은 큰 소수인 유한체 Fp의 element들로 이루어진다. 문제) p=991과 F(991)의 element g=209가 주어졌을 때, find the inverse element d such that g*d(mod991)=1 파이썬 코드를 짜서 해결하자 for i in range(0,990): res=(i*209)%991 if res==1: print("inverse: %d"..