반응형

hacking 90

[webhacking.kr] 11번 문제

이번에는 300점인 11번 문제를 풀어보도록 하자. 첫 화면은 다음과 같고, view_source를 클릭해 코드를 살펴 힌트를 얻도록 하자. 해당 문제를 풀기 위해서는 $pat 변수에 담겨있는 정규표현식을 이해하면 된다. [1-3] : 1~3 사이의 문자 중 하나 [a-f]{5}_ : a ~ f 문자 중 5번 반복하는 문자를 찾고 마지막에 "_"를 붙힌다. .*$_SERVER[REMOTE_ADDR] : 웹서버에 접속한 접속자의 IP가 0번 이상 반복(존재)한다면 문자를 찾는 정규표현식 .*\tp\ta\ts\ts : \t는 탭을 의미함으로 (탭)p(탭)a(탭)s(탭)s를 찾는 정규식표현, 하지만 문제에서는 GET방식으로 val변수에 값을 넣어 전달하므로 tab을 url 인코딩해야 한다. \t를 인코딩하게되..

[webhacking.kr] 10번 문제

이번엔 250점인 10번 문제를 풀어보도록 하자. 문제에 들어가면 첫 화면은 다음과 같다. 페이지를 살펴보니 별다른 힌트는 회식에 O라고 쓰여있는 부분에 마우스 커서를 올리면 yOu로 변한다는 점이다. 개발자 도구로 들어가 HTML 소스코드를 확인해보도록 하자. 마우스를 클릭했을 때는 onclick 부분에 1px씩 늘어나고, 1600px이 됬을 때 문제가 해결될 것으로 보인다. 우선 테스트를 위해 정상적으로 클릭할 때마다 1px씩 늘어나는 지 확인해보자. 정상적으로 동작하는 것을 확인했으니, 문제 해결을 위해 left에 담겨있는 픽셀을 1599px로 수정한 후, 마우스 클릭을 해보도록 하자. 이번 문제는 비교적 간단히 풀 수 있는 문제였다.

[webhacking.kr] 9번 문제

이번에는 점수가 900점인 9번 문제를 풀어보자. 처음 화면은 다음과 같고, 1,2,3을 각각 눌러보자. challenge/web-09/?no=1 challenge/web-09/?no=2 challenge/web-09/?no=3 URL의 파라미터 no에 값을 변경함에 따라 페이지가 변하는 것을 볼 수 있다. 테스트를 위해 인자값에 sleep(3)함수를 입력 해본 후 3초 뒤에 응답되는 것을 확인했으며, SQL Injection 시도가 가능할 것으로 판단된다. no=3 페이지에서 컬럼에는 id,no가 있고 passowrd는 id에 있다고 한다. 그럼 우리는 문제를 풀기 위해 id=password이고 no=3인 값을 가져와야 한다. 먼저, id의 길이를 알아내기 위해 쿼리문을 작성해보자. 쿼리문 : no=i..

[webhacking.kr] 6번 문제

100점인 6번 문제를 풀어보도록 하자. 문제에 들어가게 되면 현재는 문제를 풀어버려서 admin/nimda 계정으로 변환되어 있지만, 원래는 guest/123qwe로 표시되어 있다. view-source를 클릭하게 되면 힌트가 되는 코드를 확인할 수 있다. 코드를 해석해보면 id=admin, pw=nimda 값을 20번 base64 인코딩하여 값을 user와 password 쿠키의 값으로 입력하면 해결되는 것을 알 수 있다. 이제 20번의 base64인코딩을 위한 파이썬 코드를 작성해보자. import base64 id = "admin" pw = "nimda" for i in range(0, 20): i = i + 1 id1 = id.encode("UTF-8") id2 = base64.b64encode..

[webhacking.kr] 5번 문제

300점인 5번 문제를 풀어보도록 하자. 첫 화면은 Login과 Join 버튼만 나와있다. Join 버튼을 누르게 되면 'Access_Denied' alert창이 뜨게 되고 Loing 버튼을 눌러 나타나는 id과 pw에 Injection을 시도해봤으나 별다른 반응은 없었다. 개발자 모드로 진입해서 소스코드를 살펴보자. login페이지로 넘어가는 경로를 확인해보니 mem/login.php로 이동하는 걸 확인할 수 있으므로, Directory Listing을 시도해보자. login.php 이외에 join.php 페이지가 존재하는 것을 확인할 수 있다. join.php 페이지로 이동해보면 'bye'문구가 적혀있는 alert창이 뜨게 된다. join.php의 소스코드를 확인해보면 javascript가 난독화 되..

[webhacking.kr] 4번 문제

300점인 4번 문제를 풀어보도록 하자. 첫번째 화면에 문자,숫자 조합과 패스워드를 입력하는 곳과 소스코드를 보는 곳이 나오게 된다. SQL Injection을 시도해봤지만 별다른 응답값이 없어 소스코드를 확인해 보도록 하자. 소스코드 확인 후 문제의 제일 상단에 위치한 40자의 문자열은 500 sha1 hash 매핑된 값으로 확인할 수 있었다. 우리는 $_SESSION['chall4'] 값만 알아내면 문제를 풀 수 있다. 이제 40자의 문자열을 가지고 패스워드를 알아내야 하지만, sha1은 일방향 해시함수이기 때문에 복호화가 불가능 하다. 그렇기 때문에 우리는 레인보우 테이블을 사용할 것이다. 레인보우 테이블은 hash 결과에 대한 사용자 사전이다. hash 결과들을 축적시킨 데이터(사전)을 만들어두면..

[webhacking.kr] 3번 문제

3번 문제는 350점짜리 문제이며, 문제를 클릭하게 되면 네모로직 문제가 나오게 된다. 검은색 칸을 채운 후 solved 버튼을 누르게 되면 다음과 같은 페이지로 이동한다. 해당 입력 창에 임의의 텍스트를 입력하게 되면 name, answer, ip값이 출력된다. 여기에서 유추해볼 수 있는 부분은 answer 쪽을 참으로 변환시켜 전송하게 되면 문제를 해결할 수 있을 것 같다. ' or '1'='1--을 answer 값 뒤에 대입한 후 재전송해본다. 문제가 풀렸다는 alert창이 뜨게 된다.

[Web Hacking] WebGoat SQL Injection(mitigation) 문제풀이

※ 선행 학습 필요 개념 Order by 절 SELECT문으로 검색된 데이터를 오름차순(ASC)이나 내림차순(DESC)으로 정렬시킬 때 사용한다. Default 값은 Ascending(오름차순)으로 ASC는 생략해도 되며, 문자는 알파벳 순서로 출력된다. ORDER BY절에 선택된 컬럼이 여러 개일 경우 앞(왼쪽)에 정의된 컬럼을 기준으로 먼저 분류한 후, 이후에 나열된 순서대로 분류한다. Order by가 SQL Injection에서 쓰이는 경우는 컬럼(속성)의 수를 확인하기 위함이다. 예를 들어 컬럼이 두 개인 테이블에 쿼리문을 확인해보자 1) select * from table_name where name="a" order by 2; (정상 출력) 2) select * from table_name ..

반응형