ctfshow初学

ctfshow初学

CTFShow

无法查看源代码

解决方案:view-source:url

Robots

提示:总有人把后台地址写入robots,帮黑阔大佬们引路。

解决方案:url/robots.txt获取disallow路径flagishere.txt,再通过url/flagishere.txt获取flag

robots.txt

定义:robots.txt文件为网站根目录下的文本文件,用于告诉搜索引擎(比如baidu/google)可以爬取的路径和禁止爬取路径

位置:url/robots.txt

安全隐患:该文件必须公开,且往往包含敏感路径(禁止爬取路径)

phps源码泄露

某些php环境中,若访问某文件时加上.phps后缀.服务器不会执行该php代码,而是直接显示源码(给开发者调试用)

  • 访问index.php返回执行结果
  • 访问index.phps返回源代码内容

常见文件扩展名泄露有

1
2
3
4
5
.phps:PHP 源码高亮显示	
.swp / .swo:Vim 编辑器生成的临时文件
.bak / .old / .orig:程序员备份文件
.txt / .inc / .conf:配置或引入文件可能未被正确保护
.gitignore / .htaccess:配置文件暴露

www.zip源码泄露

程序员为了迁移/备份,把源码打包(www.zip)上传到服务器,但忘了删除

常见路径有

1
www.zip	www.tar.gz	website.rar	backup.zip	code.tar

.git配置文件泄露

版本控制工具泄露

1
2
3
4
.git/ → 可通过 git log, git show, git checkout 恢复源码
.svn/ → Subversion 信息泄露
.hg/ → Mercurial 信息泄露
.DS_Store (Mac 系统) → 目录结构信息

在vim下修改死机

提示:发现网页有个错别字?赶紧在生产环境vim改下,不好,死机了

解决方案:在Linux生产环境上使用vim或者vi做修改时,会生成swp为后缀的文件

  • 第一次意外退出生成的是.swp
  • 第二次意外退出生成的是.swo
  • 第三次为.swn

输入url/index.php.swp得到flag

DNS域名查询

提示:域名其实也可以隐藏信息,比如flag.ctfshow.com 就隐藏了一条信息

解决方案:通过nslookup查询域名解析(txt一般是某个主机名或域名设置的说明)

nslookup

命令行工具,通过与DNS服务器交互查询域名对应的IP,DNS记录的生存时间

  • nslookup -qt=a 域名: 查询该域名的A记录。如果返回多个IP地址,表示该域名对应多个IPV4地址
  • nslookup -qt=aaaa 域名: 查询该域名的AAAA记录。如果返回多个IP地址,表示该域名对应多个IPv6地址
  • nslookup -qt=mx 域名: 查询该域名的MX记录(处理该域名电子邮件的邮件服务器), 当有多个MX记录时,优先级数字越小,优先级越高
  • nslookup -qt=a 域名 DNS服务器IP或域名: 用指定的DNS服务器进行查询, 可判断是否是DNS服务器的问题导致域名无法解析
  • set type=xxx可以设置查询类型,其中xxx可以是a、mx、ns等。例如,“set type=mx”表示查询MX记录
  • nslookup查询当前使用的DNS服务器,然后输入“server 域名或IP”可以查看当前使用的DNS服务器
  • NS记录:NS记录用来指定该域名由哪个DNS服务器来进行解析。NS记录中的IP地址就是该域名的权威DNS服务器的地址。
  • CNAME记录:CNAME记录是别名记录,也称为规范名字。它允许将多个名字映射到同一台计算机。例如,www.example.com可以映射到www.example.com.edgekey.net。通过CNAME记录可以设置域名的别名。
  • PTR记录:PTR记录是反向记录,用于将IP地址映射到主机名或域名。通常用于DNS反向解析,即根据IP地址查找对应的域名或主机名。
  • SOA记录:SOA记录是起始授权记录,包含了关于该DNS区域的基本信息,如区域名称、区域管理员电子邮件地址、区域序列号、区域刷新时间等。
  • SRV记录:SRV记录是服务位置记录,用于标识提供特定服务的服务器地址和端口号。例如,SIP服务器的地址和端口号可以通过SRV记录来标识。
  • TXT记录:TXT记录用于存储任意文本信息,可以用于多种目的,如SPF记录、DKIM签名等。
