티스토리 뷰

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

25단계 소스코드이다.

id와 pw둘다 같은 내용인 ', ",., prob, _ 가 필터링되어있다.

싱글 쿼터와 더블 쿼터 우회 문제인 것 같다.

사실 이제 문제에 대해서 감도 안 와서 조금 시도해보다가 그냥 인터넷 검색했다.

 

일단 los 16단계에서의 내용으로 싱글 쿼터를 우회하였다.

https://samron.tistory.com/18

 

Lord Of SQL injection 16단계-succubus

LOS 포스팅에 앞서 틀린 내용이 있을 것이며, 댓글을 통해 가르쳐 주시면 굉장히 감사하겠습니다. 15단계 소스코드이다. 이번엔 id와 pw에 싱글 쿼터 하나만 필터링되어있다. id값이 데이

samron.tistory.com

쿼리를 반드시 참으로 만들었지만 아무 값도 출력되지 않았다.

그래서 union select 구문을 사용하여야 한다고 한다.. 일단 시도해보겠다.

query2가 웹페이지에 추가로 출력되었다.

이제는 문제를 풀 실마리를 찾은 것 같다.

union select 뒷부분에 값을 삽입하여 id를 admin으로 만들면 될 것 같다.
일단 query2에서도 싱글 쿼터가 필터링되고 있기에 우회하는 과정이 필요하다.

union select의 첫 번째 칼럼에 문자를 넣으니 query2가 제대로 작동되지 않는 모습이다.

id와 pw칼럼의 데이터 타입은 문자가 아닌 숫자 이기 때문에 문자열을 2,16 진수 등으로 변환해서 넣어줘야 우회할 수 있다.

query:? id=\&pw=union select \,union select admin //를 삽입하여 query2의 id를 admin으로 줘야 한다.

하지만 query2의 id와 pw도 칼럼의 데이터 타입은 숫자형이기 때문에 한 번 더 우회를 해줘야 한다.

따라서 쿼리는 ?id=\&pw=union+select+0x5c,0x756e696f6e2073656c6563742030783631363436643639366523--+-를 넣어 query2에도 우회된 admin을 집어넣어 주면 된다.

문제 해결..!

시행착오

1. union select는 칼럼수뿐 아니라 데이터 타입도 맞춰줘야 정상적으로 쿼리가 작동한다.

2. query2도 id와 pw에 필터링이 적용되어있기에 hex변환을 한번 더 해서 값을 전달해줘야 한다.

3. ascii코드에서 역 슬래쉬를 찾다가 0x2f를 적용하는 실수를 했다.. 문제가 안 풀려서 스트레스받다가 다시 보니까 그냥 슬래쉬 여서 허무했다. 다음엔 확실히 5c를 사용하자.

4. 쿼리가 참인데도 아무 데이터도 출력하지 않으면 비어있는 테이블이므로 당황하지 않고 union을 사용하면 된다.

5. 근데 query2에서 union을 사용해서 칼럼을 하나만 집어넣었는데 정상적으로 문제가 풀린 이유를 모르겠다..

   추측으로 query2에서 id와 pw두개를 받았지만 싱글 쿼터 우회를 통해 pw= 파라미터는 날아가고 id='문자열' 하나만     남게 되어 하나의 칼럼만 가져오도록 하는 게 맞게 끔 된 것으로 생각된다.

    ex)id='\' and pw='union select 1--+-' 아마 맞는것 같다.. 

 

댓글