728x90
반응형

보안 74

OverTheWire [Narnia Level 0]

시스템해킹 워게임인 Narnia Level 0 문제입니다. 버퍼오버플로우가 사용된 문제입니다. 접속 후 홈디렉터리에는 특별한 게 없습니다. 워게임에서는 SetUID를 사용한 권한 상승이 많이 이루어지기 때문에, SetUID가 설정된 파일을 찾아보겠습니다. 소유자가 narnia1이며 SetUID가 설정된 파일을 찾았더니, 이 디렉터리를 발견했습니다. 이곳이 문제파일이 모인 디렉터리같네요. 우리는 narnia0이니, 실행할 수 있는 파일은 narnia0 뿐입니다. narnia0.c는 소스코드로 보이네요. 일단 실행해 보았습니다. val의 값을 0x41414141에서 0xdeadbeef로 바꾸라고 하는 것 같습니다. buf에는 현재 버퍼에 저장된 값을 보여주고 있고 val에는 val의 값을 보여주고 있습니다...

Webhacking.kr [old-06]

Webhacking.kr 사이트의 old-06 문제입니다. 문제 메인페이지 입니다. ID,PW가 기재되어 있고 특별한 건 없어 보입니다. 소스코드를 확인해 봅시다. 소스코드입니다. 위쪽부터 살펴보시면, 쿠키의 "user" 값이 존재하지 않을 경우 ID, PW를 guest, 123qwe로 설정합니다. 그리고 그 값을 base64로 20번 인코딩 한 후 숫자를 특수문자로 치환하여 각각 user, password 쿠키값으로 설정합니다. 아래쪽 소스코드는, 설정된 user, password 쿠키값을 특수문자를 숫자로 치환한 후 base64로 20번 디코딩하여 문제 메인 페이지에 출력합니다. 그리고, 만약 출력된 ID,PW값이 admin, nimda라면 문제가 해결됩니다. 즉, 우리는 admin, nimda 문자..

TryHackMe [Basic Pentesting]

TryHackMe 사이트의 Basic Pentesting 문제입니다. 이전 문제 RootMe와 비슷하게, 공격 대상의 IP만 가지고 시스템 권한까지 획득하는 문제입니다. 개인적으로 RootMe보단 더 어려웠습니다. 이번에 침투할 주소는 10.10.183.14 입니다. nmap을 이용해 어떤 포트와 서비스가 활성화되어있나 확인해 보겠습니다. 몇분정도 걸릴 수 있습니다. 스캔 결과입니다. ssh를 이용하고 있고 웹 서비스도 제공하고 있네요. 또한 139, 445 포트에서는 smb 서비스도 제공하고 있습니다. smb를 공격에 이용할 수도 있을 것 같아요. 일단 웹 사이트부터 접속해 보겠습니다. 웹 사이트는 특별한 게 없네요. 미완성 사이트인 것 같습니다. 그래도 혹시 숨겨진 페이지가 있을 수 있으니, 찾아봅시..

OverTheWire [Leviathan Level 6, 마지막 레벨]

Leviathan Level 6 입니다. 드디어 Leviathan을 전부 클리어 했네요. 이것이 마지막 문제입니다. 역시나 SetUID 비트가 설정된 프로그램이 있습니다. 인자 없이 실행해 보겠습니다. 4자리 숫자 인자가 필요하다고 하네요. 1234를 입력해 보았습니다. Wrong이 출력되었네요. 4자리 숫자로 구성된 패스워드를 찾는 문제 같은데요? 여러번 시도해도 딱히 제한도 없습니다. 이럴 때 딱인 게 있죠. Brute force를 이용해 봅시다. tmp디렉터리에 개인 디렉터리를 만들고, 공격코드를 작성할 파일을 그 안에 만들어 줍시다. 이렇게 작성하고, 저장합니다. 0000부터 9999까지의 인자를 대입하여 프로그램을 반복 실행하는 코드입니다. 그리고 실행이 가능하도록, chmod 명령어로 실행권한..

OverTheWire [Leviathan Level 5]

Leviathan Level 5 입니다. 이번에도 SetUID 비트가 설정된 프로그램이 있네요. 일단 인자 없이 실행해 보겠습니다. /tmp/file.log 를 찾을 수 없다고 나오는데요. 이 프로그램이 실행되기 위해선 저 파일이 필요한 걸까요? 제가 임의로 해당 파일을 만들어 보겠습니다. vi로 파일을 생성하겠습니다. leviathan 문자열을 입력하고 저장했습니다. 다시 프로그램을 실행해 봅시다. leviathan이 그대로 출력되었습니다. 파일의 내용을 그대로 읽어오는 프로그램 이었군요. 음.... /tmp/file.log에 링크를 설정하면 password 파일을 읽을 수 있지 않을까요? 한번 해보겠습니다. ln 명령어를 이용해서, file.log에 leviathan6의 password를 향하는 심볼..

OverTheWire [Leviathan Level 4]

