본문 바로가기

전체 글202

[ctf-d.com] DefCoN#21 #1 문제이다. 문제에서는 round1.pcap를 제공하고 있고, 와이어샤크를 통해 열어본다. 여기서 사용하는 툴인 와이어샤크는 자유 및 오픈 소스 패킷 분석 프로그램이다. 패킷을 확인해보자. 17번 패킷을 보면 IRC 프로토콜로 통신한 것을 볼 수 있다. IRC 프로토콜이란, 일련의 규칙과 약속이 관련되어 있는 채팅 시스템으로, 클라이언트/서버 구조의 소프트웨어이다. IRC 프로토콜은 TCP를 사용하며, 대개 6637번 포트를 사용한다. 채팅 데이터가 기록되었을 확률이 높다. [Analyze] - [Follow] - [TCP Stream] 에서 찾을 수 있다. Betty와 Greg의 대화를 볼 수 있었다. 아래 문자열은 16진수로 변환되어 있다. 특수문자를 사용한 점으로 보아 HTML 인코딩 방식을 사용했다.. 2021. 6. 27.
[Pwnable.kr] Toddler's Bottle_cmd2 문제를 보면 cmd2의 비밀번호가 cmd1의 플래그인 것을 알 수 있다. 즉, 1을 풀어야 2를 알 수 있다. 접속한 후, ls -l 명령어를 통해 확인해보면 다음 사진과 같은 파일이 나온다. cmd2.c 파일을 읽어보면 다음과 같은 소스코드가 있다. cmd1보다 훨씬 더 많은 필터가 걸려 있고, 환경변수를 이용한 필터 우회를 사용할 수 없도록 delete_env라는 환경변수를 없애는 함수가 있다. 따라서 이번에는 1과 다른 방식을 사용해서 문제를 풀어야 한다. command 함수를 사용한 우회 방법이 있다. command의 옵션 중 우리가 사용할 것은 -p 옵션이다. 이 옵션은 PATH를 현재 프로그램의 PATH를 기본값으로 사용하는 옵션이다. 이 옵션을 사용하면 cat 함수의 경로를 입력할 필요 없이.. 2021. 5. 19.
[Pwnable.kr] Toddler's Bottle_cmd1 문제는 cmd1 리눅스의 환경변수를 이용하는 것이었다. 접속한 후 ls 명령어를 통해 디렉토리 목록을 확인한다. 위의 사진과 같이 cmd1, cmd1.c, flag 파일이 있다. cat 명령어를 통해 읽어보면 다음과 같다. 사용자에게 입력받은 문자열을 시스템 함수에 넣고 실행하는 코드이다. 이때 strstr() 함수를 통해 몇가지 문자열이 필터링 된다. 필터링 되는 문자열은 flag, sh, tmp이다. strstr(string1, string2) string2가 string1에 나타는지를 검사하는 함수. 아니면 NULL. string2에서 끝나는 널문다를 무시한다. 이를 우회하기 위해서 문제의 힌트에 나와있듯이 리눅스의 환경변수를 이용한다. [ 리눅스의 환경변수 ] : 윈도우와 마찬가지로 리눅스에도 환.. 2021. 5. 19.
[Pwnable.kr] Toddler's Bottle_lotto 문제에 처음 들어가면 보이는 부분이다. ssh를 이용하여 접속한다. ssh를 이용하여 접속한다. 디렉토리에 어떤 파일이 있는지 확인한다. 우리가 공격해야 할 대상인 lotto와 lotto elf 파일을 만들었을 소스로 예상되는 lotto.c와 flag가 존재한다. 현재 flag는 id(lotto)의 권한으로 볼 수 없고, lotto elf 파일은 lotto_pwn의 권한으로 setuid가 설정되어있다. lotto elf를 실행함으로써, setuid를 얻고 flag를 볼 수 있을 것으로 예상된다. lotto.c 파일을 분석하자. main 함수는 사용자로부터 메뉴를 입력받아 play 함수, helo 함수, 종료. exception handlding을 진행한다. help(), 종료, exception hand.. 2021. 5. 11.
[Pwnable.kr] Toddler's Bottle_blackjack 문제를 들어가면 뜨는 창이다. 코드창에 들어갔다가 너무 길어서 서버부터 접속하는 것으로 하였다. nc 명령어를 통해 접속한다. 1을 누르면 게임 시작, 2는 도움말, 3은 게임 종료이다. 현재 잔고는 $500인데 넘는 금액을 입력했더니 아래 나오는 말이 반복된다. 입력한 금액과는 다르게 출력이 되었고 플래그가 반복된다. 코드를 살펴보니 위와 같은 함수가 보였다. 베팅에 관여하는 함수인데, if(bet>cash)에서 if문이 반복되지 않고 한 번만 쓰이는 것이 취약점인 것을 알 수 있다. 입력한 베팅금과 잔고 비교를 한 번밖에 안 하는게 취약점인 것이다. 잘못된 베팅값을 통해 다시 베팅 값을 받을 때 예외처리를 하지 않는다. 따라서, 두 번째 입력을 받을 때 임의의 betting 값 설정이 가능하다. fl.. 2021. 5. 11.
[침탐] 9장, 스노트 기본 문법 스노트를 장착한 주분투 운영체제에 에제와 같이 TCP 덤프라는 도구를 설치한다. TCP 덤프는 커맨드 라인에서 사용할 수 있는 와이어샤크와 같은 도구이다. ICMP 요청을 보낸다. tcpdump -e icmp[icmptype] == 0 -v 명령어를 입력하면 주분투 운영 체제에서 백박스 운영체제로 ICMP 응답을 보내는 패킷만 출력해볼 수 있다. 그런데 TCP 덤프가 아닌 스노트를 이용하면 상대방으로부터 ICMP 요청이 들어오는 상황을 보다 정교하게 탐지할 수 있다. 이것은 마치 바이러스 백신에서 악성 코드가 들어오면 서명 방식에 기반해 탐지하는 이치와 같다. /etc/snort/rules 위치에 local.rules라는 탐지 규칙을 생성한다. 먼저 alert 부분은 스노트의 동작을 명시한 부분이다. 스.. 2021. 5. 6.