POST注入和HEAD注入

目录

1、注入攻击的本质

2、SQL注入两个关键条件

3、GET和POST传参的区别

4、POST概述

5、注释与万能密码

6、sqlmap做post注入有两种方法

7、清除缓存

8、head注入

9、在本机搭建演示环境的时候,如何抓本机(127.0.0.1或者localhost)的包

10、head注入与网页记录的关联(涉及报错注入)

11、关于Referer

12、代理服务器

13、group有长度限制

14、如何跑head注入?


1、注入攻击的本质

注入攻击的本质,是把用户输入的数据当作代码执行。

2、SQL注入两个关键条件

(一)用户能够控制输入;

(二)原本程序要执行的代码,拼接了用户输入的数据。

3、GET和POST传参的区别

(一)GET和POST都是传参方式,区别在于GET是会显示在URL栏里的,POST不会;一个传输的数据有上限,一个可以传输比较大的数据。

(二)分类可以根据不同的类型分类,如果按照传参方式分类SQL注入:GET、POST、HEAD(COOKIE)

4、POST概述

(一)POST注入和普通的注入(联合查询)是没有区别的,它只是根据传参方式不同来判断类型。

(二)POST注入的核心在于框,有框就可以尝试下是否存在注入;

(三)GET可以直接传递参数,POST更多是存在于框,因为框代表着交互点,像登录框、查询框等各种一般都是通过POST进行传参的,当然这句话也不是必然,我们举一个baidu的例子;

像这样在URL栏可以看到的是GET传参;

各种框,一般来说都是POST传参,但不绝对,比如上面的baidu首页的例子就不是POST传参;

5、注释与万能密码

(一)注释:只有Mysql数据库#可以注释,但-- qwe基本上常见的数据库都可以用;在POST注释里#可以直接注释,但是在GET注释里不能够直接注释。

(二)万能密码:a' or 1=1 -- qwe,只有Mysql数据库#可以注释,但-- qwe基本上常见的数据库都可以用;

(三)万能密码可以用,说明一定是POST注入;万能密码不可以用,不代表它不是POST注入;

联合查询 

这时候发现union select 1,2,3页面没有回显,union select的核心是把union select前面和后面的语句的结果拼在一起 ,正常情况下前面语句的优先级会高于后面的语句,所以说前面的语句有输出的时候,后面就没有东西输出了,所以我们要把or 1=1删掉,因为没有or 1=1,a这个字段是不存在的。

找输出点;

 查表名,下面这两条语句都可以查到表名;

a' union select 1,table_name,3 from information_schema.tables where table_schema=database()  limit 0,1 #
a' union select 2,3,table_name from information_schema.tables where table_schema=database()  limit 0,1 #

查字段

通过order by查询到有3个字段,但是flag表里只有2个字段,所以只能查到2个; 

获得flag;

a' union select 1,id,flag from flag limit 0,1 #

6、sqlmap做post注入有两种方法

(一)--form

先测试是否有传参,再去看这个页面上有哪些form表单传参;

 查询到post注入和联合查询注入;

 列库:--dbs; 

 (二)-r

有的时候做渗透测试,会遇到一种状况,比如说,这个注入点在你登陆之后才有,说明你不登陆不行,它这个注入点是在用户的修改密码那里有,或者用户的个人资料修改那里有,如果在那些地方有的话,就只能通过-r来做,因为访问那个页面需要有COOKIE,直接写-u或者--form是没有COOKIE的,但是你抓了个数据包用-r去跑,你的那个数据包是有COOKIE的,所以说它可以免去很多的问题,比如说你跑的是一个用户中心,你登陆了,你必须得登陆才能访问到那个页面,然后那个页面存在sql注入,你要跑出来要怎么跑呢,那就得用-r去抓一个数据包,来进行一个跑包。

首先随意输入密码账号;

 跑到一个数据包;

在文件目录下新建一个txt;

