random

2022. 12. 28. 14:36·Wargame/pwnable.kr
728x90
반응형

1. intro

2. code 및 분석

2.1.  code

#include <stdio.h>

int main(){
        unsigned int random;
        random = rand();        // random value!

        unsigned int key=0;
        scanf("%d", &key);

        if( (key ^ random) == 0xdeadbeef ){
                printf("Good!\n");
                system("/bin/cat flag");
                return 0;
        }

        printf("Wrong, maybe you should try 2^32 cases.\n");
        return 0;
}

2.2. 분석

단순히 랜덤값과 입력받은 키 값의 xor 값이 deadbeef면 플래그를 준다.

 

3. 취약점 확인 및 공격 준비

3.1. 취약점

씨드가 없는 랜덤값은 항상 일정하다는 것이 취약점이다.

3.2. 공격 준비

검증을 위해 지속적으로 random 결과 값을 받아보았는데 아래와 같았다.

RAX: 0x6b8b4567
RBX: 0x0
RCX: 0x7f1c40f710a4 --> 0x16a5bce3991539b1
RDX: 0x7f1c40f710a8 --> 0x6774a4cd16a5bce3
RSI: 0x7ffd6acf61ac --> 0x6b8b4567
RDI: 0x7f1c40f71620 --> 0x7f1c40f710b4 --> 0x61048c054e508aaa
RBP: 0x7ffd6acf61e0 --> 0x400670 (<__libc_csu_init>:    mov    %rbp,-0x28(%rsp))
RSP: 0x7ffd6acf61d0 --> 0x7ffd6acf62c0 --> 0x1
RIP: 0x400606 (<main+18>:       mov    %eax,-0x4(%rbp))
R8 : 0x7f1c40f710a4 --> 0x16a5bce3991539b1
R9 : 0x7f1c40f71120 --> 0x8
R10: 0x47f
R11: 0x7f1c40be7f70 (<rand>:    sub    $0x8,%rsp)
R12: 0x400510 (<_start>:        xor    %ebp,%ebp)
R13: 0x7ffd6acf62c0 --> 0x1
R14: 0x0
R15: 0x0
EFLAGS: 0x202 (carry parity adjust zero sign trap INTERRUPT direction overflow)
[-------------------------------------code-------------------------------------]
   0x4005f8 <main+4>:   sub    $0x10,%rsp
   0x4005fc <main+8>:   mov    $0x0,%eax
   0x400601 <main+13>:  callq  0x400500 <rand@plt>
=> 0x400606 <main+18>:  mov    %eax,-0x4(%rbp)
   0x400609 <main+21>:  movl   $0x0,-0x8(%rbp)
   0x400610 <main+28>:  mov    $0x400760,%eax
   0x400615 <main+33>:  lea    -0x8(%rbp),%rdx
   0x400619 <main+37>:  mov    %rdx,%rsi
[------------------------------------stack-------------------------------------]

즉, 0x6b8b4567 와 xor하여 그 값이 deadbeef인 값을 삽입하면 된다.

 

4. exploit

random@pwnable:~$ python
Python 2.7.12 (default, Mar  1 2021, 11:38:31)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 0x6b8b4567^0xdeadbeef
3039230856
>>> 3039230856^0x6b8b4567
3735928559
>>> hex(3735928559)
'0xdeadbeef'
>>>
random@pwnable:~$ ls
flag  random  random.c
random@pwnable:~$ ./random
3039230856
Good!
----------#플래그는 삭제
728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'Wargame > pwnable.kr' 카테고리의 다른 글

mistake  (0) 2022.12.29
input  (0) 2022.12.28
passcode  (0) 2022.12.27
bof  (0) 2022.12.27
collision  (0) 2022.12.27
'Wargame/pwnable.kr' 카테고리의 다른 글
  • mistake
  • input
  • passcode
  • bof
wyv3rn
wyv3rn
아저씨의 흔한 취미. wyv3rn#1249
  • wyv3rn
    think storage
    wyv3rn
  • 전체
    오늘
    어제
    • 분류 전체보기 (500) N
      • To do list (7) N
        • Doing (1) N
        • Complete (6)
      • Diary (35)
      • Tips & theory (77)
      • Kernel Exploit (27) N
        • Theory (15)
        • Exercise (5) N
      • Wargame (313)
        • pwn.college (34)
        • Dreamhack (148)
        • pwnable.kr (15)
        • Lord of Sqlinjection (3)
        • Cryptohack (20)
        • Root me (27)
        • CodeEngn (4)
        • Exploit Education (22)
        • ROP Emporium (8)
        • H4C (10)
        • Hackerchool (22)
      • CTF (41) N
        • Solved (39) N
        • Unsolved (2)
      • Script (0)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

    • PWN wargame 모음 (및 느낀점)
    • 비공개 글들에 대해.
    • 뭐라도 하나 얻어가시길...
  • 인기 글

  • 태그

    heap
    ROOT ME
    exploit education
    la ctf
    vtable
    Me
    rop
    FSB
    64bit
    x86
    pwntools
    libc
    root
    docker
    root-me
    hackerschool
    x64
    32bit
    Format String Bug
    CANARY
    dreamhack
    cryptohack
    tcache
    lob
    BOF
    RTL
    _IO_FILE
    pwnable.kr
    Buffer Overflow
    phoenix
  • 최근 댓글

  • 최근 글

  • 250x250
    반응형
  • hELLO· Designed By정상우.v4.10.3
wyv3rn
random
상단으로

티스토리툴바