ai_tools

ai_tools

ai_tools

SOME USEFUL TOOLS

记录一些方便进行实验的tools

wandb

weight & Bias缩写,参数可视化平台,比TensorBoard更强大,优势如下

  • 更有利于复现模型
  • 自动上传云端,可便捷查看旧实验结果
  • 快速集成,每次运行模型可记录完备指标和记录
  • 集中式指示版
常用函数
  • wandb.init():初始化

    1. project:字符串格式,定义项目名称
    2. name:字符串格式,具体名称(项目可能用不同版本)
    3. config:可用wandb.config.update()更新,训练参数配置(比如lrbatchsize,epoch
    4. resume:定义程序意外中断时是否继续,默认为None
    1
    2
    3
    4
    wandb.init(project='project',
    name='name',
    config=config,
    resume='None')
  • wandb.log():将log内的参数值自动上传更新,wandb.Image()为图像显示

    1
    2
    3
    4
    5
    wandb.log({'loss': loss, 'epoch': epoch, 'learning rate': cur_lr,
    'images': wandb.Image(images.float()),
    'masks': {'true': wandb.Image(targets.float()),
    'pred': wandb.Image(pred.float())}
    })
  • wandb.save():保存运行项相关文件,如模型权重

  • wandb.restore():运行指定运行项时恢复代码状态

pytorch支持的优化器

原理 优点 缺点 适用场景
SGD 直接计算梯度进行参数更新
\(\theta_{t+1}=\theta_t-\eta\nabla_\theta L(\theta_t)\)
更用mini-batch的时候,可以收敛得很快 ①在随机选择梯度的同时会引入噪声,使得权值更新的方向不一定正确;②不能解决局部最优解的问题 大规模数据集,以及不需要精细调整超参数的简单模型训练
SGD+Momentum 在SGD基础上引入历史梯度累积
\(v_{t+1}=\beta v_t+(1-\beta)\nabla_\theta L(\theta_t)\\\theta_{t+1}=\theta_t-\eta v_{t+1}\)
加快收敛速度,有一定摆脱局部最优的能力,一定程度上缓解了没有动量的时候的问题 更新的时候
在一定程度上保留之前更新的方向,仍然继承了一部分SGD的缺点
参数空间较复杂
Adam 结合了SGD和Momentum,并对每个参数梯度进行更新
\(\begin{gathered}m_t=\beta_1m_{t-1}+(1-\beta_1)\nabla_\theta L(\theta_t)\\v_t=\beta_2v_{t-1}+(1-\beta_2)(\nabla_\theta L(\theta_t))^2\\\hat{m}_t=\frac{m_t}{1-\beta_1^t},\quad\hat{v}_t=\frac{v_t}{1-\beta_2^t}\\\theta_{t+1}=\theta_t-\eta\frac{\hat{m}_t}{\sqrt{\hat{v}_t}+\epsilon}\end{gathered}\)
计算效率高,收敛速度快,自动调整学习率 在某些情况不如SGD的泛化能力,需要调整超参数 对收敛速度和稳定性有较高要求、大规模数据集
Adagrad 累计每个参数平方梯度
\(G_t=G_{t-1}+\nabla_\theta L(\theta_t)^2\\\theta_{t+1}=\theta_t-\eta\frac{\nabla_\theta L(\theta_t)}{\sqrt{G_t}+\epsilon}\)
为每个参数自适应调整学习率,适合稀疏数据 学习率会逐步降低,训练后期速度慢 处理稀疏数据或具有不同频率要求的参数更新
Adadelta Adagrad改进,限制累计历史梯度范围避免学习率过早减小
\(\begin{gathered}E[g^2]_t=\rho E[g^2]_{t-1}+(1-\rho)g_t^2\\\theta_{t+1}=\theta_t-\frac{\eta\nabla_\theta L(\theta_t)}{\sqrt{E[g^2]_t+\epsilon}}\end{gathered}\)
避免在训练后期,学习率过小;初期和中期,加速效果不错,训练速度快 需要手动指定初始学习率,初始梯度过大会导致整个训练过程的学习率一直很小,在模型训练的后期,模型会反复地在局部最小值附近抖动,从而导致学习时间变长 需要自动调整学习率但不希望学习率逐渐降低
RMSprop 字数应学习率优化器,通过计算每个参数梯度指数加权平均调整
\(v_t=\beta v_{t-1}+(1-\beta)(\nabla_\theta L(\theta_t))^2\\\theta_{t+1}=\theta_t-\eta\frac{\nabla_\theta L(\theta_t)}{\sqrt{v_t}+\epsilon}\)
类似于Adadelta,收敛较快 Adam类似,需要更精细的超参数调整,不适用于小批量数据 需要快速收敛,稀疏数据任务
AdamW 权重衰减
\(\begin{gathered}m_t=\beta_1m_{t-1}+(1-\beta_1)\nabla_\theta L(\theta_t)\\v_t=\beta_2v_{t-1}+(1-\beta_2)(\nabla_\theta L(\theta_t))^2\\\hat{m}_t=\frac{m_t}{1-\beta_1^t},\quad\hat{v}_t=\frac{v_t}{1-\beta_2^t}\\\theta_{t+1}=\theta_t-\eta\frac{\hat{m}_t}{\sqrt{\hat{v}_t}+\epsilon}-\eta\lambda\theta_t\end{gathered}\)
带权重衰减的Adam,防止过拟合 需要调整超参数 需要防止过拟合
Adamax 计算梯度的加权平方和时,使用的是过去梯度的最大值,而不是加权平方和的平方根
\(u_t=\max(\beta_2u_{t-1},|\nabla_\theta L(\theta_t)|)\\m_t=\beta_1m_{t-1}+(1-\beta_1)\nabla_\theta L(\theta_t)\\\theta_{t+1}=\theta_t-\eta\frac{m_t}{u_t+\epsilon}\)
在处理稀疏梯度时表现较好,尤其是在一些梯度不稳定或参数变化范围较大的场景中 收敛速度稍慢,对超参数选择敏感 需要稳定训练,尤其是学习率选择较为困难
  • SGD

    优点:计算效率高,对于某些模型和数据集泛化能力较好

    缺点:收敛速度慢,容易陷入局部最小值

基础知识学习
T2I

T2I

T2I

Framework

img

Read more
Explainable_ML

Explainable_ML

Explainable_ML

Explainable ML

产生原因:预测正确 != 模型有效,即希望模型能给出预测结果的支撑原因,深度神经网络对我们是一个黑盒结构,不能直接解释其结果

Read more
FGSM & PDG
CommonsCollections
CommonsCollections3

CommonsCollections3

CommonsCollections3

特点

更换命令执行方式,之前是 Runtime.getRuntime().exec("calc"); ,但很多时候可能存在Runtime过滤的情况,因此将执行命令方式更换为类动态加载执行命令

Read more
CommonsCollections6

CommonsCollections6

CommonsCollections6

前景提要

前面两种链子都依赖于jdk版本,在更新后的jdk版本中AnnotationInvocationHandler类已有更新,难以利用

除了利用AnnotationInvocationHandler类的readObject方法以外,还可以利用HashMap类的readObject方法

Read more
CommonsCollections1

CommonsCollections1

CommonsCollections1

前景提要

jdk版本:8u65 下载链接:Java 存档下载 — Java SE 8 | Oracle 中国

cc版本:3.2.1

1
2
3
4
5
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>

用https://hg.openjdk.org/jdk8u/jdk8u/jdk/archive/af660750b2f4.zip下载到的zip文件中的src/share/classes目录下的sun添加到jdk_8u65/目录下的src.jar解压后的src文件中,再将src/目录添加到项目的sdk源路径中,可实现将class文件转换为java(方便调试)

image-20240608170247917

Read more