분류 전체보기

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 값으로..

Programming/Web

[Web Secure] Lord of Sql Injection #3

no query 의 조건을 or 로 무력화시키면 guest 의 레코드를 얻을 수 있다. 하지만, 문제의 조건은 guest의 계정이 아닌 admin 계정을 얻어야 한다. 그래서 이전 문제와 같이 no=10 or id='admin' 을 입력하였지만, preg_match 에서 싱글쿼드, 더블쿼트가 모두 필터링 되어 결국엔 'No Quotes ~_~' 메시지만 얻게 된다. 이걸 해결하기 위해 문자열을 string 에서 hex 코드로 변경하여 입력하면 해결 된다.

RichardBang
'분류 전체보기' 카테고리의 글 목록 (4 Page)