SQL 쿼리에 사용되는 Javascript 객체를 사용하는 CTF 문제를 해결했지만 왜 작동하는지 이해할 수 없습니다. 내가 사용한 명령은 다음과 같습니다.
mysql> select * from myTable;
+----+------------+-------------+
| id | first | second |
+----+------------+-------------+
| 1 | first_data | second_data |
| 2 | third_data | fourth_data |
+----+------------+-------------+
2 rows in set (0.00 sec)
mysql> select * from myTable where first = `second` = 'anyString';
+----+------------+-------------+
| id | first | second |
+----+------------+-------------+
| 1 | first_data | second_data |
| 2 | third_data | fourth_data |
+----+------------+-------------+
2 rows in set, 1 warning (0.01 sec)
mysql> select * from myTable where first = `first` = 'anyString';
Empty set, 1 warning (0.00 sec)
mysql>
이 표현식은 예상 한대로 작동하지 않습니다.
first = `second` = 'anyString'
이것은 다음과 같이 구문 분석됩니다.
first = (`second` = 'anyString')
(기술적으로는 다음 (first = second) = 'anyString'
과 같을 수 있지만 설명이 변경되지는 않습니다.)
일반적으로 다음과 같습니다.
first = false
MySQL은 부울을 숫자로 취급하므로 다음과 같습니다.
first = 0
그리고 first
암시 적으로 숫자로 변환됩니다. 암시 적 변환은 선행 숫자를 변환합니다. 그리고 아무것도 없으면 0
. 따라서 이것은 다음과 같습니다.
0 = 0
짜잔! 모든 데이터가 반환됩니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다