estherseo
JINIWAY
estherseo
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
    • ์ „๊ณต๊ณต๋ถ€
    • CS
      • Network
      • Algorithm
      • ๐Ÿ“–
      • python
      • django
    • Pentest
      • ๐Ÿ“–
      • HTB
      • Machines
    • Web-hacking
      • ๐Ÿ“–
      • Dreamhack
      • Portswigger
    • System-hacking
      • ๐Ÿ“–
    • Mobile-hacking
    • Project
    • CVE
    • CTF
    • News & Conference
    • ์ž๊ฒฉ์ฆ
    • ์‹ ๊ธฐ์ˆ 
      • AI

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก
  • ๋ธ”๋กœ๊ทธ ์†Œ๊ฐœ

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํƒœ๊ทธ

  • ASC์Šคํ„ฐ๋””
  • ํ™”์ดํŠธํ–‡ํˆฌ๊ฒŒ๋”1๊ธฐ
  • python eval
  • n00bCTF
  • ์‹œ์Šคํ…œํ•ดํ‚น ์Šคํ„ฐ๋””
  • ๋„คํŠธ์›Œํฌ๊ด€๋ฆฌ์‚ฌ ์‹ค๊ธฐ ํ•ฉ๊ฒฉ
  • ์Šคํƒ์นด๋‚˜๋ฆฌ
  • ์‹œ์Šคํ…œํ•ดํ‚น๊ณต๋ถ€
  • CTF๊ณต๋ถ€
  • asc
  • ๋‹คํฌ์›น ๋ชจ๋‹ˆํ„ฐ๋ง
  • ์„ธ๊ณ„์‹ ์•ˆ๋ณดํฌ๋Ÿผ
  • shocker
  • 2022 pox
  • HTB valentine
  • HTB shocker
  • CVE-2022-22817
  • ํ™”์ดํŠธํ–‡ํˆฌ๊ฒŒ๋”1๊ธฐ ๊ฒฐ๊ณผ๊ณต์œ ํšŒ
  • pox2022
  • ํŒจํ‚ท์žก๊ธฐ
  • ์ค‘์†Œ๊ธฐ์—… ์ •๋ณด๋ณดํ˜ธ
  • ๋‹คํฌ์›น ๋ชจ๋‹ˆํ„ฐ๋ง ์„œ๋น„์Šค
  • ๊ธฐ์‚ฌ์š”์•ฝ
  • ์…ธ์‡ผํฌ
  • ํ™”์ดํŠธํ–‡ํˆฌ๊ฒŒ๋”
  • Pillow์ทจ์•ฝ์ 
  • integer overflow
  • jwt token last character
  • ASC ์Šคํ„ฐ๋””
  • 2022 ๋„คํŠธ์›Œํฌ๊ด€๋ฆฌ์‚ฌ
hELLO ยท Designed By ์ •์ƒ์šฐ.
estherseo

JINIWAY

[ASC ์Šคํ„ฐ๋””] 5์ฃผ์ฐจ - ์—ฐ์Šต๋ฌธ์ œ ํ’€์ด, GDB, IDA, Pwntools ์‚ฌ์šฉ๋ฒ•
System-hacking/๐Ÿ“–

[ASC ์Šคํ„ฐ๋””] 5์ฃผ์ฐจ - ์—ฐ์Šต๋ฌธ์ œ ํ’€์ด, GDB, IDA, Pwntools ์‚ฌ์šฉ๋ฒ•

2022. 7. 7. 08:19

๐Ÿ‘‰ ์ง€๋‚œ ์ฐจ์‹œ

2022.06.27 - [System-hacking/๐Ÿ“–] - [ASC ์Šคํ„ฐ๋””] 4์ฃผ์ฐจ - ๋ ˆ์ง€์Šคํ„ฐ, ์–ด์…ˆ๋ธ”๋ฆฌ, ์—ฐ์Šต๋ฌธ์ œ, GDB ์‚ฌ์šฉ๋ฒ•

 

1. ์—ฐ์Šต๋ฌธ์ œ ํ’€์ด & ๋ณต์Šต

