国外的picoctf,给学弟写的wp,虽然自己那么菜,不过这个网站应该不会很难吧,先做着再说吧,果然还是太懒了,写了几题别的就懒得继续做了,就把自己的web部分写掉吧

前沿

给学弟写的wp,虽然自己那么菜,不过这个网站应该不会很难吧,先做着再说吧,果然还是太懒了,写了几题别的就懒得继续做了,就把自己的web部分写掉吧

Action

Forensics Warmup1

给了一个压缩包,然后解压一下,里面直接就是flag
pico-1

Forensics Warmup2

给了一个文件直接打开就是flag
pico-2

General Warmup 1

If I told you your grade was 0x41 in hexadecimal, what would it be in ASCII?

。。。让你提交0x41在ascii中表示的是什么,。。交个A

General Warmup 2

Can you convert the number 27 (base 10) to binary (base 2)?
。。。提交二进制的27,11011

General Warmup 3

What is 0x3D (base 16) in decimal (base 10).
。。。提交0x3D在十进制中的表示, 61

Resources

题目说在https://picoctf.com/resources 中存在这flag,让我们去找
查看源码,全局查找ctf
pico-3

grep-1

Can you find the flag in file? This would be really obnoxious to look through by hand, see if you can find a faster way. You can also find the file in /problems/grep-1_0_c0c0c16438cdbee39591397e16389f59 on the shell server.

使用它们给的shell,访问这个目录,发现有一个file文件,然后vim访问这个文件,第二页就是flag

1
2
3
cat /problems/grep-1_0_c0c0c16438cdbee39591397e16389f59
ls /problems/grep-1_0_c0c0c16438cdbee39591397e16389f59
vim /problems/grep-1_0_c0c0c16438cdbee39591397e16389f59/file

pico-4

netcat

nc 2018shell1.picoctf.com 37721

strings

1
2
3
ls /problems/strings_4_40d221755b4a0b134c2a7a2e825ef95f
vim / problems/strings_4_40d221755b4a0b134c2a7a2e825ef95f/strings
/进入查找模式,查找pico得到答案

Inspect Me

给了一个网站,将你检查他,直接查看源码

不难发现,在html给了你三分之一,他又说你要学习csss和js,那么上面也有链接,点进去找到余下的flag,js里面居然没有,其实只有两半,为js打抱不平
pico-5

Client Side is Still Bad

又是一个网站
查看源码好像直接里面就有flag,题目原意应该是讲客户端的检测是不安全的,算了flag都给你了,还细看什么

My new website

看到登录框,以为是sql注入或者弱口令,小尝试一波不行,但是发现其他任何的用户名和密码都是可以登陆进去的(虽然没有flag),那么我们寻找一下突破口
pico-6
我们检查一下header信息,发现cookie很可疑,用admin这个参数来判断是否为admin
pico-7
这样我们修改一下cookie中admin的值再刷新一遍页面(修改cookie在firefox中直接开发者工具F12中network就可以,chrome中EditThisCookie这个插件)
pico-8

Irish Name Repo

又是一个登陆题,进去先简单尝试一下发现,是一个使用一个单引号报错,两个就不报错,说明单引号闭合语句,那么简单猜测后台语句是

1
select flag from flag where usename= '$admin' and password='$password';

使用admin’ and 1=1–+直接绕过登陆(–+的含义是注释掉后面的语句)
pico-9

Mr. Robots

看到名字,第一反应就是联想到了robots.txt(这个文件存在的意义是为了让爬虫在爬网站的时候,不爬取一些敏感目录的内容,所以有这个文件,就可能会有信息存在)
pico-10
里面有个目录的名字,我们去访问以下
pico-11

No Login

进去就是一个大大的flag按钮,点击你不是admin,然后我们四处看看,什么都没发现,然后出去看了一下提示,在结合之前的题目,开了个脑洞,cookie设置了admin,然后值设置为True就可以得到flag了
pico-12
其实这个题目是有非预期了,你在之前做题的时候这个域名下的admin为True的cookie可能没有清除,然后就直接可以点击得到,但是得到后,重定向会刷新cookie,第二次点就不行了,所以一路坐下来的同学应该可以秒得flag

Secret Agent

进入之后点击flag,发现跳出了自己的UA,说我们不是谷歌,那么就是需要谷歌的UA,那么我们修改一下就可以了
pico-13
pico-14

Buttons

点进去两个按钮,两次跳转,之后出现了一个奇怪的视频,感觉很奇怪,看了一下数据流情况
pico-15
303报文通常作为put和post的返回结果,而且两个button,一个post,一个get,那么他统一一下
pico-16

