ctf之php黑魔法總結。
一、要求變數原值不同但md5或sha1相同的情況下
1.0e開頭的全部相等(==判斷)
240610708 和 qnkcdzo md5值型別相似,但並不相同,在」==」相等操作符的運算下,結果返回了true.
md5和sha1一樣
2.利用陣列繞過(===判斷)
md5和sha1對乙個陣列進行加密將返回null;而null===null返回true,所以可繞過判斷。
二、s trcmp利用陣列繞過
檢視php的手冊
int strcmp ( string $str1 , string $str2 )
return values
returns < 0 if str1 is less than str2; > 0 if str1 is greater than str2, and 0 if they are equal.
當輸入的兩個值為不是字串時就會產生不預期的返回值:
比如$password=$_get['password'];
if(strcmp('am0s',$password))else{
echo 'success!';
這樣一段**中,輸入password=1則返回success,成功繞過驗證
三、當有兩個is_numeric判斷並用and連線時,and後面的is_numeric可以繞過
$a=$_get['a'];
$b=$_get['b'];
$c=is_numeric($a) and is_numeric($b);
var_dump(is_numeric($a));
var_dump(is_numeric($b));
var_dump($c); //$b可以不是數字,同樣返回true
$test=false and true;
var_dump($test); //返回true
四、null,0,」0″,array()使用==和false比較時,都是會返回true的
五、 eregi匹配
陣列繞過
ereg是處理字串,傳入陣列之後,ereg是返回null
%00截斷繞過
六、接收引數$a得存在,並且$a==0可用.繞過(非數字都可繞過)
測試**:
$a=$_get['a'];
if ($a==0) {
echo "1";
if ($a) {
echo "must";
七、接收引數中不能出現某一字元,但下面又必須使用可以 php://偽協議繞過
目前遇到的是file_get_contents其他情況具體而定
八、 is_numeric繞過
空格、\t、\n、\r、\v、\f、+、-能夠出現在引數開頭,「點」能夠在引數任何位置,e、e只能出現在引數中間。
九、php5,3,29,這裡可以直接用%0b繞過\s(空白字元)的匹配
十、 既是0又是1的情況
$a==1&$test[$a]=t時
php精度(16以上)var_dump(9999999999999999999==1);//true
科學計數法 .1e1 echo $b[『.1e1』]//輸出t
.是字串所以在陣列裡面變成0,但在is_numeric中有點則正常輸出為數字
十一、 當switch沒有break時可以繼續往下執行
if (isset ( $_get ['which'] )) {
$which = $_get ['which'];
switch ($which) {
case 0 :
case 1 :
case 2 :
echo $which . '.php';
break;
default :
echo "1";
break;
$which進入迴圈時沒有break則按順序
ctf命令執行漏洞繞過方式小結
測試環境 本地 win10 phpstudy8.1 kali2020.2 外網 單位提供的linux靶機 一 命令分隔符 0a 換行符,0d 回車符,連續指令 二 空格 09 ifs 9 三 讀檔案 1 more 一頁一頁的顯示檔案內容 2 less 與 more 類似,但是比 more 更好的是,...
ctf特訓營 CTF小白入門 PHP語言特性(二)
因php核心是c語言實現的,當php字串處理遇到null x00 時,就會當作字串結束標誌來處理。在ctf比賽中,我們可以利用這個特點處理掉變數末尾我們不需要的字元。如果一段php 如下所示,file etc passwd 00即可讀到 passwd 檔案內容。當然,隨著php版本更新,這個漏洞已經...
CTF之SQL注入
github audi 1 sqli labs sqli labs 爆庫名select database 爆表名select group concat table name from information schema.tables where table schema database 爆列名s...