Web

    Webhacking - challenge(old) 38번

    Webhacking - challenge(old) 38번

    문제를 들어가면 LOG INJECTION이라는 문구와 함께 로그인 버튼이 있다. INJECTION 삽입 문제인 것 같은데, 아직 감이 오지 않아 코드를 먼저 확인해 보았다. admin.php 파일을 확인해 봐야 한다. 로그뷰를 확인할 수 있다. admin을 입력해보고 login을 해보니 you are not admin이라는 문구와 함께 로그인이 안되는 것을 확인 할 수 있다. 인젝션을 해보고 나서 로그뷰를 확인해보니 값이 추가되었다. 이 문제를 해결하기 위해서는 CRLF Injection에 대해 알아야한다. https://www.hahwul.com/cullinan/crlf-injection/ CRLF Injection 🔍 Introduction CRLF Injection은 Carriage Return L..

    Webhacking - challenge(old) 23번

    Webhacking - challenge(old) 23번

    문제 23번이다. 들어가면 우리가 풀어야할 미션이 뭔지 알려준다. 해당 스크립트 구문을 삽입하여 제출하면 되는 것 같다. 문장에서 어딘가 필터링이 걸리는 상황인 것 같은데, 값을 하나하나 넣어 확인해보았다. 우선 해당 문구를 넣어봤더니 no hack이라고 뜬다. 주소를 살펴보면 , alert, script 등은 필터링 되지 않았지만 ( ) 와 ; 가 필터링 된 것을 확인할 수 있다. 현재 문자열을 2개 이상 연결하면 필터링이 되는 상황으로, get 방식으로 code 변수에 값을 넣어 서버에 전달이 가능하게 하기 위해 null바이트 %00 를 전달해야한다. a%00l%00e%00r%00t(1); 해당 값을 주소에 입력해주었더니 문제를 해결하였다.

    Webhacking - challenge(old) 55번

    Webhacking - challenge(old) 55번

    55번을 들어가니 초록색에 빨간 눈을 가진 젤리가 보인다. 시간이 좀 지나니 게임 오버라는 알림창이 뜬다. rank를 들어가봤다. rank가 쭈르륵 뜬 아래를 보면 query문이 있다. 3번째 컬럼에 flag 값이 담겨있는 것을 확인햇으니, flag가 담긴 컬럼명을 얻기 위해 limit 절과 procedure analyse() 함수를 사용해야한다. rank.php?score=1%20limit%202,1%20procedure%20analyse() 컬럼명은 p4ssw0rd_1123481321이다. score의 값을 1과 2로 한번씩 넣어 결과를 비교해 보며 , if(true,2,1)을 통해 확인해보았다. 그 다음에 코드를 통해 password의 길이와 전체 password를 알아보았다. (코드 출처 : ht..

    Webhacking - challenge(old) 2번

    Webhacking - challenge(old) 2번

    웹해킹 challenge_old 2번 문제를 풀어보았다. 특별한 정보가 없어 소스코드를 확인하였다. 해당 주석문을 통해 단서를 얻을 수 있다. 첫번 째 주석문은 시간을 의미한다. 두번째 주석문은 admin.php가 존재함을 알려준다. admin.php로 이동해보니 비밀번호를 입력하는 창이 나오는데, SQL 문제라고 생각되어 'or 1=1--으로 값을 대입해봤지만 wrong password라고 나타났다. 일단 비밀번호에 대한 정보가 없기 때문에 시간 주석을 활용해봐야한다. 시간은 현재의 시간 값을 가리키고 있지만, 이를 해봄으로써 Blind SQL Injection이 적용될 수 있다고 생각 할 수 있다. 우선 DB내의 테이블 개수를 확인해야하기때문에 COUNT를 사용하였다. (select count(tab..

    Webhacking - challenge(old) 27번

    Webhacking - challenge(old) 27번

    27번을 눌러 들어가보면 깔끔하게 되어있다. 바로 view-source를 눌러보았다. 해당 소스코드에서 php 부분만 살펴보았다. 특정 문자열들은 필터링 되어 있으며, 쿼리를 보낼 때 id가 guest로 고정되어 있다. 하지만 조건문을 확인하였을때, id가 admin일 경우만, 문제 해결이 된다고 한다. 각 유저 아이디의 no값을 알아내봤다. 각각 1과 2를 제출하였을 때, no = 1일 경우, guest인 것으로 확인 되었고, no = 2일 경우, query error 메세지가 보인다. no = 2가 admin 값의 no 값임을 예상해볼 수 있다. select id from challenge27_table where id='guest' and no=(0) or no = 2)")) or die("quer..

    Webhacking - challenge(old) 18번

    Webhacking - challenge(old) 18번

    웹해킹 challenge(old) 18번 문제이다. 클릭해서 들어가면 SQL INJECTION 문제임을 확인 가능하다. 아래 view-source를 누르면 소스 코드 확인이 가능하다. 후반부에 php 코드가 있고, 해당 부분을 살펴봐야 할 것 같다. preg_match 함수에 대해 알고 넘어가야한다. preg_match는 정규식 표현을 작성하는 함수로, 매칭되는 값을 찾게 되면 그 시점에서 검색이 종료된다. 첫번째 인수를 통해 정규식 표현을 작성하고, 두 번째 인수를 토애 검색 대상 문자열을, 세 번째 인수를 통해 배열 변수를 반환하고 패턴 매치에서 매칭된 값을 배열로 저장한다. 1 이라는 값을 입력해보니 hi guest라고 나타난다. no 값이 1 이면 guest 임을 알 수 있다. select id ..