Acunetix를 사용한 블라인드 SQL 주입
-
20-09-2019 - |
문제
안녕하세요 Im 내 웹 사이트를 테스트하기 위해 Acunetix를 사용 하여이 스크립트에 문제가 있습니다. http://boedesign.com/blog/2007/02/18/ajax-star-rating/
Acunetix는 메시지가 표시되지 않지만 블라인드 SQL을 테스트 할 때 다음과 같은 값을 얻을 수 있습니다.
8 and 1=0 --
8 and 31337-31337=0
RATED_ID MYSQL 열에서, 나는 거기에 숫자 만 허용하고 싶기 때문에 약간의 수정을했지만 첫 번째 숫자는 8이기 때문에 IF를 통과 할 수있는 방법은 무엇입니까? 포함/rating_process.php에서 이와 같은 것입니다
// IF JAVASCRIPT IS ENABLED
if($_POST){
$id = escape($_POST['id']);
$rating = (int) $_POST['rating'];
if($rating <= 5 && $rating >= 1 && $id >= 1 && $id <=9999999){
if(@mysql_fetch_assoc(mysql_query("SELECT id FROM ratings WHERE IP = '".$_SERVER['REMOTE_ADDR']."' AND rating_id = '$id'")) || isset($_COOKIE['has_voted_'.$id])){
echo 'already_voted';
} else {
그리고 "// JavaScript가 비활성화 된 경우"에서 거의 같은 생각
해결책
등급이 정수 여야한다는 것을 알고 있다면 변수를 정수로 시전 할 수 있습니다.
$rating = (int) $_POST['rating'] ;
당신은 당신의 일을 잘 할 수 있습니다 id
변하기 쉬운.
정수 값 만 가지고 있음을 보장합니다.
제휴하지 않습니다 StackOverflow