LEVEL 8

kpwnote

pwnable
  • 문제 정보
  • 풀이 15
  • 난이도 투표 16
  • 질문 4
  • 최근 풀이자 59
  • 댓글 7
해당 문제는 Dreamhack CTF Season 1 Round #6 에 출제된 문제입니다.

문제 설명

Description

데이터를 저장하는 가상 파일을 공격하여 커널의 루트 권환을 획득하세요!

접속 방법

telnet 명령 설치를 권장합니다. Ubuntu/Debian 환경에서 다음 명령으로 설치 가능합니다.

sudo apt install telnet

접속 정보 보기 버튼을 누르면 다음과 같이 접속 정보가 표시됩니다.

Host: host1.dreamhack.games
Port: tcp/12345 > tcp/8023, tcp/54321 > tcp/8088

(또는)

Host: host1.dreamhack.games
Port: 12345/tcp, 54321/tcp

이후 첫번째 포트에 접속하면 쉘 프롬프트가 표시됩니다.

user@local:~$ telnet host1.dreamhack.games 12345
Trying XXX.XXX.XXX.XXX...
Connected to host1.dreamhack.games.
Escape character is '^]'.
$ 

파일 복사

먼저 다른 터미널에서 두번째 포트에 접속하여 파일 송신을 시작합니다.

user@local:~$ nc host1.dreamhack.games 54321 < exploit

이후 /dev/vport0p1을 통해 VM 내부로 파일을 복사합니다.

$ cat /dev/vport0p1 > /tmp/exploit

References

출제자 정보

avatar
Dreamhack
대표 업적 없음

First Blood!

avatar
n1net4il
워게임 고인물
출제된 지 4시간 만에 풀이 완료!

난이도 투표 16

질문 4

