-
[DreamHack] simple_sqli2022/Write-Ups 2022. 8. 23. 00:07
1팀 정유진
웹 문제를 풀어보자
파일을 다운받아 압축을 풀면 파이썬 파일이 있다.
SQL INJECTION 취약점이란
웹 해킹 기법 중 하나.
응용 프로그램 보안 상의 허점을 의도적으로 이용해, 악의적인 SQL문을 실행되게 함으로써 데이터베이스를 비정상적으로 조작하는 코드 삽입 공격 방법이다
from flask import Flask, request, render_template, gimport sqlite3import osimport binascii
app = Flask(__name__)app.secret_key = os.urandom(32)
try:FLAG = open('./flag.txt', 'r').read()except:FLAG = '[**FLAG**]'
DATABASE = "database.db"if os.path.exists(DATABASE) == False:db = sqlite3.connect(DATABASE)db.execute('create table users(userid char(100), userpassword char(100));')db.execute(f'insert into users(userid, userpassword) values ("guest", "guest"), ("admin", "{binascii.hexlify(os.urandom(16)).decode("utf8")}");')db.commit()db.close()
def get_db():db = getattr(g, '_database', None)if db is None:db = g._database = sqlite3.connect(DATABASE)db.row_factory = sqlite3.Rowreturn db
def query_db(query, one=True):cur = get_db().execute(query)rv = cur.fetchall()cur.close()return (rv[0] if rv else None) if one else rv
@app.teardown_appcontextdef close_connection(exception):db = getattr(g, '_database', None)if db is not None:db.close()
@app.route('/')def index():return render_template('index.html')
@app.route('/login', methods=['GET', 'POST'])def login():if request.method == 'GET':return render_template('login.html')else:userid = request.form.get('userid')userpassword = request.form.get('userpassword')res = query_db(f'select * from users where userid="{userid}" and userpassword="{userpassword}"')if res:userid = res[0]if userid == 'admin':return f'hello {userid} flag is {FLAG}'return f'<script>alert("hello {userid}");history.go(-1);</script>'return '<script>alert("wrong");history.go(-1);</script>'
app.run(host='0.0.0.0', port=8000)해당 파일의 전체 코드이다.
로그인 페이지를 들어가서
id/password에 각각 guest/guest 를 입력하면 로그인된다.
저 위 코드에 값이 나와있었기 때문에 알 수 있었지만
userid가 admin인 경우는 나와있지 않다..
따라서 비밀번호 검증을 무력화 시키기위해서 비밀번호 부분을 아예 주석처리를 해버린다.
그럼 간단하게
userid는 admin"--이 되고
userpassword는 아무거나 입력해도 로그인된다.
'2022 > Write-Ups' 카테고리의 다른 글
[써니나타스] Game 28 (0) 2022.08.23 [써니나타스] Game 26 (0) 2022.08.23 [ctf-d] 거래 조건 알고 있잖아요? (0) 2022.08.20 [ctf-d] 저는 당신의 생각을 알고 있습니다. (0) 2022.08.20 [ctf-d] broken (0) 2022.08.17