
LOS 포스팅에 앞서 내용이 틀릴 수도 있으며, 해당 부분 지적은 감사히 받겠습니다. 17단계 소스코드이다. 새로운 함수가 보인다. strrev()// 문자를 뒤집는 함수이다. ex) id=admin strrev(id) ->nimda id와 pw에 ', ", null 을 필터링 시키고 값을 뒤집어서 다시 id와 pw에 저장하며 id와 pw값이 db에 있으면 문제가 해결된다. addslashes를 우회하고 거꾸로된 문자열을 대입했을 때 풀리는 쿼리를 집어넣으면 된다. addslashes() // ', ", %00 앞에 이스케이프 문자를 넣어 해당 문자들의 기능을 상실시키고 문자그대로로 인식시킨다. 이번문제에서는 strrev() 함수로 인해 id와 pw에 입력된 값이 역순으로 배열되니 addslashes()..

LOS 포스팅에 앞서 내용이 틀릴 수도 있으며, 해당 부분 지적은 감사히 받겠습니다. 15단계 소스코드이다. 이번엔 id와 pw에 싱글 쿼터 하나만 필터링되어있다. id값이 데이터베이스에 있는 값이면 문제가 해결된다. 이 문제는 싱글 쿼터 우회 문제이다. 싱글 쿼터를 우회할 수 있는 방법에 대해 찾아보자. 1. " // 더블 쿼터 ex) "admin" 2. \ //escape 문자 ex) id='\' and pw='' -> \로인해 id의 뒤 싱글 쿼터가 문자로 인식되며 'and pw가 문자열로 인식된다. pw의 뒷 ' 은 주석처리로 제거할 수 있다. 3. char(39) // 아스키코드 이번 문제는 2번 방법으로 해결된다. id 값에 이스케이프 문자 \ 를 넣어주므로 id='\' and pw='' ' ..

LOS 포스팅에 앞서 내용이 틀릴 수도 있으며, 해당 부분 지적은 감사히 받겠습니다. 15단계 소스코드이다. 이번엔 pw 뒤에 등호가 아닌 like 로 쿼리가 이루어져 있다. id 가 admin인 pw값을 입력하면 문제가 해결된다. 하지만 like는 =와 달리 pw의 모든값을 입력할 필요가 없다. LIKE 응용(대소문자 구분안함) 1. a% //a로 시작하는 문자열 검색 ex) asd 2. %a% //a가 포함되어있는 문자열 검색 ex) sad 3. %a //a로 끝나는 문자열 검색 ex) fgdfga 4. a_ //a로 시작하며 _갯수만큼의 문자열 검색 ex) a4 5. a-c //a와c 사이에 한글자가 들어가있는 문자열 검색 ex) agc 6. ^a //첫번째 글자가 a가 아닌 문자열 검색 ex) b..

LOS 포스팅에 앞서 내용이 틀릴 수도 있으며, 해당 부분 지적은 감사히 받겠습니다. 14단계 소스코드이다. 이번엔 strlen() 함수가 등장했다. shit의 문자열 값이 1보다 크게 입력하지 못하도록 필터링되었다. 또한 공백과 \n, \r. \t 등이 필터링되어있다. result 값이 1234가 되면 문제가 해결된다. 처음에 나는 문자열 길이 제한 우회 문제인 줄 알았다. 하지만 문제를 제대로 읽지 않는 실수를 또 했다. 항상 마음이 급하다. 쿼리는 select 1234 from {$_get [shit]}prob_giant where 1";이다 사실 sql 도 잘 알지 못해 select에 변수가 아닌 1234를 넣으면 어떤 결과를 출력할지도 몰랐다. 하지만 문제만 잘 읽었다면 함수가 뭐가 쓰였든, 중..