The Vault

关键代码如下

1
2
3
4
5
6
7
$pattern ="/.*['\"].*OR.*/i";
$user_match = preg_match($pattern, $username);
$password_match = preg_match($pattern, $username);
if($user_match + $password_match > 0) {
echo "<h1>SQLi detected.</h1>";
}
这里的正则就是防止你使用' or 1=1--+这种操作来绕过

不过仔细审计,发现有一个bug,那就是password的过滤,用的是username,就是说password没有过滤,那么我们在password使用’ or 1=1–+即可

Artisinal Handcrafted HTTP 3

这题的意思就是我们使用代理服务器去进行http的交互,那么我要做的就是构造包了

我们找到了一个叫login的页面,我们再去访问这个页面
pico-17
这里我们想到了题设给我们的账号和密码,把他post上去,此处需要脚本,如有需求向刘永大佬(厉害的pwn爷爷太帅了)索要
pico-19
我们拿到了token,那么再用设置一下自己cookie,最终得到flag
pico-18

FlaskCard

进去看了一圈,注册账号,登录之后可以创建卡片和查看自己的卡片,登陆处fuzz了一波,感觉没有sql注入,然后去查看hint,后端的常见漏洞,又是提交和查看,第一反应就是XSS ,然后发现失败了,结合flask,一般来说就是SSTI了,那么输入口在哪里呢,就是在创建卡片的时候

1
2
Question:{{1+1}}
Answer:{{1+1}}

去查看一波list,发现全都变成了2,说明存在SSTI
那么直接

1
{{config.items()}}

搜索找到picoCTF
pico-20

fancy-alive-monitoring

docker宕了估计

今天累了之后继续。。。。。

我又回来了

Secure login

开始就给了我们源码查看一波

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#我们就挑出出关键代码吧
cookie = {}
cookie['password'] = request.form['password']
cookie['username'] = request.form['user']
cookie['admin'] = 0
print(cookie)
cookie_data = json.dumps(cookie, sort_keys=True)
encrypted = AESCipher(app.secret_key).encrypt(cookie_data)
print(encrypted)
resp.set_cookie('cookie', encrypted)
return resp

data = AESCipher(app.secret_key).decrypt(encrypted)
data = json.loads(data)

try:
check = data['admin']
except KeyError:
check = 0
if check == 1:
return render_template('flag.html', value=flag_value)

def encrypt(self, raw):
raw = pad(raw)
iv = Random.new().read(AES.block_size)
cipher = AES.new(self.key, AES.MODE_CBC, iv)
return b64encode(iv + cipher.encrypt(raw))

CBC字节攻击详解
CBC字节翻转攻击,cookie中用base64加密了json数据,内容就是iv和CBC加密后的cookie内容,需要把里面给的admin=0,转换为admin=1,这里很善良,在json.dumps的时候加了sort_key=True,那样admin=0就在第一段字节,那么只需要变动iv就可以了,下面附加上脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
#python 3.x
import base64


cookie ='GCMdo4AQZIt79kKUxvNLfec+GJ9dEiyaOsHmJm5POJOBhL/Ojiy5+xYIiXIs7Pfqc7eYETqzrRekJ6wbeCCgg5m4o7KydmWykj9RUeNqR/0='

deb64 = base64.b64decode(cookie.encode('utf-8'))



re = deb64[10]^ord("1")^ord("0")

print(base64.b64encode(deb64[:10]+chr(re).encode('utf-8')+deb64[11:]))

pico-21

Flaskcards Skeleton Key

Nice! You found out they were sending the Secret_key: a7a8342f9b41fcb062b13dd1167785f8. Now, can you find a way to log in as admin?

题目意思已经很明显了,在flask中的session可以使用secert_key,进行加密,这样子就算你解码出来,改包也会被发现,这里直接secert_key给了我们,那么我就可以随意改包了,但是解密还是不会,那么只能去github找了一波,就发现一个能用的tools

pico-22
然后发现立马有个user_id的参数,修改为1,一般admin都是第一个用户,改cookie提交
pico-23

Help me reset 2

啊纯种的脑洞题,好累

简单的来说,题目的意思是只要你登录进去,就有flag,而且功能只有登录和重置密码,我试了一下居然连admin都没,这样用户名估计需要找一找。
查看一波源码,发现还是有东西的
pico-25
这里有个网站维护的人,这样他的用户名总有吧,果然,然后就是回答问题,我去哪里找答案,还不能爆破,账户会被锁,注入也不行,最后找了一群,试试看session解码,发现真的醉了
pico-24
里面给了答案,填进去,登录就完事了