문제분석 & 풀이페이지에 접속하면 빈칸과 코드가 주어져있다. 코드를 분석해보자.1) phone, id 파라미터가 있는지 검증한다. (3번줄)2) phone, id 파라미터가 존재하면 다음을 수행한다. (4~9번줄)2-1. phone 값에 * , / , = , select , - , # , ; 가 들어가면 프로그램을 강제종료한다. (4번줄)2-2. id 값이 5자리를 넘으면 안된다. (5번줄)2-3. id 에 admin이 들어가면 프로그램이 강제종료된다. (6번줄)2-4. 위 3가지 검증을 모두 넘기면 sql 쿼리를 실행하여 새로운 레코드를 DB에 넣는다. (7번줄)3) sql 쿼리를 실행하여 ip값을 가져와 $isAdmin 에 저장한다. (11번줄)4) isAdmin['ip'] 값이 클라이언트의 ip..
문제분석 & 풀이sql injection 문제다. ○ 코드 분석1. no 파라미터를 통해 값을 전송받고 있다.2. no는 # , select , ( , 공백 , limit , = , 0x 중 하나라도 있을시 hack으로 간주한다.3. sql 쿼리를 실행해서 결과로 나온 id값이 "admin"이면 문제가 해결된다. 필터링을 우회하는 인젝션 쿼리는 다음과 같다.# Injection Query0) or id like 'admin'--# Complete Queryselect id from chall27 where id='guest' and no=(0) or id like 'admin'-- ) where문을 보면 or 를 이용해서 id='guest' 를 무효시키고 id가 'admin'인 값을 찾고 있다. 여기서 ..
문제분석 & 풀이admin으로 로그인을 하라는 미션이 주어진다. join을 통해 계정을 생성할 수 있다. guest / guest 으로 계정을 생성하고 로그인을 해보자. [그림]처럼 pw가 해싱된 상태로 출력된다. 해싱된 pw 길이는 32자리로 MD5로 해싱됐다고 추측할 수 있다. MD5가 맞는지 확인해보기 위해서 "guest"를 MD5로 해싱해서 값을 비교했다. 하지만 결과는 달랐다. "guest" + salt → 암호값아마도 단순하게 "guest"를 해싱한게 아니라 salt 값이 추가된 상태로 해싱된 것 같다. 해싱 결과를 복호화하려면 레인보우 테이블을 이용하는 방법 밖에 없다. ○ 레인보우 테이블특정 알고리즘(ex. MD5)에 대한 평문과 암호문을 테이블 형태로 모두 기록해서 암호문에서 평문으로..
문제에 접속하니 위와 같은 페이지가 나왔다.아마 password를 맞추는 것이 문제인 것 같다. 하이퍼링크가 걸린 숫자들을 하나씩 눌러보자.숫자를 누르면 no 파라미터를 통해 해당 숫자값이 전송되는 것을 확인 할 수 있었고 각각 위와 같은 결과가 나왔다. 마지막으로 3을 눌러보니 secret이라는 문구와 함께 속성이 id,no 이며 no=3의 id 값이 password라고 언급됐다.아마 DB의 테이블의 속성이 id,no 두 가지이며 우리가 구해야하는 password는 no가 3인 레코드의 id값인듯 하다. 결론적으로 password인 no=3의 id값을 구하는게 이번 문제의 목표가 될 것이다. no=3의 id값을 구하기 위해서는 blind sqli를 진행해야 하는데 사실 딱봐도 no 파라미터를 이용해야..
문제에 접속하니 "done!" 라는 문구와 함께 소스가 주어져있다. 소스를 봐보도록 하자. 소스코드를 분석해보자. 1. 클라이언트의 브라우저, os 정보를 가져와 공백제거 후 $agent 변수에 저장(2번 줄)2. 클라이언트의 ip 주소를 가져와서 $ip 변수에 저장(3번 줄)3. $agent 변수에 "from"이 포함되어있으면 프로그램 종료(4~7번 줄)4. chall8 테이블의 id 속성의 레코드 갯수를 가져온 후 $count_ck 변수에 저장 (10번 줄)만약, $count_ck 값 즉, 카운팅 갯수가 70이상이면 chall8 테이블을 삭제 (브루트 포스 방지용 인 것 같다.) (11번 줄)5. 클라이언트의 http_user_agent 정보를 가져와 그 정보에 해당하는 id 속성값을 가져와 최종적으..
문제에 접속하니 Admin page 가 나타났다. auth 버튼을 눌러보니 "access denied" 가 뜨는 것을 확인 할 수 있다.이번문제는 admin page에서 admin이라는 것을 버튼을 눌러서 인증을 해내는 것이 목표가 될 것 같다.다음으로 소스를 봐보자. 소스를 간단히 분석하면 다음과 같다.1. "val" 라는 파라미터의 값을 받고 $go 변수에 저장 후 5번줄을 통해 그 값을 정규표현식을 이용하여 필터링 검증을 받는다. (2,5번줄)2. rand(1,5)를 통해 1~5 까지 숫자중 랜덤값을 받고 if문으로 들어간다. (7~22번줄)3. 들어간 if문의 sql 쿼리를 실행하고 그 결과(레코드)를 $data 변수에 넣는다. (8~22번줄)4. $data[0] 즉, 결과로 받은 레코드의 l..