MySQL注射绕过技巧(三)
在測試一次注入的時(shí)候發(fā)現(xiàn)過濾了逗號 所以找到這個(gè)思路
第一次遇到的時(shí)候是看key哥挖洞 ?遇到后就想記錄下來
正文
過濾了逗號 ?利用join來逐步查詢
select*from(select 1)a join (select 2)b join (select 3)c;例如下圖
逐步查詢user()
user() @@basedir
user() @@basedir version()
也可以和mid函數(shù)組合使用
?
mysql報(bào)錯(cuò)信息
利用方法是使用數(shù)學(xué)運(yùn)算函數(shù)在子查詢中報(bào)錯(cuò),比如exp函數(shù)(參考?EXP(X)?), ?MySQL會把子查詢的中間結(jié)果暴露出來。
select exp(~(select*from(select user())a))
可以看到子查詢的結(jié)果出來了
這樣我們就得到了當(dāng)前user()是root@localhost。
exp(x)函數(shù)的作用:
取常數(shù)e的x次方,其中,e是自然對數(shù)的底。
~x 是一個(gè)一元運(yùn)算符,將x按位取補(bǔ)。
這條查詢會出錯(cuò),是因?yàn)閑xp(x)的參數(shù)x過大,超過了數(shù)值范圍。分解到子查詢,就是:
1.?(select*from(select user())a) 得到字符串 root@localhost
2. 表達(dá)式’root@localhost’被轉(zhuǎn)換為0,按位取補(bǔ)之后得到一個(gè)非常的大數(shù),它是MySQL中最大的無符號整數(shù):
3. exp無法計(jì)算e的18446744073709551615次方,最終報(bào)錯(cuò),但是MySQL把前面 1) 中子查詢的臨時(shí)結(jié)果暴露出來了
了解了MySQL的這個(gè)特點(diǎn),其實(shí)我們就還可以精心構(gòu)造其他的一元運(yùn)算符,讓MySQL查詢在沒有逗號的情況下報(bào)錯(cuò)
比如:
select !(select*from(select user())x)-~0;
原因如下:
select 1 – 18446744073709551615;
這個(gè)例子是bigint超過數(shù)值范圍,手法類似。
轉(zhuǎn)載于:https://www.cnblogs.com/wh4am1/p/6580868.html
總結(jié)
以上是生活随笔為你收集整理的MySQL注射绕过技巧(三)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Object类—复写equals方法,h
- 下一篇: jQuery解决高度统一问题