๊ฒฐ๊ณผ ํ™•์ธ ๋ฐฉ๋ฒ• => nasm, gdb

sudo apt-get install nasm
vi ex1.asm
nasm -f elf64 ex1.asm -o ex1.o && ld ex1.o -o ex1.elf
./ex1.elf

 

pwndbg, Pwngdb ์‚ฌ์šฉ ๋ฐฉ๋ฒ•:

git clone ํ•ด์„œ ๋‹ค์šด ๋ฐ›๋Š”๋‹ค => pwndbg/ ๋“ค์–ด๊ฐ€์„œ ./setup.sh ํ•ด์ค€๋‹ค =>  .gdbinit ํŒŒ์ผ ์ˆ˜์ •ํ•ด์ค€๋‹ค. => gdb ์‹คํ–‰ํ•ด๋ณด๊ธฐ

./setup.sh

source ~/pwndbg/gdbinit.py
source ~/Pwngdb/pwngdb.py
source ~/Pwngdb/angelheap/gdbinit.py


define hook-run
python
import angelheap
angelheap.init_angelheap()
end

gdb>์—์„œ pwndbg>๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค.

 

#1. esi = 0x12345678, eax = 0x87654321์ผ๋•Œ mov eax, DWORD PTR[esi]; $eax์˜ ๊ฐ’์€?

๋”๋ณด๊ธฐ

e๋กœ ์‹œ์ž‘ํ•˜๋ฉด 32๋น„ํŠธ ๋ ˆ์ง€์Šคํ„ฐ ! 4๋ฐ”์ดํŠธ

esi : ์ถœ๋ฐœ์ง€ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ ˆ์ง€์Šคํ„ฐ (์ธ๋ฑ์Šค ๋ ˆ์ง€์Šคํ„ฐ)

eax : ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๊ณ  ํ•จ์ˆ˜ ๋ฐ˜ํ™˜ ๊ฐ’์„ ๋‹ด๋Š” ๋ ˆ์ง€์Šคํ„ฐ (๋ฐ์ดํ„ฐ ๋ ˆ์ง€์Šคํ„ฐ)

mov [Destination] [Source]  :  Source์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ Destination์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ๋ช…๋ น์–ด

DWORD PTR[esi]  :  esi ํฌ์ธํ„ฐ ์ฃผ์†Œ๊ฐ’์„ 4๋ฐ”์ดํŠธ ๋งŒํผ ์ฐธ์กฐํ•œ๋‹ค.

 

=> esi ํฌ์ธํ„ฐ ์ฃผ์†Œ๊ฐ’์„ 4๋ฐ”์ดํŠธ๋งŒํผ ์ฐธ์กฐํ•ด์„œ eax ๋ ˆ์ง€์Šคํ„ฐ๋กœ ์˜ฎ๊ธด๋‹ค.

=> eax์—๋Š” esi์˜ ์ฃผ์†Œ๊ฐ’์ธ 0x12345678์ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

 

์ •๋‹ต : 0x12345678

 

#2. esi = 0x12345678, eax = 0x87654321์ผ๋•Œ mov ax, WORD PTR[esi]; $eax์˜ ๊ฐ’์€?

๋”๋ณด๊ธฐ

e๋กœ ์‹œ์ž‘ํ•˜๋ฉด 32๋น„ํŠธ ๋ ˆ์ง€์Šคํ„ฐ ! 4๋ฐ”์ดํŠธ

esi : ์ถœ๋ฐœ์ง€ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ ˆ์ง€์Šคํ„ฐ (์ธ๋ฑ์Šค ๋ ˆ์ง€์Šคํ„ฐ)

eax : ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๊ณ  ํ•จ์ˆ˜ ๋ฐ˜ํ™˜ ๊ฐ’์„ ๋‹ด๋Š” ๋ ˆ์ง€์Šคํ„ฐ (๋ฐ์ดํ„ฐ ๋ ˆ์ง€์Šคํ„ฐ)

32bit EAX  >  16bit AX  >  8bit AH + 8bit AL

mov [Destination] [Source]  :  Source์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ Destination์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ๋ช…๋ น์–ด

