第六届上海市大学生网络安全大赛 | Wp
文章目錄
- MISC
- 0x00:簽到
- 0x01:pcap
- 0x02:pcap analysis
- 0x03: 可樂加冰
- Web
- 0x01:千毒網盤
MISC
0x00:簽到
linux運行一下即可得到flag
0x01:pcap
提示:請分析附件中的dnp3協議
具體的協議介紹可以看師傅的博客
DNP3協議解析 —— 利用Wireshark對報文逐字節進行解析詳細解析DNP3所含功能碼
工控安全入門(四)—— DNP3協議
一開始以為出題考察的是read,在找參數object,以及File Data
但協議中并未出現,后來問學長才知道一般考察這類工控題,基本都是以流量包的形式考察的因為有些環境沒有辦法在線上提供,考察的還是傳統的ctf,只不過是換了工控協議
可以總結下flag、fl、f各種編碼,把數據包的內容分長度不同進行查看,有的時候這類題目考察的就是眼力。
這道題的flag便隱藏在每個長度為91的dnp3流量包中,按照順序進行拼接即可
0x02:pcap analysis
這題上去也被秒了,就不用去看協議了,肯定還是把flag隱藏在流量包中,提示了讓去看Modbus協議,直接過濾查看,打開第一個流量包即可看到flag
0x03: 可樂加冰
給了一個PNG照片,試了很多常見的隱寫都沒有發現線索,后來隊里的qwzf拿到了一血,tql,復現一下,也學習學習。
binwalk分析一下,有zlib 之前都沒怎么注意過,也可以看一下2018全國大學生信息安全競賽 picture,也是考察zlib
5B.zilb和2AE96.zlib并沒有什么異常
再來看看2AE96
有些奇怪,復制出來
內容不是十六進制,是十進制,寫個簡單的腳本轉換一下
翻之前的資料,發現和jjencode特別像,只不過含有S,把S替換成$再試一下
$.$$$_+$.$__$+$.___+$.__$+$.$$$$+$.$$$_+$.$__$+$.__$+"-"+$.$_$$+$.$_$_+$.$$_$+$.$$_+"-"+$.$__+$.$_$_+$.$$$$+$.$$$+"-"+$.$__$+$.$__$+$.$$_+$._$$+"-"+$.$$_$+$.$_$_+$.$$_$+$.$___+$.__$+$._$_+$.$$$$+$.$_$+$.$$_+$._$_+$.$__+$.$$_$但發現解不了,查看了jjencode的作者提供的編碼測試頁,發現需要套上alert,它的格式是固定的
alert("") alert('1emon')
知道規律了,把上面得到的內容復制進去即可,前后連接的+號不能忘
Web
0x01:千毒網盤
這個題有源碼泄露
在code.php文件中發現sql語句,做題的時候沒有觀察到index.php文件中的變量覆蓋,一直以為是要繞過單引號,然后進行SQL注入得到flag。
這題路沒走通只能去看index.php頁面,發現
查了下發現和之前的一道CTF比較類似,考察的是變量覆蓋
foreach(array_expression as $value) 遍歷給定的 array_expression 數組。每次循環中,當前單元的值被賦給 $value 并且數組內部的指針向前移一步
foreach(array_expression as $key => $value) 除了當前單元的值以外,鍵值也會在每次循環中被賦給變量 $key
本地測試一下:
第一層foreach里,$__key就是_GET, _POST, _COOKIE,加上一個$就變為$_GET, $_POST, $_COOKIE
<?php foreach(array('_GET','_POST','_COOKIE') as $key){ echo "\$\$key<br>"; print_r($$key); echo "<br>"; foreach($$key as $key_2 => $value_2) {echo "\$\$key_2<br>"; print_r($$key_2);echo "<br>";echo "\$value_2<br>";print_r($value_2);echo "<br>"; var_dump($$key_2==$value_2);echo "<br>"; } }
第一次循環如果是以_GET傳入的話,最終得到的結果是false,試試以_POST傳入
unset($$__key2)把$_POST變量銷毀了,所以就不會觸發filter函數,因為還沒進waf函數POST就被unset了
接下來繼續執行
執行之后$_POST變量就又回來了,可以在本地測試一下
<?php foreach(array('_GET', '_POST') as $key) {if($$key) { foreach($$key as $key_2 => $value_2) { if(isset($$key_2) && $$key_2 == $value_2) unset($$key_2); }}} echo "before<br>"; echo "GET:<br>"; var_dump($_GET); echo "<br>"; echo "POST:<br>"; var_dump($_POST); echo "<br>";if($_GET) extract($_GET, EXTR_SKIP); if($_POST) extract($_POST, EXTR_SKIP);echo "<br>"; echo "<br>"; echo "after<br>"; echo "POST:<br>"; var_dump($_POST);
執行extract()之前,$_GET數組的鍵名是_POST,$_POST數組則不存在,$_GET數組的鍵名是_POST,所以也就是導入了名為_POST的變量,也就是$_POST變量,所以$_POST成功被還原
接下來測試一下payload,發現可以繞過去
使用聯合查詢注入方式看看,判斷列數
爆數據表
爆出字段值
爆值
總結
以上是生活随笔為你收集整理的第六届上海市大学生网络安全大赛 | Wp的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一周刷题记录 | WebMisc
- 下一篇: 小型PHP论坛搭建