Programming/Web

Programming/Web

[Web] CloudFlare & Nginx SSL/TLS 인증

웹서버를 구축할 때 직면하는 문제 중 하나가 보안에 관한 것이다.웹 프로토콜은 HTTP 와 HTTPS 가 있고 이중 HTTPS 가 보안 인증된 프로토콜이다. 번외로, SSL 은 인증 오래된 보안 인증이고 지금은 SSL 3.0을 기반으로 TLS 로 발전해서 현재는 TLS로만 사용되고 있지만 워낙 SSL이름이 유명해서 그냥 SSL이라고 부르기도 하는 거란다. SSL 보안인증을 수행하기 위해서는 웹서버에서 공인인증된 SSL 인증서를 구축해야 하나 비용과 저사양 서버를 사용할 때의 SSL 보안 동작 부하를 줄이기 위해서 Cloudflare 를 활용 할 수 있다.1. 웹 데이터 기본 흐름클라이언트 (웹브라우저) 는 브라우저에 사이트 주소를 입력하여 접속한다. 이때 사이트 이름을 도메인이라고 하고 도메인은 실제 구..

Programming/Web

[Web] Prepared Statement

1. 개요 Server 로 쿼리 요청을 통해서 Database 의 접근을 하는 경우 Sql Injection 이 발생할 수 있는 위험성이 있다. 이를 해결하는 방법으로 Prepared Statement를 구성하고 입력받은 value 값에 injection 이 들어가서 sql 쿼리의 명령에서 원치 않는 동작이 발생되는 것을 방지한다. 2. Python 구현 Flask 서버를 사용하여 PD를 구현하였다. 우선 get 쿼리를 통해 id와 pw 를 얻고 이를 PD를 적용하여 sql query 를 수행하도록한다. #Prepared Statement test @app.route('/psapi', methods=['GET']) def handlePSApi(): param_id = request.args.get('id..

Programming/Web

[Web Secure] Lord of Sql Injection #11

11번 문제 golem 입니다. 문제의 핵심은 orge 문제처럼 admin의 pw를 찾는 것인데 먼저 guest의 query 를 무시하게 하고 admin 의 레코드를 얻어야 합니다. 그런데 이번엔 or, and, substr, '=' 문자열을 못쓰는군요.. 대체 기능으로 or는 '||'으로, and 는 %26%26, '=' 는 like 로 쿼리문을 변경하면 됩니다. 아래와 같이 입력하면 우선 admin 레코드는 얻는군요. 다음으로 파이썬 코드를 이용해서 최종적으로 암호를 얻어내서 통과합니다.

Programming/Web

[Web Secure] Lord of Sql Injection #10

문제 10번 skeleton 입니다 pw 쿼리를 받지만 뒤에 있는 false 값을 주는 1=0 구문이 있습니다. pw 의 쿼리 값으로 빈 값을 보내고 이전에 했던 ||id=admin 과 comment 구문을 넣으면 뒤의 조건을 없앨 수 있습니다.

Programming/Web

[Web Secure] Lord of Sql Injection #9

문제 9번 vampire 입니다. 이런, 8번에서 파악한 문제를 해결해버렸네요.. 입력된 value를 lower 로 변환후에 admin 과 비교를 하고 있습니다. 하지만, replace 구문을 역이용하면 되겠네요. 입력을 admadminin 을 하면 중간에 있는 admin 값만 없어지고 앞뒤에 있는 admin 이 남게됩니다.

Programming/Web

[Web Secure] Lord of Sql Injection #8

문제 8번 troll 입니다 먼저 해석을 해보면 첫번째로 쿼트를 사용하지 못하고 admin 문자열을 넣지 않고서 admin 레코드를 얻어야 하는 문제입니다. 여기에서는 조건이 admin 을 넣으면 안되는 것이므로 Admin 을 입력해보면.. 그냥 풀리네요.. 이유는 뭘까요?? php 에서의 문자열 비교는 기본적으로 case-insensitive 입니다. 따라서 문자열의 대소문자를 구분하지 않고 같으면 true 조건으로 해결되는데 이를 해결하기 위해서는 '==' 대신에 '===' 를 사용해야 합니다.

Programming/Web

[Web Secure] Lord of Sql Injection #7

7번 orge 문제입니다. 이건 4번 문제 orc 와 같은 문제이지만 조건이 or 와 and 문자열을 넣을 수 없습니다. 그렇기 때문에 || 연산자처럼 and 대신에 '&&' 입력하였지만 get request 에서는 쿼리의 구분자로 사용되기 때문에 제대로 전달이 되지 않습니다. 예로 아래와 같이 입력하고 응답쿼리를 보면 && 이후는 다른 key의 쿼리요청으로 인식해서 짤립니다. https://los.rubiya.kr/chall/orge_bad2f25db233a7542be75844e314e9f3.php?pw=%27||length(pw)=%278%27&&id=%27admin 해결하기 위해서는 이것또한 && 대신에 %26%26 hex 코드로 전달을 하면 됩니다. 매크로를 통해 얻은 암호로 최종적으로 풀리네요.

Programming/Web

[Web Secure] Lord of Sql Injection #6

6번 Darkelf 문제는 or 와 and 문자열을 사용하지 않고 admin 레코드를 얻어야 한다. preg_match 조건이 다르고 이미 query 문에서 id를 지정하였지만 5번 문제와 동일한 패턴으로 해결 할 수 있다.

Programming/Web

[Web Secure] Lord of Sql Injection #5

5번 Wolfman 문제는 띄어쓰기를 사용하지 않고서 admin 레코드를 얻는것이다. 4번 문제를 겪으면서 '||' operator 도 알았으니 문제는 쉽게 풀렸다.

Programming/Web

[Web Secure] Lord of Sql Injection #4

4번째 문제이다. 문제 1,2 번 처럼 pw 의 조건을 무력화 시킨다. 진짜 문제는 pw 의 값을 찾아내야하는 blind injection 이다. 그러기 위해서는 pw 길이를 찾고 모든 문자열을 대입해서 비밀번호를 찾아야 한다. 사용하는 함수는 length 와 substr 이다. length 로 먼저 암호의 길이를 찾아야 한다. 길이가 4와 8 모두 통과를 한다. 그말은 암호 길이가 4인 레코드와 8인 레코드가 모두 존재한다는 것이다. 그럼 admin 의 암호 길이는?? length 함수 옆에 조건 id=admin 을 붙여준다. 그리고 암호를 대입하는 것은 아래의 블로그에 도움을 받았다. 매크로 코드도 있어서 python으로 돌려보면 암호도 쉽게 찾을 수 있다. 여기에서 암호를 찾을 때 ascii 값으로..

RichardBang
'Programming/Web' 카테고리의 글 목록