WORD PTR[esi]  :  esi ํฌ์ธํ„ฐ ์ฃผ์†Œ๊ฐ’์„ 2๋ฐ”์ดํŠธ ๋งŒํผ ์ฐธ์กฐํ•œ๋‹ค.

 

=> esi ํฌ์ธํ„ฐ ์ฃผ์†Œ๊ฐ’์„ 2๋ฐ”์ดํŠธ๋งŒํผ ์ฐธ์กฐํ•ด์„œ ax๋กœ ์˜ฎ๊ธด๋‹ค.

=> ax์—๋Š” esi ํฌ์ธํ„ฐ์˜ ์ฃผ์†Œ๊ฐ’์ธ 0x12345678์—์„œ 2๋ฐ”์ดํŠธ๋งŒํผ์ธ 0x5678์ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

=> ๊ทธ๋Ÿผ eax๋Š” 0x87655678๊ฐ€ ๋œ๋‹ค.

 

์ •๋‹ต : 0x87655678

 

#3. esi = 0x12345678, eax = 0x87654321์ผ๋•Œ mov ah, BYTE PTR[esi]; $eax์˜ ๊ฐ’์€?

๋”๋ณด๊ธฐ

e๋กœ ์‹œ์ž‘ํ•˜๋ฉด 32๋น„ํŠธ ๋ ˆ์ง€์Šคํ„ฐ ! 4๋ฐ”์ดํŠธ

esi : ์ถœ๋ฐœ์ง€ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ ˆ์ง€์Šคํ„ฐ (์ธ๋ฑ์Šค ๋ ˆ์ง€์Šคํ„ฐ)

eax : ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๊ณ  ํ•จ์ˆ˜ ๋ฐ˜ํ™˜ ๊ฐ’์„ ๋‹ด๋Š” ๋ ˆ์ง€์Šคํ„ฐ (๋ฐ์ดํ„ฐ ๋ ˆ์ง€์Šคํ„ฐ)

32bit EAX  >  16bit AX  >  8bit AH + 8bit AL

mov [Destination] [Source]  :  Source์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ Destination์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ๋ช…๋ น์–ด

BYTE PTR[esi]  :  esi ํฌ์ธํ„ฐ ์ฃผ์†Œ๊ฐ’์„ 1๋ฐ”์ดํŠธ ๋งŒํผ ์ฐธ์กฐํ•œ๋‹ค.

 

=> esi ํฌ์ธํ„ฐ ์ฃผ์†Œ๊ฐ’์„ 1๋ฐ”์ดํŠธ๋งŒํผ ์ฐธ์กฐํ•ด์„œ ah๋กœ ์˜ฎ๊ธด๋‹ค.

=> ah์—๋Š” esi ํฌ์ธํ„ฐ์˜ ์ฃผ์†Œ๊ฐ’์ธ 0x12345678์—์„œ 1๋ฐ”์ดํŠธ๋งŒํผ์ธ 0x78์ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

=> ๊ทธ๋Ÿผ eax๋Š” 0x87657821๊ฐ€ ๋œ๋‹ค.

 

์ •๋‹ต : 0x87657821

์ œ์ผ ํ•˜์œ„ 1๋ฐ”์ดํŠธ๋ฅผ ์˜ฎ๊ฒจ์ฃผ๊ธฐ ์œ„ํ•ด bl์„ ์จ์ฃผ์ž

 

#4. MOV AL, 100; ADD AL, 100; CMP AX, 200; ๋ช…๋ น์„ ์ˆ˜ํ–‰ ํ›„  ์ƒํƒœ ๋ ˆ์ง€์Šคํ„ฐ์˜ ๊ฒฐ๊ณผ๋Š”? CF=?, ZF=?

๋”๋ณด๊ธฐ

mov [Destination] [Source]  :  Source์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ Destination์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ๋ช…๋ น์–ด

