-
[load of sql injection] goblinwebhacking/load of sql injection 2018. 11. 15. 15:49반응형
id 부분에 변수 값이 아닌 'guest'로 지정을 한 문제이다.
mysqli_fetch_array 반환 한 값을 가진 id변수가 admin이면 문제가 풀린다.
싱글쿼터 ' 더블쿼터 " "prob"문자열 모두 필터링이 된다.
그래서 필자가 처음에 생각했던 방법인
union select * from prob_goblin where id = 'admin' 은 수행되지 않고 필터링 된다.
Db 테이블을 머릿속으로 생각해보면서
1
guest
2
admin
이렇게 2개의 데이터와 순서로 되있을거라 추측했다.그래서 결과순서를 order by로 거꾸로 하였더니 풀렸다.
* db table을 추측하는 것도 필요하다.
* and를 끝내면 or 로 모두 출력이 된다.
* 문자열은 쿼터로 묶어주어야한다, "admin", 'admin'
* select 에서 id만을 찾기 때문에 id 값이 아닌 no 값만 맞추어도 그에 맞는 id가 나온다. admin도 2로 하면 나옴
solve 1 -> order by
order by [컬럼A] ASC : 오름차순 정렬
order by [컬럼A] : 오름차순 정렬
order by [컬럼A] DESC : 내림차순 정렬
select A, B from C order by A DESC, B; : A 내림차순, B 오름차순
select A from C where A < 10 order by A DESC; : 조건식 내림차순
Solve 2 -> char
CHAR(77,121,83,81,76); : ASCII 코드 값을 해당하는 문자 또는 문자열로 반환한다.
* 문자열로 반환되기 때문에 문자열로 인식한다.
Solve 3 -> Hex
or id = 0x123456789 : 이런식으로 Hex값을 집어넣으면 싱글쿼터 없이 admin 문자열로 전달할 수 있다.
* admin으로 하면 쿼터가 없어서 변수로 인식한다.
* Hex로 하면 문자열로 반환되기 때문에 문자열로 인식한다.
Solve 4 -> no 게싱
no 가 1이면 guest하고 맞기 때문에 출력
admin은 1이 아닌 값이다.
or no = 1~ ... 까지 게싱하여 대입하면 admin이 나올 것이다.
Solve 5 -> limit 게싱
limit 0, 1 : 테이블 첫 번째 값에서 한 개만 가져온다는 의미이다.
limit에서 Index는 0부터 시작한다.
Solve 6 -> ord()
ord( 인자1 ) : 인자1의 문자열의 가장 왼쪽 값을 아스키코드로 변환한다.
ord(id) = 97 : id 컬럼의 데이터 중 문자열 가장왼쪽에 아스키코드가 97인 값을 찾아라.
/* 조건을 어떻게 하는건지 공부하자 */
id = 'admin' : id컬럼에서 admin인 데이터 조건
ord(id) = 97 : id컬럼에서 가장 왼쪽 문자 아스키 코드값이 97인 조건
반응형'webhacking > load of sql injection' 카테고리의 다른 글
[load of sql injection] darkelf (0) 2018.11.16 [load of sql injection] woolfman (0) 2018.11.16 [load of sql injection] orc (0) 2018.11.16 [load of sql injection] cobolt (0) 2018.11.14 [load of sql injection] gremlin (0) 2018.11.14