SQL注入——SQL注入方法

Sql注入讀寫文件

  • 權限影響
  •  secure_file_priv
  • 1. secure_file_priv=
  • 代表對文件讀寫沒有限制
  • 2. secure_file_priv=NULL
  • 代表不能進行文件讀寫
  • 3. secure_file_priv=d:/phpstudy/mysql/data
  • 代表只能對該路徑下文件進行讀寫
  • my.ini文件修改
  • 讀文件 
  • load_file()
  • 作用
  • 1. 讀取敏感配置   (需要你知道路徑)
  • 2. 讀取網絡文件   (間接回顯盲注數據   帶外攻擊    dns   http)
  • 寫文件
  • Into Outfile
  • into Dumpfile   
  • 寫二進制文件使用
  • 路徑
  • Phpstudy
  • phpstudy/www  phpstudy/phptu…/www
  • Wamp
  • wamp/www
  • Xampp        xampp/htdocs                   
  • Appser        appser/www
  • 寫入一句話木馬條件
  • 寫權限
  • 需要知道網站絕對路徑

1、手工注入

1、常用函數

  • user()
  • 返回當前使用數據庫的用戶
  • version()
  • 返回當前數據庫的版本
  • database()
  • 返回當前使用的數據庫
  • concat()
  • 用於將多個字符串連接成一個字符串,SELECT CONCAT('My','S','QL')
  • group_concat()
  • 使用方法:group_concat([DISTINCT] 要連接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])
  • concat_ws()
  • 使用方法:concat_ws(separator, str1, str2, ...),第一個參數爲分隔符,把從第二個參數開始的字符拼接起來,並用第一個參數的分隔符隔開。

2、字符串處理常用函數:

  • left()函數和right()函數:
  • 用於截取字符串
  • left(arg1,arg2) :從左邊頭部開始截取字符串,arg1代表被截取的字符串,arg2截取的位數
  • 語句:select left(database(),3);
  • 返回結果:dva
  • right(arg1,arg2) :
  • 從左邊頭部開始截取字符串,arg1代表背截取的字符串,arg2截取的位數
  • 語句:select right(database(),3);
  • 返回結果:vwa
  •  substr(),substring(),mid():
  • 用法基本相同,截取字符串的一部分
  • 語句:select substr(database(),1,3);
  • 返回結果:dva

3、判斷條件常用函數:

  • if(arg1,arg2,arg3):
  • arg1爲判斷的條件,arg2是條件爲真的返回結果,arg3是條件爲假的返回結果
  • 語句:select if(1=1, 'true', 'false')
  • 返回結果:true
  • case when arg1 then arg2 else arg3 end:
  • arg1爲判斷的條件,arg2是條件爲真的返回結果,arg3是條件爲假的返回結果
  • 語句:SELECT 1,CASE WHEN 1=1 THEN 'hello' ELSE 'goodbye' END,3 --+

4、常用函數

  • length(arg1) arg1字符串。
  • 語句:select length(database());
  • 返回結果:4

5、常用函數

  • ascii(arg1) arg1爲字符。
  • 語句:select ascii(' a ')
  • 返回結果:97

2、二次解碼注入

  • 二次注入的原理是我們提交參數到WebServer時,WebServer會自動解碼生成單引號而引發注入。
  •  
  • urldecode()
  •  
  • rawurldecode()
  •  
  • 漏洞產生  
  • Admin’--> (轉義函數) --> url解碼  -->admin\’
  • 轉義函數只對  ‘ “ \   這三個有效
  • %61%64%6d%69%6e%27 --》(轉義函數)--》 %61%64%6d%69%6e%27 --》url解碼 --》admin’

3、寬字節注入

  • 常見函數
  • addslashes()
  • 對單引號(')、雙引號(")、反斜線(\)與NULL(NULL字符)進行處理
  • mysql_real_escape_string()
  • mysql_escape_string()
  • Magic_quotes_gpc
  • 自動轉義     
  • ‘   “    \ 

  • 避免寬字節注入的產生
  • 應當限定使用mysql_set_charset(GBK)來指定字符集,並且使用mysql_real_escape_string進行轉義。
  • Select * from users where id = ‘$id’;
    $id = 1’ --  自動轉義   1\’ -- Select * from users where id = ‘1\’ -- ’;
  • 繞過以上函數兩種情況
  • 數值型
  • Select * from users where id = $id;    
  • $id = 1 and 1=1 –
  •         使用了gbk編碼可以通過寬字節繞過
  • 編碼表
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章