매일 해킹공부 (42) 썸네일형 리스트형 [Lord of Sqlinjection] 11번 문제 golem 풀이 이번에도 역시 코드를 먼저 확인한다.대부분 필터링 하는 부분이 비슷하지만 이번에는 좀 불편한것이 if(preg_match('/or|and|substr\(|=/i', $_GET[pw])) 바로 이부분이다.or , and , substr(, = 이 안된다. =이 안된다니...?? 그래서 생각해본 방법이 like 이다. like 사용법은 3가지로 보면 편하다.1. 맨 앞글자 : like '문자%'2. 중간글자 : like '%문자%'3. 맨 끝글자 : like '%문자' 첫글자 부터 차례대로 한개씩 찾아보겠다. STEP 1. pw 에 or 와 like를 사용하여 응닶 화면에 admin을 출력하는 맨 첫 문자를 찾는다.입력값 : a' || pw like '문자%'번에도 역시 버프를 사용하여 시도했다.이렇게 제.. [Lord of Sqlinjection] 9번 문제 vampire 풀이 이번 문제도 그렵지 않았다.los는 난이도가... 좀 뒤죽박죽인것 같다.일단 코드를 확인해보면 if(preg_match('/\'/i', $_GET[id])) exit("No Hack ~_~"); 싱클쿼터 필터링 $_GET[id] = strtolower($_GET[id]); 문자열을 소문자로 반환 $_GET[id] = str_replace("admin","",$_GET[id]); admin 문자열을 아무문자도 없는것 처럼 바꿔치기 한다. (즉, 지운다.) 위의 admin을 필터링 하는 방법이 전형적인 방법이라 admin 안에 admin을 한번 더써주어admin 이라는 문자가 사라졌을때 admin이라는 글자를 완성할 수 있도록 adadminmin 을 입력해주면 된다. [Lord of Sqlinjection] 8번 문제 troll 풀이 풀기전 코드를 확인해보면3가지 포인트가 있다. if(preg_match('/\'/i', $_GET[id])) exit("No Hack ~_~"); 싱글쿼터 사용 불가 if(preg_match("/admin/", $_GET[id])) exit("HeHe"); admin 문자열 사용 불가 if($result['id'] == 'admin') solve("troll"); 아이디에 admin을 입력하면 풀이 완료 이설정을 보고 처음에는 싱글쿼터 대신 다른 " 혹은 `등을 이용하여 admin 이라는 문자열을쪼개서 작성하는 방법이라고 생각했다.그런데...! 여기서 놓치고 있었던 포인트!! /i 가 있었다.대소문자를 구분하고 있기 때문에 소문자인 admin만 걸리는 것이다!! 따라서, id에 대문자 ADMIN 을.. [Lord of Sqlinjection] 7번 문제 orge 풀이 이번 문제는 좀 쿼리문을 잘 봐야 한다.일단 or 과 and 사용을 못하는 부분은 바로 전단계 문제랑 동일하게 || 과 && 로 대체한다. 1. $query = "select id from prob_orge where id='guest' and pw='{$_GET[pw]}'"; 2. $query = "select pw from prob_orge where id='admin' and pw='{$_GET[pw]}'"; 위의 쿼리중에 pw 값에 따라 guest가 출력될지, admin이 출력될지가 결정된다. STEP 1. or 를 이용하여 or 뒤에 참이 올경우 echo "Hello {$result[id]}"; 가 어떻게 출력되는지 확인한다.입력값 : a' || length(pw)='숫자 이번에도 역.. [Lord of Sqlinjection] 6번 문제 darkelf 풀이 이번 문제의 핵심은 if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe"); 이부분 이다.or, and 쓰지말고 문제를 풀라는 말이다. mysql 에서 or 이나 and 대신에 || (=or) 와 &&(=and) 를 사용할 수 있다. 사실 이번 문제는.. 좀 쉬웠어서 뭐라고 쓸말이 별로 없긴 하다.or 뒷 구분이 참이면 되기 때문에 or 대신 || 을 이용하여 뒷 구분을 참으로 만들면 풀이가 끝난다. 입력값 : a' || id='admin [Lord of Sqlinjection] 5번 문제 wolfman 풀이 이번에도 역시 문제를 해석 해보자면preg_match()로 입력값과 비교하여 일치하면 No Hack ~_~ 또는 No whitespace ~_~를 출력하며 종료한다.비교하는 문자열 : prob _ . () 공백 여기서 중요한 것은 공백 대신에 어떤 것을 사용할 것인가 인것 같다.주로 공백대신에 소괄호()를 주로 사용하는데 이번 문제에서는 +로 대신할 것이다. STEP 1. 먼저 Hello guest를 출력 해본다.입력 값 : 1'or'1'='1 STEP 2. 띄어쓰기 대신에 +가 먹히는지 확인한다.띄어쓰기가 필요한 or 을 기준으로 앞뒤에 + 를 입력하여 확인한다.url 자체에 + 를 입력할 경우 No whitespace ~_~ 를 띄우므로 url 인코딩 하여 %2b를 입력하면위의 그림과 같이 Hell.. [Lord of Sqlinjection] 4번 문제 orc 풀이 먼저 위의 코드를 해석 해보면if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");위의 코드를 좀 뜯어 보면1. preg_match(a,b) : 첫번째 매개변수인 a와 두분째 매개변수인 b가 일치하는지 확인한다.2. /prob|_|\.|\(\)/i : /는 정규표현식의 시작과 끝을 나타낸다. | 는 or을 의미한다. \ 는 뒤에오는 문자를 일반문자열로 취급하게 해준다. i 는 대소문자 구분없이 없다는 것을 의미합니다.위의 내용을 조합해보면 입력한 pw값에 prob 또는 0 또는 ()가 포함될 경.. [Webhacking.kr] Challenge old-02 write up(2-2) 1. DB 길이 및 이름 추출 먼저 DB 이름의 길이를 알아내기 위해 char_length를 사용했다. 초(second) 부분에 6이라고 출력되는 것으로 보아 DB 이름은 6글자이다. 결과값을 숫자로만 출력이 가능하기 때문에 참, 거짓으로만 판단이 가능하여 blind_sql injection이라고 생각했다. DB 이름을 파악하기 위해 substr()을 사용해서 한글자씩 확인해보았다. substr(database(),1,1)='a' [(database의 , 첫번째 글자부터 시작해서, 1개의 글자를)잘라서 a 가 맞으면 참(=1), 틀리면 거짓(=0) ] c를 넣었을때 출력값이 1로 참 이기 때문에 DB이름의 첫번째 글자는 c이다. 같은 방법으로 차례대로 확인을 하면 DB명은 chall2 라는 것을 알 수 .. [Webhacking.kr] Challenge old-02 write up(2-1) old-02 문제를 선택 하면 아래와 화면이 나온다. 하지만 해당 화면만 가지고서는 어떤 힌트도 얻을 수 없기 때문에 개발자 도구로 다시한번 확인한다. 개발자 도구로 확인하면 admin.php로 접속하지 말라는 문구를 확인할 수 있고 해당 주소로 이동하면 다음과 같은 화면을 확인 할 수 있다. 이부분에 올바른 비밀번호를 입력해야 하는 것으로 보인다. 이것 페이지 또한 힌트를 얻기 위해 개발자 도구를 사용하여 확인해보면 . 힌트가 될만한게 없다... 그래서 old-01 문제를 떠올리며 혹시라도 쿠키값에 힌트가 있을까 싶어 확인을 해보니 time 이라는 값이 보이고 Value값을 보니 뭔가 랜던생성값은 아닌것 같아 구글링을 해보았다. 검색을 해보니 시간을 Unix time으로 표기한 것이었고 해당 시간은 2.. [Lord of SQL injection] 3번 문제 goblin 풀이 위의 문제를 보면 id 값은 guest로 고정이고, no값에 입력할 내용을 조작할 수 있다.문제 해결 방법은 id=admin 값을 도출해내면 된다. 일단, 위의 코드를 잘 보면 prob', '', '.', '(),` 을 사용할 수 없다.이 말인 즉슨 컬럼 안의 값을 출력하고자 id='admin' 과 같은 형태로는 질의가 불가하다. 먼저 no에 순차적으로 숫자를 넣어보았더니 no=1 에서 다음과 같은 결과를 얻을 수 있었다. no값을 여러가지 입력 하려면 연결 연산자를 사용하여 입력이 가능하다문제를 풀기 앞서 구축 해놓은 DB로 테스트를 진행하여 and 와 or 연산자를 이용하여 답을 찾아낼 수 있었다. 내가 풀이한 답은 이것이다.select id from prob_goblin where id='guest.. 이전 1 2 3 4 5 다음