将跑出的数据包复制到新建的txt里;

并且用*号标注出要跑的地方,比如说要跑username就加个*号,*代表你要跑这个地方,要记得保存;

然后在当前的目录里打开cmd,因为1.txt只有当前目录能访问到,其他的目录是访问不到的,毕竟没有加入环境变量;

特别注意,要把文件扩展名勾上,这样的避免出现扩展名重复输入的状况;

 在文件的当前目录下打开的cmd;

输入语句:sqlmap.py -r +文件名,有时需要加上python运行环境的版本号

python之所以要加上版本号,是因为重命名了python的名字,原来的名字统一都是python,但是有一些工具会出现python高版本运行不了的情况,这时候就用到python2.7版本,win10系统默认执行最高版本的python,所以要指定版本来运行,只能重命名python名字,以此区分开python版本;

可以直接将文件拖入cmd,也可以直接输入文件名,两种做法都可以;

 检测到存在POST注入;

7、清除缓存

清除缓存可以输入--flush-session语句;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是对代码进行优化,以防止XSS攻击和MySQL注入攻击的建议: 1. 防止XSS攻击 在输出用户输入的内容时,应该对特殊字符进行转义,以避免XSS攻击。 ```php $username = htmlspecialchars($_POST['username'], ENT_QUOTES, 'UTF-8'); $password = htmlspecialchars($_POST['password'], ENT_QUOTES, 'UTF-8'); ``` 这里使用了htmlspecialchars()函数来对输入的内容进行转义,第一个参数是要转义的字符串,第二个参数是转义规则,第三个参数是字符集。 2. 防止MySQL注入攻击 在执行SQL语句时,应该使用预处理语句和绑定参数,以避免MySQL注入攻击。 ```php // 验证用户名和密码是否正确 $stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username AND password = SHA(:password)'); $stmt->bindParam(':username', $username); $stmt->bindParam(':password', $password); $stmt->execute(); // 获取查询结果 $user = $stmt->fetch(PDO::FETCH_ASSOC); ``` 这里使用了PDO预处理语句和绑定参数,可以防止SQL注入攻击。在预处理语句中使用占位符(:username和:password),然后使用bindParam()函数将变量绑定到占位符上。在执行查询时,PDO会自动将变量进行转义,从而保护查询安全。 综上所述,以下是对代码进行优化后的示例: ```php <?php session_start(); // 启动会话 if ($_SERVER['REQUEST_METHOD'] == 'POST') { // 防止XSS攻击 $username = htmlspecialchars($_POST['username'], ENT_QUOTES, 'UTF-8'); $password = htmlspecialchars($_POST['password'], ENT_QUOTES, 'UTF-8'); // 链接数据库 $dsn = 'mysql:host=localhost;dbname=test;charset=utf8mb4'; $pdo = new PDO($dsn, 'root', ''); // 防止MySQL注入攻击 $stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username AND password = SHA(:password)'); $stmt->bindParam(':username', $username); $stmt->bindParam(':password', $password); $stmt->execute(); // 获取查询结果 $user = $stmt->fetch(PDO::FETCH_ASSOC); if ($user) { // 登录成功,将用户信息存储到会话中 $_SESSION['username'] = $username; header('location: index.php'); // 跳转到首页 exit; } else { // 登录失败,显示错误信息 $error = '用户名或密码错误'; } } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>登录</title> </head> <body> <?php if (isset($error)) { ?> <p><?php echo $error; ?></p> <?php } ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> <label for="username">用户名:</label> <input type="text" name="username" required><br><br> <label for="password">密码:</label> <input type="password" name="password" required><br><br> <input type="submit" value="登录"> </form> </body> </html> ``` 这个示例代码中使用了htmlspecialchars()函数对用户输入进行转义,使用PDO预处理语句和绑定参数来执行SQL查询,可以有效地防止XSS攻击和MySQL注入攻击。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值