add [OPR1] [OPR2] : OPR2์˜ ๊ฐ’์— OPR1 ๊ฐ’์„ ๋”ํ•ด OPR1์— ์ €์žฅcmp [VAR1] [VAR2] :  VAR1๊ณผ VAR2๋ฅผ ๋น„๊ตํ•œ๋‹ค.CF๋Š” ์˜ฌ๋ฆผ ๋นŒ๋ฆผ ๋ฐœ์ƒ์‹œ 1, ZF๋Š” ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ 0์ด๋ฉด 1

VAR1 < VAR2  : CF=1, ZF=0

VAR1==VAR2 : CF=0, ZF=1

VAR1 > VAR2  : CF=0, ZF=0

32bit EAX  >  16bit AX  >  8bit AH + 8bit AL

 

=> al์— 100์„ ๋„ฃ๊ณ , al์— 100์„ ๋”ํ•ด์„œ ์ €์žฅํ•˜๋ฉด al์€ 200์ด ๋œ๋‹ค.

=> al์€ 8๋น„ํŠธ์ด๊ณ , 200์„ 2์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ•˜๋ฉด 1011 0010 ์ด๋‹ค.

CF ์˜ฌ๋ฆผ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค. CF=0

๋งŒ์•ฝ add al, 200; ์ด๋ผ๊ณ  ํ•ด๋ณด์ž.

al์€ 300์ด ๋˜์–ด 8๋น„ํŠธ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ“๊ฐ’ 255๋ฅผ ์ดˆ๊ณผํ•˜๊ฒŒ ๋œ๋‹ค.

255 : 1111 1111

300 : 0001 0010 1100

์ด๋Ÿด ๊ฒฝ์šฐ CF ์˜ฌ๋ฆผ์ด ๋ฐœ์ƒํ•˜์—ฌ CF๋Š” 1๋กœ ์„ค์ •๋œ๋‹ค.

=> ax๋Š” 16๋น„ํŠธ์ด๊ณ , ax๋Š” 200์ด๋‹ค.

=> cmp ax, 200 ํ•˜๋ฉด ax์—์„œ 200์„ ๋นผ์„œ ๋น„๊ตํ•˜๊ฒŒ ๋˜๋Š”๋ฐ 200-200=0์ด๋ฏ€๋กœ ZF๊ฐ€ 1๋กœ ์„ค์ •๋œ๋‹ค.

 

์ •๋‹ต : CF=0,  ZF=1

 

2. GDB ์‚ฌ์šฉ๋ฒ•

  • ๋””๋ฒ„๊น…(debugging)์ด๋ž€ ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ ์ค‘์— ๋ฐœ์ƒํ•˜๋Š” ์‹œ์Šคํ…œ์˜ ๋…ผ๋ฆฌ์  ์˜ค๋ฅ˜๋‚˜ ๋น„์ •์ƒ์  ์—ฐ์‚ฐ์„ ์ฐพ์•„๋‚ด๊ณ  ๊ทธ ์›์ธ์„ ๋ฐํžˆ๊ณ  ์ˆ˜์ •ํ•˜๋Š” ์ž‘์—… ๊ณผ์ •์ด๋‹ค.
  • ๋””๋ฒ„๊ฑฐ๋ž€ ๋Œ€์ƒ ํ”„๋กœ๊ทธ๋žจ์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  Debugํ•˜๋Š”๋ฐ ์“ฐ์ด๋Š” ๋„๊ตฌ(ํ”„๋กœ๊ทธ๋žจ)

ํŒŒ์ผ ์‹คํ–‰

: gdb -q "ํŒŒ์ผ๋ช…"

 

ํ•จ์ˆ˜ ๋””์Šค์–ด์…ˆ๋ธ”

: disassemble main ( mainํ•จ์ˆ˜์˜ ๊ธฐ๊ณ„์–ด๋ฅผ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋กœ ๋ฐ”๊พผ๋‹ค. )

AT&T

AT&T -> intel

: set disassembly-flavor intel

intel

๋ธŒ๋ ˆ์ดํฌ ํฌ์ธํŠธ ๊ฑธ๊ธฐ

: b*main ( ์‹ฌ๋ณผ์ด ์žˆ์„ ๋•Œ )

: b*0x04005bd ( ํŠน์ • ์ฃผ์†Œ ๋ธŒ๋ ˆ์ดํฌ ํฌ์ธํŠธ ๊ฑธ๊ธฐ )

