요상한 게임이 나온다. rank페이지로 접속하면은
insert문으로 점수를 매긴다는 걸 알 수 있다.
* trim 함수는 앞과 뒤 공백을 삭제시킴
일단 insert문이여서 할 수 있는게 제한적이다.
score 점수를 클릭하면 저렇게 뜨는데 score인자에 다르게 값을 줘서 injection이 되는지 확인해 보겠다.
각각 score 뒤에 true와 false값을 줘보니 결과값이 달랐다.
그러면 flag확인을 위해 blind sql injection 정도 사용해볼 수 있긴한데 flag의 테이블 필드명을 모르니
필드명을 뽑아보겠다.
limit 0,1 procedure analyse()
sql절 뒤에는 limit를 사용할 수 있는데 원래 limit는 아이템 수 제한을 위해 사용되지만 뒤에 procedure analyse()함수를 붙이면은 DB명, 테이블명, 컬럼명 등의 획득이 가능하다.
참고로
limit 0,1은 첫째필드
1,1은 둘째필드
2,1은 셋째필드....
이렇게 각각의 필드를 확인할 수 있다.
flag는 아까 insert문에서 셋째필드였는데 limit 2,1 procedure analyse()를 붙여주면
db명, 테이블명, 그리고 필드명을 확인할 수 있다.
필드명은 p4ssw0rd_1123581321이다.
참고로 이번 문제에선 blind sql injection에 ascii, substr 등의 함수와 따옴표 등을 사용하지 못했다.
각 함수를 사용하면 no hack이라고 뜬다.
이를 위해
ascii, 따옴표 => ord, chr 함수로 대체
substr => mid, left, right 함수로 대
ord, chr은 유니코드 정수로 변환하는 함수이고
mid, left, right는 각각 문자의 중앙 왼쪽 오른쪽을 몇글자씩 가져온다.
자세히 볼 부분은
ord(right(left(p4ssw0rd_1123581321,{i}),1))={s}
요 부분이다.
p4ssw0rd_1123581321필드의 왼쪽에서 i번째까지 글자를 가져오고 그 글자들의 맨 오른쪽 글자가 flag와 동일한지 확인한다.
score=1일때 Piterpan이 출력되므로 위와 같이 코딩했다.
그러면은 flag를 획득 가능하다.
참고로 글자 수 체크하는 코드를 안짜서 저렇게 뒤에 대괄호가 여러번 나오는데 글자수 체크 코드는 단순히
length( p4ssw0rd_1123581321) = 글자수 ? 인지를 blind sql injection으로 여러번 돌려 체크하면 된다.
'Web Hacking > Webhacking.kr' 카테고리의 다른 글
[Webhacking.kr] old-29 풀이 (0) | 2024.04.29 |
---|---|
Webhacking.kr old-34풀이 (2) | 2024.02.08 |
Webhacking.kr old-52 풀이 (0) | 2024.02.04 |
Webhacking.kr old-48 풀이 (0) | 2024.01.27 |
Webhacking.kr old-53풀이 (0) | 2024.01.07 |