본문 바로가기

전체 글81

abex' crackme #1 ※ 공부 기록용이라 설명이 친절하지 않음 OllyDbg로 열어본다. 00401000~0040100E PUSH 4번 후, USER32를 호출한다. 처음 봤던 메시지 박스의 내용이 적혀있다. [PUSH], [CALL] 00401013~00401018 PUSH 1번 후, KERNEL32를 호출한다. 두 번째로 봤던 메시지 박스 내용이 보인다. [PUSH], [CALL] 0040101D~0040101E ESI에 1을 더하고 EAX에 1을 뺀다. [INC], [DEC] 0040101F 00401021로 이동한다. [JMP] 00401021~00401023 ESI에 1을 두 번 더하고, EAX에 1을 뺀다. [INC], [DEC] 00401024 EAX와 ESI를 비교한다. [CMP] 00401026 조건문이 같으.. 2021. 1. 18.
FTZ 타임아웃 에러 해결법 평소에 무선랜으로 사용할 때는 잘 됐는데, 공유기 유선랜으로 사용하니 네트워크 에러가 나면서 타임아웃됐다며 접속이 안 되는 에러가 발생했다. VMware Red Hat Linux 우클릭 > Settings > Hardware > Network Adapter > Custom으로 설정해주고 재실행한 후, ifconfig로 변동된 아이피를 확인하여 재접속하면 된다. 잘 된다. 이것 때문에 계속 헤맨 거 생각하면 스트레스 ^_ㅠ 2021. 1. 8.
Blind SQL Injection Blind SQL Injection을 정리하기 이전에, 알고가면 좋은 개념과 함수에 대해 먼저 정리한다. 이 공격기법은 일반적으로 ' or 1=1-- 와 같은 공격패턴을 사용하는 인증우회(Auth Bypass)기법의 상위 단계라고 할 수 있다. 1) substr substr 함수는 문자열과 자를 범위를 파라미터로 받아서 해당 부분의 문자열을 리턴해준다. 예를 들어, USERS 테이블에 id와 pw컬럼이 존재하고 id는 jungwoo, pw는 nct127 인 행이 존재할 때 substr((SELECT pw FROM USERS WHERE id='jungwoo'),2,2) 쿼리문을 DB에 보내게 되면 id가 jungwoo인 유저의 pw 컬럼을 조회하라는 명령으로 nct127이 뽑히게 된다. 그 후 ‘nct12.. 2020. 12. 30.
Los - orc orc를 풀기 전, 알아두면 좋은 개념 및 함수 Blind SQL Injection Blind SQL Injection을 정리하기 이전에, 알고가면 좋은 개념과 함수에 대해 먼저 정리한다. 이 공격기법은 일반적으로 ' or 1=1-- 와 같은 공격패턴을 사용하는 인증우회(Auth Bypass)기법의 상위 단계라고 lyk00331.tistory.com pw가 참이어도, id가 admin인 계정과 비교하여 일치할 때 Flag가 나오기 때문에 정확한 pw를 알아야 한다. pw길이 구하기 이 문제는 db에 존재하는 admin 계정의 pw와 우리가 입력할 pw가 일치해야 풀리도록 만들어졌다. 그래서 pw 길이를 일단 알아야 하고, 그 후에 substring 함수로 정확한 pw를 구할 것이다. 주어진 쿼리에서 우리.. 2020. 12. 29.
인터넷은 어떻게 작동되는가? 단순한 네트워크 두 개의 컴퓨터가 통신할 때, 우리는 다른 컴퓨터와 물리적 혹은 무선으로 연결되어야 한다. 그러나 네트워크는 두 대의 컴퓨터로 제한되지 않고, 원하는 만큼의 컴퓨터와 연결할 수 있다. 위 그림과 같은 방식으로 연결할 경우 매우 많은 플러그와 케이블을 필요로 한다. 이 문제를 해결하기 위해 네트워크의 각 컴퓨터는 '라우터'에 연결된다. '라우터'는 주어진 컴퓨터에서 보낸 메시지가 올바른 대상 컴퓨터에 도착하는지 확인한다. 컴퓨터 A가 컴퓨터 B에게 메시지를 보내기 위해서는 라우터로 메시지를 보내고, 라우터에서 해당 메시지를 컴퓨터 C로 전달되지 않고 B로 전달되도록 해야 한다. 라우터를 시스템에 추가하면 다음과 같은 최소한의 케이블만 사용할 수 있다. 각 컴퓨터마다 단일 플러그와 n개의 플.. 2020. 12. 29.
Los - goblin id가 admin이면 풀린다. 그러나 id에는 guest 값이 고정되어있고, no 값만 받게끔 되어있다. id를 admin으로 만들기 no에는 정수형 값을 받는다. 아무런 값(숫자)을 넣은 후, id 값을 이어서 넣어줄 수 있다. 새로 만들어준 id 값은 파라미터로 보면 no 영역에 입력되기 때문에, ', ",` 등 따옴표가 필터링되어있어서(6번째 줄) 문자열로 인식시킬 수 없다. 우회를 위해 주석처리 #을 %23으로 나타낸 것처럼, '도 %27로 입력해보았으나, 마찬가지로 필터링되어있어서 불가능했다. 값을 넘기기 위해서는 해당 값이 문자열이라는 것을 알릴 수 있는 다른 방법이 필요하다. 시행착오 1 더보기 처음에는 concat() 함수를 사용해서 값을 전달해줄 수 있나 해봤지만, 안 됐다. 시행착오 2.. 2020. 12. 5.
Los - cobolt 쿼리문이 실행되었을 때, id가 admin인 값이 존재한다면 문제가 풀린다는 것을 알 수 있다. id를 admin으로 만들기 이 문제는 pw에 md5로 암호화되어있기 때문에, 앞서 풀었던 gremlin과 같이 pw 입력 전에 주석처리로 pw를 무력화 해주어야 한다. URL은 영어나 숫자 등 몇몇 문자를 제외하고는 16진수 값으로 인코딩하기 때문에, #을 입력하면 인식하지 못한다. 따라서 URL 인코딩 코드 값인 %23을 입력하면 주석처리가 가능해진다. 쿼리 id=admin' 를 입력한 후, %23(#)로 주석처리를 해서 pw를 무력화했다. DB가 서버에 변조된 쿼리 결과를 전송하고, 변조된 페이지 내에 DB 정보를 전송하여 COBOLT Clear! 라는 문장이 나타나며 문제가 풀린다. 2020. 12. 4.
Los - gremlin php 코드를 보면, 쿼리문이 실행되었을 때, id의 값이 존재한다면 문제가 풀린다는 것을 알 수 있다. 이 문제를 푸는 방법은 크게 id 값을 변조하는 방법과, pw 값을 변조하는 방법으로 나뉜다. 1. id 값을 참으로 만들어 해결 이 방법은 단순히 참으로만 만드는 것이 아닌, pw 입력 전에 주석처리시켜 pw를 무력화 해주는 것이 포인트이다. 이때, URL은 영어나 숫자 등 몇몇 문자를 제외하고는 16진수 값으로 인코딩하기 때문에, #을 입력하면 인식하지 못한다. 따라서 URL 인코딩 코드 값인 %23을 넣어줌으로써 주석처리가 가능해진다. or 1=1 구문을 넣어 id를 참으로 만든 후, %23을 입력해서 pw를 무력화시켜줬다. DB가 서버에 변조된 쿼리 결과를 전송하고, 변조된 페이지 내에 DB .. 2020. 7. 15.
SQL Injection SQL Injection 공격이란? : 파라미터에 구문을 넣어 쿼리가 동작되는 공격기법 파라미터란? : URL에서 동적으로 결과를 생성하는 어플리케이션에 전달하는 값 웹 어플리케이션의 뒷단에 있는 DB에 질의(쿼리)하는 과정 사이에 일반적인 값 외에 내용을 변조하는 악의적인 의도를 갖는 구문을 함께 삽입하여 공격자가 원하는 SQL 쿼리문을 실행한다. 이런 과정을 통해 불법 로그인을 하거나, DB 데이터를 열람하거나, 시스템 명령을 하는 등등의 비정상적인 DB 접근을 시도하는 것이고, 이것이 대표적인 웹 해킹 기법인 SQL Injection이다. SQL Injection 로그인 인증 우회 정상적인 로그인 인증 과정 클라이언트가 웹 서버에게 다음과 같은 로그인 정보를 제공한다. 서버는 해당 정보가 DB에 존.. 2020. 7. 14.
OverTheWire Bandit Level 11→ Level 12 비밀번호는 data.txt 파일에 모든 소문자(az) 및 대문자(AZ)는 13 개의 위치로 회전한다. Rot13 암호화방식이 사용된다. Level 11에서 비밀번호 얻기 Level 11로 로그인 후(Level 11 로그인 하는 법 보러가기), ls 명령어를 통해 존재하는 파일을 확인한다. data.txt파일을 확인할 수 있다. cat 명령어로 파일을 읽어보니, 위 사진과 같은 문자열이 나타난다. 문제에서 알려준 Rot13은 시저암호(=카이사르 암호)의 일종으로 알파벳을 13글자씩 미뤄서 나타내는 암호화 방식이다. 나는 온라인툴을 사용해 문제를 풀었지만, tr 명령어를 사용해 풀 수 도 있다. tr은 두개의 문자집합을 입력받아 대응되는 문자로 변환하는 명령어다. 예를들어, 소문자를 대문자로 바꾸고 싶다면 .. 2020. 5. 21.
OverTheWire Bandit Level 10 → Level 11 비밀번호는 data.txt 파일에 base64로 인코드 되어있다. Level 10에서 비밀번호 얻기 Level 10로 로그인 후(Level 10 로그인 하는 법 보러가기), ls 명령어를 통해 존재하는 파일을 확인한다. data.txt 파일이 확인되고, cat 명령으로 읽어보니 다음과 같은 암호문이 나타난다. base64 인코딩된 문자열이라고 알려주었기 때문에, base64로 디코딩을 해줘야한다. 하지만 그냥 base64 data.txt를 입력하면 키가 나타나지 않는다. base64만 입력하면 디코딩이 아닌, 인코딩을 해주기 때문이다. base64의 옵션을 확인해보면 -d가 디코딩을 해주는 옵션이라는 것을 알 수 있다. 비밀번호 얻고 로그아웃 Level 11 로그인 터미널에 ssh bandit11@ban.. 2020. 5. 21.
OverTheWire Bandit Level 9 → Level 10 비밀번호는 data.txt 파일에 몇 개의 '='문자로 시작하여 사람이 읽을 수있는 몇 개의 문자열 중 하나로 저장된다. Level 9에서 비밀번호 얻기 Level 9로 로그인 후(Level 9 로그인 하는 법 보러가기), ls 명령어를 통해 존재하는 파일을 확인한다. data.txt 파일이 확인되고, cat 명령으로 파일을 읽으니 위 사진과 같이 읽을 수 없는 내용이 나타난다. 문제에서 '=' 문자로 시작한다고 알려주었으니, grep 명령을 이용하여 비밀번호를 찾는다. 그러나 바이너리 파일이라 비밀번호가 나타나지 않는다. 이때, 사용할 수 있는 명령어가 strings 이다. strings 명령어는 파일에서 출력 가능한 문자열을 보여준다. cat 대신, strings 명령을 사용해서 출력 가능한 문자열을.. 2020. 5. 21.