Merge branch 'master' into master
This commit is contained in:
@@ -53,7 +53,9 @@
|
||||
| - | - | - |
|
||||
| mcfx [Markdown](players/mcfx/writeup.md) [PDF](players/mcfx/writeup.pdf) | 总排名第一名 | 全部题目 |
|
||||
| [ProfFan](players/ProfFan/writeup.md) | | 证验码 |
|
||||
| [A-wing](players/a-wing/writeup.md) | 补充一下官方题解 | 一闪而过的 Flag, 233 同学的字符串工具, 233 同学的 Docker |
|
||||
| [NaiveTomcat](players/NaiveTomcat/) | | 超简陋的 OpenGL 小程序, 狗狗银行, 233 同学的字符串工具, 233 同学的 Docker |
|
||||
| [sparkcyf](players/sparkcyf/writeup.md) | | 从零开始的记账工具人 |
|
||||
| [A-wing](players/a-wing/writeup.md) | | 一闪而过的 Flag, 233 同学的字符串工具, 233 同学的 Docker |
|
||||
|
||||
## 其他资源
|
||||
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
# Docker WP
|
||||
|
||||
## 思路
|
||||
|
||||
`/var/lib/docker/overlay2`中有pull下来的docker镜像的文件,而这个docker的构建是先有flag.txt
|
||||
后来删除的,于是就能在这个目录中搜索到flag.txt。
|
||||
@@ -0,0 +1,35 @@
|
||||
# 字符串工具WP
|
||||
|
||||
## 大小写转换
|
||||
|
||||
### 思路
|
||||
|
||||
本问利用Unicode连字U+FB02(fl连写),该字符被传入python的upper()方法后会被转为FL,
|
||||
进而达到绕过过滤的方法
|
||||
|
||||
### 脚本
|
||||
|
||||
```python
|
||||
#!/usr/bin/python
|
||||
import pwn
|
||||
token="token"
|
||||
p=pwn.remote("202.38.93.111",10233)
|
||||
p.sendline(token)
|
||||
p.recvuntil("2. Convert my UTF-7 string to UTF-8!!")
|
||||
p.sendline("1")
|
||||
p.recvuntil("Welcome to the capitalizer tool, please input your string:")
|
||||
payload="\ufb02\u0061\u0067"
|
||||
p.sendline(payload)
|
||||
p.interactive()
|
||||
```
|
||||
|
||||
## UTF-7到UTF-8转换
|
||||
|
||||
### 思路
|
||||
|
||||
本问利用UTF-7编码规则,将flag中每个字母扩充为双字节(即在前面加/x00),整体base64编码
|
||||
并在最前面加上“+”以及去除末尾“=”,发送到服务,被UTF-7解码成flag进而获取flag
|
||||
|
||||
### payload
|
||||
|
||||
`+AGYAbABhAGc`
|
||||
@@ -0,0 +1,18 @@
|
||||
# 狗狗银行WP
|
||||
|
||||
## 切入点
|
||||
|
||||
后端计算利息的近似方法为四舍五入,故构造合理余额可使得借记卡利息达到0.6%,高于信用卡的0.5%从而获取利润
|
||||
|
||||
## 解题方法
|
||||
|
||||
分析创建卡、转账的请求,使用burp的intruder批量发包,首先自行手动创建一张信用卡,再通过burp批量创建998张借记卡
|
||||
(为了满足题目新增要求),再通过burp从信用卡向每一张新增的信用卡转账167元
|
||||
|
||||
吃饭后,此时,每张卡都会有理论0.501元的利息,经过后端计算舍入得1元利息,共获得998元利息,而信用卡欠款166666元,
|
||||
利息833.33元,有164元差额。除去吃饭的10元仍有利润。重复几天就可以使净资产大于2000。
|
||||
|
||||
## 错误解题方法
|
||||
|
||||
看到题我的第一思路是整型溢出,于是借了很多钱,用burp请求/api/eat很多次,最后返回的欠款有2^1000不止。后端应该用
|
||||
的BigDecimal,不会出现溢出。
|
||||
@@ -0,0 +1,23 @@
|
||||
# 超简陋的OpenGL小程序WP
|
||||
|
||||
## 思路
|
||||
|
||||
着色器脚本中更改视角和光源位置,更改完后运行即可
|
||||
|
||||
## patch
|
||||
|
||||
basic_lighting.fs
|
||||
```diff
|
||||
19c19
|
||||
< vec3 lightDir = normalize(-0.9* lightPos + FragPos);
|
||||
---
|
||||
> vec3 lightDir = normalize(lightPos - FragPos);
|
||||
```
|
||||
|
||||
basic_lighting.vs
|
||||
```diff
|
||||
14c14
|
||||
< FragPos = vec3(-1 *model * vec4(aPos, 1.0));
|
||||
---
|
||||
> FragPos = vec3(model * vec4(aPos, 1.0));
|
||||
```
|
||||
@@ -0,0 +1,96 @@
|
||||
# 从零开始的记账工具人
|
||||
|
||||
既然题目是用Excel分发的,那就直接用Excel解(
|
||||
|
||||
解题使用的Excel表格已经放在了本文件夹内的从`零开始的记账工具人-convert.xlsx`中。
|
||||
|
||||
## Excel表格中每列的含义(Sheet1)
|
||||
|
||||
### A-B
|
||||
|
||||
题目给出的金额(单位为大写)和数量。
|
||||
|
||||
### G-K
|
||||
|
||||
用于拆分佰,拾,元,角,分前的大写数字。
|
||||
|
||||
以G列为例:
|
||||
|
||||
```
|
||||
=IFERROR(MID($A2,FIND(G$1,$A2)-1,1),0)
|
||||
```
|
||||
|
||||
>函数 FIND 和 FINDB 用于在第二个文本串中定位第一个文本串,并返回第一个文本串的起始位置的值,该值从第二个文本串的第一个字符算起。
|
||||
|
||||
[`FIND`函数](https://support.microsoft.com/zh-cn/office/find%e3%80%81findb-%e5%87%bd%e6%95%b0-c7912941-af2a-4bdf-a553-d0d89b0a0628?ui=zh-cn&rs=zh-cn&ad=cn)用于寻找`A列`对应单元格(即`A2`)内“佰”字的位置,并输出其位置。
|
||||
|
||||
>MID 返回文本字符串中从指定位置开始的特定数目的字符,该数目由用户指定。
|
||||
|
||||
[`MID`函数](https://support.microsoft.com/zh-cn/office/mid%E3%80%81midb-%E5%87%BD%E6%95%B0-d5f9e25c-d7d6-472e-b568-4ecb12433028)用于读取“佰”字的位置的前一位的文字(即佰位的金额,此题中只有“零”和“壹”)
|
||||
|
||||
> 可以使用 IFERROR 函数捕获和处理公式中的错误。 如果公式的计算结果为错误值,则 IFERROR 返回您指定的值;否则,它将返回公式的结果。
|
||||
|
||||
[`IFERROR`函数](https://support.microsoft.com/zh-cn/office/iferror-%E5%87%BD%E6%95%B0-c526fd07-caeb-47b8-8bb6-63f3e417f611)用于处理单元格金额没有佰位的情况,没有佰位时输出0。
|
||||
|
||||
对拾,元,角,分位的处理同上。
|
||||
|
||||
### M-Q
|
||||
|
||||
用于将提取出的中文大写金额转换成数字。
|
||||
|
||||
以M列为例:
|
||||
|
||||
```
|
||||
=VLOOKUP(G2,'LUT-UC'!$A$1:$B$12,2,0)
|
||||
```
|
||||
|
||||
使用[`VLOOKUP`函数](https://support.microsoft.com/zh-cn/office/vlookup-%E5%87%BD%E6%95%B0-0bbc8083-26fe-4963-8ab8-93a18ad188a1),查找`LUT-UC`这个Sheet中对应的数字,并返回该数字。
|
||||
|
||||
`LUT-UC`中包含了中文大写金额和数字的对应关系:
|
||||
|
||||
| 0 | 0 |
|
||||
| ---- | ---- |
|
||||
| 零 | 0 |
|
||||
| 壹 | 1 |
|
||||
| 贰 | 2 |
|
||||
| 叁 | 3 |
|
||||
| 肆 | 4 |
|
||||
| 伍 | 5 |
|
||||
| 陆 | 6 |
|
||||
| 柒 | 7 |
|
||||
| 捌 | 8 |
|
||||
| 玖 | 9 |
|
||||
| 拾 | 0 |
|
||||
|
||||
**其中“拾”位由于有形如“拾X”(10-20之间的数额)在“拾”字之前没有“壹”,所以需要特殊处理:**
|
||||
|
||||
```
|
||||
=VLOOKUP(H2,'LUT-UC'!$A$1:$B$12,2,0)+IFERROR(FIND("拾",A2,1)=1,0)
|
||||
```
|
||||
|
||||
其中,处理10-20之间的数额时,“拾”位前没有字符,因此`H`列如果直接用给“佰”用的公式会返回0。因此N列公式的第二部分即是用于检查“拾”字是否是单元格的第一个字符。如果其为单元格的第一个字符,则返回**1**(给“拾”位的计数加1)。
|
||||
|
||||
### S
|
||||
|
||||
```
|
||||
=M2*100+N2*10+O2*1+P2*0.1+Q2*0.01
|
||||
```
|
||||
|
||||
将解析出的每位数字相加。
|
||||
|
||||
### T
|
||||
|
||||
```
|
||||
=S2*B2
|
||||
```
|
||||
|
||||
计算每行的金额之和。
|
||||
|
||||
### W2
|
||||
|
||||
```
|
||||
=SUM(T:T)
|
||||
```
|
||||
|
||||
计算总金额。
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user