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