br0nzu

Stack Buffer Overflow

Stack Buffer Overflow μŠ€νƒ 버퍼 μ˜€λ²„ν”Œλ‘œμš°λž€ μŠ€νƒμ˜ λ²„νΌμ—μ„œ λ°œμƒν•˜λŠ” μ˜€λ²„ν”Œλ‘œμš°λ‹€. μŠ€νƒ 버퍼 μ˜€λ²„ν”Œλ‘œμš°κ°€ λ°œμƒν•˜λ©΄ μ€‘μš” 데이터 λ³€μ‘°, 데이터 유좜, μ‹€ν–‰ 흐름 μ‘°μž‘ λ“±μ˜ λ¬Έμ œμ λ“€μ΄ λ°œμƒν•  수 μžˆλ‹€. μ€‘μš” 데이터 λ³€μ‘°: 버퍼 μ˜€λ²„ν”Œλ‘œμš°κ°€ λ°œμƒν•˜λŠ” 버퍼 뒀에 μ€‘μš”ν•œ 데이터가 μžˆλ‹€λ©΄, ν•΄λ‹Ή 데이터가 λ³€μ‘° 데이터 유좜: λ‹€λ₯Έ 버...

Calling Convention x64

Calling Convention x86 μ„€λͺ…에 μ΄μ–΄μ„œ Calling Convention x64λ₯Ό μ„€λͺ…ν•˜κ² λ‹€. x64 SYSV λ¦¬λˆ…μŠ€λŠ” SYSTEM V(SYSV) Application Binary Interface(ABI)λ₯Ό 기반으둜 λ§Œλ“€μ–΄μ‘Œλ‹€. SYSV ABIλŠ” ELF 포맷, 링킹 방법, ν•¨μˆ˜ 호좜 κ·œμ•½ λ“±μ˜ λ‚΄μš©μ„ λ‹΄κ³  μžˆλ‹€. SYSVμ—μ„œ μ •μ˜ν•œ ...

Calling Convention x86

ν•¨μˆ˜ 호좜 κ·œμ•½(Calling Convention)은 ν•¨μˆ˜μ˜ 호좜 및 λ°˜ν™˜(μŠ€νƒ 포인터λ₯Ό μ–΄λ–»κ²Œ μ •λ¦¬ν•˜λŠ”μ§€)에 λŒ€ν•œ 약속이닀. ν•¨μˆ˜ 호좜 κ·œμ•½μ„ μ μš©ν•˜λŠ” 것은 일반적으둜 컴파일러 λͺ«μ΄λ‹€. κ·ΈλŸ¬λ‚˜ 컴파일러의 도움 없이 μ–΄μ…ˆλΈ”λ¦¬ μ½”λ“œ μž‘μ„±ν•˜κ±°λ‚˜, μ–΄μ…ˆλΈ”λ¦¬ μ½”λ“œλ₯Ό 읽고자 ν•œλ‹€λ©΄ ν•¨μˆ˜ 호좜 κ·œμ•½μ„ μ•Œμ•„μ•Ό ν•œλ‹€. Caller(호좜자): ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•œ ...

Shellcode

μ‰˜μ½”λ“œ(Shellcode)λŠ” μ‰˜(Shell)을 λ„μš°κΈ° μœ„ν•œ μ–΄μ…ˆλΈ”λ¦¬μ–΄ μ½”λ“œλ“€μ˜ 집합이닀. μ‰˜μ½”λ“œλŠ” μ‹œμŠ€ν…œ μ½œμ„ ν˜ΈμΆœν•˜λŠ” 것이 핡심이닀. μ‰˜μ½”λ“œμ˜ μ’…λ₯˜μ—λŠ” orw μ‰˜μ½”λ“œ, execve μ‰˜μ½”λ“œκ°€ μžˆλ‹€. ORW Shellcode orw μ‰˜μ½”λ“œλŠ” νŒŒμΌμ„ μ—΄κ³ (open) 읽고(read) 좜λ ₯(write)ν•˜λŠ” μ‰˜μ½”λ“œμ΄λ‹€. μ•„λž˜μ™€ 같은 orw μ‰˜μ½”λ“œλ₯Ό μž‘μ„±ν•˜κΈ°...