For the complete documentation index, see llms.txt. This page is also available as Markdown.

6.1.26 pwn 34C3CTF2017 300

ไธ‹่ฝฝๆ–‡ไปถ

้ข˜็›ฎๅค็Žฐ

$ file 300
300: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=5f43b102f0fe3f3dd770637f1d244384f6b2a1c9, not stripped
$ checksec -f 300
RELRO           STACK CANARY      NX            PIE             RPATH      RUNPATH      FORTIFY Fortified Fortifiable  FILE
Full RELRO      Canary found      NX enabled    PIE enabled     No RPATH   No RUNPATH   Yes     0               2       300
$ strings libc-2.24.so | grep "GNU C"
GNU C Library (Ubuntu GLIBC 2.24-9ubuntu2.2) stable release version 2.24, by Roland McGrath et al.
Compiled by GNU CC version 6.3.0 20170406.

64 ไฝ็จ‹ๅบ ๏ผŒๅผ€ๅฏไบ† canaryใ€NX ๅ’Œ PIE๏ผŒ้ป˜่ฎคๅผ€ๅฏ ASLRใ€‚

ๅœจ Ubuntu16.10 ไธŠ็Žฉไธ€ไธ‹๏ผš

) alloc
2) write
3) print
4) free
1                       <-- alloc 1
slot? (0-9)
1
1) alloc
2) write
3) print
4) free
2
slot? (0-9)
1                       <-- write 1
AAAAAAAAAAAAAAAA
1) alloc
2) write
3) print
4) free
4                       <-- free 1
slot? (0-9)
1
1) alloc
2) write
3) print
4) free
2                       <-- write 1
slot? (0-9)
1
BBBBBBBB
1) alloc
2) write
3) print
4) free
3                       <-- print 1
slot? (0-9)
1
BBBBBBBB
AAAAAAA

1) alloc
2) write
3) print
4) free
3                       <-- print 2
slot? (0-9)
2
Segmentation fault (core dumped)

ๅพˆๆธ…ๆ™ฐ็š„ 4 ไธชๅŠŸ่ƒฝ๏ผšallocใ€writeใ€print ๅ’Œ freeใ€‚้€š่ฟ‡ๅฐ่ฏ•ไผผไนŽๅฐฑๅ‘็Žฐไบ†้—ฎ้ข˜๏ผŒfree ็š„ๆ—ถๅ€™ๆฒกๆœ‰ๅฐ†ๆŒ‡้’ˆ็ฝฎ็ฉบ๏ผŒๅฏผ่‡ด UAFใ€‚่ฏปๅ…ฅ็š„ๅญ—็ฌฆไธฒๆœซๅฐพๆฒกๆœ‰ๅŠ  \x00 ๅฏผ่‡ดไฟกๆฏๆณ„้œฒใ€‚ๆœ€ๅŽๅฆ‚ๆžœ print ไธ€ไธช่ฟ˜ๆฒกๆœ‰ alloc ็š„ slot๏ผŒๅˆ™ๅ‡บ็Žฐๆฎต้”™่ฏฏใ€‚

้ข˜็›ฎ่งฃๆž

main

ไปŽ main ๅ‡ฝๆ•ฐไธญๆˆ‘ไปฌ็Ÿฅ้“๏ผŒ็จ‹ๅบ็š„ๆ‰€ๆœ‰ๆ“ไฝœ้ƒฝๆ˜ฏๅŸบไบŽ slotใ€‚

alloc

่ฏฅๅ‡ฝๆ•ฐๅ›บๅฎšๅˆ†้… 0x300 ็š„็ฉบ้—ด๏ผŒ็„ถๅŽๆ นๆฎ slot ๅฐ†่ฟ”ๅ›žๅœฐๅ€ๆ”พๅˆฐไปŽ 0x202040 ๅผ€ๅง‹็š„ๆ•ฐ็ป„ allocs ไธญใ€‚

write

่ฏฅๅ‡ฝๆ•ฐ่ฏปๅ…ฅๆœ€ๅคš 0x300 ไธชๅญ—็ฌฆๅˆฐ slot ๅฏนๅบ”็š„็ฉบ้—ดไธญใ€‚ๆฒกๆœ‰ๅœจๅญ—็ฌฆไธฒๆœซๅฐพๅŠ  \x00๏ผŒๅฏ่ƒฝๅฏผ่‡ดไฟกๆฏๆณ„้œฒใ€‚

print

่ฏฅๅ‡ฝๆ•ฐ็”จไบŽๆ‰“ๅฐ slot ๅฏนๅบ”็ฉบ้—ดไธญ็š„ๅญ—็ฌฆไธฒใ€‚

free

่ฏฅๅ‡ฝๆ•ฐ็”จไบŽ้‡Šๆ”พ slot ๅฏนๅบ”็š„็ฉบ้—ด๏ผŒไฝ†ๆ˜ฏๅดๆฒกๆœ‰ๅฐ† allocs[slot] ๆŒ‡้’ˆ็ฝฎ็ฉบ๏ผŒๅฏผ่‡ด UAF๏ผŒๆˆ–่€… double-freeใ€‚

ๆผๆดžๅˆฉ็”จ

