二次编码注入

原理:PHP代码中使用了urldecode()等编解码函数,放在了一个尴尬的使用位置,与PHP自身编码配合失误
自己编写一个二次编码注入的代码


	error_reporting(E_ALL ^ E_DEPRECATED);
	header("Content-Type: text/html; charset=utf-8");
	$conn = mysql_connect('localhost', 'root', '123456');
	mysql_select_db("security", $conn);
	//mysql_query("SET NAMES 'gbk'", $conn);
	$id = mysql_real_escape_string($_GET['id']);
	$id = urldecode($id);
	$sql = "select * from users where id='$id'";
	$query = mysql_query($sql, $conn);
	if($query == True)
	{
     
		$result = mysql_fetch_array($query);
		$username = $result["username"];
		$password = $result["password"];
 
		print_r('用户名: ' . $username . '
'
); print_r('密 码: ' . $password . '
'
); print_r('
SQL语句:'
. $sql); } mysql_close($conn); ?>

二次编码注入_第1张图片
mysql_real_escape_string在urlencode之前,所以不能解决由于urlencode带来的编码问题
二次编码注入_第2张图片
%25%23是被自身编码解决了的,编码成%和#
因为没有明显的分号’,所以mysql_real_escape_string不能操作,所以%27#在urldecode处就变成了’#,就完成了SQL注入的目的
使用union方法

你可能感兴趣的:(SQL注入学习)