본문 바로가기

작업/Webhacking.kr

(18)
webhacking.kr old-32 이해하기 old-32 페이지의 구성은 Hit 값에 대한 등수로 되어 있습니다. Hit 수가 높을수록 높은 위치에 있는 것을 알 수 있습니다. 마우스 커서를 가져다가 클릭을 하면 Hit가 되는 것을 확인할 수 있습니다. 하지만 한 번 Hit를 하고 나서는 더 할 수가 없었습니다. Hit를 한 번밖에 할 수 없는 이유는 쿠키에 있었습니다. 쿠키값을 확인해 보니 vote_check 값으로 ok라는 값이 저장되어 있었습니다. 과감하게 삭제하고 클릭하니 Hit가 가능했습니다! 이제 자신의 닉네임을 찾아서 Hit를 하시고 100 Hit를 만드시면 되겠습니다. 해결되었습니다! -끝-
webhacking.kr old-23 이해하기 old-23 페이지에는 "Your mission is to inject "가 적혀있습니다. 코드를 실행시키는 것이 해답인 것 같습니다. 여러 값들을 넣어보면서 어떤 기능이 있는지 알아보았습니다. 영어를 길게 적거나 아래 코드를 집어 넣으면 "no hack"이라고 나타납니다. 영어 단어를 하나씩 적으면 출력이 되는 것을 알 수 있었습니다. 문자가 길어질 경우 모든 경우에 대해서 필터링이 이루어지는 것으로 예상합니다. 그렇다면 영어 단어를 하나씩 인식시키는 방법으로 코드를 만들면 어떻게 될까요. php 코드에서 필터링을 수행하는 방법으로 preg_match() 함수를 사용하는 것이 있습니다. 필터링을 우회하는 방법으로 preg_match()에서 문자열 검사를 방해하는 %00을 사용하겠습니다. 필터링에 대한 ..
webhacking.kr old-33 이해하기 old-33 페이지는 생각보다 많은 문제들이 내포되어 있었습니다. 까도 까도 계속 나오는... 하다가 한 번 지쳤습니다. 시작하겠습니다. 33-1 페이지 첫 페이지 화면입니다. view-source를 제공하고 있으니 열어보았습니다. $_GET['get']=="hehe" $_GET을 통해서 get 입력 전달 방식을 사용하는 것을 알 수 있습니다. get 이름을 가지는 곳에 hehe값을 입력시키면 됩니다. get 입력 방식이기 때문에 url에 직접 입력해서 시도했습니다. Wrong이 출력돼있던 곳에 Next가 나타나고 다음 문제로 진입할 수 있었습니다. 각 문제의 페이지들이 구성이 똑같고 코드만 다릅니다. 그래서 코드만 올리면서 진행하겠습니다. 33-2 페이지 $_POST['post']=="hehe" && ..
webhacking.kr old-31 이해하기 old-31 페이지는 여러 문장들이 적혀 있습니다. 어떤 내용인지 읽어보았습니다. $port = rand(10000,10100); $port는 포트 번호를 저장하는 변수입니다. 포트 번호는 특정 사용자에게 데이터를 보내기 위해 통과해야 하는 관문과도 같은 역할을 합니다. 번호와 일치하는 관문을 넘어가야 데이터를 받아야 할 사용자가 존재하는 것입니다. rand() 함수는 값을 랜덤하게 얻어내는 역할을 합니다. 10000 ~ 10100의 값 중 하나를 랜덤하게 얻어내는 것입니다. $socket = fsockopen($_GET['server'],$port,$errno,$errstr,3) fsockopen ("연결할 도메인 또는 ip", "포트번호", "에러", "에러메세지", "연결시도시간") fsockope..
webhacking.kr old-20 이해하기 old-20 페이지는 어떤 값을 제출하는 형태로 구성되어 있습니다. 중앙 상단에는 " time limit : 2 second "라고 적혀있습니다. 어떤 기능을 하는지 페이지 소스 코드를 확인해 보았습니다. 소스 코드 분석 submit 버튼을 누르면 onclick="ck()"에 의해 ck() 함수가 작동합니다. ck() 함수는 각각의 텍스트 상자에 값이 입력되어 있지 않다면 그곳으로 포커싱 해줍니다. 또한, captcha값이 일치하지 않으면 captcha 텍스트 상자로 포커싱 해줍니다. 값들이 모두 들어있고, captcha값이 일치한다면 lv5frm.submit(); 함수가 작동하는 구조입니다. 작동 상태를 보기 위해서 값을 입력하고 submit(제출)을 눌러보았습니다. 매우 느리다는 출력이 반겨주었습니다..
webhacking.kr old-39 이해하기 old-39 페이지는 입력이 가능한 텍스트 상자와 view-source가 제공되어 있습니다. view-source를 확인해 보았습니다. 소스 코드 분석 사용자에 의해 입력되는 값 id에 대하여 여러 작업을 거치는 것을 알 수 있습니다. str_replace() 함수에 의해 \\이나 작은따옴표(')가 값으로 들어온다면 각각 공란과 작은따옴표 2개 ''가 됩니다. substr() 함수는 문자열의 일부분을 추출하는 역할을 합니다. substr($_POST['id'], 0, 15);는 $_POST['id']에 저장된 문자열에서 인덱스 0부터 15자리를 추출합니다. 데이터베이스에서 값을 가져오는 조건을 보겠습니다. length(id) < 14 and id = ' {$_POST['id' ]} 사용자가 입력한 값의 ..
webhacking.kr old-26 이해하기 old-26 페이지에서는 view-source만 제공하고 있는 것 같습니다. view-source 페이지를 확인해 보았습니다. preg_match() 함수를 통해서 admin 값이 필터링되는 것을 확인할 수 있습니다. 직접 id에 admin을 입력해 보았습니다. 필터링 된 결과로 "no!"가 출력되는 것을 알 수 있습니다. 입력된 값이 urldecode()함수를 통해서 복호화 작업이 이루어지고, 복호화된 값이 admin이라면 문제가 해결되는 구조임을 알 수 있습니다. 복호화된 값으로 admin을 가지는 값을 만들어 내는 것이 이번 문제의 해결점입니다. urldecode() 함수는 복호화를 하는 함수이며 암호화(인코딩)를 하는 함수는 urlencode()입니다. codepad.org에서 php 코드를 만들..
webhacking.kr old-27 이해하기 이번 문제도 SQL INJECTION 이름을 가진 문제입니다. view-source를 확인해 보겠습니다. 소스 코드 분석 php 코드가 적혀있습니다. $_GET['no']는 텍스트 박스에 입력한 값에 해당합니다. preg_match()함수를 통해서 $_GET['no']에 입력된 특정한 값을 필터링하는 것을 확인할 수 있습니다. 필터링되는 문자는 #, select, (, 공백 문자, limit, =, 16진수(0x)입니다. 문제 유형은 이전에 old-18 페이지의 문제와 유사합니다. 다만, 이번에 입력되는 값이 들어가는 no의 부분이 no=({$_GET['no']}) 형태입니다. 입력한 값이 admin이라면 no=(admin) 형태로 괄호에 들어간 값으로 받아들이는 것입니다. old-18 페이지도 SQL ..