본문 바로가기

전체 글

(156)
[Webhacking.kr] old-49 write up sqli 문제, 바로 코드로 ㄱㄱ lv에 싱글쿼터가 없어서 탈출 안해도 된다. or을 이용해서 앞 조건 거짓 만든 뒤 뒤 조건을 id='admin'으로 만들면 끝 0||id=0b110000101100100011011010110100101101110
[Webhacking.kr] old-46 write up 문제이다! 친절히 SQLI 문제라고 알려주고 있다. 코드를 구경해보자. 먼저 문제가 해결되는 조건부터 살펴본다. db에 쿼리문을 날려 조회된 id값이 admin일 경우 해결된다. 쿼리문은 다음과 같다. select id, cash, from chall46 where lv=$_GET[lv] 싱글쿼터도 없기 때문에 싱글쿼터 탈출은 생각안해도 된다. 필터링 역시 str_replace함수로 대체만 해주기 때문에 두 번 써주면 모두 우회가 된다. 내가 생각하는 페이로드는 다음과 같다. 앞 조건 lv=? 거짓을 만든 후 or id='admin'을 해서 참을 만들어준다. 그러나 addslashes로 싱글쿼터를 필터링하고 있기 때문에 싱글쿼터는 못 쓴다. 대신 char함수나 16진수, 2진수, concat 함수 이용 ..
[Dreamhack] sql injection bypass WAF Advanced write up 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.environ.get('MYSQL_PASSWORD', 'pass') app.config['MYSQL_DB'] = os.environ.get('MYSQL_DB', 'users') mysql = MySQL(app) template =''' SE..
[Dreamhack] sql injection bypass WAF write up SQL Injection을 막는 WAF를 간단하게 설정해 놓고 admin의 pw를 구하는 간단한 문제이다. 바로 문제와 코드를 보자! 먼저 문제이다. 이전 문제와 같이 입력 폼이 존재하며 내 쿼리문을 볼 수 있다. 코드는, 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.environ.g..
[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..