WhiteHat Contest 2024 Quals - gf
0x00. Introduction
)
๊ฐ์ ฏ ์ด๋ฆฌ ์ ๋ฆฌ ์กฐํฉํ๋ค๊ฐ ๋งค๋ชฐ๋์ด๋ฒ๋ฆฐ ๋ฌธ์ . ์ข ๋ฃ 20๋ถ ์ ์ ์์๋ฒ๋ ธ๋คโฆ
0x01. Vulnerability
__int64 __fastcall
16๋ฐ์ดํธ dest์ 0xbc๋งํผ ์
๋ ฅ์ ๋ฐ๋ ๋จ์ํ BOF ์ทจ์ฝ์ ์ด ๋ฐ์ํ๋ค.
0x02. Exploit
์ถ๋ ฅ ํจ์๋ ์ปค๋ ROP๋ฅผ ํ๊ธฐ ์ํ ๊ฐ์ ฏ์ด ํ๋๋ ์๋ค. ๊ทธ๋ฌ๋ค๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ณด๊ณ ํํธ๋ฅผ ์ป์๋ค.
read()์ ๋ง์ง๋ง ๋ถ๋ถ์ธ dest + 0xb8 ๊ทผ์ฒ๋ฅผ ๋ณด๋ฉด ๋งค์ฐ ์์ํ๊ฒ libc ์ฃผ์์ ์ผ๋ถ๊ฐ ์๋ค.
ํ์ 3๋ฐ์ดํธ๊ฐ 0x00์ผ๋ก ๋์ด์๋๋ฐ, ๋ฑ ์ด ๋ถ๋ถ๊น์ง ์ธ ์ ์๋ค.
๋ฐ๋ผ์ libc leak ์์ด ์ด ๋ถ๋ถ์ ์ด์ฉํด์ ์์๋๋ one shot ๊ฐ์ ฏ ์ฃผ์๋ฅผ ๋ง๋ค์ด๋๊ณ ASLR์ ์ํด ํ๋ฅ ์ ์ผ๋ก ํด๋น ์ฃผ์์ ์ง์ง one shot ๊ฐ์ ฏ์ด ๋ก๋๋๊ธธ ๊ธฐ๋ํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
main()์์ return์ ํ ๋์ ๋ ์ง์คํฐ ๊ฐ๋ค์ ๋ค์๊ณผ ๊ฐ๋ค.
)
์ด ์ํ์์ one shot ๊ฐ์ ฏ ์กฐ๊ฑด์ ๋ง์ถฐ์ค์ผํ๋๋ฐ ๊ฐ์ ฏ๋ง ๋ช ์๊ฐ์ ๋ดค๋๋ ๋ฐ๋ก ๋ฐฉ๋ฒ์ด ๋ ์ฌ๋๋ค.
)
|| ||
|| ||
One shot ๊ฐ์ ฏ ์ค ์์ ๊ฐ์ด rsi, rdx์ ์กฐ๊ฑด์ด ๊ฑธ๋ ค์๋ ๊ฐ์ ฏ์ด ์์๊ณ ๋ฐ์ด๋๋ฆฌ์ ์๋ ๊ฐ์ ฏ์ค ๋ค์๊ณผ ๊ฐ์ ๊ฒ๋ค์ด ์๋ค.
# shift_rsi_ret gadget
# pop_rsi_pop_rdx_push_rsi_ret gadget
์ฐ์ rdx๋ pop_rsi_pop_rdx_push_rsi_ret ๊ฐ์ ฏ์ ํตํด ์ปจํธ๋กค์ด ๊ฐ๋ฅํ๊ณ ์ด๋ค ์๋์ธ์ง๋ ๋ชจ๋ฅด๊ฒ ์ผ๋ shift_rsi_ret ๊ฐ์ ฏ์ ํตํด rsi๋ฅผ 0.5๋ฐ์ดํธ์ฉ right shift ํ ์ ์๋ค. rsi์๋ 0x404060๊ฐ ์ ์ฅ๋์ด์์ผ๋ฏ๋ก shift_rsi_ret ๊ฐ์ ฏ์ 6๋ฒ ํธ์ถํ๋ฉด rsi๋ฅผ 0์ผ๋ก ๋ง๋ค ์ ์๋ค.
์ถ๊ฐ๋ก rbp-0x78๊ฐ writable ํด์ผํ๋ ์กฐ๊ฑด์ด ์๋๋ฐ ๋์ถฉ Data ์์ญ์ ์ค๊ฐ์ธ 0x404800์ผ๋ก ์ค์ ํด์ฃผ์๋ค.
ํ๋ฅ ์ ๊ณ์ฐํด๋ณด๋ฉด 0x7ffff7XXXc88๊ฐ ์ค์ ๋ก one shot ๊ฐ์ ฏ์ ์ฃผ์์ฌ์ผํ๋ฏ๋ก 1.5๋ฐ์ดํธ, ์ฆ 1/4096 ํ๋ฅ ๋ก exploit์ด ์ฑ๊ณตํ๋ค.
๊ทธ๋ฐ๋ฐ ์์ ์ด ๋๋๊ณ ๋ค๋ฅธ ๋ถ์ exploit์ ๋ณด๋ 100% exploit์ ์ฑ๊ณตํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์๋ค. ๋ชฐ๋๋ ๋ด์ฉ์ด๊ธฐ๋ ํ๊ณ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ ๊ฒ ๊ฐ์์ ๋ฐ๋ก ํฌ์คํ ํ๊ฒ ๋ค.
0x03. Payload
=
=
=
=
= f
=
# s = remote(server, port)
=
=
=
=
= 0x40112c
= 0x40119e
= b * 0x10
+=
+=
+=
+=
+= * 5
+= *
+= b # 0x754c18 4b ac 88
=
=
=
=