[webhacking.kr] Challenge_old-39 문제풀이 (SQL injection)

2024. 8. 4. 16:04워게임/webhacking

 

SQL Injection 이라고 하면 할수 있는 39번.

 

webhacking.kr old 39번

 

입력값을 받고있는 페이지만 존재한다.

 

 

소스코드를 보면 post로 id 변수값을 받고 있다. 쿼리문을 자세히 보면 id값을 닫는 '(싱글쿼터)가 존재하지 않음. 정상적인 쿼리가 동작하려면 우리가 닫아줘야 한다.

 

필터링을 보니 \가 들어오면 없애고, '가 들어오면 ''두개로 만들고있다.

그리고 substr로 들어온 id값을 15개만 잘라서 db로 넘기고 있다.

 

substr 를 이용해서 15자리에 '을 입력해주면 ''로 바뀌지만 db로 넘길때는 15자리까지만 넘기니까 전달되는 값은 admin''으로 바뀌지만 15자리까지 잘라버리니까 admin'만 남게된다.

 

문자열은 14자리 이하로 아무거나 입력해도 되고(입력 안해도 됨) 자릿수만 맞춰서 15번째 자리에  '를 입력해주면 된다.

 


[리뷰]

 이 문제를 풀려면 sql 문을 읽을 줄 알아야한다.

 select 1 from member where length(id)<14 and id='

 라고 되어있는 쿼리문을 해석해보면 id값에 14길이보다 작은 값이 오고 '(싱글쿼터)로 문자열을 닫아줘야 한다.

 

오늘도 sql 공부의 중요성을 느낀다...(공부 귀찮아..)