目錄
十一.爆破
PHP的基本語法
變量與常量
數據類型
流程控制
函數
文件操作
數據庫交互
1.substr()?函數
2.?intval()?函數
十二.XFF?
X-Forwarded-For(簡稱XFF)
十三.rce1?
?shell 命令分隔符
isset()函數
preg_match_all()函數
${IFS}
十四.GET-POST
十五.被黑掉的站?
十一.爆破
又是php代碼,對于我來說根本不會呀,還是先來學點基礎的php知識吧
PHP是一種廣泛使用的開源服務器端腳本語言,專為Web開發設計,同時也可以作為通用編程語言使用。其語法吸收了C語言、Java和Perl的特點,易于學習且功能強大。PHP的主要特點包括動態頁面生成、數據庫交互、文件操作等,適用于構建動態交互性網站。
PHP的基本語法
PHP代碼通常嵌入在HTML中,使用<?php ... ?>標簽包裹。以下是一個簡單的PHP示例:
<!DOCTYPE html> <html> <body> <?php echo?"Hello, World!"; ?> </body> </html>
在上述代碼中,echo用于輸出內容到網頁。
變量與常量
變量:以$開頭,區分大小寫。例如:
$name =?"PHP"; echo?$name;
常量:使用define()定義,通常以大寫字母命名。例如:
define("SITE_NAME",?"PHP中文網"); echo?SITE_NAME;
數據類型
PHP支持多種數據類型,包括:
標量類型:布爾型、整型、浮點型、字符串。
復合類型:數組、對象。
特殊類型:資源、NULL。
示例:
$integer = 10;?// 整型 $string =?"學習PHP";?// 字符串 $array?=?array(1, 2, 3);?// 數組
流程控制
PHP提供了豐富的流程控制語句,包括if、switch、while、for等。例如:
$hour = date("H"); if?($hour < 12) { echo?"早上好!"; }?else?{ echo?"下午好!"; }
函數
函數是PHP中實現代碼復用的重要工具。定義函數的語法如下:
function?greet($name) { return?"Hello, "?. $name; } echo?greet("PHP");
文件操作
PHP支持多種文件操作,例如讀取、寫入、刪除文件:
// 寫入文件 file_put_contents("example.txt",?"學習PHP!");// 讀取文件 $content = file_get_contents("example.txt"); echo?$content;// 刪除文件 unlink("example.txt");
數據庫交互
PHP常用于與數據庫交互,尤其是MySQL。以下是一個簡單的MySQL連接示例:
$conn =?new?mysqli("localhost",?"username",?"password",?"database"); if?($conn->connect_error) { die("連接失敗: "?. $conn->connect_error); } echo?"連接成功"; $conn->close();
感覺跟學過的python和c語言有很多相似之處,但是又有挺大區別的
接下來看看題目
知識點?
1.substr()
?函數作用:從字符串中提取子串。
代碼中的用法
substr($pass, 1, 1)
:提取密碼的第 2 個字符(索引 1)。substr($pass, 14, 1)
:提取密碼的第 15 個字符(索引 14)。2.?
intval()
?函數作用:將變量轉換為整數類型。
轉換規則
- 數字字符串:直接轉為數字(如?
"5"
?→?5
)。- 非數字字符串:從開頭截取數字部分,剩余部分忽略(如?
"5apple"
?→?5
,"apple"
?→?0
)。- 其他類型:布爾值、浮點數等按規則轉換(如?
true
?→?1
,3.14
?→?3
)。
?總之,上面php代碼的意思是:
用戶需找到一個字符串,使其 MD5 哈希值同時滿足:
- 第 2、15、18 位字符相同(如均為
2
); - 這三位的數值運算結果(例如
(2+2+'2')/2=21
)恰好等于第 32 位字符(如1
)。
方法一:根據php代碼推算出答案
下面是python腳本
import string
import hashlib
s=string.ascii_letters+string.digits
def intval(m):try:m=int(m)return mexcept:return 0
for i in s:for j in s:for k in s:a = i + j+kmd5= hashlib.md5(a.encode('utf-8')).hexdigest()if md5[1]==md5[14]==md5[17]:if intval(md5[1])!=0:if (intval(md5[1])+intval(md5[14])+intval(md5[17]))/intval(md5[1])==intval(md5[31]):print(a,end=' ')
這個腳本我寫的是3位數的(1位數的不存在,2位數的看下面的php腳本)
所以答案有:
aDp a6e b7l ejt hc2 jGd ktD o07 pjd ubv vMJ v8O wuB wyG xjF AKh DCj D36 GT7 H3D Jik JKh KtR K2e LfJ Lqj Nzc Oie OiU R7V ScB SSM SVi UYg WwF 1zg 4cQ 422 6xU 6Vh 7vE
php腳本
<?php
$s = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
for ($a = 0; $a < 62; $a++) {for($b = 0;$b < 62;$b++){$f = $s[$a].$s[$b];$pass = md5($f);if (substr($pass, 1, 1) === substr($pass, 14, 1) && substr($pass, 14, 1) === substr($pass, 17, 1)) {if ((intval(substr($pass, 1, 1)) + intval(substr($pass, 14, 1)) + substr($pass, 17, 1)) / substr($pass, 1, 1) === intval(substr($pass, 31, 1))) {echo $f,"\n";error_reporting(0);}}}
}
?>
答案有:? 3j ? ZE ??
?
方法二:
就是用爆破(題目名)的方式
?方法三:(最簡單)
根據題目得知當pass滿足條件后會
?include('flag.php');
將指定路徑下的flag.php
文件的內容插入并執行到當前代碼的位置
那么可以直接訪問/flag.php試試(我覺得這算一個小bug吧,一般來說是訪問不了的)
flag{8277e0910d750195b448797616e091ad}
十二.XFF?
這道題挺簡單的
X-Forwarded-For
(簡稱XFF
)是一個HTTP 請求頭字段,主要用于記錄客戶端的原始 IP 地址,尤其在客戶端與服務器之間存在代理(如反向代理、負載均衡器)時發揮作用。?
?因此,只需要偽造個XXF就行了
簡單拿下
flag{847ac5dd4057b1ece411cc42a8dca4b7}
十三.rce1?
又是php
就過濾了個空格,能拿到flag算我輸
IP :<?php$res = FALSE;if (isset($_GET['ip']) && $_GET['ip']) {$ip = $_GET['ip'];$m = [];if (!preg_match_all("/ /", $ip, $m)) {$cmd = "ping -c 4 {$ip}";exec($cmd, $res);} else {$res = $m;}
}
?>
先講知識點?
?shell 命令分隔符
符號 作用 ; 按順序依次執行各個命令。 && 前一個成功才執行下一個。 || 前一個失敗才執行下一個。 & 前一個在后臺執行,同時可執行其他命令。 | 前一個的輸出作為后一個的輸入。 ?
isset()函數
作用:用于檢測變量是否已設置且值不為?
null
。?本題作用:檢查
$_GET
超級全局數組中是否存在鍵名為ip
的元素。preg_match_all()函數
作用:PHP 中的正則表達式匹配函數,用于在字符串中全局搜索所有匹配項。
本題作用:檢查輸入是否包含空格,若不包含則繼續執行后續代碼
${IFS}
- IFS(Internal Field Separator)是 Bash 中的內置變量,表示內部字段分隔符,默認包含空格、制表符和換行符。
${IFS}
?會被替換為 IFS 變量的當前值。
所以這段代碼實現了一個 ping 工具網頁接口:檢查用戶輸入的 IP 是否存在且不含空格,若通過則執行 ping 命令并返回結果,否則提示錯誤。
所以先輸入127.0.0.1;ls看看?(其實只輸入;ls也行)
?歐克,看來是有用的,接下來查看fllllaaag.php文件
輸入;cat${IFS}fllllaaag.php
?發現啥都沒有,其實在這呢
flag{a3949821f7627a7fd30ab0722ff9b318}
十四.GET-POST
?這題也非常簡單
先用GET請求傳?????????id=1
再用POST請求傳????????jljcxy=flag
簡簡單單
flag{a52b7cac3af0b081349001c92d79cc0a}
十五.被黑掉的站?
老規矩,先用dirsearch目錄掃描
掃出來兩個,分別訪問看看
這么看來應該是用/index.php.bak中的密碼對/shell.php進行爆破,廢話不多說開爆
小技巧:/index.php.bak這里可以按ctrl+u變成下面這樣
flag{8e539a7a46fea05dea18b9b9f9ff6a63}
Day5:
原本打算每天做5道題如何寫一篇筆記的,前面兩天太懶了,題目做了但是筆記懶得寫了。。哎,實在是太懶了
不行,本人在此立下flag,每天必須寫一篇筆記,做不到的話3天不碰手機
今天寫了五道題,打了一個非常簡單的靶機,學會了用hydra工具爆破,還學會了一些php知識......累了