일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 스프링구조
- 세션
- 자바 문법
- APM
- 클라이언트
- 자바 Array list
- sqlinjection
- Lord of sqlinjection
- 웹 개발
- injection
- 자바 has-a
- lord of sqlinjection`
- sql
- lord of sqlinjectin
- 소켓
- Los
- XSS
- 쿠키
- 자바 is-a
- 보안
- php
- 자바
- 해킹
- 마이크로서비스 아키택트
- 스프링
- 스프링 종류
- 세션쿠키
- 스프링 특징
- 서버
- 웹
- Today
- Total
목록IT 보안 (28)
LJ

18번 문제 nightmare 다. pw 값이 6을 넘으면 안된다. 이 문제를 봤을 때 일단 무엇을 필터링 하는지 본다.prob, _ , (), #, - 을 필터링 하고 있다. 그러므로 ')으로 파라미터를 닫아주고 주석처리를 해야하는데 -, 나 # 이 필터링 되어있기에 다른 방법을 찾아야한다. mysql 주석은 --, #, /**/ 이외에 mysql은 쿼리를 읽을 때 %00 을 만나면 멈춘다는 것을 알게 되었다. 주석은 마무리 되었고 pw 값을 항상 참으로 만들어 나오는 값을 보면 ' )=0;%00 답이 나오게 된다. key point MYSQL 에서는 ;%00로 주석 처리가 가능하다

17번 문제이다 위 코드에서 1. $_GET['id'] 값을 역순으로 바꾸고(strrev), 그 값을 이스케이프 처리하여(addslashes) SQL 인젝션 공격을 방지한다.( strrev함수는 문자열을 거꾸로 뒤집는 함수 )( addslashes함수는 싱글쿼터, 더블쿼터, 역슬래시, Null Byte 앞에 \를 추가해주는 함수 ) 2. (prob, _, ., ()) 필터링 이것을 참고하여 문제를 풀면 된다. 쿼리문 자체는 이전 문제인 16번 문제와 다를게 없지만 문자열이 거꾸로 된다는 것과 역슬래시가 이스케이핑된다는 것이 다르다. pw 의 값은 그냥 거꾸로 넣어주면 된다. 이제 id 값을 봐야하는데 id 파라미터 뒤에 싱글쿼터를 이스케이핑 할 수 있으려면 %00 이나 " 이 될..

16번 문제이다 싱글 쿼터를 필터링 하고 있다. id 파라미터에 역슬래시를 입력하면 쿼리에서 보이는 뒤의 싱글쿼터를 이스케이프 처리하기 때문에 ' pw=' 까지가 id 파라미터의 값이 된다. 그래서id=\&pw= or 1=1%23 를 입력하면 문제가 해결된다. 여기서 &은 왜 id 파라미터로 인식하지 않을까 궁금하는 사람이 있을 것이다. &는 URL 쿼리 파라미터를 구분하는 데 사용하는 표준 구분자로 사용되기 때문이다. 그래서 url 인코딩(%26)으로 넣었을때는 이스케이프 처리되어 id 파라미터 값으로 나타나게 된다.

15번 어쌔신 문제이다. admin의 pw의 값을 맞추면 문제가 해결될 거같다. SELECT * FROM 테이블 WHERE 컬럼 LIKE [PATTERN]%모든 문자_한 글자A%A로 시작하는 모든 문자%AA로 끝나는 모든 문자%A%A를 포함하는 모든 문자 위 코드의 쿼리의 like 절에 사용되는 패턴을 이용한 표이다. 모든 pw를 다 포함하므로 맨위에 있을 것으로 예상되는 guest가 먼저 나오게된다. 하지만 우리는 admin의 비밀번호를 알아내야 한다. 그래서 '8_%''83_%' ....이런식으로도 진행할 수 있지만 간단한 코드로 일단 길이부터 구해보겠다. import requestsdef check_length(url,cookie): head={"PHPSESSID":..

14번 문제이다. 쿼리를 보면 shit 파라미터에 공백을 넣으면 될 거 같다. \n ->%0a\r ->%0d\t -> %09 을 제외한 공백 우회 문자URL 인코딩에서 사용되는 16진수 표현인 %0b 나 %0c 를 이용한다. %0d (CR, Carriage Return): 캐리지 리턴 문자이며, 이 문자는 텍스트의 커서를 현재 위치의 맨 앞(라인의 시작)으로 이동시키는 데 사용된다. 주로 윈도우 환경에서 줄 바꿈을 표시할 때 사용되며, CRLF(Carriage Return Line Feed) 조합의 일부로 사용된다.%0a (LF, Line Feed): 라인 피드 문자를 나타내며 이 문자는 텍스트에서 줄 바꿈을 의미한다. 유닉스 및 유닉스 계열 시스템(Linux, macOS 등)에서는 주로 LF만을..

13번 bugbear이다. 첫번째 쿼리에서 prob_.()'substrascii=orand공백like0x 필터링을 한다. 그러므로 substr -> substring -> mid ascii -> ord 근데 or 필터링 때문에 ord -> hex or -> || and -> %26%26 like -> in 공백 -> %0d, %0a ,%09 아무거나 골라쓰면 된다. %09 : tab%0a : line feed%0b : vertical tab%0c : form feed%0d : carriage return+ : 공백과 같은 뜻. /*(hex 반환 타입은 string이라 in 을 써서 비교한다.)*/ import requestsdef check_length(url,cookie): head={"..

12번 다크 나이트 문제이다. 위의 코드를 보면 첫번째 쿼리에선 prob, _, ., () 문자가 포함된 경우 "No Hack _" 메시지를 출력하고 종료하게 되고 ' 문자가 포함된 경우 "HeHe" 메시지를 출력하고 종료하게 되고 마찬가지로 ', substr, ascii, = 문자가 포함된 경우 "HeHe" 메시지를 출력하고 종료하는데 검사하는 파라미터는 이 조건 하 나만 no의 파라미터이다. 우리는 no 값 뒤에 인젝션을 시도하여 원하는 관리자의 비밀번호를 가져올 것이기 때문에 마지막 입력값 검증 조건이었던 ', substr, ascii, = 를 사용하지 않아야한다. 그러면 substr 을 대신 할 함수 -> substring, mid 가 있다. = 도 like를 대신해 사용한다..

11번 문제 golem 이다. query : {$query}"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id']) echo "Hello {$result[id]}"; $_GET[pw] = addslashes($_GET[pw]); $query = "select pw from prob_golem where id='admin' and pw='{$_GET[pw]}'"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("golem"); hi..