๋ธŒ๋ ˆ์ดํฌ ํฌ์ธํŠธ ์‚ญ์ œ

: delete

: delete "๋ฒˆํ˜ธ"

์‹คํ–‰ํ•˜๊ธฐ

: r

: r arg1 arg2 ... ( ์ธ์ž๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ) 

: continue  ( ๋‹ค์Œ ๋ธŒ๋ ˆ์ดํฌ ํฌ์ธํŠธ๊นŒ์ง€ ์‹คํ–‰ )

: ni                (ํ•œ ์Šคํ…์”ฉ ์‹คํ–‰ step over)

: si                 ( step into ) ํ•จ์ˆ˜๋ฅผ ๋งŒ๋‚˜๋ฉด ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ ๋“ค์–ด๊ฐ

 

์ข…๋ฃŒํ•˜๊ธฐ

: q or k

 

์ •๋ณดํ™•์ธ

: info reg  ( ๋ ˆ์ง€์Šคํ„ฐ ์ •๋ณด ํ™•์ธ )

: info break ( ๋ธŒ๋ ˆ์ดํฌ ํฌ์ธํŠธ ๊ฑด ์œ„์น˜ ํ™•์ธ )

์‹คํ–‰์ค‘์ธ ํ”„๋กœ์„ธ์Šค gdb์— ๋ถ™์ด๋Š” ๋ฒ•

:  at

๊ธฐํƒ€ ๊ฟ€ํŒ

:  finish  ( ํ˜„์žฌ ํ•จ์ˆ˜ ์ข…๋ฃŒ )

: stack [์ˆซ์ž]  ( ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ๊ฐ’ ํ™•์ธ ๊ฐ€๋Šฅ )

: libc, pie, ld, heap, code, got

: vmmap  ( ๋ฉ”๋ชจ๋ฆฌ๋งต ํ™•์ธ )

: p [name], p [register]  ( printํ•ด์คŒ, ๋ ˆ์ง€์Šคํ„ฐ์—๋Š” $๋ฅผ ๋ถ™์—ฌ์„œ ์“ฐ๊ธฐ )

: bt  ( back trace, ์ด์ „์— ์‹คํ–‰๋œ ํ•จ์ˆ˜๋“ค ์ถ”์  )

: set [ํƒ€์ž…] [์ฃผ์†Œ]  ( ๊ฐ’์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ํŠน์ • ์ฃผ์†Œ์— ๊ฐ’ ์ €์žฅ ๊ฐ€๋Šฅ )

: magic  ( ํ•จ์ˆ˜ ์˜คํ”„์…‹ ํ™•์ธ ๊ฐ€๋Šฅ )

 

 

3. IDA

IDA๊ฐ€ ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ C ์ฝ”๋“œ๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.

 

1. ์„ค์น˜

 

IDA Freeware

IDA Freeware The free binary code analysis tool to kickstart your reverse engineering experience.

hex-rays.com

2. ์‚ฌ์šฉ๋ฒ•

๋Œ€ํ‘œ์  ๋‹จ์ถ•ํ‚ค

F5 : Hey-ray ๋””์ปดํŒŒ์ผ

x : ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜๋“ค ํ™•์ธ ๊ฐ€๋Šฅ

Shift + F12 : ๋ฌธ์ž์—ด ๊ฒ€์ƒ‰ ์ฐฝ

n : ํ•จ์ˆ˜๋‚˜ ๋ณ€์ˆ˜ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ

g : ํŠน์ • ์ฃผ์†Œ๋กœ ์ด๋™

 

 

4. Pwntools

Python2,3 Module

CTF์™€ ์ต์Šคํ”Œ๋กœ์ž‡ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ, ํŒŒ์ด์ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

๊นƒํ—ˆ๋ธŒ - GitHub - Gallopsled/pwntools: CTF framework and exploit development library

๊ณต์‹๋ฌธ์„œ - pwntools — pwntools 4.8.0 documentation