문제 풀이에 어려움이 있으신가요?
커뮤니티에서 문제에 대한 질문하고 답변 얻기
파일 전송 및 실행 문제 질문
// kpwn.c #include <stdio.h> int main() { printf("hello\n"); } 단순한 프로그램 $ gcc kpwn.c -o kpwn $ ./kpwn hello # <--- 정상 실행 확인 $ telnet host1.dreamhack.games 15211 Trying 139.99.121.66... Connected to host1.dreamhack.games. Escape character is '^]'. 위처럼 첫 번째 포트로 먼저 부팅 시키고 $ nc host1.dreamhack.games 19406 < kpwn 두 번째 포트로 테스트용 실행 파일 전송 시작하고 ~ $ cat /dev/vport0p1 > /tmp/kpwn # 오랫동안 반응 없음!!! ^C # <--- 반응이 없어서 Ctrl+C로 강제종료 ~ $ ls -l /tmp total 20 -rw-r--r-- 1 offender offender 16696 Jun 2 05:23 kpwn # <--- 파일크기 정상 ~ $ cat /tmp/kpwn @@@@ XX-==X`-==888 XXXDDStd888 Ptd DDQtdRtd-==HH/lib64/ld-linux-x86-64.so.2GNUGNUm9ٟ擤wZGNUem? ![ j "libc.so.6printf__cxa_finalize__libc_start_mainGLIBC_2.2.5_ITM_deregisterTMCloneTable__gmon_start___ITM_registerTMCloneTableui 3@@??????HH=R/H=y/Hr/H9tH./HtDH=I/H5B/H)HH?HHHtH/HfD=/u+UH=.Ht H=.d.]wUHH=]AWL=;,AVIAUIATAUH-,=pE E(D0H8G@n8A0A(B BBB@ zRx$4 FJ ?:*3$"\ti EC ?( ooo=0@GCC: (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.08X|p @P  P ===?@@ @F=m@y=T!=== ?  i @-@ 4Hg@t @ pe@m/@I @ "crtstuff.cderegister_tm_clones__do_global_dtors_auxcompleted.8060__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entryxx.c__FRAME_END____init_array_end_DYNAMIC__init_array_start__GNU_EH_FRAME_HDR_GLOBAL_OFFSET_TABLE___libc_csu_fini_ITM_deregisterTMCloneTable_edataprintf@@GLIBC_2.2.5__libc_start_main@@GLIBC_2.2.5__data_start__gmon_start____dso_handle_IO_stdin_used__libc_csu_init__bss_startmain__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#886XX$I|| Wo ippq~o ((B@PP  DP P=-?@0 @00*@0 X6Z8 ##### <----- 파일내용도 정상인 듯 ~ $ chmod 777 /tmp/kpwn # <--- 실행가능하게 권한 변경 ~ $ ls -l /tmp total 20 -rwxrwxrwx 1 offender offender 16696 Jun 2 05:23 kpwn ~ $ /tmp/kpwn sh: /tmp/kpwn: not found # ??? 파일 실행이 안됨 ~ $ 질문1 파일 전송에서 오랫동안 반응이 없길래 Ctrl+C로 강제종료 시켰는데 괜찮은 건가요? 올바른 파일 전송법이 어떤지 알고싶습니다. 질문2 실행파일을 실행시키는데 오류가 나오는데 어떻게 해야하나요?
2dedce
문제 질문
rip를 변조할 수 있는게 확인되었고 leak까지 했습니다. 그리고 ret2usr기법을 이용해서 루트권한을 얻으려는데 [ 26.746655] kernel tried to execute NX-protected page - exploit attempt? (uid: 1000) [ 26.746816] BUG: unable to handle page fault for address: 00007ffc1ad4e790 [ 26.746947] #PF: supervisor instruction fetch in kernel mode [ 26.747034] #PF: error_code(0x0011) - permissions violation [ 26.747186] PGD 1de067 P4D 1de067 PUD 21f8067 PMD 1d9067 PTE 8000000004bec067 [ 26.747585] Oops: 0011 [#1] SMP NOPTI [ 26.747756] CPU: 0 PID: 84 Comm: exploit Not tainted 5.11.16-kpwnote+ #1 [ 26.748081] RIP: 0010:0x7ffc1ad4e790 [ 26.748268] Code: Unable to access opcode bytes at RIP 0x7ffc1ad4e766. [ 26.748369] RSP: 0018:ffffb8e480547e78 EFLAGS: 00000203 [ 26.748469] RAX: 00000000b7697458 RBX: ffffffff8b1834e0 RCX: ffffb8e480547ef0 [ 26.748539] RDX: 0000000000000007 RSI: 0000000000498022 RDI: 365b7567fd0aa0a3 [ 26.748607] RBP: 0000000000401d2e R08: 0000000000401d0c R09: 0000000000498029 [ 26.748674] R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000498022 [ 26.748741] R13: ffffffffffffffea R14: 0000000000000007 R15: 0000000000000000 [ 26.748849] FS: 0000000002096880(0000) GS:ffff9ddd47a00000(0000) knlGS:0000000000000000 [ 26.748925] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 26.748988] CR2: 00007ffc1ad4e790 CR3: 0000000000c04000 CR4: 00000000000006b0 [ 26.749146] Call Trace: [ 26.749823] ? proc_reg_write+0x58/0x80 [ 26.749928] ? vfs_write+0xb3/0x270 [ 26.750014] ? do_sys_openat2+0x1b4/0x2d0 [ 26.750090] ? ksys_write+0xa2/0xe0 [ 26.750140] ? __x64_sys_write+0x15/0x20 [ 26.750215] ? do_syscall_64+0x31/0x40 [ 26.750292] ? entry_SYSCALL_64_after_hwframe+0x44/0xa9 [ 26.750432] Modules linked in: [ 26.750585] CR2: 00007ffc1ad4e790 [ 26.756069] ---[ end trace 4c7b0ba289993620 ]--- [ 26.756255] RIP: 0010:0x7ffc1ad4e790 [ 26.756335] Code: Unable to access opcode bytes at RIP 0x7ffc1ad4e766. [ 26.756404] RSP: 0018:ffffb8e480547e78 EFLAGS: 00000203 [ 26.756479] RAX: 00000000b7697458 RBX: ffffffff8b1834e0 RCX: ffffb8e480547ef0 [ 26.756550] RDX: 0000000000000007 RSI: 0000000000498022 RDI: 365b7567fd0aa0a3 [ 26.756621] RBP: 0000000000401d2e R08: 0000000000401d0c R09: 0000000000498029 [ 26.756689] R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000498022 [ 26.756758] R13: ffffffffffffffea R14: 0000000000000007 R15: 0000000000000000 [ 26.756826] FS: 0000000002096880(0000) GS:ffff9ddd47a00000(0000) knlGS:0000000000000000 [ 26.756898] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 26.756961] CR2: 00007ffc1ad4e790 CR3: 0000000000c04000 CR4: 00000000000006b0 이런 로그를 남기고 커널패닉이 나네요. smep가 걸려있나 하고 cat /proc/cpuinfo를 해보았지만 smep관련 내용은 안나왔습니다. 대체 어디가 문제인걸까요??? processor : 0 vendor_id : AuthenticAMD cpu family : 6 model : 6 model name : QEMU Virtual CPU version 2.5+ stepping : 3 cpu MHz : 3503.963 cache size : 512 KB physical id : 0 siblings : 1 core id : 0 cpu cores : 1 apicid : 0 initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx lm nopl cpuid pni cx16 hypervisor lahf_lm svm 3dnowprefetch vmmcall bugs : fxsave_leak sysret_ss_attrs spectre_v1 spectre_v2 spec_store_bypass bogomips : 7007.92 TLB size : 1024 4K pages clflush size : 64 cache_alignment : 64 address sizes : 40 bits physical, 48 bits virtual power management: `
avatar Sechack

최근 풀이자 59

eyeball
워게임: 20
jch
워게임: 50
zeroboo
대표 업적 없음
avatar
JJ3rry
워게임 고인물
Hi juno
대표 업적 없음
klove
대표 업적 없음
name2965
워게임 고인물
avatar
kohii
대표 업적 없음
zexion
대표 업적 없음
luke1337
대표 업적 없음

댓글 7

avatar
바나나김치
워게임 고인물
ㅓㅜ
avatar
rvkhun
워게임: 50
gg
For_Freedom
워게임 고인물
good!!
avatar
Sechack
CTF First Place
삽질을 너무 많이했다...
avatar
sangjun
공부벌레
So funny:)
avatar
qwerty
CTF First Place
hard
avatar
ainsetin
Open Beta Tester
커널에 발을 붙여갈 수 있었던 좋은 계기였습니다. 감사합니다.