반응형

전체 글 259

[webhacking.kr] 54번 문제

100점인 54번 문제를 풀어보자. 소스코드에 들어가보면 자바스크립트 소스가 쓰여있다. setTimeout("answer(0), 1000) : 1000ms(1초) 후에 answer함수에 인자값 0을 넣어 실행해라. 해당 스크립트 코드를 콘솔을 이용해 돌려보니 한 글자씩 문자가 나타났다가 사라진다. aview.innerHTML을 통해 x.responseText에 저장된 값이 출력이 되는데, 이 함수를 aview.innterHTML=x.responseTexst; -> aview.innterHTML+=x.responseTexst; 로 수정하고 마지막 조건문의 if(x.responseText=="") aview.innerHTML="?"; -> if(x.responseText=="") aview.innerHTML..

[webhacking.kr] 53번 문제

350점인 53번 문제를 풀어보자. answer의 값이 $hidden_table이면 문제가 해결된다. val 변수를 이용해서 테이블명을 알아내면 된다. val 변수에는 select, by 문자열은 필터링 된다. val 변수에 여러 값을 입력해보았지만, (1, 2, 3, 4)에 대해서만 반환되는 값이 있었다. select가 필터링 되면 information_schema.tables 나 columns 에서 쿼리를 할 수 없다. 그러나 procedure analyse() 함수를 사용하면 가능하다. 테이블과 필드명을 모른다고 하더라도 test.test.id와 같은 형식으로 출력된 첫번째 필드명을 통해 테이블명을 알 수 있다. 이제 문제 풀이에 적용해보도록 하자. 쿼리문 : ?val=1%20procedure%20..

[webhacking.kr] 52번 문제

400점인 52번 문제를 풀어보자. guest 계정으로 로그인하게 되면 다음과 같은 페이지가 뜬다. 문제에서는 $_SESSION['login'] == "admin"이고, $_SERVER['REMOTE_ADDR']의 ip주소가 172.17.0.으로 시작한다면 flag값을 얻을 수 있게 된다. 그러나 해당 문제에서는 HTTP Basic Authentication 취약점을 이용하여 문제를 해결할 것이다. 우선, 웹 인증에 대한 내용과 종류를 알아야 한다. - 웹 인증이란? 웹에 접근하는 사용자가 허가 받은 사용자인지 확인 하기 위해 사용하는 인증 방법으로서, 주로 사용자를 확인할 때 ID/PW를 이용하여 인증한다. - 웹 인증 종류 1) Basic Authentication 기본 인증 웹 서버에 보낼 아이디와..

[webhacking.kr] 51번 문제

250점인 51번 문제를 풀어보자. addslashes() : ', ", \ 앞에 역슬래시(\)를 붙여 특수문자가 아닌 일반문자로 인식하게끔 변환 md5(string, true) : true이면, 해시를 길이 16의 바이너리(2진수) 형식으로 반환, 기본값은 false이다. 이때 반환된 바이너리는 magic_quotes_gpc 옵션에 영향을 받지 않기 때문에 조건을 참으로 만들어주는 바이너리를 얻으면 문제를 풀 수 있다. md5(string) : 해시를 32자리의 16진수 값으로 반환 이 문제에서 사용될 개념은 세 개의 다른 문자 비교시 참을 반환한다는 것이다, 'a'='b'='c' : 참, 1반환 'a'='b' (거짓,0) 0='c' (거짓,0) select id from chall51 where id..

[webhacking.kr] 50번 문제

450점인 50번 문제를 풀어보자. addslashes() : DB에서 ', ", /, Null Byte 와 같이 특수문자들을 이스케이프 처리해주는 함수 mb_convert_encoding(문자열,바꿀 인코딩,현재인코딩); : 인코딩 변환 id와 pw에는 from, pw, (, ), 공백, %, =, >, < 문자열을 필터링 된다. id에는 추가적으로 union 문자열이 필터링 된다. 최종적으로 쿼리의 결과가 lv=3이면 문제가 풀리게 된다. id = guest%a1'/* pw = */union%0aselect%0a3# id와 pw값을 이렇게 넣어주게 되면 /**/부분이 주석처리가 되므로 pw부분은 생략이 가능하여 union select구문을 이용하여 바로 3을 반환시킬 수 있다. select lv fr..