์‚ฌ์šฉ๋ฐฉ๋ฒ• - 4. pwntools ์ •๋ฆฌ : ๋„ค์ด๋ฒ„ ๋ธ”๋กœ๊ทธ (naver.com)

 

 

์‚ฌ์šฉ์ด์œ  )

  • ๋งŽ์€ ์–‘์˜ ์ž…์ถœ๋ ฅ ๋™์ž‘์„ ์‰ฝ๊ณ  ๊ฐ„ํŽธํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ
  • Unprintable ASCII ๋“ฑ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ
  • Exploit์— ๋„์›€๋˜๋Š” Util๋“ค์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด

์‚ฌ์šฉ๋ฐฉ๋ฒ• )

from pwn import *

๊ตฌ์ฒด์ ์ธ ์‚ฌ์šฉ๋ฒ•์€ ๊ตฌ๊ธ€๋ง์„ ํ†ตํ•ด ์•Œ์•„๋ณด์ž !

 

๋ฌธ์ œ ํ’€์ด : using_pwntools1

๋‹ค์Œ๊ณผ ๊ฐ™์ด a,b ์—ฐ์‚ฐ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ–ˆ์„ ๋•Œ ๋‹ค์Œ์œผ๋กœ ๋„˜์–ด๊ฐ„๋‹ค. a, b ๊ฐ’์„ ์ž๋™์œผ๋กœ ๊ฐ€์ ธ์™€์„œ ๊ณ„์‚ฐํ•˜์—ฌ ๊ฐ’์„ ๋„ฃ์–ด์ค˜์•ผํ•œ๋‹ค.

pwntools๋ฅผ ์ด์šฉํ•˜์—ฌ ์ž๋™ํ™” ํ•ด๋ณด์ž.

 

from pwn import *

context.log_level='debug'
p = remote('141.164.39.45', 18733)

p.recvuntil(b'a=')
a = int(p.recvline().strip())
print('a : {}'.format(a))

p.recvuntil(b'b=')
b = int(p.recvline().strip())
print('b : {}'.format(b))

p.interactive()

a, b ๊ฐ’์„ ์•Œ์•„๋ƒˆ๋‹ค. ์ด์ œ ๋ถ€ํ˜ธ๋ฅผ ์•Œ์•„๋‚ด์„œ ์—ฐ์‚ฐํ•˜๋Š” ์ตœ์ข… ์ต์Šคํ”Œ๋กœ์ž‡ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์ž.

from pwn import *

context.log_level = 'debug'
p = remote('sung.pw',13332)

try:
    for i in range(100):
        p.recvuntil(b'a=')
        a = int(p.recvline().strip())
        print('a : {}'.format(a))

        p.recvuntil(b'b=')
        b = int(p.recvline().strip())
        print('b : {}'.format(b))

        p.recvuntil(b'a ')
        cal = p.recv(1) # + -
        print(cal)

        if cal == b'+':
            p.sendlineafter(b'= ', str(a + b).encode())
        elif cal == b'-':
            p.sendlineafter(b'= ', str(a - b).encode())
except:
    p.interactive()

p.interactive()

 

๋ฌธ์ œ ํ’€์ด : using_pwntools2

์—ฐ์‚ฐ์ด ๋” ๋‹ค์–‘ํ•ด์กŒ๊ณ , a, b๋ณ€์ˆ˜๊ฐ€ ์‚ฌ๋ผ์กŒ๋‹ค.

python์˜ eval()ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ’€์–ด๋ณด์ž.

eval("2+3") = 5

eval() ํ•จ์ˆ˜์•ˆ์— ํ‘œํ˜„์‹์„ ๋„ฃ์œผ๋ฉด ์—ฐ์‚ฐํ•ด์ฃผ๋Š” ํ•จ์ˆ˜์ด๋‹ค.

' = ' ์ „๊นŒ์ง€ ์ž…๋ ฅ๋ฐ›์€ ๋ฌธ์ž์—ด ์ „์ฒด๋ฅผ eval()์— ๋„ฃ์–ด์„œ ๊ณ„์‚ฐํ•˜์ž.

 

from pwn import *

context.log_level='debug'
p = remote('141.164.39.45', 18734)
p.recvline()
p.recvline()

