wargame 12

[시스템 해킹] basic_exploitation_001 문제 풀이

앞선 문제들과는 다르게 쉘 코드가 실행이 안되도록 NX enabled되어 있다. 즉, 쉘 코드 삽입은 불가능하다. 일단, 먼저 다운로드 받은 소스코드부터 보자. 버퍼의 크기는 0x80이다. 그런데 버퍼를 받는 함수를 보니 gets()함수다. gets()함수도 인풋값을 입력하는데 제한이 없기 때문에 동일하게 버퍼 오버플로우 문제가 발생한다. 또한 쉘 코드가 아니라 명령어로 flag를 출력하는 것으로 보이니, 리턴 주소를 read_flag()의 주소로 바꾸면 cat /flag를 통해서 값을 찾을 수 있을 것이다.  이제 gdb로 분석해보자.버퍼의 크기는 128바이트이고 아키텍처가 32비트이니 push ebp의 값은 4바이트 총 132 바이트가 필요하다. 또한 read_flag의 주소도 찾았다.   이제 주어..

wargame/dreamhack 2024.10.31

[시스템 해킹] basic_exploitation_000 문제 풀이

다운로드 받은 문제의 소스코드를 확인해 보자. 앞선 문제와 동일하게 buf와 입력값을 출력하는 scanf의 크기가 서로 다른 것을 확인할 수 있다.  또한 scanf가 null바이트를 만나면 종료한다는 것도 알 수 있다.  그럼 gdb로 확인해보자.앞선 문제에선 아키텍처가 64비트 기반이었기 때문에 push rbp 값이 8바이트였다. 하지만 이번엔 32비트 기반이라고 했으니 push ebp값은 4바이트가 된다. 버퍼는 128바이트이니까 128 + 4 = 132 즉, 132바이트를 채워야 프로그램의 흐름을 바꿀 수 있다.  이전 문제에서 했던 것처럼 동일하게 작성하면아래가 최종 코드다.2, 3번째 줄로 buf의 주소를 서버로부터 받아오자.  쉘 코드의 바이트를 26바이트로 설정하자.(scanf가 null값..

wargame/dreamhack 2024.10.31

[시스템 해킹] Return Address Overwrite 문제 풀이

다운로드 받은 문제파일에서 rao.c의 코드를 vi 명령어로 확인해 보자.여기서 주목해서 봐야 할 부분은 buf 부분과 scanf부분이다. 버퍼는 [0x28]만큼 제한하고 있지만 인풋값을 받아서 출력하는 scanf함수는 버퍼의 양만큼 따로 제한하지 않았다. 여기서 버퍼 오버플로우가 가능하다는 점을 파악할 수 있다. 또한 get_shell로 쉘 코드를 실행시킬 수 있다는 점까지 확인 가능하다 실제로 코드를 실행하고 입력값을 넣은 결과 버퍼의 크기만큼 벗어난 값을 넣어준다면 이렇게  에러가 발생하게 된다. 즉, flag를 얻기 위해선 버퍼오버플로우를 이용하여 에러메시지가 발생하는 것을 get_shell함수가 실행하는 것으로 바꿔야 한다. 다시 말해, 리턴값의 주소를 get_shell의 주소로 바꿔줘야 한다...

wargame/dreamhack 2024.10.31

[시스템해킹]shell_basic 문제 풀이

Shell_basic-문제-원격 서버에 /home/shell_basic/flag_name_is_loooooong경로에 flag파일이 있다. 플래그 값을 구해보자.단, main 함수가 아닌 다른 함수들은 execve, execveat 시스템콜 사용을 못하도록 하며 풀이와 상관없다.우선 서버에 접속해 보자.서버에 접속해 보니 shellcode : 라고 쉘 코드를 입력하라는 텍스트가 뜬다. 그럼 원하는 경로에 있는 파일을 출력하는 쉘코드를 짠 다음 저곳에 보내면 flag가 출력될 거 같다. 쉘코드는 pwntools를 활용해서 만들면 쉽게 풀린다.(orw코드로 풀려했으나 어려워서 패스...)우선 원하는 flag가 원격에 있는 서버에 있으니 remote함수로 접속하는 코드를 만들자.그리고 그 서버가 64비트 기반..

wargame/dreamhack 2024.09.26

Bandit31 ~ Bandit34 문제 풀이

Bandit31 → Bandit32-문제-앞에서 풀어봤던 문제들과 동일한 방식으로 git clone을 한 뒤에 패스워드를 입력하자. 풀이방법 : 그냥 열심히 찾아보자. 이번 문제도 앞에서 했던 문제들과 초반은 동일하기에 생략하겠다.README.md 파일을 읽으면 이런 메시지가 출력이 된다.원격 레포지토리에 파일 하나를 push하라는 내용이다.현재 branch는 master니까 branch를 바꿀 필요는 없고 key.txt파일을 만들어서 그 안에 May I come in?을 입력하고 push를 하면 된다.이렇게 key.txt파일을 생성했다. 이제 push를 해주자. 어떻게 push를 할까? git 저장소에 자료를 추가 및 업로드 하기 위해서는, 일반적으로 add, commit, push의 순서를 따른다. ..

wargame/bandit 2024.07.03

Bandit26 ~ Bandit31 문제 풀이

Bandit26 → Bandit27-문제-bandit27 패스워드를 찾아보자 풀이방법 : 그냥 열심히 찾아보자. 리스트 정보를 봤더니 어디서 많이 봤던 형태의 파일이 하나 보인다. 역시나 bandit19에서 했었던 setduid binary이다.이 파일은  특정 사용자의 권한으로 실행될 수 있도록 설정된 파일이었다. 그럼 한번 실행해보자.이처럼 동작 방법을 알려준다.사용 방법 그대로 입력해 보니 이 파일은 bandit27의 권한으로 실행한다는 것을 확인했다. 그럼 이 것을 이용해서 bandit27의 패스워드를 얻으면 해결된다.    Bandit27 → Bandit28-문제-bandit27-git을 clone 하고 다음 단계의 패스워드를 찾자. bandit27-git의 패스워드는 bandit27의 패스워드..

wargame/bandit 2024.07.03

Bandit21 ~ Bandit26 문제 풀이

Bandit21 → Bandit22-문제-cron이라는 프로그램이 규칙적인 간격으로 자동으로 실행 중이고 시간 기반 직업 스케줄러이다. /etc/cron.d/를 확인해서 어떤 명령어가 실행 중인지 확인하자. 풀이방법 : /etc/cron.d을 확인해보자. 문제에서 말한 경로로 들어가니 여러 개가 나온다.bandit22 패스워드가 필요하기 때문에 저걸 실행해 보자.그랬더니 이렇게 두 개의 줄이 출력된다.첫 번째는 bandit22라는 사용자가 시스템이 재부팅될 때마다 /usr/bin/cronjob_bandit22.sh를 /dev/null로 보낸다는 뜻이다.두 번째는 bandit22라는 사용자가 매분 /usr/bin/cronjob_bandit22.sh를 /dev/null로 보낸다는 뜻이다. 이 두 개의 줄이 ..

wargame/bandit 2024.07.03

Bandit16 ~ Bandit21 문제 풀이

Bandit16 → Bandit17-문제-다음 단계로 가는 패스워드는 현제 단계의 패스워드를 이용해서 localhost의 31000~32000포트 사이에 전송하면 얻을 수 있다. 먼저 서버가 동작하고 있는 포트를 찾아야 한다. 그리고 그중에서 SSL을 사용하는 서버를 찾아야 한다. 오직 하나의 서버만이 다음 단계로 가는 패스워드를 갖고 있고 다른 서버들은 내가 보낸 메시지를 다시 보낸다. 풀이방법 : 31000~32000 포트사이에서 동작중인 SSL 서버를 찾고 패스워드를 보내자. 자 우선 bandit16번의 패스워드부터 파악하자.이 패스워드를 바탕으로 현재 오픈중인 서버에 넣어줄 것이다. 이제 오픈중인 서버를 찾아야 하는데 어떻게 찾을 수 있을까?nmap을 사용하여 현재 동작중인 서버의 포트번호를 찾을..

wargame/bandit 2024.06.28

Bandit11 ~ Bandit16 문제 풀이

Bandit11 → Bandit12-문제-다음 단계로 가는 패스워드는 data.txt파일 안에 저장되어 있고, 그 안에 저장된 내용들은 소문자와 대문자 알파벳 모두 13번 회전되어 있다. 풀이방법 : 13번 회전되었다는 의미를 파악할것. 알파벳이 13번 회전되었다는 것은 ROT13 암호화 방식이다. ROT13은 rotate by 13 places의 줄임말로 단순한 암호화 기법이고, 알파벳 문자들을 13자리씩 회전시키는 방법이다.  예를 들어, 'A'는 13자리 뒤의 문자 'N'으로 변환되고 소문자도 마찬가지로, 'a'는 'n'으로 변환된다.  여기서 우리는 치환을 생각할 수 있다.  치환을 하기 위한 명령어 tr를 사용하면 쉽게 풀릴 것이다.A-Z를 N-M으로 바꾸고 a-z를 n-m으로 치환시키자. A-..

wargame/bandit 2024.06.26

Bandit6 ~ Bandit11 문제 풀이

Bandit6 → Bandit7-문제-다음 단계로 가는 패스워드는 아래조건에 해당하는 어딘가에 있다. 파일의 유저가 bandit7, 그룹이 bandit6, 사이즈는 33 bytes 풀이방법 : user bandit7, group bandit6, 사이즈는 33byte인 파일을 찾자.fine / -user bandit7 -group bandit6 -size 33c 명령어를 사용했더니  permission denied가 엄청 많이 뜬다...Permission denied가 뭐지? Permission denied 메시지는 파일이나 디렉토리에 대한 접근 권한이 없는 경우에 발생하는 표준 에러 메시지이다.  표준 입력 (stdin): 파일 디스크립터 번호 0표준 출력 (stdout): 파일 디스크립터 번호 1표준 ..

wargame/bandit 2024.06.24