<?php if (isset ($_GET['password'])) { if (ereg ("^[a-zA-Z0-9]+$", $_GET['password']) === FALSE) { echo '<p>You password must be alphanumeric</p>'; } else if (strlen($_GET['password']) < 8 && $_GET['password'] > 9999999) { if (strpos ($_GET['password'], '*-*') !== FALSE) { die('Flag: ' . $flag); } else { echo('<p>*-* have not been found</p>'); } } else { echo '<p>Invalid password</p>'; } } ?>
1.ereg漏洞:首先第一層檢查需要繞過ereg漏洞,百度可以知道存在截斷的問題,ereg讀到%00的時候,就截止了
2.strlen()限制了長度小於8並且大小必須大於9999999,1e8=100000000 > 9999999
3.strpos()對password進行匹配,必須含有-,最終才輸出flag
於是構造password:1e8%00*-*
將password=1e8%00*-*寫入地址欄
補充:所謂ereg漏洞,其實就是00截斷。
PHP 函數漏洞總結:
http://www.tk4479.net/qq_31481187/article/details/60968595