ไปŽไธŠ้ขๆˆ‘ไปฌๅฏไปฅ็œ‹ๅˆฐ๏ผŒ็จ‹ๅบ็š„ๅ„้กนๆ“ไฝœ้ƒฝๅŸบไบŽ slot๏ผŒๅฏน allocs[slot] ๆŒ‡ๅ‘็š„ๅ†…ๅญ˜็ฉบ้—ด่ฟ›่กŒๆ“ไฝœ๏ผŒไฝ†ๆฒกๆœ‰ๅฏน allocs[slot] ๆ˜ฏๅฆไธบ็ฉบ๏ผŒๆˆ–่€…ๅ…ถๆŒ‡ๅ‘็š„ๅ†…ๅญ˜ๆ˜ฏๅฆไธบ่ขซ้‡Šๆ”พ็š„็Šถๆ€๏ผŒ้ƒฝๆฒกๆœ‰ๅšไปปไฝ•ๆฃ€ๆŸฅ๏ผŒ่ฟ™ไนŸๆ˜ฏไน‹ๅ‰ๅ‘็”Ÿๆฎต้”™่ฏฏ็š„ๅŽŸๅ› ใ€‚

leak

้ฆ–ๅ…ˆๅˆฉ็”จ unsorted bin ๅฏไปฅๆณ„้œฒๅ‡บ libc ๅ’Œ heap ็š„ๅœฐๅ€ใ€‚ๅˆ†้… 5 ไธช chunk ็š„ๅŽŸๅ› ๆ˜ฏไธบไบ†้ฟๅ… \x00 ๆˆชๆ–ญ๏ผˆheap ๅŸบๅœฐๅ€็š„ไฝŽไฝ 0x00๏ผ‰ใ€‚็„ถๅŽ้‡Šๆ”พๆމ 1 ๅ’Œ 3 ๅณๅฏใ€‚

house of orange

่ฟ™ไธ€ๆญฅๅฐฑๆฏ”่พƒๅคๆ‚ไบ†ใ€‚ๅ› ไธบ็จ‹ๅบๅชๅ…่ฎธๅˆ†้… 0x300 ๅคงๅฐ็š„ chunk๏ผŒ่€Œๆˆ‘ไปฌ็Ÿฅ้“ house-of-orange ้œ€่ฆๅคงๅฐไธบ 0x60 ็š„ chunk๏ผˆๆ”พๅ…ฅ smallbins[5]๏ผ‰ใ€‚็”ฑไบŽๆˆ‘ไปฌๅฏไปฅๅ…ทๆœ‰ไฟฎๆ”น free chunk ็š„่ƒฝๅŠ›๏ผŒๆ‰€ไปฅๅฏไปฅไฟฎๆ”น unsorted bin ้‡Œ chunk ็š„ bk ๆŒ‡้’ˆๆŒ‡ๅ‘ไผช้€ ็š„ fake chunk๏ผŒไปฅๅฐ†ๅ…ถ้“พๆŽฅๅˆฐ unsorted bin ไธญใ€‚ๆŽฅไธ‹ๆฅ็š„็ฌฌไธ€ๆฌก malloc ๅฐ†ไฟฎๆ”น unsorted_bin->TAIL->bk ๅฐ†ๆŒ‡ๅ‘ fake chunk๏ผŒ่€Œ็ฌฌไบŒๆฌก malloc ็š„ๆ—ถๅ€™๏ผŒ็”ฑไบŽๅคงๅฐไธๅˆ้€‚๏ผŒfake chunk ๅฐฑไผš่ขซๆ•ด็†ๅ›ž smallbins[5]๏ผš

ๅฏนไบŽ vtable ็š„ๅˆฉ็”จ๏ผŒไธŠไธ€่Š‚ๆˆ‘ไปฌไฝฟ็”จไบ† _IO_str_overflow ๅ‡ฝๆ•ฐ๏ผŒ่ฟ™ๆฌกๆˆ‘ไปฌๅฐฑ็”จ _IO_wstr_finish ๅ‡ฝๆ•ฐใ€‚ๅ…ทไฝ“ๆ€Žไนˆ็”จ่ฏทๆŸฅ็œ‹็ซ ่Š‚ 4.13ใ€‚

ๅ€ผๅพ—ๆณจๆ„็š„ๆ˜ฏ fp->_wide_data ๆŒ‡ๅ‘ไบ† fake chunk๏ผŒๆ‰€ไปฅๅฐฑ็›ธๅฝ“ไบŽๆˆ‘ไปฌๅค็”จไบ†่ฟ™ไธ€ๅ—็ฉบ้—ด๏ผŒfp->_IO_write_end ็š„ๅœฐๆ–นไนŸๆ˜ฏๅฐฑๆ˜ฏ fp->wide_data->buf_baseใ€‚

ๆŽฅไธ‹ๆฅๅˆฉ็”จ unsorted bin attack ไฟฎๆ”น _IO_list_all ๆŒ‡ๅ‘ &unsorted_bin-0x10๏ผŒ่€Œๅ็งป 0x60 ็š„ๅœฐๆ–นๅฐฑๆ˜ฏ _IO_list_all->_chain๏ผŒๅณ smallbins[5]๏ผŒๆŒ‡ๅ‘ไบ† fake chunkใ€‚

pwn

ๆœ€ๅŽ่งฆๅ‘ๅผ‚ๅธธๅค„็†๏ผŒmalloc_printerr -> __libc_message -> __GI_abort -> _IO_flush_all_lockp -> __GI__IO_str_finish๏ผŒ่Žทๅพ— shellใ€‚

ๅผ€ๅฏ ASLR๏ผŒBingo!!!

exploit

ๅฎŒๆ•ด็š„ exp ๅฆ‚ไธ‹๏ผš

ๅ‚่€ƒ่ต„ๆ–™

Last updated

Was this helpful?