본문 바로가기

전체 글

(166)
백준 10250(ACM 호텔) 파이썬(python) 해결 문제 ACM 호텔 매니저 지우는 손님이 도착하는 대로 빈 방을 배정하고 있다. 고객 설문조사에 따르면 손님들은 호텔 정문으로부터 걸어서 가장 짧은 거리에 있는 방을 선호한다고 한다. 여러분은 지우를 도와줄 프로그램을 작성하고자 한다. 즉 설문조사 결과대로 호텔 정문으로부터 걷는 거리가 가장 짧도록 방을 배정하는 프로그램을 작성하고자 한다. 문제를 단순화하기 위해서 호텔은 직사각형 모양이라고 가정하자. 각 층에 W 개의 방이 있는 H 층 건물이라고 가정하자 (1 ≤ H, W ≤ 99). 그리고 엘리베이터는 가장 왼쪽에 있다고 가정하자(그림 1 참고). 이런 형태의 호텔을 H × W 형태 호텔이라고 부른다. 호텔 정문은 일층 엘리베이터 바로 앞에 있는데, 정문에서 엘리베이터까지의 거리는 무시한다. 또 모든 ..
백준 2775(부녀회장이 될테야) 파이썬(python) 해결 문제 평소 반상회에 참석하는 것을 좋아하는 주희는 이번 기회에 부녀회장이 되고 싶어 각 층의 사람들을 불러 모아 반상회를 주최하려고 한다. 이 아파트에 거주를 하려면 조건이 있는데, “a층의 b호에 살려면 자신의 아래(a-1) 층의 1호부터 b호까지 사람들의 수의 합만큼 사람들을 데려와 살아야 한다.” 아파트에 비어있는 집은 없고 모든 거주민들이 이 계약 조건을 지키고 왔다고 가정했을 때, 주어지는 양의 정수 k와 n에 대해 k층에 n호에는 몇 명이 살고 있는지 출력하라. 단, 아파트에는 0층부터 있고 각층에는 1호부터 있으며, 0층의 i호에는 i명이 산다. 입력 첫 번째 줄에 Test case의 수 T가 주어진다. 각각의 케이스마다 입력으로 첫 번째 줄에 정수 k, 두 번째 줄에 정수 n이 주어진다. (1
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 ..
webhacking.kr old-38 이해하기 old-38 페이지는 "LOG INJECTION"이라는 이름을 가지고 텍스트 박스와 클릭 버튼이 있습니다. 자연스럽게 admin을 당당히 입력해 보았습니다. admin이 아니라는 말이 등장했습니다. ㅠㅠ; 페이지 소스 코드를 확인해 보았습니다. form 태그를 확인해 보면 post 입력 방식을 사용하고 있음을 알 수 있습니다. php에서 파라미터 전달 방식으로 GET 입력과 POST 입력 방식이 있습니다. GET 입력 방식은 ?를 시작으로 URL에 값이 직접 나타나는 형태를 가집니다. 이와 다르게 POST 입력은 페이지 자체에 파라미터가 전달되는 형태입니다. 위의 문장에서 post 방식에 의해 index.php 안에 파라미터 값도 같이 전달되는 것입니다. 그래서 파라미터 값이 URL 상에서 보이지 않습니..
webhacking.kr old-25 이해하기 old-25 페이지는 php와 관련된 문제라고 되어있었습니다. 페이지의 첫 화면은 hello.php 파일을 연 상태임을 알 수 있었습니다. hello world가 회색 텍스트 박스에 표시되고 있었습니다. 페이지 소스코드를 열어보아도 특별히 알 수 있는 내용은 없었습니다. 그래서 php 파일들을 URL에 입력하여 하나씩 열어보았습니다. flag.php 파일을 열어보면 "FLAG is in the code"라는 출력을 확인할 수 있습니다. 해당 코드 안에 있다는 의미를 스스로 이해하기엔 지식이 부족했습니다. 그래서 검색을 통해 php를 이용한 공격 예제 중 File Inclusion 취약점을 알았습니다. php 구성의 웹페이지에서 파라미터 값이 정확히 필터링되지 않는 취약점을 이용한 방법입니다. php를 통..
webhacking.kr old-19 이해하기 old-19 페이지의 시작 화면입니다. 처음부터 값이 적혀 있어서 당당히 제출을 눌렀습니다. admin이 아니라는 결과가 나옵니다. 무언가 잘못된 것 같습니다. 다른 값을 집어넣으면 hello와 함께 값이 출력됩니다. 이 상태에서 logout은 되지 않았습니다. logout이 되지 않는 것은 로그인 과정에서 형성된 쿠키값이 유지되고 있었기 때문입니다. 값을 삭제하면 다시 처음 화면으로 돌아옵니다. 다른 값들을 집어넣어도 그대로 뜨는 것으로 보아 admin 자체에 주문을 걸어놓은 것 같습니다. admin이라는 값을 그대로 입력하면 필터링에 걸려서 오류를 출력시키는 것 같았습니다. 페이지 소스 코드를 보아도 입력 값의 최대(maxlength)는 5로 정해졌기 때문에 입력 상자를 건드리는 것으로는 해결이 불가..
webhacking.kr old-6 이해하기 old-6의 페이지 구성은 view-source, ID 값과 PW 값입니다. view-source 링크를 새 페이지로 열어보았습니다. 소스 코드 분석 php 코드 부분을 확인해 보았습니다. $val_id="guest"; $val_pw="123qwe"; for($i=0;$i