티스토리 뷰

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

17단계 소스코드이다.

새로운 함수가 보인다.

strrev()// 문자를 뒤집는 함수이다. ex) id=admin strrev(id) ->nimda

id와 pw에 ', ", null 을 필터링 시키고 값을 뒤집어서 다시 id와 pw에 저장하며 id와 pw값이 db에 있으면 문제가 해결된다.

addslashes를 우회하고 거꾸로된 문자열을 대입했을 때 풀리는 쿼리를 집어넣으면 된다.

addslashes() // ', ", %00 앞에 이스케이프 문자를 넣어 해당 문자들의 기능을 상실시키고 문자그대로로 인식시킨다.

이번문제에서는 strrev() 함수로 인해 id와 pw에 입력된 값이 역순으로 배열되니 addslashes()에서 필터링되는 문자열이 실제로 필터링 되지않는다. 이를 이용해 id='' 에서 뒤의 '를 문자열 처리할 수 있다.

id='&pw=-+--1||

    ㄴid=''\'&pw=||1--+-

하지만 싱글쿼터를 삽입하니 id에서 싱글쿼터가 닫히며 정상적인 쿼리가 되지 않는 모습이다.

싱글쿼터가 아닌 다른 addslashes()에 걸리는 문자를 넣어준다. ex) ", %00

해결!

마찬가지로 

더블쿼터 또한 작동한다.

시행착오

1. strrev() 함수를 너무 어렵게 생각했다. 

2. strrev() 함수에서 --+- 주석처리 방법은 먹히지 않는다. (뒤집어 지면 -+-- 이 되기 때문에 -+--으로 넣어야 정상적인     주석처리가 된다.

3. 쿼리문을 항상 잘읽고 정확하게 해석하는 것이 중요하다. (where id='$_get[id]' and pw='$_get[pw]' 에서 id와 pw의 값은 '' 싱글쿼터 안에 들어간다. )

댓글