위의 코드를 보면 총 입력할 수 있는 항목이 2가지가 있다.
1. id='{$_GET[id]}'
2. pw='{$_GET[pw]}'
먼저 각 항목에 값을 입력하면 어떻게 보이는지 아무거나 입력해본다.
(파라미터에 id와 pw를 입력한다.)
SQL 주입 공격을 방지하기 위해 특정 문자에 대한 사용자 입력을 확인하지만
주석을 할때 사용하는 문자를 필터링하지는 않는것으로 보인다.
일단 아이디 비밀번호를 모두 모르기 때문에 주석만 가지고는 문제를 풀기 어려울것 같다.
논리 연산자를 사용하여 문제를 풀어보려 한다.
1. 논리 연산자만 사용하기
ID에 임의의 값을 입력하고 PW 부분에 그 유명한 1' or '1'='1 을 입력한다.
pw='1' or '1'='1' 형태가 되어 쿼리가 동작하게 된다.
2. 논리 연산자 와 주석을 함께 사용하기
1번의 원리를 이용하여 이번에는 아이디 비밀번호를 각각 입력하는것이 아닌
아이디 부분에만 값을 입력하는 방법으로 주석을 입력하여 뒷부분은 생략되도록 한다.
ID에 asdfsfd' and pw='1' or '1'='1'# 을 입력한다. (id = 'asdfsfd' and pw='1' or '1'='1'#')
이것은 문자를 ASCII Encoding한 것이다. (구글링하면 나옴)
#을 ASCII Encoding 하면 %23이라는 값이 나오고
이것을 입력하면 다음과 같이 문제가 해결되는 것을 볼 수 있다.
'매일 해킹공부 > 웹 해킹' 카테고리의 다른 글
[Lord of SQL injection] 3번 문제 goblin 풀이 (1) | 2023.05.08 |
---|---|
[Lord of Sqlinjection] 2번 문제 cobolt 풀이 (0) | 2023.01.21 |
SQL Injection 대응방안 (0) | 2022.11.14 |
SQL Injection - 데이터 추출(Error Based SQLi) (0) | 2022.11.13 |
SQL Injection - 데이터 추출(Union) (0) | 2022.11.05 |