try:
	for i in range(100):
		p.recvline()
		s = p.recvuntil(b' = ').strip().strip(b'=')
		print('s : {}'.format(s))
		
		code = compile(s,'', 'eval')
		out = eval(code)
		print('out : {}'.format(out))

		p.sendline(str(out).encode())
	
except:
	p.interactive()

p.interactive()

์‹ ๊ฒฝ์จ์•ผ ํ•  ๋ถ€๋ถ„์€ python3 ํŠน์ง•์ด binary ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

out์ด intํ˜•์ด๋ผ์„œ p.sendline(out) ์ด๋ ‡๊ฒŒ ๊ณ„์† ๋ณด๋‚ด๋‹ค๊ฐ€ str(out).encode()ํ•ด์ฃผ๋‹ˆ๊นŒ ์ž˜ ์ „๋‹ฌ๋œ๋‹ค.

 

โญ๊ณต๋ถ€ํ•  ๊ฒƒ๋“ค

1. IDA ์‚ฌ์šฉ๋ฒ•

2. pwntools ์‚ฌ์šฉ๋ฒ•

 

 


ASC ์‹œ์Šคํ…œํ•ดํ‚น ์Šคํ„ฐ๋””

 

'System-hacking > ๐Ÿ“–' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[ASC ์Šคํ„ฐ๋””] 8์ฃผ์ฐจ - Stack Canary + Out Of Boundary  (0) 2022.08.19
[ASC ์Šคํ„ฐ๋””] 7์ฃผ์ฐจ - Stack Buffer Overflow ๋ฌธ์ œ ํ’€์ด, Integer Overflow  (0) 2022.07.30
[ASC ์Šคํ„ฐ๋””] 6์ฃผ์ฐจ - ํ•จ์ˆ˜์˜ ์Šคํƒ ํ”„๋ ˆ์ž„, ๋ฉ”๋ชจ๋ฆฌ ๋ณดํ˜ธ๊ธฐ๋ฒ•, Stack Buffer Overflow  (0) 2022.07.23
[ASC ์Šคํ„ฐ๋””] 4์ฃผ์ฐจ - ๋ ˆ์ง€์Šคํ„ฐ, ์–ด์…ˆ๋ธ”๋ฆฌ, ์—ฐ์Šต๋ฌธ์ œ, GDB ์‚ฌ์šฉ๋ฒ•  (0) 2022.06.27
[ASC ์Šคํ„ฐ๋””] 3์ฃผ์ฐจ - ๊ธฐ์ดˆ์ด๋ก , ํ™˜๊ฒฝ์„ธํŒ…, ๋ฉ”๋ชจ๋ฆฌ๊ตฌ์กฐ  (0) 2022.06.24
    'System-hacking/๐Ÿ“–' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [ASC ์Šคํ„ฐ๋””] 7์ฃผ์ฐจ - Stack Buffer Overflow ๋ฌธ์ œ ํ’€์ด, Integer Overflow
    • [ASC ์Šคํ„ฐ๋””] 6์ฃผ์ฐจ - ํ•จ์ˆ˜์˜ ์Šคํƒ ํ”„๋ ˆ์ž„, ๋ฉ”๋ชจ๋ฆฌ ๋ณดํ˜ธ๊ธฐ๋ฒ•, Stack Buffer Overflow
    • [ASC ์Šคํ„ฐ๋””] 4์ฃผ์ฐจ - ๋ ˆ์ง€์Šคํ„ฐ, ์–ด์…ˆ๋ธ”๋ฆฌ, ์—ฐ์Šต๋ฌธ์ œ, GDB ์‚ฌ์šฉ๋ฒ•
    • [ASC ์Šคํ„ฐ๋””] 3์ฃผ์ฐจ - ๊ธฐ์ดˆ์ด๋ก , ํ™˜๊ฒฝ์„ธํŒ…, ๋ฉ”๋ชจ๋ฆฌ๊ตฌ์กฐ
    estherseo
    estherseo
    ์•ˆ๋…•ํ•˜์„ธ์š”๐Ÿ˜€

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”