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