반응형

워게임 77

[webhacking.kr] 58번 문제

150점인 58번 문제를 풀어보자. ls 명령어를 send했더니 index.js, temp.html 파일이 존재하는 것을 확인할 수 있다. 해당 문제는 socket.io를 이용하여 실시간 양방향 통신을 할 수 있는 웹 애플리케이션이다. var socket = io(); // socket.io 서버에 접속한다. socket.emit(); // 서버로 자신의 정보를 전송한다. socket.on(); // 서버로부터의 메시지가 수신하기 위해 on 메소드 사용 flag을 send하면 permission denied, admin only 문자열이 반환된다. 자바스크립트 소스코드에서 username 변수에 담겨 있는 값을 admin으로 바꾸고, $('#m').val()를 'flag'로 바꾸어 콘솔을 실행한 후, 아..

[webhacking.kr] 57번 문제

600점인 57번 문제를 풀어보자. https://webhacking.kr/challenge/web-34/index.php?msg=test&se=if(length(pw)%3E0,sleep(3.0),1) se파라미터에 injection을 시도해보았다. if(length(pw)>0,sleep(3.0),1) : pw의 길이가 0보다 큰 경우 3초간 sleep()하게 된다. 응답 소요시간을 비교하여 pw를 알아낼 수 있다. Time Based SQL Injection 코드를 작성해 pw의 길이와 값을 구하자. 해당 Flag 값을 Auth 페이지에 제출해보자.

[webhacking.kr] 56번 문제

250점인 56번 문제를 풀어보자. admin의 readme를 눌러보면 access denied가 반환된다. guest의 hi~를 눌러보면 hello~가 반환된다. search 부분에 여러가지 값을 제출해보면서 확인한 사항은 검색한 문자가 내부에 존재한다면 해당 no, id, subject 값들이 반환된다. flag를 검색했을 때에는 admin의 readme가 반환된다. 이 뜻은 readme안에 flag문자열이 존재한다는 것이다. 이제 코드를 작성하여 readme 내부에 있는 flag값을 찾아내도록 하자. 코드 작성 중 문자열 검색 부분에서 % 문자를 제외하고 반복문을 사용한 이유는 %문자를 이스케이프 처리하지 않아 %가 출력되기 때문이다. %는 DB쿼리문에서 like 구문을 사용할 때 '%문자%' 형식..

[webhacking.kr] 55번 문제

400점인 55번 문제를 풀어보자. 일정 시간이 지나면 게임 오버 alert창이 뜨게 된다. 3번째 컬럼에 flag값이 담겨있는 것을 확인했으니, flag가 담긴 컬럼명을 얻기위해 limit 절과 procedure analyse() 함수를 사용해보자. rank.php?score=1%20limit%202,1%20procedure%20analyse() 컬럼명 : p4ssw0rd_1123581321 Blind SQL Injection을 시도하기 전에 참/거짓일 때의 반응을 살펴보자 - 참인 경우 jso109817 문자열 출력 - 거짓인 경우 문자열 미출력 이제 flag 길이와 flag 값을 찾기 위한 파이썬 코드를 작성하고 실행해보자. Auth 페이지에 flag 값을 제출해보자.

[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..

반응형