如何进行POST注入
POST注入与普通注入相同,只不过是通过post提交数据,并注入到提交的数据中。
注射后会出现在哪里?
登录框、查询框等各种框
通用密码原理
,from users where ='admin' and = ''or 1=1%23' limit 0,1(我们看一下语句逻辑,where后面跟的是条件,用and连接,所以两者之一就是no 返回no,但是or 1=1,这返回true,no 或true=true)
php全局变量的作用
让脚本在所有域都可用,调用更方便
标头注入的作用
其实就是错误注入,因为路径不存在而报错。但是由于数据库先执行子查询,所以错误信息中查询到的信息都会报错。
头注入原理
使用PHP的全局变量$来获取用户相关信息并将数据存储到数据库中。 使用函数输入SQL语句并返回信息。
后注入原理
在数据提交点,提交sql语句,以便系统查询并返回相应信息。
使用xml文档的方法和xxe一样吗?
这不一样。 它只是更新文档的功能。 它只是用这个函数返回信息,而xxe是在DTD实体声明处注入的【XXE部分我们以后会明白的】
为什么注入后有通用密码'or 1=1#
使用单引号使前面的语句报错,而后面的or表示or语句是or 1=1,即为true,因此登录正确。
使用通用密码的条件是什么?
存在 POST 注入
后注射和头注射的区别
POST注入的注入点在POST参数中传递,HEAD注入的注入点在头部信息中。
0x7e在头部注入中的作用
0x7e是~用于拼接。 只有这个特殊的拼接符号才会报错。
注入头的时候需要删除原来的头信息吗?
不需要删除,但建议删除,可以防止干扰。
如何预防术后和头部注射
过滤传入参数,添加检测类型,添加waf或正则规则过滤危险字符
或 和 之间的区别
and 表示逻辑与,or 表示逻辑或,运算优先级不同,大于或
头部注射只能靠传输吗?
不一定,这只是错误注入
为什么像head注入这样的语句可以执行注入呢?
因为中间有一根相连的弦,所以中间的弦连接成一根弦。 如果格式不匹配,则出现格式错误,然后报错(因为使用了子查询,所以先执行查询,类似于SQL错误语句)
头部注射还有其他用途吗?
是的,不仅是user-agent,还有ip、、X--For。
如何测试 POST
POST可以通过-r参数指定数据包或者使用--data来运行
HEAD注射是如何工作的?
您可以使用 --level 来指定级别。 如果大于3,则请求头和
POST注入和GET注入的区别
没有本质的区别,只是传递参数的方式不同而已。
为什么 SQL 中 AND 的使用有时少于 OR?
如果判断出来,前面的语句不成立,AND就根本不会执行下面的语句。
SQL注入原理
可控参数传递并拼接成SQL语句作为SQL语句执行
POST和GET参数传输方式会被编码吗?
POST 一般不会进行 URL 编码,但 GET 会进行 URL 编码。
POST注入和GET注入有什么区别?
POST注入可以让你打出更激进的姿势,因为POST参数没有长度限制,甚至可以直接传递一些危险的东西。
到底是什么?
它是一个特殊的请求标头,因为当今大多数缓存服务器的用户经常鼓励或强迫用户使用代理服务器访问互联网,以便通过缓存减少其外部带宽。 但如果我们想要获取用户的IP,就必须通过$[""]来获取,而不是直接通过$[""]来获取。
POST注入第一个问题
掌控安全学院 SQL 注入范围
:81/Pass-01/index.php?id=1
先关闭,再判断,再测试
*来自用户 where ='' 或 1=1 order by 1 -- qwe' and =''
确定字段数量
查找错位
查询库名
查询表名
查询列名
查询具体数据
标志是
zKaQ-
问题2
掌控安全学院 SQL 注入范围
:81/Pass-06/index.php
查看如何关闭并查询字段数
查询出现错误
查询库名
查询表名
查询列名
查询具体数据
zKaQ-XZT
让我们进入头部射击场
回顾一下
头部注入原理:由于后端可能会通过网页请求头来验证客户端端口信息或者获取一些客户端信息,如果这些信息与其他信息一起存入数据库,并且后台没有进行相应的信息处理,就会造成问题。 注入漏洞。
head注入方式:head注入使用head参数作为注入点。 由于输入的代码执行后不会显示,因此需要使用错误注入的方式将输入的代码以错误的形式显示出来。 借助()、()函数,浏览器插件或burp软件捕获并修改数据包,实现注入。
掌控安全学院 SQL 注入范围
$username = $_POST['username'];
$password = $_POST['password'];
$uagent = $_SERVER['HTTP_USER_AGENT'];
$jc = $username.$password;
$sql = 'select *from user where username =\''.$username.'\' and password=\''.$password.'\'';
if(preg_match('/.*\'.*/',$jc)!== 0){die('为了网站安全性,禁止输入某些特定符号');}
mysqli_select_db($conn,'****');//不想告诉你库名
$result = mysqli_query($conn,$sql);
$row = mysqli_fetch_array($result);
$uname = $row['username'];
$passwd = $row['password'];
if($row){
$Insql = "INSERT INTO uagent (`uagent`,`username`) VALUES ('$uagent','$uname')";
$result1 = mysqli_query($conn,$Insql);
print_r(mysqli_error($conn));
echo '成功登录';
特定符号在源代码中已被禁止,无法穿透。
$Insql = "INTO (``,``) ('$','$uname')";
因为head注入的核心是在登录成功的时候执行注入的语句。
所以我们需要先破解相同的用户名和密码。
登录时使用的头部检测
点击登录按钮后网页出现明显延迟,表明存在漏洞。
继续查询库名
'或 (1,('?',()),1),1) -- qwe
然后继续查询表名
'或 (1,('?',( from .where ='' limit 0,1)),1),1) -- qwe
通过插件将User-Agent值添加到网页请求头中,获取列名
'或 (1,('?',( from .where ='' limit 1,1)),1),1) -- qwe
查询数据
'或 (1,('?',( 从极限 0,1)),1),1) -- qwe
然后进入第二个问题
掌控安全学院 SQL 注入范围
$Insql = "INSERT INTO refer (`refer`,`username`) VALUES ('$uagent','$uname')";
代码查询发现注入点在这里refer
所以测试的时候
与上面的过程非常相似
问题3
掌控安全学院 SQL 注入范围
进来看看吧~~
见源码中
$Insql = "INSERT INTO ip (`ip`,`username`) VALUES ('$ip','$uname')";
注入点是X--for,思路和前两个一模一样
最终得到: