xss lab
level1<img src=1 onerror=alert('1')>
level2
闭合
"/><img src=1 onerror=alert(1)>
level3
过滤< >
' onfocus=javascript:alert('xss') class='
level4" onfocus=javascript:alert('xss') class="
level5
过滤事件 onfocus/script 等关键字 添加_干扰
"> <a href=javascript:alert('xss')>xss</a> //
level6
过滤href 大写绕过
"> <a Href=javascript:alert('xss')>xss</a> //
level7
直接删除关键字 双写绕过
...
RE 0x00
加密算法
拖ida
findcrypt
常量
动调 传参
动调 返回结果
base64分组 移位 查表
RC4
0-255 s盒初始化
0-255 t盒初始化
密钥流明文一次异或
DES
s盒
p盒
16轮
cbc引入iv向量先与明文异或
填充方式:0/pkcs7
AES
s盒
逆s盒
9轮
RSAECCida动调F2下断点
设置debugger
F7 步入
F8 步过
F9 运行
odF7 步入
F8 步过
F9 运行
F4 运行到选定位置
shift + 7/8/9 忽略异常
crtl+A 分析代码(代码被当成数据的情况)
脱壳(压缩壳)出口标志法大跳转 跨段 例如upxpopad 61jmp E9/E8
SFX定位法od专用
异常全部打勾
选项 调试设置 sfx 块方式跟踪真正入口处
不怎么好用
内存映像法两次断点法
.rsrc下断 F9
代码段下断 F9
esp定律法F8 esp改变
数据窗口跟随esp
四个字节断点==>硬件访问==>字
脱壳(保护壳)最后一次异常法
roco攻略
自用
山海经石王
15 金石 破云
123331223612333122361233312236123331223612333122361233312236123331223612333122361233312236123331223612333122361233312236123331223612333122361233312236123331223612333122361233312236123331223612333122361233312236123331223612333122361233312236123331223612333122361233312236123331223612333122361233312236123331223612333122361233312236123331223612333122361233312236123331223612333122361233312236123331223612333122361233312236123331223612333122361233312236123331223612333122361233312236 ...
无题
apschedulerCelerysuperviscord
drf学习0x02
今天重新看了一遍drf的文档,真的是豁然开朗,以前写的时候都是不求甚解,直接cv,现在知道为什么这么写了
技巧
data直接模拟来自客户端数据, 不用request.data
字典用get,不要用[],容易报错
request.POST的类型是QueryDict,和普通的Dict不同的是,如果使用get,只能获得数组的最后一个数,必须使用getlist才能获取list
反序列化校验数据字段选项,都是反序列化需要
max_lengthmin_lengthallow_blanktrim_whitespace 截断空白符max_valuemin_valuevalidaters = [序列化器外部的验证函数]required = False 反序列化时可以不提供,不会报错read_only = True 前端提交的数据不应该有这个字段,有的话被忽略wirte_only = True 对象转化成字典时,不需要这个字段err_message = {'min_value': '小于最小值'} 自定义验证字段报错信息
反序列化基本步 ...
Vue学习
声明式渲染<script>export default { data() { return { message: 'haorical', } }}</script><template> <h1>{{message}}</h1></template>
Attribute 绑定<script>export default { data() { return { titleClass: 'title' } }}</script><template> <!-- 此处添加一个动态 class 绑定 --> <h1 v-bind:class="titleClass">Make me red< ...
javascript重生之路-0x02
浏览器操作DOM始终记住DOM是一个树形结构。操作一个DOM节点实际上就是这么几个操作:
更新:更新该DOM节点的内容,相当于更新了该DOM节点表示的HTML的内容;
遍历:遍历该DOM节点下的子节点,以便进行进一步操作;
添加:在该DOM节点下新增一个子节点,相当于动态增加了一个HTML节点;
删除:将该节点从HTML中删除,相当于删掉了该DOM节点的内容以及它包含的所有子节点。
// 返回ID为'test'的节点:var test = document.getElementById('test');// 先定位ID为'test-table'的节点,再返回其内部所有tr节点:var trs = document.getElementById('test-table').getElementsByTagName('tr');// 先定位ID为'test-div'的节点,再返回其内部所有class包含red的节点:var reds = document.getEle ...
javascript重生之路-0x01
函数高阶函数every
判断所有元素是否满足测试条件
var arr = ['Apple', 'pear', 'orange'];console.log(arr.every(function (s) { return s.length > 0;})); // true, 因为每个元素都满足s.length>0console.log(arr.every(function (s) { return s.toLowerCase() === s;})); // false, 因为不是每个元素都全部是小写
find
查找符合条件的第一个元素
var arr = ['Apple', 'pear', 'orange'];console.log(arr.find(function (s) { return s.toLowerCase() === s;})); // 'pear ...
javascript重生之路-0x00
快速入门基本语法alert('helloworld')
赋值语句
var x = 1;
判断
if(2>1){
x = 1;
}
注释
alert('hello') // 注释
/* 注释 */
数据类型 Number
123; // 整数123
0.456; // 浮点数0.456
1.2345e3; // 科学计数法表示1.2345x1000,等同于1234.5
-99; // 负数
NaN; // NaN表示Not a Number,当无法计算结果时用NaN表示
Infinity; // Infinity表示无限大,当数值超过了JavaScript的Number所能表示的最大值时,就表示为Infinity
字符串
'abc' "xyz"
布尔值
true false
逻辑运算
&& || !
比较
> == <
由于JavaScript设计缺陷,不要使用==比较,始终坚持使用== ...
drf学习
概述真是非常优秀的一个框架,能想到的都提供了,啥都不用写,代码很简洁
SerializationCreating a Serializer class and Using ModelSerializers# class SnippetSerializer(serializers.Serializer):# id = serializers.IntegerField(read_only=True)# title = serializers.CharField(required=False, allow_blank=True, max_length=100)# code = serializers.CharField(style={'base_template': 'textarea.html'})# linenos = serializers.BooleanField(required=False)# language = serializers.ChoiceField(choices=L ...