티스토리 뷰

SQL injection/webhacking

webhacking 57번

ys.k 2022. 8. 21. 20:50

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

57번 문제이다.

간략히 설명하겠다.

파라미터로 msg, se를 받으며 secret이 yes 일 때 1, no일 때 0으로 입력된다.

message에 1을 줬다.

소스코드를 보자.

msg와 se 둘 다 입력값이 있어야 작동한다.

또한 둘 다 addslashes함수가 적영 되어있고

se에는 select, and, or, not, &, |, benchmark를 대소문자 구분하지 않고 필터링한다.

그리고 정상적인 값이 입력될 때마다 데이터가 삽입되며, id, msg, flag, se 순으로 삽입된다.

그리고 Done 메시지를 출력한다.

어떤 경우에서도 Done 메시지를 출력하거나 말거나 둘 중 하나이다.

따라서 error, union based injection 등은 사용할 수가 없다.

남은 건 blind or time이다.

근데 코드를 잘 보니 flag가 들어있는 칼럼명을 pw로 알려줬다.

문제는 생각보다 쉬워졌다.

그리고 benchmark를 필터링하는 걸 보니 time based 문제인 것 같다.

하지만 이런 식으로 문제를 해결하다 보면 실전에서 큰 도움이 되지 않을 것이다..

일단 풀어보자.

정상적으로 sleep함수가 작동한다.

이제 인젝터를 만들어보자.

추출되었다.

검증해보자.

문제 해결

시행착오

1. time based 공격을 할 땐, sleep() 함수 외에, 웹 서버 부하에 따른 시간 지연, 불안정한 인터넷 연결 등으로 시간 지연이 생길 수 있어, 대기 시간을 길게 할수록 정확도가 올라가나, 시간이 오래 걸린다.

 따라서  알맞은 대기 값을 정하는 것도 중요하다.

 

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

webhacking 59번  (0) 2022.08.23
webhacking 58번  (0) 2022.08.23
webhacking 56번  (0) 2022.08.21
webhacking 55번  (0) 2022.08.21
webhacking 54번  (0) 2022.08.21
댓글