LOS 포스팅에 앞서 내용이 틀릴 수도 있으며, 해당 부분 지적은 감사히 받겠습니다. 13단계 소스코드이다. 이번은 전 단계에서 조건이 더 추가되었다. no에 substr, ascii, or, and, like, 0x, = 이 필터링되었다. 이것을 우회하고 no 값과 pw 값을 찾아서 넣으면 문제는 해결된다. 일단 blind sql을 수행하기 위한 조건인, 참과 거짓일 때 웹 페이지가 다르게 출력되는 걸 찾아야 한다. 공백 우회는 %09 (tab)으로 등호는 in으로 우회하여 blind sql을 시작할 조건을 갖췄다. no 값은 2다. and는 %26%26으로 우회했다. =(등호) 우회방법 1. like // 등호와 같은 방법으로 쓰인다 2. instr(a, "b") // instr(a, "b") , i..

LOS 포스팅에 앞서 내용이 틀릴 수도 있으며, 해당 부분 지적은 감사히 받겠습니다. 12단계 소스코드이다. no 에는 ascii, substr, probl , _ ,. , () 이 필터링된 모습이다. 입력받은 pw 값은 ', ", null을 필터링하는 모습이고 그 값이 admin과 같으면 해결된다. pw 뒤에 싱글 쿼터가 바로 막힌다. 일단 싱글 쿼터 필터링을 우회해야 한다. 그렇게 생각했는데 새로 배운 게 있다. no 뒤에는 더 이상 쿼리문이 없기 때문에 바로 추가 쿼리를 날릴 수 있다. 간단한 쿼리로 참값을 만들어본다. 이제 blind sql로 pw 값과 no 값을 알아내면 된다. pw의 자릿수는 8자리이다. 또한 admin의 no 값은 2다. 이제 admin 의 pw 값을 알아내면 되는데 subs..

1단계부터 11단계까지 문제를 풀면서 겪었던 불편한 점 중 가장 크게 느껴진 건 연산속도였다. 기존 내가 쓰는 소스코드는 아스키 문자열 33번부터 127까지 for 문으로 돌려가며 하나하나 비교했다. 하지만 이방법은 값이 아스키코드의 후순위로 갈수록 연산속도가 상당히 늘어났고 해결해야겠다 생각했다. 그래서 이진검색으로 새로 코딩하였다. 연산속도가 훨씬 빨라져서 기분이 좋아졌다. 하지만 mid 값에 1을 더해야 원래 ascii 값이 나오게 되는데 이는 아직 논리적으로 이해를 하지 못해 답답하다. ㄴ22.01.07추가 : 쿼리가 등호면 MID 값의 아스 값이 추출된 값과 같지만 부등호를 만족해야 하기 때문에 +1을 한다.

LOS 포스팅에 앞서 내용이 틀릴 수도 있으며, 해당 부분 지적은 감사히 받겠습니다. 11단계 소스코드이다. 이번엔 or, and 이후 추가로 substr 문자열과 =연산자가 필터링당했다. 등호와 substr() 함수를 사용하지 못하게 의도한 것이다. 또한 pw를 입력받아 ', ", null을 제거하고 db내의 admin의 pw와 비교하여 참이면 문제가 풀리는 것 같다. substr() 함수 대신 left(), right() 함수를 사용하면 해결된다. 1. left(문자열, 길이) // 문자열을 왼쪽에서 길이만큼 추출한다. 2.right(문자열, 길이) // 문자열을 오른쪽에서 길이만큼 추출한다. 또한 등호는 like , in, instr, 부등호 등으로 우회할 수 있다. 1. like // (=)과 똑..
- Total
- Today
- Yesterday
- 코딩테스트
- lord of sql
- 코딩테스트 준비
- static
- zixem
- los 15
- spring
- java
- 백준 피보나치 수열
- 김영한 실전 자바 기초
- 김영한 실전 자바 중급
- 프로그래머스 상품을 구매한 회원 비율 구하기 파이썬
- 프로그래머스
- 상품을 구매한 회원 비율 구하기 파이썬
- samron3
- extends
- 프로그래머스 상품을 구매한 회원 비율 구하기
- 백준 피보나치
- 기술스택
- 스프링
- 김영한
- ys.k
- 김영한 실전 자바 기본
- Los
- webhacking.kr
- 백준
- samron
- 상속
- 자바
- los 15단계
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |