Wargame
-
<Lord of SQL Injection> goblinWargame/Lord of SQL Injection 2021. 11. 11. 00:14
goblin 이 문제는 작은따옴표, 큰 따옴표를 필터링하여 사용할 수 없다. 그리고 'id'의 값이 'admin'이면 문제가 풀리는 것 같다. 우선, 'no'의 값으로 1을 주면 guest로 로그인이 되었다. 이번엔 'no'의 값으로 0을 주면 아무것도 출력하지 않았다. 'no'의 값이 1이면 guest로 로그인하기 때문에 'no'의 값에 0을 줘야 할 것 같다. 이제 or문을 사용하여 앞의 구문은 거짓으로 뒤의 구문은 참으로 하여 우회하면 될 것 같다. 'id'의 값이 'admin'이 되어야 하는데, 이 문제에서는 따옴표를 필터링하기 때문에 사용할 수 없다. 그렇다고 따옴표 없이 admin만 전달하면 문자열 인식을 하지 못한다. 이렇게 싱글쿼터(')가 막혀서 문자열을 입력할 수 없을 때는 0b, 0x를..
-
<Webhacking.kr> old-03Wargame/Webhacking.kr 2021. 11. 9. 16:52
old-03 하나의 로직 퍼즐 문제가 나온다. 숫자는 색칠이 돼있는 사각형의 개수를 뜻한다. 이 로직 퍼즐을 풀면 위와 같은 모양이 된다. 'solved' 버튼을 누르면 로그에 이름을 기입하라고 한다. 아무 이름을 기입해 보겠다. name, answer, ip가 출력된다. 다른 값(admin, 특수문자 등)을 입력해도 name만 다를 뿐, answer와 ip는 항상 같은 값을 출력한다. SQL Injection 구문을 넣어봤다. 여전히 answer와 ip값은 동일했다. 이렇게 푸는 게 아닌듯하다. 페이지 소스를 살펴보면 POST 방식으로 answer와 id가 전달된다. POST 방식은 BODY에 데이터를 넣어서 보낸다. Burp Suite로 살펴보면 POST 방식으로 "answer=101010000001..
-
<Webhacking.kr> old-02Wargame/Webhacking.kr 2021. 11. 8. 17:29
old-02 제한 구역이라 한다. 그리고 내 IP가 로깅 중이라 한다.(로깅이란 로그를 기록하는 행위) 아무런 내용이 없기에 페이지 소스 코드를 먼저 살펴본다. 날짜와 시간은 로그인한 시점을 뜻하는 것 같다. 그리고 뒤의 경고문을 살펴보면 admin.php에 접근하면 될 것 같다. 비밀번호를 입력하는 창이 나온다. 주소 창에 javascript:alert(document.cookie)를 통해 쿠키 값을 살펴본다. 쿠키 값에 time이 있는 것을 확인할 수 있다. time의 값을 변경해 본다.(크롬의 확장 프로그램인 'EditThisCookie'를 사용하면 편하다) 주석에 적힌 날짜와 시간이 변했다. 이번엔 time의 값을 2로 바꿔 봤다. 주석에 적힌 초가 2로 바뀌었다. 즉 참인 뜻을 가지는 자연수를 ..
-
<Lord of SQL Injection> gremlinWargame/Lord of SQL Injection 2021. 11. 7. 23:28
gremlin GET 방식으로 전달받은 id와 pw의 값에 대소문자를 구분하지않고 'prob'나 '_'나 '.'나 '()' 가 포함되어있으면 "No Hack ~_~"를 출력한다. 아무 문자나 넣어도 상관없는 것 같다. mysqli_query() : 데이터베이스에 대한 쿼리를 수행 mysqli_fetch_array() : 결과 행을 연관 배열 또는 숫자 배열로 반환 즉, 'id'의 값이 참이라면 문제가 풀린다. 가장 기초적인 SQL Injection 구문인 or 1=1로 참을 성립하고 뒤는 전부 주석처리를 하면 될 것 같다. 현재 URL뒤에 ?id=문자열' or 1=1 %23을 입력한다.(#을 urlencoding 방식으로 %23)
-
<XCZ.KR> 32번 문제Wargame/XCZ.KR 2021. 11. 7. 23:00
32번 문제 페이지 소스 코드부터 살펴보면 GET 방식으로 전달받은 a의 값을 urlencode() 한 것이 $a다. $a에 값이 설정되있고 그 값이 "12735366333132132465461?????????????????????????????" 라면 KEY값을 얻고, 이 값이 아니면 "Failed ur tricks"를 출력한다. GET 방식으로 전달받은 a값에 대한 자료형 선언이 없으므로, Type Juggling을 발생시킬 수 있다. a의 값으로 "12735366333132132465461" 뒤에 '?' 개수 만큼 아무 숫자나 넣어 주면 된다. ※ '?'의 개수보다 적거나 많으면 안된다. Prob Page에서 a의 값을 넘겨주면 KEY 값을 획득할 수 있다.
-
<Suninatas> 23번 문제Wargame/Suninatas 2021. 11. 7. 16:02
23번 문제 앞전에 풀었던 Suninatas 22번 문제와 유사하지만, 'admin'과 'substring'이 필터링되는 것을 확인할 수 있다. 페이지 소스 코드를 먼저 살펴보면 아래의 힌트를 찾을 수 있다. 전의 문제와 똑같이 guest의 로그인 정보를 주고 admin의 패스워드를 찾으라 한다. 그리고 'admin' 문자열을 우회하라고 한다. 무심결에 ad'+'min'--으로 로그인해보니 로그인에 성공하였다. 찾아보니 SQL에서 문자열을 '+'로 합칠 수 있는 특성을 이용하여 문자열을 우회할 수 있었다. 또 다른 방법으로 'or id 4 -- 우측 두 개의 문자열에서 조회된 첫 번째 문자를 가져온다. left(right( "12345",3 ),1 ) = 345 -> 3 -- 우측 세 개의 문자열에서 조..
-
<Suninatas> 22번 문제Wargame/Suninatas 2021. 11. 5. 17:17
22번 문제 Blind Sql Injection 문제인 듯하다. Blind Sql Injection은 Sql Injection과 동일하지만, 데이터 베이스에서 데이터를 검색하는 방법만 다르다. 데이터베이스가 웹 페이지에 데이터를 출력하지 않을 때 공격자는 데이터베이스에 일련의 참 또는 거짓 질문을 하여 데이터를 빼내는 기법이다. 한 문자씩 추출해서 DB의 정보를 알아낼 수 있다. 우선, 페이지 소스코드를 먼저 살펴본다.    id pw OK admin Filtering Keywords select / Union / or / white space / by / having from / char / ascii / left / right / delay / 0x .......... 아이디와 ..