[webhacking.kr] 48번 문제

350점인 48번 문제를 풀어보자. 테스트를 위해 파일을 업로드 시켜보았다. upload file을 클릭했을 때는 파일이 실행되지 않았지만 Delete를 눌렀을 때는 파일을 삭제했다. 삭제는 mode 파라미터에 del라는 변수를 담아 요청한다. 여기서 생각을 해볼 것이 파일 삭제 시 리눅스 시스템이기 때문에 rm /업로드경로/업로드파일명 형태로 명령어가 실행될 것이다. 그럼 rm 명령이 실행될 때 ';'를 이용하여 추가 명령이 실행되도록 해보자. 디렉터리의 내용을 보기 위해 ls 명령어를 추가하도록 하자. 파일이 정상적으로 업로드 되었으니, Delete버튼을 눌러 rm /업로드경로/upload.php;ls 가 실행되도록 해보자. upload.php파일은 삭제될 것이며, 그 후 디렉터리의 내용이 출력될 것..

[webhacking.kr] 47번 문제

150점인 47번 문제를 풀어보자. send버튼을 누르게 되면, 다음과 같은 로그가 보이게 된다. 메일 발신자 : no-reply@webhacking.kr 메일 수신자 : no-existed@webhacking.kr 메일에서는 '참조(CC)'기능이 있다. 해당 기능은 수신자 외에도 메일을 함께 보낼 때 쓰는 기능이다. 해당 메일을 나에게도 보내도록 해 그 안에 있는 FLAG 값을 확인해 문제를 해결하면 될 것이다. 그럼 문제를 풀기 위해 CRLF Injection을 시도해보도록 하자. 기존의 input태그를 여러 줄 입력할 수 있는 textarea태그로 변경한다. 그리고 CC에 내 이메일 계정을 담아 submit 해보자. 메일이 정상적으로 수신되었으며, FLAG 값을 Auth 페이지에 제출하자.

[webhacking.kr] 46번 문제

300점인 46번 문제를 풀어보자. lv=1 일 때 id : ltusy, cash : 1100 lv=2 일 때 id : udnrg, cash : 800 lv=3 일 때 id : fvvcg, cash : 1200 lv=4 일 때 id : bzrbo, cash : 700 &&(and) 문자는 사용가능한 것을 확인했다. lv 변수에는 공백, /, *, %, select, 0x, limit, cash 문자열이 필터링 된다. 쿼리 후의 id 값이 admin이면 문제를 해결할 수 있는데, 0x가 필터링 되고 있으므로 hex값으로는 입력이 불가능하니, char()함수를 이용하여 admin을 injection해보자. 쿼리문 : 1&&id=char(97,100,109,105,110)

[webhacking.kr] 45번 문제

550점인 45번 문제를 풀어보자. addslashes() : DB에서 ', ", /, Null Byte 와 같이 특수문자들을 이스케이프 처리해주는 함수 mb_convert_encoding(문자열,바꿀 인코딩,현재인코딩); : 인코딩 변환 id와 pw에는 admin, select, limit, pw, =, 문자열을 필터링 된다. 최종적으로 쿼리의 결과가 id=admin이면 문제가 풀리게 되지만, pw를 md5로 암호화해서 쿼리하기 때문에 Blind SQL Injection을 통해 비밀번호를 유추하기가 힘들 것 같다. 그럼, id를 통해 SQL Injection을 시도해보자. 우리는 mb_convert_encoding 함수의 취약점을 이용할 것이다. 멀티바이트를 사용하는 언어셋 환경에서는 백슬래시 앞에 %..

반응형