매일 해킹공부 (42) 썸네일형 리스트형 SQL Injection 정리 - 1 SQL Injection 공격이란? 말 그대로 sql 쿼리문을 주입하는 공격기법이다. (코드 인젝션 중 하나이다.) 사용자의 입력값을 조작하여 데이터베이스를 공격할 수 있다. 동작원리 1. 사용자가 입력한 값을 서버에 전달한다. 2. 서버가 DB에 sql 쿼리문을 보낸다 3. DB에서 조회한 값을 전달한다. 4. 결과를 사용자에게 전달한다. SQL Injection 종류 sql injection을 활용한 공격기법은 여러가지가 있는데 크게 2가지로 나누어 볼 수 있다. 1. 인증 우회 2. 데이터 추출 인증 우회 기법은 계정에 올바른 정보를 입력하지 아니하고 sql 쿼리문을 조작하여 공격하고자 하는 대상의 인증을 획득하는 방법이다. 데이터 추출 기법은 시스템에서 발생하는 에러 메세지 또는 보이지 않더라도 .. Bandit Level 19 → Level 20 풀이 매일 해킹공부 12일차! level20 문제를 읽어보면 setuid를 이용해서 비밀번호를 알아낼 수 있는다고 한다. 그래서 홈디렉토리에 어떤 파일이 있는지 확인을 해봤다. 눈에 띄는 파일이 있어 어떤 파일인지 확인해봤다. 실행 가능한 파일이라고 되어있어 실행해보았다. 실행후 뒤에 id 가 bandit20을 의미하는것 같아 cat으로 /etc/bandit_pass/bandit20을 확인하니 비밀번호를 얻을 수 있었다. Bandit Level 18 → Level 19 풀이 매일 해킹공부 11일차 level19 비밀번호는 홈디렉토리에 readme라는 파일에 존재한다고 한다. 그런데... 지난번 문제풀이에서 본것처럼 로그인하면 로그아웃이 된다. 그래서.. 로그아웃 안되는 방법을 찾아야 하는데 ssh 옵션중 t 옵션을 보면 pseudo-tty 할당을 강제로 한다. 위와 같이 접속시도를 하면 커맨드창이 뜨는것을 확인할 수 있다. 이곳에서 readme 파일을 확인하면 비밀번호를 획득할 수 있다. Bandit Level 17 → Level 18 풀이 매일 해킹공부 11일차! level17 비밀번호는 new 파일에 있는데 old 파일이랑 비교해서 달라진 부분이 비밀번호라고 한다! 힌트를 보면 diff 라는 명령어가 보인다. 해당 내용을 구글링 해보면 두 파일을 비교할때 사용하는 명령어 이다. 획득한 비밀번호를 가지고 bandit18로 로그인을 하면 다음과 같은 화면이 뜬다. 이문제는 이렇게 마무리 하고 다음 문제를 풀면 된다고 한다. 뭔가 찜찜하지만 일단 19번을 풀러 가본다. Bandit Level 16 → Level 17 풀이 매일 해킹공부 10일차 레벨 16!! 이번에는 포트 범위를 알려주면서 먼저 어떤 포트에서 리슨 중인지 찾아야 한다고 한다. 포트 스캐닝을 위해 nmap 을 활용한다. 열려있는 포트를 openssl로 확인해보면 31790번 포트에 비밀번호를 입력하면 다음과 같은 키값을 준다. 키 값을 따로 저장 후 ssh를 통하여 다음레벨로 접근 후 비밀번호를 알아낸다. openssl / ssh 사용법은 level 14(https://dreamaccomplir.tistory.com/15) level15(https://dreamaccomplir.tistory.com/16)풀이를 참고 하시면 됩니다! Bandit Level 15 → Level 16 풀이 매일 해킹공부 9일차 level 15!! 문제를 보면 ssl 암호화를 사용하여 로컬호스트 30001번으로 현재 레벨의 비밀번호를 입력하면 다음단계 비밀번호를 알수있다고 한다. openssl 을 사용하여 문제를 풀기위해 명령어를 입력하면 다음과 같이 보인다. 문제에서 힌트를 주었기 때문에 s_client를 사용해본다. . . . 하단에 이곳에 bandit15의 비밀번호를 입력하면 다음 레벨의 비밀번호를 획득할 수 있다. Bandit Level 14 → Level 15 풀이 매일 해킹공부 8일차!!! 사실 시간으로 따지면 9일차이지만 아직 자기전이니까.. 8일차 인걸로... 대략적으로 문제를 이해해보자면 다음 레벨로가는 비밀번호는 현재 레벨 로컬호스트의 포트 30000번에 비밀번호를 입력하면 얻을 수 있다고 한다. 여기서 힌트 명령어중 nc라는 명령어를 활용해본다. 다른명령어를 왜 사용하지 않았는지는 구글링을 해보면 알 수 있다. 현재 레벨의 비밀번호를 확인 후 nc [host] [port] 입력후 현재 비밀번호를 입력하면 다음 레벨의 비밀번호를 획득할 수 있다. Bandit Level 13 → Level 14 풀이 매일 해킹공부 7일차! level 13 역시 레벨이 올라갈수록 풀이는 간단해도 공부할 내용이 많아지는것 같다. 개인키를 가지고 ssh 로 접근하여 비밀번호를 알아내야 한다. ssh -i [공개키파일] [접근할계정명]@[접근할서버] -p [포트번호] 로 접근하여 문제에서 알려준 파일을 확인하면 비밀번호를 획득할 수 있다. 이 문제에서 보면 bandit13 이 가지고 있는 공개키 sshkey.private 파일을 가지고 bandit14가 가지고 있는 개인키 authorized_keys 를 복호화 하여 접속을 하는 원리로 작동한다. 보통은 개인키 : ~/.ssh/id_rsa 공개키 : ~/.ssh/id_rsa.pub 형태로 저장이 되지만 경로가 다를경우 ssh의 설정을 변경해줘여 한다고 한다. Bandit Level 12 → Level 13 풀이 매일 해킹공부 6일차 level12 와... 이번건 역대급 귀찮은 문제였다 문제를 보면 data.txt 가 hexdump 되어있고 /tmp 에서 작업이 필요할것으로 보인다. 문제에서 예시를 들어준것 처럼 mkdir로 /tmp 디렉토리 하위에 작업할 디렉토리를 생성한다. 디렉토리 생성후 data.txt 파일을 새로 만들어준 디렉토리로 복사한다. 복사후 해당 디렉토리로 이동한다. data.txt 파일이 hexdump 라는 것에서 힌트를 얻어 xxd 명령어를 사용하여 data 파일을 16진수에서 바이너리로 변경한다. cat 으로 choi 파일을 열어보면 여전히 알아볼 수 없다 file 명령어를 통해 현재 파일이 어떤 파일인지 형태를 확인한다. gzip으로 압축되어있는 파일임을 알 수 있었다. 압축해제 후 다시.. Bandit Level 11 → Level 12 풀이 매일 해킹공부 5일차 level 11 문제에서 얻을 수 있는 것은 소문자 대문자가 13자리씩 밀려났다는 것이다. 즉, 보통 우리는 ABCDEFG 라고 하겠지만 이경우는 NOPQRST 로 진행된다고 보면 된다. tr 명령어를 통해 배열을 바꾼다 대문자 A부터 Z, 소문자 a부터 z 라는 순서를 대문자 N부터 Z, 그 다음 대문자 A부터 M tr 소문자 n부터 z, 그 다음 소문자 a부터 m 순서로 치환. 확인해보면 비밀번호가 보인다 이전 1 2 3 4 5 다음