<a href="#MIDDLE" ><h3>點(diǎn)擊跳轉(zhuǎn)到MIDDLE級(jí)別</h3></a><a href="#HIGN"><h3>點(diǎn)擊跳轉(zhuǎn)到HIGN級(jí)別<h3></a>
1.LOW級(jí)別:
輸入1' OR '1'='1
$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
第一個(gè)'閉合查詢(xún)語(yǔ)句中的'號(hào),然后1=1又使等式恒真從而讀取了什么數(shù)據(jù)。

與數(shù)據(jù)庫(kù)中的內(nèi)容核對(duì),結(jié)果一致

<a id="MIDDLE">--------------------------------------------------------------------------------------------------------------------</a>
2.MIDDLE級(jí)別:
<?php
if( isset( $_POST[ 'Submit' ] ) ) {
// Get input
$id = $_POST[ 'id' ];
$id = mysql_real_escape_string( $id );
// Check database
$query = "SELECT first_name, last_name FROM users WHERE user_id = $id;";
$result = mysql_query( $query ) or die( '<pre>' . mysql_error() . '</pre>' );
// Get results
$num = mysql_numrows( $result );
$i = 0;
while( $i < $num ) {
// Display values
$first = mysql_result( $result, $i, "first_name" );
$last = mysql_result( $result, $i, "last_name" );
// Feedback for end user
echo "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";
// Increase loop count
$i++;
}
//mysql_close();
}
?>
可以看到,Medium級(jí)別的代碼利用mysql_real_escape_string函數(shù)對(duì)特殊符號(hào)
\x00,\n,\r,,’,”,\x1a進(jìn)行轉(zhuǎn)義,同時(shí)前端頁(yè)面設(shè)置了下拉選擇表單,希望以此來(lái)控制用戶(hù)的輸入。
使用burpsuite抓包改包:


<a id="HIGN">--------------------------------------------------------------------------------------------------------------</a>
3.HIGN級(jí)別:
<?php
if( isset( $_SESSION [ 'id' ] ) ) {
// Get input
$id = $_SESSION[ 'id' ];
// Check database
$query = "SELECT first_name, last_name FROM users WHERE user_id = $id LIMIT 1;";
$result = mysql_query( $query ) or die( '<pre>Something went wrong.</pre>' );
// Get results
$num = mysql_numrows( $result );
$i = 0;
while( $i < $num ) {
// Get values
$first = mysql_result( $result, $i, "first_name" );
$last = mysql_result( $result, $i, "last_name" );
// Feedback for end user
echo "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";
// Increase loop count
$i++;
}
mysql_close();
}
?>
可以看到,與Medium級(jí)別的代碼相比,High級(jí)別的只是在SQL查詢(xún)語(yǔ)句中添加了LIMIT 1,希望以此控制只輸出一個(gè)結(jié)果。但可以被注釋掉,只能防止一般的sqlmap注入,還是可以手注出來(lái)。

網(wǎng)站怎么避免被SQL注入?
1.參數(shù)化查詢(xún),提前編譯sql語(yǔ)句,使注入失效
2.掐死'號(hào),不讓程序被截?cái)?br>
3.限制數(shù)據(jù)庫(kù)權(quán)限,不允許讀寫(xiě)文件,拒絕除select之外的一切不必要操作。