본문 바로가기

Web Hacking

(91)
[Lord of SQLInjection] 7번 orge write up 위 사진은 문제 코드이다. 이전 문제와 같이 첫 번째 필터링까진 or, and까지 필터링이 같지만, 2번째 필터링에서 addslashes함수를 통해 싱글쿼터를 필터링하고 있다. 또한 이 문제는 쿼리문이 참이 되는것 만으로 해결 되지는 않으며 blind sql injection을 통해 admin의 pw을 구해 입력해야한다. 먼저 1번째 필터링이 통과되면 hello [uid]가 나오는 점을 이용해야한다. 첫 번째 필터링은 싱글쿼터가 살아있기 때문에 sqli이 가능하다. or 필터링이 되고 있어 || 로 우회 후 새로운 조건 절을 만들었다. and를 이용헤 pw의 조건을 비교할 수 있다. (and 연산을 대체할 수 있는 &&는 url에서 사용할 경우 url encoding이된 %26으로 사용해야 한다. 이유로..
[Lord of SQLInjection] 6번 darkelf write up 위 사진은 문제 코드이다. 이전 문제에서 or과 and 필터링이 추가 되었다. 마찬가지로 id='guest'로 하드코딩 되어 있기 때문에 or 구문을 이용해서 새로운 조건절을 선언해주어야 한다. 문제는 id가 admin일 경우 해결된다. and를 대체할 수 있는 연산자는 &&이 있으며 or은 || 가 있다. pw=a' || id='admin'%23 클리어
[Dreamhack] error based sql injection write up 문제 설명이 간단하게 나와있다. 레벨 1인 만큼 기본적인 걸로 풀릴 것 같다. blind sql injection과 마찬가지로 입력폼과 내 입력이 쿼리문에 어떻게 들어가는지 확인할 수 있는 html 코드가 보여진다. 코드를 보자. import os from flask import Flask, request from flask_mysqldb import MySQL app = Flask(__name__) app.config['MYSQL_HOST'] = os.environ.get('MYSQL_HOST', 'localhost') app.config['MYSQL_USER'] = os.environ.get('MYSQL_USER', 'user') app.config['MYSQL_PASSWORD'] = os.envir..
[Dreamhack] blind sql injection advanced write up 이 문제는 비밀번호에 한글이 포함된다. 한글은 인코딩 시 유니코드로 표현되기 때문에 1바이트에서 4바이트 사이의 가변적인 바이트 값을 가지게 된다. 이점에 유의하며 풀어야 한다. 문제를 보면 쿼리 문과 입력 폼이 하나 존재 한다. 코드를 보면, import os from flask import Flask, request, render_template_string from flask_mysqldb import MySQL app = Flask(__name__) app.config['MYSQL_HOST'] = os.environ.get('MYSQL_HOST', 'localhost') app.config['MYSQL_USER'] = os.environ.get('MYSQL_USER', 'user') app.con..
[Webhacking.kr] old-8 write up 문제 접속하면 hi guest가 나온다. 코드를 보면 접속 사용자의 user_agent값을 가져와서 from가 있는지 확인한다. 그 후 서버 DB의 id의 개수를 가져오며 70개 이상일 경우 DB 데이터를 지운다. db의 agent가 접속자의 user_agent와 같은 id를 조회하고 id값이 있으면 echo해주고 admin일 경우 문제가 해결된다. 반대로 조회된 id가 없을 경우 insert 구문으로 DB에 agent, ip, 'guest'를 삽입한다. 먼저 패킷을 잡아 user_agent값을 admin으로 변조해봤다. 👆 위와같이 insert 문이 제대로 삽입 후 done!이라는 문자열이 나온다. 변조할수 있는 부분은 user_agent 부분이므로 이걸 이용해 해결해야하는 것 같다. user_age..
[Lord of SQLInjection] 5번 wolfman write up 이번 문제는 공백이 필터링 되고 있으며, id가 admin일때 문제가 해결된다. 그러나 코드에는 id가 guest로 하드코딩 되어 있기 때문에 수정이 불가능하기 떄문에 or id='admin'으로 만들어줘야 한다. 공백은 %09로 우회가 가능하다.
[Lord of SQLInjection] 4번 orc write up 이번 문제는 두 번의 필터링을 진행하고 있다. 먼저 prob _ . ( ) 을 필터링하며 2차적으로 addslashes함수를 이용하여 싱글쿼터를 필터링 중이다. addslashes는 싱글쿼터('), 더블쿼터(""), 널문자, 백슬레쉬(\)에 해당하는 문자가 들어오면 백슬레쉬를 앞에 붙여 sql injection을 방어하게 된다. ex) ' -> \' 1차 필터링은 가볍게 우회가 되나, addslashes를 우회가 안된다. 싱글쿼터를 어떻게 우회할지 생각해봐야 한다. addslashes로 싱글쿼터가 이스케이프될 경우 이를 우회하기 위해선 한 가지의 전제조건이 선행되어야 한다. euc-kr을 utf-8로 변환하는 작업을 하고 있는 경우에만 멀티바이트 삽입을 통해 우회가 가능하다. 먼저 '(%27)을 보낼경우..
[Lord of SQLInjection] 3번 goblin write up 이번 문제는 no에 값을 받고 있으며 ', ", `를 추가적으로 필터링하고 있다. 우선 id가 admin일때 문제가 해결된다. 현재 코드상엔 id가 guest로 코딩되어 있으므로 or를 이용하여 앞 조건문을 거짓으로 만든 후 id에 admin을 입력하면 된다. no에 1을 줬더니 guest가 참이 됐다. admin의 no를 막 입력해봤는데, 풀렸다 ㄷㄷ.. 정석 풀이 👇 1. char 함수 이용 char함수에 아스키 코드값을 주면 문자열을 반환환다. 2. 16진수 이용 admin의 16진수를 입력하여 우회하였다.