魔法pos機(jī),php黑魔法

 新聞資訊  |   2023-03-11 09:01  |  投稿人:pos機(jī)之家

網(wǎng)上有很多關(guān)于魔法pos機(jī),php黑魔法的知識,也有很多人為大家解答關(guān)于魔法pos機(jī)的問題,今天pos機(jī)之家(www.dsth100338.com)為大家整理了關(guān)于這方面的知識,讓我們一起來看下吧!

本文目錄一覽:

1、魔法pos機(jī)

魔法pos機(jī)

前言

php的很多特性再帶來編程方面的同時(shí)也會帶來很多安全隱患,其中一些漏洞在CTF中經(jīng)常出現(xiàn),本文大部分示例也是取自CTF題目。這里首先說一下==和===區(qū)別。==是比較運(yùn)算,它不會去檢查條件式的表達(dá)式的類型,===是恒等,它會檢查查表達(dá)式的值與類型是否相等,NULL,0,”0″,array()使用==和FALSE比較時(shí),都是會返回true的,而使用===卻不會。

注:本文部分內(nèi)容及代碼并非原創(chuàng),而是從網(wǎng)上搜集而得。

數(shù)組

0x01 數(shù)組的hash計(jì)算

很多時(shí)候,PHP數(shù)組都發(fā)揮了至關(guān)重要的作用,比如下面代碼

首先判斷name和password是否一致,一致的話提示\'Your password can not be your name.\',不一致的話無法通過第二個(gè)if判斷,但是php對數(shù)組進(jìn)行hash計(jì)算都會得出null的空值。比如下面代碼,當(dāng)我們直接進(jìn)行數(shù)組的MD5運(yùn)算時(shí)會提示警告

警告信息說MD5()函數(shù)需要一個(gè)string類型的參數(shù)

我們加幾條調(diào)試信息,并將error_reporting(0)取消注釋

給username和password傳入數(shù)組,

http://192.168.219.3/CTF/index.php?username[]=1&password[]=2

其運(yùn)行結(jié)果為

因?yàn)閡srename和password是兩個(gè)不同的數(shù)組,通過第一個(gè)判斷,又因?yàn)樗麄兌际菙?shù)組,MD5結(jié)果都是null,通過第二個(gè)判斷,輸出flag。

0x02 strcmp()

Strcmp()函數(shù)的比較作用

這里,使用strcmp去比較password和flag,如果==0的話,就給出flag,但是strcmp比較,如果相等才會返回0,如果不相等的 話,要么大于0,要么小于0,但是strcmp只會處理字符串參數(shù),如果給個(gè)數(shù)組的話呢,就會返回NULL,而判斷使用的是==,NULL==0是 bool(true)的,所以運(yùn)行結(jié)果

0x03 ereg()和strpos()

數(shù)組 ereg是處理字符串的,所以,按照原理,我們將password構(gòu)造一個(gè)arr[],傳入之后,ereg是返回NULL的,===判斷NULL和 FALSE,是不相等的,所以可以進(jìn)入第二個(gè)判斷,而strpos處理數(shù)組,也是返回NULL,注意這里的是!==,NULL!==FALSE,條件成 立,拿到flag

數(shù)字的比較

0x01 十六進(jìn)制與數(shù)字

這里,它不讓輸入1到9的數(shù)字,但是后面卻讓比較一串?dāng)?shù)字,平常的方法肯定就不能行了,大家都知道計(jì)算機(jī)中的進(jìn)制轉(zhuǎn)換,當(dāng)然也是可以拿來比較的,0x開 頭則表示16進(jìn)制,將這串?dāng)?shù)字轉(zhuǎn)換成16進(jìn)制之后發(fā)現(xiàn),是deadc0de,在開頭加上0x,代表這個(gè)是16進(jìn)制的數(shù)字,然后再和十進(jìn)制的 3735929054比較,答案當(dāng)然是相同的,返回true拿到flag。

0x02數(shù)字運(yùn)算(一)

這里的意思就是:接收post參數(shù)password的值,必須滿足12位以上字符,必須是非空格非TAB之外的內(nèi)容,然后就是你的password要有大小寫數(shù)字,字符內(nèi)容,而且匹配到的次數(shù)要大于6次,最后還有一個(gè)考點(diǎn):

最后的答案就是:42.00e+00000000000

當(dāng)然也可以這樣:420.000000000e-1

0x03數(shù)字運(yùn)算(二)

代碼中先將變量放到is_numeric函數(shù)中判斷,如果數(shù)字或數(shù)字字符串則返回true,否咋返回false。然后一個(gè)判斷,如果temp大于1336則顯示flag。這里用到了PHP弱類型的一個(gè)特性,當(dāng)一個(gè)整形和一個(gè)其他類型行比較的時(shí)候,會先把其他類型intval再比。如果輸入一個(gè)1337a這樣的字符串,在is_numeric中返回true,然后在比較時(shí)被轉(zhuǎn)換成數(shù)字1337,這樣就繞過判斷輸出flag。

0x04 MD5的巧合(一)

輸入password,要求其MD5值為0,這里有兩個(gè)字符串,經(jīng)過MD5運(yùn)算后,為0e******的形式,其結(jié)果為0*10的n次方,結(jié)果還是零

240610708

QNKCDZO

0x05 MD5的巧合(二)

這里的sql語句是

其中md5運(yùn)算函數(shù)有一個(gè)true參數(shù),它的作用是將md5后的hex轉(zhuǎn)換成字符串,這里如果后的字符串又單引號之類的字符就可以注入了。比如字符串:ffifdyop

md5后,276f722736c95d99e921722cf9ed621c

將其轉(zhuǎn)成字符串的話就是

可以看到起字符串類似于 ‘ or ‘6………..這樣的字符串,其中’or’6是個(gè)永真的條件,如果把它放到查詢中就可以where語句的判斷,比如我們在url輸入password=ffifdyop可以看到dump出的數(shù)據(jù)

控制語句

0x01 switch沒有break

這個(gè)代碼是關(guān)于switch的小bug,比如讓我們包含當(dāng)前目錄中的flag.php,給which為flag,這里會發(fā)現(xiàn)在case 0和case 1的時(shí)候,沒有break,按照常規(guī)思維,應(yīng)該是0比較不成功,進(jìn)入比較1,然后比較2,再然后進(jìn)入default,但是事實(shí)卻不是這樣,事實(shí)上,在 case 0的時(shí)候,字符串和0比較是相等的,進(jìn)入了case 0的方法體,但是卻沒有break,這個(gè)時(shí)候,默認(rèn)判斷已經(jīng)比較成功了,而如果匹配成功之后,會繼續(xù)執(zhí)行后面的語句,這個(gè)時(shí)候,是不會再繼續(xù)進(jìn)行任何判斷的。也就是說,我們which傳入flag的時(shí)候,case 0比較進(jìn)入了方法體,但是沒有break,默認(rèn)已經(jīng)匹配成功,往下執(zhí)行不再判斷,進(jìn)入2的時(shí)候,執(zhí)行了require_once flag.php。

想要學(xué)習(xí)PHP的小伙伴可以私信帳號獲取加群鏈接,加群后獲取PHP的學(xué)習(xí)資料。

以上就是關(guān)于魔法pos機(jī),php黑魔法的知識,后面我們會繼續(xù)為大家整理關(guān)于魔法pos機(jī)的知識,希望能夠幫助到大家!

轉(zhuǎn)發(fā)請帶上網(wǎng)址:http://www.dsth100338.com/news/7095.html

你可能會喜歡:

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 babsan@163.com 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。