나는 보안 도구를 감사하는 과정에 있습니다. 무작위로 생성 된 가짜 데이터를 사용하여 내 "안전하지 않은 영역"을 만드는 것이 좋은 방법이라고 판단하여 SQL 인젝션에 취약합니다. 그러나 실제로 주입 할 수는 없습니다. 나는 그것이 나쁜 쿼리를 줄 때 "발견 된 계정은있다"는 인쇄하지 않지만 오류 메시지는 인쇄하지 않는다는 것을 알 수 있습니다.의도적으로 스크립트 SQL 삽입 가능
내가 잘못된 것을하고 있는지 누군가가 알 수 있습니까?
"SELECT * from badSQL.Two WHERE email = '1' OR '1'='1'"
이메일 주소가 항상 잘못 될 것 중요하지 않습니다 그것이 사용합니다 같이 :에 그것을 평가하는 것처럼
<?php
$resultHTML;
if (isset($_POST['email']) || isset($_GET['email'])) {
$conn = mysqli_connect($servername,$username,$password);
if ($conn) {
//this part is insecure (intentionally for testing)
if (isset($_GET['email'])) {
$query = "SELECT * from badSQL.Two WHERE email = '$_GET[email]'";
} else {
$query = "SELECT * from badSQL.Two WHERE email = '$_POST[email]'";
}
//echo $query;
$result = $conn->query($query);
if ($result) {
$resultHTML = "Here are the accounts found: ";
$hasAccount = false;
while ($row = mysqli_fetch_assoc($result)) {
$hasAccount = true;
$resultHTML .= "<br>".print_r($row);
}
if ($hasAccount === false) {
$resultHTML = "No accounts found.";
}
}
} else {
$resultHTML = "DB Connection could not be established: ".$conn->connect_error;
}
}
?>
<html>
<head>
<title>Two BadSQL Test</title>
</head>
<body>
<h1>Two Website!</h1>
<br>
<h3>Forgot Password</h3>
<p>Enter your email below, and click submit:</p>
<form id="forgotForm" method="get">
<input type="text" name="email" />
<input type="submit" value="submit" />
</form>
<br>
<div id="results"><?php echo $resultHTML; ?></div>
</body>
</html>
사용중인 주사 벡터는 무엇입니까? 그리고 그 테이블에서 추출 할 데이터는 무엇입니까? – h3ct0r
무슨 오류 메시지가 떠오 릅니까? '여기에 계좌가 발견되었습니다 '가 인쇄되지 않고 연결 오류가없는 경우 인쇄 할 오류 메시지가 없습니다. – Zeke
'1'또는 '1'= '1'을 시도하십시오. 그것은 위의 스크립트에 유효한 SQLi 여야합니다. 캡슐화 된 위조 된 데이터에 대한 취약점을 만들면 합법적 인 공격에 대한 매개 변수가 될 수 있기 때문에 왜 고의적으로 * 자신의 사이트를 더 취약하게 만들려고하는지 확신 할 수 없지만. –