Bugku-10.閃電16鞭-php語句構造


image-20210812124548712

代碼審計

image-20210812124558052

`

長度要為len("return'7512158cb1d484b7a54f6c004b943687c4c66015';")=49

由源碼知道,$flag可以輸出,且輸出后就是需要的flag

關於eval()函數

eval() 函數把字符串按照 PHP 代碼來計算。

該字符串必須是合法的 PHP 代碼,且必須以分號結尾。

如果沒有在代碼字符串中調用 return 語句,則返回 NULL。如果代碼中存在解析錯誤,則 eval() 函數返回 false

使用短標簽可以構造出echo

<? ?><?= ?>是短標簽而<?php ?>是長標簽,其中<?= 是代替 <? echo的,<? ?> 代替的是<?php ?>

當你發現你的PHP不支持使用短標簽,請到PHP的安裝目錄下找到php.ini文件,使用Ctrl+F搜索short_open_tag ,

然后將等號后面的Off改成On,再重新啟動Apache服務,那么短標簽就會被識別了

因此構造<?=$flag;?>就可以輸出了,但是flag被過濾了

$a構造一個flag字符串,然后echo $$a​,不過[]被過濾了

用大括號代替方括號

在PHP中,大括號“{}”可以起到如下作用:

  • 將多個獨立語句合並為一個復合語句,例如 if ... else ...中經常如此使用
  • 在變量間接引用中進行定界,避免歧義。例如 ${$my_var[8]}與${$my_var}[8]的區分
  • 用於指示字符串變量中的單個字符(下標從0開始),例如
$my_str="1234";

$my_str{1}='5';  //現在 $my_str 內容為 '1534'

因此最后構造

?flag=$a='fla1';$a{3}='g';?><?=$$a;?>111111111111111111

第一個;?>是為了讓代碼開頭的<?php閉合,不然<?=$$a?>無法執行

image-20210812180427563


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM