MENU

第二届上海市大学生网络安全大赛Writeup

第二届上海市大学生网络安全大赛Writeup

0x00 web1

仔细
本题分值:100分 已解答
内部系统,非请勿入。

既然啥都没提示打开也是nginx默认页面 那就扫吧
发现存在/log/

QQ截图20161113152659.png

然后搜索访问返回是200 的 HTTP/1.1" 200
发现了个QQ截图20161113152919.png

payload :
/wojiushiHouTai888/denglU.php?username=admin&password=af3a-6b2115c9a2c0&submit=%E7%99%BB%E5%BD%95
访问得到flag
QQ截图20161113153009.png

0x01 web2


本题分值:100分 已解答
行星管理
先查看源码得到隐藏起来的username:test password:test
QQ截图20161113153603.png

然后登录以后猜测是不是越权发现是存在的 但是没有flag
猜测是不是要到管理员页面于是直接把user.php改成了admin.php flag就出来了.
QQ截图20161113154043.png

0x02 web3

威胁(1)
本题分值:100分 已解答
互联网十大安全威胁之一
Tips:管理于2016年建成该系统

开始一头雾水 猜测是弱口令 跑半天没什么反应
返回来看tips 猜测是日期
生成了日期做密码爆破得到了flag

20160101
20160102
20160103
20160104
20160105
20160106
20160107
20160108
20160109
20160110
20160111
20160112
20160113
20160114
20160115
20160116
20160117
20160118
20160119
20160120
20160121
20160122
20160123
20160124
20160125
20160126
20160127
20160128
20160129
20160130
20160131
20160201
20160202
20160203
20160204
20160205
20160206
20160207
20160208
20160209
20160210
20160211
20160212
20160213
20160214
20160215
20160216
20160217
20160218
20160219
20160220
20160221
20160222
20160223
20160224
20160225
20160226
20160227
20160228
20160229
20160230
20160231
20160301
20160302
20160303
20160304
20160305
20160306
20160307
20160308
20160309
20160310
20160311
20160312
20160313
20160314
20160315
20160316
20160317
20160318
20160319
20160320
20160321
20160322
20160323
20160324
20160325
20160326
20160327
20160328
20160329
20160330
20160331
20160401
20160402
20160403
20160404
20160405
20160406
20160407
20160408
20160409
20160410
20160411
20160412
20160413
20160414
20160415
20160416
20160417
20160418
20160419
20160420
20160421
20160422
20160423
20160424
20160425
20160426
20160427
20160428
20160429
20160430
20160431
20160501
20160502
20160503
20160504
20160505
20160506
20160507
20160508
20160509
20160510
20160511
20160512
20160513
20160514
20160515
20160516
20160517
20160518
20160519
20160520
20160521
20160522
20160523
20160524
20160525
20160526
20160527
20160528
20160529
20160530
20160531
20160601
20160602
20160603
20160604
20160605
20160606
20160607
20160608
20160609
20160610
20160611
20160612
20160613
20160614
20160615
20160616
20160617
20160618
20160619
20160620
20160621
20160622
20160623
20160624
20160625
20160626
20160627
20160628
20160629
20160630
20160631
20160701
20160702
20160703
20160704
20160705
20160706
20160707
20160708
20160709
20160710
20160711
20160712
20160713
20160714
20160715
20160716
20160717
20160718
20160719
20160720
20160721
20160722
20160723
20160724
20160725
20160726
20160727
20160728
20160729
20160730
20160731
20160801
20160802
20160803
20160804
20160805
20160806
20160807
20160808
20160809
20160810
20160811
20160812
20160813
20160814
20160815
20160816
20160817
20160818
20160819
20160820
20160821
20160822
20160823
20160824
20160825
20160826
20160827
20160828
20160829
20160830
20160831
20160901
20160902
20160903
20160904
20160905
20160906
20160907
20160908
20160909
20160910
20160911
20160912
20160913
20160914
20160915
20160916
20160917
20160918
20160919
20160920
20160921
20160922
20160923
20160924
20160925
20160926
20160927
20160928
20160929
20160930
20160931
20161001
20161002
20161003
20161004
20161005
20161006
20161007
20161008
20161009
20161010
20161011
20161012
20161013
20161014
20161015
20161016
20161017
20161018
20161019
20161020
20161021
20161022
20161023
20161024
20161025
20161026
20161027
20161028
20161029
20161030
20161031
20161101
20161102
20161103
20161104
20161105
20161106
20161107
20161108
20161109
20161110
20161111
20161112
20161113
20161114
20161115
20161116
20161117
20161118
20161119
20161120
20161121
20161122
20161123
20161124
20161125
20161126
20161127
20161128
20161129
20161130
20161131
20161201
20161202
20161203
20161204
20161205
20161206
20161207
20161208
20161209
20161210
20161211
20161212
20161213
20161214
20161215
20161216
20161217
20161218
20161219
20161220
20161221
20161222
20161223
20161224
20161225
20161226
20161227
20161228
20161229
20161230

payload:20160807
QQ截图20161113155303.png

0x03 web4

威胁(2)
本题分值:150分 已解答
本系统没有注入点

打开发现了隐藏了个用户demo 123456
发现并不对
于是下载了源码
在core/Auth.class.php 发现了存储用户鉴权信息的文件名
static function get_user_path($uname){
return DATA_PATH.'user/'.md5($uname).'.php';

可以得到http://site.com/data/user/.md5(uname).php
发现存在遍历得到用户名 guest

QQ截图20161113160043.png

QQ截图20161113160132.png

然后尝试密码123456
得到了flag

QQ截图20161113160246.png

0x04 web5

物超所值
本题分值:150分 已解答
你只有$0.01

发现只是前端验证了金额 于是抓包
QQ截图20161113160638.png

修改金额
发包
得到flag

QQ截图20161113160741.png

0x05 web6

在最下面发现了登录点
QQ截图20161113161013.png

然后在administrator.php的注释里面发现了密码
QQ截图20161113161155.png

发现提示不在允许范围内

QQ截图20161113161448.png

于是加上X-Forwarded-For: 127.0.0.1

得到flag
QQ截图20161113161535.png

0x06 web7

抢金币
本题分值:200分 已解答
抢啊抢,抢金币。让我们一起打土豪。

顾名思义就是抢啊!
发现直接抢的话要被抓 于是发现验证码乱输好像不会被抓,于是删了所有的字段就可以了
然后需要get请求土豪的页面然后就可以发包抢了.

先请求一个土豪
QQ截图20161113161951.png

然后在抢他!
删除字段就可以不被抓了,真是开心!
QQ截图20161113162201.png

然后多开几个burp跑满1000就可以了

QQ截图20161113150830.png


web就做到这了



0x00 misc1

面具
本题分值:250分 已解答
如戴著面具去掩饰倦容,迎著炮火也依然表情轻松

C4n_u_find_m3_DB75A15F92D15B504D791F1C02B8815C.jpg

下载了图片然后用binwalk查看了发现存在一个zip 里面有个flag.vmdk
伪加密 binwalk直接就解压了.
或者是用foremost 直接分离出伪加密的zip然后在打开解压得到flag.vmdk

QQ截图20161114173414.png

然后是漫长的找flag之路.
发现flag有两部分

QQ截图20161114173632.png

然后用7z得到了flag前半部分

QQ截图20161114173533.png

发现是brainfuck解密

然后是痛苦的寻找下部分flag
使用的DiskGenius(有个坑)挂载镜像 硬盘-->打开虚拟硬盘文件.
然后在工具-->已删除或格式化后的文件恢复
这个时候 坑来了 默认的是完整恢复 没有文件。。估计是要写入物理磁盘才可以用这个选项才可以.
然后开始不知道 搞了很久 问了一下其他队的大牛 用的其他分区软件方法也差不多 然后发现原来有两个选项 默认选项害怕...win弊端?

完整恢复

QQ截图20161114174937.png

发现没有文件,然后各种其他弯路搞了一天...

QQ截图20161114175228.png

然后换了个选项

QQ截图20161114175346.png

然后两个部分都在

QQ截图20161114175435.png

QQ截图20161114175726.png

提出来发现第二部分是Ook! 然后分别转换就行


0x01 misc2

大可爱
本题分值:150分 已解答
这是大可爱最喜欢的图片

ctf.png

然后老办法 binwalk 看看

QQ截图20161113214457.png

存在一个zlib 提取出来
然后解压他

import zlib
def compress(infile, dst, level=9):
    infile = open(infile, 'rb')
    dst = open(dst, 'wb')
    compress = zlib.compressobj(level)
    data = infile.read(1024)
    while data:
        dst.write(compress.compress(data))
        data = infile.read(1024)
    dst.write(compress.flush())

def decompress(infile, dst):
    infile = open(infile, 'rb')
    dst = open(dst, 'wb')
    decompress = zlib.decompressobj()
    data = infile.read(1024)
    while data:
        dst.write(decompress.decompress(data))
        data = infile.read(1024)
    dst.write(decompress.flush())

if __name__ == "__main__":
    #compress('in.txt', 'out.txt')
    decompress('29.zilb', 'out_decompress')

发现认不到是什么鬼东西 于是就在放binwalk识别了一次 又有
zlib的识别

20161113215127.png

用上面的脚本在解压一次发现是个hex
用winhex 写入文件发现是个zip

bbbb.png

密码在注释里面

QQ截图20161113215630.png

打开得到flag

QQ截图20161113215709.png


0x00 CRYPTO

洋葱
下载发现是个7z
里面有三个长度为6的txt

QQ截图20161115155937.png

搜索了一下发现了是crc32碰撞

http://blog.csdn.net/xiaohajunsky/article/details/53019126

#! /usr/bin/env python
import binascii
def crc32(s):
    crc = binascii.crc32(s)
    if crc > 0:
        return "%x" % (crc)
    else:
        return "%x" % (~crc ^ 0xffffffff)
for a in range(32, 127):
    for b in range(32, 127):
        for c in range(32, 127):
            for d in range(32, 127):
                for e in range(32, 127):
                    for f in range(32, 127):
                        content = chr(a) + chr(b) + chr(c) + chr(d) + chr(e) + chr(f)
                        crc = crc32(content)
                       # print content
                        if crc == 'a58a1926': #crc32
                            print content

QQ截图20161115155922.png

然后分别跑出1,3的文本内容
pwd1:_CRC32 pwd2:_i5_n0 pwd3:t_s4f3

然后解压得到CRC32 Collision.7z
里面有个tips
你知道维吉尼亚密码吗?
我们给了keys.txt,唯一的密钥就在其中,那么解密ciphertext.txt里的密文吧!
解压密码就在明文里,祝你好运!

参考:
http://www.thinksaas.cn/topics/0/522/522766.html

维吉尼亚解密得到第二层解压密码为vigenere cipher funny
爆破sha1得到第三层解压密码为I7~5-s4F3?
md5碰撞的两个示例程序得到第四层解压密码为Goodbye World :-(
最后一层rsa wiener attack得到私钥 解密得到flag为flag{W0rld_Of_Crypt0gr@phy}

0x00 re400

思路:输入的前5个字节的md5值的前8个字节作为密钥对输入内容进行des加密
之后对密文进行base64编码 最后跟一串值对比 爆破就行

#! /usr/bin/env python
import base64
import string
from Crypto.Cipher import DES
import hashlib

def md5(content):
    md5 = hashlib.md5()
    md5.update(content)
    return md5.digest()[0:8]

table = string.uppercase + string.digits

for i in range(36):
    for j in range(36):
        for k in range(36):
            for l in range(36):
                for m in range(36):
                    start = table[i] + table[j] + table[k] + table[l] + table[m]
                    cipher = DES.new(md5(start), DES.MODE_ECB)
                    plain = cipher.decrypt(base64.b64decode('OSHzTJ4pwFgRG6eS6y3xVOOEGcbE5rzwqTs7VCK6ACQLuiTamZpXcQ=='))
                    if plain.startswith(start):
                        print plain
Tags: writeup
Archives QR Code
QR Code for this page
Tipping QR Code
Title - Artist
0:00