ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Webhacking.kr] 8번 풀이
    Wargame/webhacking.kr (old) 2019. 3. 2. 18:56


    index.phps로 접근해 소스 코드를 보았다.



    getenv()

    환경 변수의 값을 가져오는 함수


    trim()

    맨 앞과 맨 뒤의 여백 제거


    strtolower()

    문자열 소문자로 변환


    소스를 해석해보면, \$agent는 나의 접속 환경 값, \$ip는 나의 IP주소 값으로 초기화한다.

    str_replace()를 이용하여 .과 /의 값을 _로 대체한 후,

    union 등의 필터링된 문자열을 포함하는지 검사한다.


    \$_SERVER[HTTP_USER_AGENT] 값도 str_replace()를 이용하여 '(싱글 쿼터), \" 를 공백으로 대체하고,

    이 값을 이용하여 쿼리를 검색한다.

    [$_SERVER 변수 값 정리] https://intro0517.tistory.com/111


    쿼리를 검색한 결과 값이 존재하면 'hi \$ck[0]'을 페이지에 출력하고

    쿼리 검색 결과 값이 admin이면 문제가 풀린다.

    쿼리 검색한 결과 값이 존재하지 않는 경우에는 insert문을 이용하여 데이터 베이스에 값을 삽입한다.


    우선 페이지에 'hi \$ck[0]'을 출력해보기로 하였다.

    나의 User_Agent 값은 변경되지 않았기때문에 새로고침(F5)하면 페이지에 출력될 줄 알았으나,

    숫자만 증가하고 출력되지 않았다.


    fiddler를 사용하여 User-Agent 값을 변경해보자..!

    (이때, User-Agent 값에 필터링 되는 문자열을 넣지 않도록 주의한다.)



    agent : test로 데이터 베이스에 새로운 값이 삽입되었을 것이다.

    확인을 위해 다시 User-Agent 값은 test로 request 하였다.



    'hi guest' 가 페이지에 출력되었다.



    insert 구문을 자세히 보니 id 값을 guest로 설정해준다. ck[0]은 id 값이다.

    id 값을 admin으로 설정해 데이터 베이스에 삽입한다면, admin으로 접속이 가능할 것이다.


    또한, insert구문에서 value가 아닌 values를 사용하여 데이터를 삽입한다..!

    values를 사용하면 ,(콤마)를 이용하여 여러 개의 데이터를 한 번에 삽입할 수 있다.



    MySQL을 이용하여 테스트하였더니, 한 번에 두개의 데이터가 삽입되는 것을 확인할 수 있었다.

    이를 이용하여 id 값이 admin인 데이터를 삽입해보기로 하였다.


    User-Agent의 값을 쿼리 구문에 맞게 변경해보았다.


    insert into lv0(agent, ip, id) values('kk', '11', 'admin'),('b', '$ip', 'guest')



    agent : kk, ip : 11, id : admin의 데이터와, agent : b, ip : 내 IP, id : guest의 데이터가 삽입되었을 것이다.

    다시 User_Agent : kk로 변경하여 request하면 admin으로 접속이 될 것이다.



    예상대로 User-Agent의 값을 kk로 변경해주었더니,

    id의 값이 admin이 되어 문제가 풀렸다.



    'Wargame > webhacking.kr (old)' 카테고리의 다른 글

    [Webhacking.kr] 10번 풀이  (0) 2019.03.03
    [Webhacking.kr] 9번 풀이  (0) 2019.03.02
    [Webhacking.kr] 6번 풀이  (0) 2019.03.02
    [Webhacking.kr] 5번 풀이  (0) 2019.03.02
    [Webhacking.kr] 4번 풀이  (0) 2019.03.02

    댓글

@Jo Grini's Blog