기본 콘텐츠로 건너뛰기

Insecure-programming-abo4

Insecure-programming-abo4 Insecure Programming by example Advanced Buffer Overflow 4 extern system , puts ; void ( * fn ) ( char * ) = ( void ( * ) ( char * ) ) & system ; int main ( int argv , char * * argc ) { char * pbuf = malloc ( strlen ( argc [ 2 ] ) + 1 ) ; char buf [ 256 ] ; fn = ( void ( * ) ( char * ) ) & puts ; strcpy ( buf , argc [ 1 ] ) ; strcpy ( pbuf , argc [ 2 ] ) ; fn ( argc [ 3 ] ) ; while ( 1 ) ; } Advanced Buffer Overflow 3과 다른 몇 가지 특징을 볼 수 있다. 먼저 main 함수 외부에서 전역 변수로 fn 함수 포인터를 선언한 것을 볼 수 있다. 그리고 활용 인자 값을 추가하여 첫 번째 인자는 스택에 저장하고 두 번째 인자는 malloc 함수를 활용하여 힙에 저장하고, 세 번째 인자는 fn 함수 포인터로 할당한 puts 함수의 인자로 전달하고 있다. 마지막으로 exit 함수를 이용하여 프로그램을 종료하는 것 대신 while 무한 반복이 설정되어 있다. # objdump -d -M intel ./abo4 | grep -A 39 "<main>" 08048444 <main>: 8048444: 55 push ebp 8048445: 89 e5 mov ebp,esp 8048447: 81 ec 28 01 00 00

Bandit13

Bandit13 Bandit Level 13 bandit13@bandit:~$ ls -al total 24 drwxr-xr-x 2 root root 4096 Dec 28 14:34 . drwxr-xr-x 29 root root 4096 Dec 28 14:34 .. -rw-r--r-- 1 root root 220 Sep 1 2015 .bash_logout -rw-r--r-- 1 root root 3771 Sep 1 2015 .bashrc -rw-r--r-- 1 root root 655 Jun 24 2016 .profile -rw-r----- 1 bandit14 bandit13 1679 Dec 28 14:34 sshkey.private bandit14 계정 소유의 sshkey.private 파일이 디렉터리 내 존재하는 것을 확인할 수 있다. 이번 문제는 비밀번호 대신 sshkey.private 를 이용하여 ssh 접속을 하는 방법을 묻는 문제이다. man ssh 를 이용하면 -i 옵션을 확인할 수 있다. -i identity_file Selects a file from which the identity (private key) for public key authentication is read. The default is ~/.ssh/identity for protocol version 1, and ~/.ssh/id_dsa, ~/.ssh/id_ecdsa, ~/.ssh/id_ed25519 and ~/.ssh/id_rsa for protocol version 2. Identity files may also be specified on a per-host basis in the configuration file. It is possible to have multiple -i options (an

힘내라 청춘. 20180103

힘내라 청춘. 20171230

힘내라 청춘. 20171229

vi-editor-new-line

vi-editor-new-line VI 에디터에서 특정문자 개행문자로 수정 VI 에디터에서 "문자 찾아 바꾸기"를 위해 %s 를 많이 사용하게 된다. 개행 문자 제거 혹은 수정 시 변경할 대상으로 \n 를 입력하면 수정이 가능하지만, 특정 문자를 개행문자로 수정하기 위해서 \n 를 사용하면 ^@ 가 삽입되는 것을 확인할 수 있다. 그럴 때는 \n 대신 \r 을 사용하면 개행문자 삽입이 가능하다. Example ; 을 ;[개행 문자] 로 수정 :%s/;/;\r/g

Insecure-programming-abo3

Insecure-programming-abo3 Insecure Programming by example Advanced Buffer Overflow 3 int main ( int argv , char * * argc ) { extern system , puts ; void ( * fn ) ( char * ) = ( void ( * ) ( char * ) ) & system ; char buf [ 256 ] ; fn = ( void ( * ) ( char * ) ) & puts ; strcpy ( buf , argc [ 1 ] ) ; fn ( argc [ 2 ] ) ; exit ( 1 ) ; } 이전 문제들에 비해 복잡성을 가진 것을 확인할 수 있다. 하나씩 살펴보면 extern 키워드를 이용하여 system 함수과 puts 함수를 포인터 변수에 선언하는 내용과 두 번째 인자 값( argc[2] )를 puts 함수의 인자로 설정하여 호출하는 것을 볼 수 있다. objdump 를 이용하여 어셈블리어를 살펴보자. 08048414 <main>: 8048414: 55 push ebp 8048415: 89 e5 mov ebp,esp 8048417: 81 ec 28 01 00 00 sub esp,0x128 804841d: 83 e4 f0 and esp,0xfffffff0 8048420: b8 00 00 00 00 mov eax,0x0 8048425: 29 c4 sub esp,eax 8048427: c7 45 f4 fc 82 04 08 mov DWORD PTR [ebp-12],0x80482fc 804842e: