SISS (55) 썸네일형 리스트형 old-53(350) SQLinjection인 것 같다. 코드를 보니, val에는 select나 by가 들어가면 안 된다. val의 값이 a의 값으로 설정된다. answer와 $hidden_table이 같은 경우에 문제가 풀리는 것으로 보아, 테이블 명($hidden_table)을 알아내야 한다. 쿼리를 날린 뒤, 그 결과의 첫번째를 출력하므로, val에 이것 저것 넣어본다. val에 값을 넣었더니 true, 1,2,3,4에서 a의 값이 나온 것을 알 수 있다. 어떻게 하면 테이블명을 알 수 있을까 검색하는 차에 procedure analyse()를 알게 되었다. procedure analyse()를 사용하여 쿼리를 명령하면 데이터베이스명.테이블명.컬럼명 형태의 정보를 획득할 수 있다. a에 포함되는 1을 이용하여 val=1.. [Implementation] Picking Numbers 0보다 크고 100보다 작은 정수들(각 수들은 중복될 수 있다.)로 이루어진 배열이 있고, 배열의 크기는 2이상 100이하이다. 배열에서 서브배열을 하나 만드는데, 이때 서브 배열들의 원소끼리는 같거나 차가 1이어야 한다. 퀵 정렬을 이용하여 주어진 배열을 크기순으로 배열하고 start(맨 처음 원소, 즉 처음 실행할 때는 가장 작은 원소)와 원소들의 차를 차례대로 구해가면서 차가 1보다 클 때, count가 max보다 크면 max에 count를 저장한다. 그리고 1보다 큰 차가 난 원소를 start로 설정하고 아까 한 일을 그대로 반복한다. 주어지는 배열에는 여러 경우의 수가 있는데, 그 중 주어진 배열의 모든 원소가 같을 때를 생각하지 못하여서 오류가 났었다. 이 오류는 맨 마지막에 if문을 추가하여.. old-49(300) SQL injection 문제이다. 소스코드를 살펴보면 select or and ( ) limit , / order cash (공백) (탭문자) ' " 를 필터링한다. 빈칸에 입력한 내용이 $_GET['lv']가 되는 모양이다. lv에 1부터 차례대로 값을 넣어보았으나 5부터는 해당되는 결과가 없었다. admin이 lv가 몇인지 알 수 없다. 따라서 id가 admin인 id를 고르라는 쿼리문이 되도록 해야 한다. 여기서 소괄호를 오른쪽, 왼쪽 모두를 쓸 수 없어 함수는 사용이 불가능하고, admin이라는 문자열 자체를 필터링하고 있어 바로 admin을 넣기는 어렵다. 따라서 admin을 아스키코드의 16진수 값으로 변환해야 한다. 쿼리문을 보낼 때 lv=을 무력화시켜야 하므로 아무런 결과가 나타나지 않는.. [Implementation] Sales by Match 양말 한 짝이 여러 개가 있다. 양말은 총 100가지 색깔의 종류가 있다. 먼저 각 색깔의 양말의 개수를 저장할 배열 socks를 만든다. 그 뒤, 모든 칸을 0으로 초기화한다. ar 배열을 for문으로 돌면서 양말의 색깔에 해당하는 socks의 칸의 값을 1씩 증가 시킨다. 그 뒤, 다시 for문으로 socks를 돌면서 각 칸을 2로 나눈 몫(켤레의 수)를 pairs에 더한다. old-48(350) 들어가면 귀여운 이미지와 함께 시각과 id로 보이는 문자열, 누군가 써놓았던 것 같은 문자열이 있다. 시험삼아 imhungry를 입력했다. 입력한 시각과 함께 이미지, 아이디, 입력한 문자열, 그리고 맨 오른쪽에는 [Delete]가 있다. 눌러보면 쓴 글이 사라진다. 바로 위의 그림에 나타난 부분의 소스코드다. 입력할 수 있는 공간이 있길래 를 입력했다. 내가 쓴 문자열에서는 필터링하는 문자가 없는 것 같다. 아니면 아예 입력한 문자열을 일반 문자열로 만들었을지도 모른다. 혹시 파일을 업로드하거나 [upload file]을 누르면 다른 일이 생길까봐 xss를 목적으로 한 문자열을 저장한 파일을 올렸다. [upload file]을 눌러보니, 내가 썼던 문자열이 그대로 나와있다. 마찬가지로 필터링은 없는 것.. [Implementation] Sub-array Division Lily가 Ron에게 초콜릿을 나누어준다고 한다. 나누어주려는 초콜릿은 1차원 배열과 같은 모양이고, 각 칸마다 1 이상 5 이하의 정수가 적혀 있다. Lily는 Ron이 태어난 달의 개수만큼 연달아 있는 칸들의 합이 Ron이 태어난 날과 같은 조각을 찾아서 준다고 한다. 그림처럼 초콜릿이 있고, m(태어난 달)은 2이고, d(태어난 날)는 3일 때, 총 2가지의 방법으로 줄 수 있다. 이처럼 Lily가 Ron에게 초콜릿을 줄 수 있는 방법의 가지수를 알아내야 한다. 각 초콜릿의 칸마다 m만큼 for문을 돌려서 i칸 부터 i+m-1칸까지의 합을 구한 뒤, 이 합이 d와 같으면 count를 1 증가시킨다. [Search] Pairs int형 타입으로 이루어진 배열 arr이 주어지는데, 배열의 숫자들 중에서 차가 k인 숫자 짝의 개수를 구해야 한다. 5 2 1 5 3 4 2 가 주어진다면 첫번째 줄의 첫번째 숫자 5는 숫자 배열의 크기이고, 첫번째 줄의 두번째 숫자 2는 k를 의미한다. 두번째 줄은 배열에 들어가는 숫자들이다. 여기서 차가 2가 되는 조합은 (3,1), (5,3),(4,2)로 모두 3가지이다. 맨 처음에 그저 정렬을 안하고 for(int i = 0, i < arr_count; i++){ for(int j = i+1; j old-11(300) 들어가자마자 Wrong이라고 적혀있다. 코드를 살펴보자 $pat에 정규식을 저장하고 있다. 1~3 중의 숫자 하나와 a~f 중의 알파벳 5개와 현재 나의 서버 IP에 탭p탭a탭s탭s를 붙여야 한다. 여기서 GET으로 정보를 받고 있으므로 탭 문자를 url 코드로 인코딩한 결과인 %09로 바꿔줘야 한다. 1aaaaa_(나의 IP)%09p%09a%09s%09s 를 val에 넣어주면 되겠다. 나의 IP를 확인하기 위해 findip.kr 이라는 사이트로 들어가 봤다. 대문짝만하게 내 아이피 주소가 써져 있다. 여기서 알아낸 아이피 주소로 위의 (나의 IP)를 대체한 값을 val에 넣어준다. 이전 1 2 3 4 5 ··· 7 다음