Leviathan Level 4 입니다. 숨겨진 디렉터리 .trash 가 있네요. .trash 디렉터리 안에, bin 이라는 SetUID가 설정된 파일이 있습니다. 이 파일을 이용해서 다음 레벨 password를 획득할 수 있을 것 같습니다. 인자 없이 실행해 보았습니다. 2진수가 나오는데요. .....솔직히 이거 보자마자 감이 와서 리버싱 할 필요도 없이 바로 풀었습니다. 2진수를 아스키코드로 변환했더니 그게 바로 다음 레벨 password였습니다. 하지만 이렇게 끝내면 배우는 게 없으니 간단하게라도 분석을 해보겠습니다. main함수 입니다. 일단 시작하자마자 fopen 함수를 통해 leviathan5의 password 파일을 열고 있습니다. 이후, 아래쪽 fgets 함수로 password값을 꺼내왔습..

OverTheWire [Leviathan Level 3]

Leviathan Level 3 입니다. 저번 레벨과 비슷하게, SetUID가 설정된 실행파일이 있습니다. 소유자는 leviathan4 이니, 이 파일을 잘 이용하면 다음 레벨의 권한을 얻을 수 있을 것 같습니다. 인자 없이 실행시켜 보았습니다. 패스워드를 요구하길래 1234를 입력해 보았습니다만, 틀린 패스워드라고 나오네요. 리버싱을 통해 패스워드가 무엇인지 알아내야 할 것 같습니다. 저는 radare2 이용하겠습니다. radare2로 level3 파일을 실행해주고, aaaa 명령어로 프로그램을 분석했습니다. 이후 afl 명령어로 함수목록을 불러왔습니다. 그런데 main 함수가 보이지 않네요.. 어떤 함수를 먼저 살펴볼까 하다가, main은 아니지만 dbg.main 함수를 찾았습니다. 일단 이 함수부터..

OverTheWire [Natas Level 25]

Natas Level 25 입니다. 어떤 발표문, 선언문? 같은 내용이 있고, 언어를 선택하여 볼 수 있습니다. 독일어, 영어가 가능하네요. 여기서 URL창을 보면 파라미터명이 "lang" 이라는 걸 알 수 있습니다. 소스코드 입니다. 가장 위 setLanguage 함수에서, lang 파라미터를 통해 언어를 선택받고 있습니다. language 디렉터리 밑에서, lang파라미터를 통해 전달받은 파일을 출력하는 것 같은데요. 여기서 safeinclude 함수를 통해 구체적인 필터링을 실시하고 있습니다. strstr 함수를 통해서, "../" 문자열이 있다면 str_replace 함수를 통해 지워버립니다. "natas_webpass" 문자열이 있다면 아예 파일을 불러오지 않습니다. 이렇게 두가지 필터링을 거친..

Hacking/[Web]Natas 2023.05.22

OverTheWire [Natas Level 24]

Natas Level 24 입니다. 저번 레벨과 같이 Password 입력폼이 하나 있군요. 아무 값이나 넣어 봤지만 당연하게도 인증 실패로 Wrong! 문자열을 출력했습니다. 소스코드를 봐봅시다. 소스코드입니다. 이번에도 짧네요. 아주 좋습니다. 저번 레벨 코드보다 더 간단한데요? 그냥 맞는 패스워드를 입력하면 됩니다. 단, 조건문이 strcmp함수로 이루어져 있군요. strcmp 함수는 문자열을 비교하는 함수입니다. 문자열이 같을 경우 -> 0 다를 경우 -> 0이 아닌 정수 ( 상황에 따라서 음수, 양수 모두 출력함 ) 쉽게 말해서, 같으면 FALSE 다르면 TRUE 를 출력합니다. 또한, 대소문자를 구별합니다. 위 소스코드엔 !strcmp 이렇게 !(NOT) 연산이 들어가 있으니, 올바른 패스워드..

Hacking/[Web]Natas 2023.04.11

OverTheWire [Natas Level 23]

Natas Level 23 입니다. 문제입니다. Password 입력 폼이 있네요. 아무거나 입력해봅시다. natas23을 입력해 보겠습니다. Wrong! 틀렸다고 하네요. 위 URL 창을 통해 입력 폼 이름은 passwd 라는 것을 알 수 있습니다. 소스코드를 확인해 봅시다. 오랜만에 굉장히 간단한 코드네요! 눈이 아주 편합니다. password 출력 조건도 굉장히 간단한데요. 딱 2가지입니다. 1. 입력값에 "iloveyou"문자열이 포함되어 있어야 한다. ( 띄어쓰기처럼 보이는데 아닙니다 ) 2. 입력값의 크기가 10보다 커야 한다. 그런데 좀 이상합니다. 입력값은 iloveyou 문자열이 포함되어 있는데 10보다 커야 한다니? 문자열과 숫자를 비교하고 있군요. 이게 가능한 건가요? 혹시 입력값의 ..

Hacking/[Web]Natas 2023.04.11
728x90
반응형