티스토리 뷰

SQL injection/webhacking

webhacking 39번

ys.k 2022. 7. 28. 21:32

포스팅에 앞서 내용이 틀릴 수도 있으며, 해당 부분 지적은 감사히 받겠습니다.

39번 문제이다.

무언가 sql injection 문제이다.

소스코드를 보자.

post 형식으로 id 파라미터를 입력받으며 \\(역 슬래쉬)를 제거하고, '는 ''로 치환하며 15번째 글자까지만 입력받는다.

입력받은 값이 id의 길이가 14보다 작고, 입력받은 id값이 존재하면 문제가 해결된다.

그리고 select 쿼리를 잘 보면 뒤에 싱글 쿼터가 하나 빠져있는 모습을 볼 수 있다.

여기까지만 보고 처음에 아 역 슬래쉬와 멀티 바이트를 활용한 필터링 우회 문제구나라고 생각했었다.

하지만 여 러시도를 통해 뭔가 잘못되어갔다는 걸 느꼈고, 다른 사람의 의견을 참고했다.

바로 substr 부분에서 취약점을 발견한 것인데, 15자리까지 받는 점과 싱글 쿼터를 2개로 늘려주는 점을 이용하여 문제를 해결하였다.

또한 mysql, sql server, oracle에서는 'a'='a ' -> true로 인식된다고 한다. 

바로 알아보자.

문제를 푸는 방법은 굉장히 간단하다

쿼리 : a             ' 

해당 쿼리를 입력하면 문제는 해결된다.

하지만 select쿼리를 잘 보면 결국 id를 맞추긴 해야 하는데.. a, 와 1 등 여러 가지 문자를 넣어도 풀린다.

이 부분이 이해가 가지 않아 아무거나  입력해서 풀어보았다.

결과는 문제는 풀리지 않았고, 우리는 여기에서 id값을 풀기 쉬운 문자로 여러 개 넣어놨다는 사실을 알 수 있다.

문제 해결

시행착오

1. mysql, oracle, sql server에서는 'a'='a ' -> true 가 성립된다.

    ㄴ 10자리의 문자열이면 비어있는 부분에 패딩 문자로 공백을 채워 넣기 때문에 true값이 나오게 된다.

2. 문제를 풀 때 정확히 풀이하여 가능성이 보이지 않으면 다른 방법이 있는지도 생각해보자.

 

'SQL injection > webhacking' 카테고리의 다른 글

webhacking 41번  (0) 2022.08.03
webhacking 40번  (0) 2022.08.01
webhacking 38번  (0) 2022.07.28
webhacking 36번  (0) 2022.07.27
webhacking 35번  (0) 2022.07.27
댓글