?intval()函數(shù):
用于獲取變量的整數(shù)值;可使用指定的進(jìn)制?base?轉(zhuǎn)換(默認(rèn)是十進(jìn)制),返回變量?var?的?integer?數(shù)值。
注意:intval()?不能用于?object,否則會產(chǎn)生NOTICE?錯誤并返回?1。
語法結(jié)構(gòu):
int intval ( mixed $var [, int $base = 10 ] )
$var,需要被轉(zhuǎn)換成integer的值;$base,決定轉(zhuǎn)化時可所使用的進(jìn)制。
如果$base值為0,通過檢測傳進(jìn)的$var格式來決定使用的進(jìn)制;
$var字符串前綴"0x"代表16進(jìn)制,"0"代表8進(jìn)制,默認(rèn)為10進(jìn)制;
繞過方法思路總結(jié):
目錄
?intval()函數(shù):
繞過方法思路總結(jié):
一、進(jìn)制類型轉(zhuǎn)換:
二、弱比較(a==b),可以給a、b兩個參數(shù)傳入數(shù)組,使弱比較為true:
三、增加小數(shù)位:
四、轉(zhuǎn)換字符串:
五、取反:
六、運(yùn)用算數(shù)運(yùn)算符:
一、進(jìn)制類型轉(zhuǎn)換:
#實例:23的16進(jìn)制:0x17,8進(jìn)制為027
if(23 != $_GET['i']){
if(23 == intval($_GET['i'],0)){
echo '漏洞利用成功';
}
}else{
echo 'NONONO';
}
//繞過思路:當(dāng)某個數(shù)字被過濾時,可以使用它的8進(jìn)制/16進(jìn)制來繞過;
二、弱比較(a==b),可以給a、b兩個參數(shù)傳入數(shù)組,使弱比較為true:
if($_GET['a']!=$_GET['b']) {
if (intval($_GET['a']) == intval($_GET['b'])) {
echo '漏洞利用成功';
}
}else
echo 'NONONO';
&&因為使用intval()轉(zhuǎn)換數(shù)組類型時,不關(guān)心數(shù)組中的內(nèi)容,只判斷數(shù)組中有沒有元素;
所以,當(dāng)數(shù)組中有值時,返回值為1;1==1,漏洞利用成功。
//當(dāng)網(wǎng)址處輸入?i[]=??時后端接收的值為1,因為數(shù)組中會帶有一個元素即空字符串。
三、增加小數(shù)位:
#例子與上題相同,不同繞過方法:
if($_GET['a']!=$_GET['b']) {
if (intval($_GET['a']) == intval($_GET['b'])) {
echo '漏洞利用成功';
}
}else
echo 'NONONO';
//因為 intval() 轉(zhuǎn)換小數(shù)類型時,只返回個位數(shù),不遵循四舍五入的原則。
&&繞過思路:當(dāng)某個數(shù)字被過濾時,可以給它增加小數(shù)位來繞過。
四、轉(zhuǎn)換字符串:
intval()函數(shù)轉(zhuǎn)換字符串時,會判斷字符串是否以數(shù)字開頭;
//當(dāng)字符串以數(shù)字開頭,就會返回1個或多個連續(xù)的數(shù)字;
//當(dāng)字符串以字母開頭,就會返回0;
//0?或?0x?開頭也只會當(dāng)做普通字符串處理;
//雙引號對轉(zhuǎn)換結(jié)果沒有影響,但對下面這個示例會有影響,當(dāng)我們傳入?i=0時失敗。
但當(dāng)我們傳入?i="0"、?i="1"、?i='0',?i='1'等值時;成功利用漏洞。
#轉(zhuǎn)換字符串例子:
$t = '0';
if($t!==$_GET['i']) {
if($t == intval($_GET['i'])) {
echo '漏洞利用成功';
}
}else
echo 'NONONO';
?>
五、取反:
//intval()支持一些特殊符號,比如?~?取反;
????intval(~10):-11;intval(~1):-2;intval(~~10):10;
????&&繞過思路:當(dāng)某個數(shù)字被過濾時,可以兩次取反來繞過;
var_dump(intval(~10));
var_dump(intval(~~10));
返回值:
int(-11)
int(10)
六、運(yùn)用算數(shù)運(yùn)算符:
//intval()轉(zhuǎn)換包含算術(shù)運(yùn)算符時,會先運(yùn)算,在對運(yùn)算結(jié)果進(jìn)行轉(zhuǎn)換;
????intval(5*5):25;文章來源:http://www.zghlxwxcb.cn/news/detail-792150.html
????&&繞過思路:當(dāng)某個數(shù)字被繞過時,可以使用算數(shù)運(yùn)算符繞過;文章來源地址http://www.zghlxwxcb.cn/news/detail-792150.html
到了這里,關(guān)于WEB攻防基礎(chǔ)|PHP|過濾函數(shù)intval()繞過原理及方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!