[BJDCTF 2nd]假猪套天下第一
分析
打开之后是个登陆界面,还以为是一个SQL注入,尝试了一下万能密码,发现进去了是个欢迎界面
没办法了,用dirsearch扫一下目录
发现了/.DS_Store文件泄露
直接URL访问得到了DS_Store文件,用dsstore工具利用一下
发现了几个PHP文件和一些CSS
profile.php就是一个欢迎界面,index.php就是登录
所以访问一下L0g1n.php
提示了1
Sorry, this site will be available after totally 99 years!
可以看到基本上考的是信息的伪造
知识点
信息伪造是比较常规的一种考法了
地址伪造:1
X-Forwarded-For
代理地址伪造:1
client-ip
网站伪造:1
Referer
浏览器伪造:1
User-Agent
日期伪造:1
If-Unmodified-Since
代理服务器伪造:1
Via
邮箱伪造:1
From
测试过程
bp抓包,把时间后面加上好多0,大于99年即可
得到提示要本地访问
使用X-Forwarded-For:127.0.0.1
结果发现被ban掉了,所以用client_ip试试1
client-ip:127.0.0.1
又说要从gem-love.com访问,所以就伪造1
Referer:gem-love.com
得到提示要从Commodo 64访问,不知道是什么,百度了一下,发现有一个手提电脑叫Commodore
试了一下1
User-Agent:Commodore 64
还要邮箱伪造1
From:root@gem-love.com
看到proxy,代理服务器伪造1
Via:y1ng.vip
最后得到一串base64,解码得到flag
[WesternCTF2018]shrine
分析
打开就是源码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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import flask
import os
app = flask.Flask(__name__)
app.config['FLAG'] = os.environ.pop('FLAG')
def index():
return open(__file__).read()
def shrine(shrine):
def safe_jinja(s):
s = s.replace('(', '').replace(')', '')
blacklist = ['config', 'self']
return ''.join(['{{% set {}=None%}}'.format(c) for c in blacklist]) + s
return flask.render_template_string(safe_jinja(shrine))
if __name__ == '__main__':
app.run(debug=True)
import flask
import os
app = flask.Flask(__name__)
app.config['FLAG'] = os.environ.pop('FLAG')
def index():
return open(__file__).read()
def shrine(shrine):
def safe_jinja(s):
s = s.replace('(', '').replace(')', '')
blacklist = ['config', 'self']
return ''.join(['{{% set {}=None%}}'.format(c) for c in blacklist]) + s
return flask.render_template_string(safe_jinja(shrine))
if __name__ == '__main__':
app.run(debug=True)
审计了一下,使用了flask框架,还用了os
看到index()中有一个 open(__file__).read()
接着看shrine,发现了用正则和replace过滤掉了一些东西
不知道什么操作,去看了一下WP,发现是之前学到过的模板注入
知识点
模板注入在之前地fake google就做过,基本上了解啦
这里涉及两个函数1
2
3
4
5url_for
(1)给指定的函数构造 URL。
(2)访问静态文件(CSS / JavaScript 等)。 只要在你的包中或是模块的所在目录中创建一个名为 static 的文件夹,在应用中使用 /static 即可访问
get_flashed_messages() 顾名思义,意思大概就是取值
测试过程
访问/shrine
先验证有没有模板注入1
/shrine/{{2+2}}
运行结果1
4
验证了有模板注入
payload1
2
3
4
5/shrine/{{url_for.__globals__['current_app'].config}}
或
shrine/{{get_flashed_messages.__globals__['current_app'].config}}
得到flag
这个地方,想用之前的模板注入1
{{"".__globals__}}
但是是空的
()又被ban了,所以没有办法正常回显
之后又用这个url_for和get_flashed_messages去尝试了一下之前的模板注入,发现完全可行,这里记录一下,学到了学到了
[GKCTF2020]cve版签到
看提示是一个cve-2020-7066
百度一下,看到这篇文章
https://blog.csdn.net/weixin_45485719/article/details/106432960
知识点
在PHP7.3版本中使用get_headers()
会截断URL中空字符后的内容
1 |
|
结果1
headers from http://localhost
测试过程
点击连接,发现出现了?url=http://www.ctfhub.com
F12查看一下,在Header中得到提示
Flag in localhost
按照刚才文章中的方法,使用%00截断
构造payload1
?url=http://127.0.0.1%00www.ctfhub.com
又得到一个提示,Host must be end with ‘123’
修改一下1
?url=http://127.0.0.123%00www.ctfhub.com
得到flag
[MRCTF2020]你传你🐎呢
打开是个上传界面,先上传一个PHP,被ban了很正常,修改Content-type发现没有什么用,修改PHP后缀名也没有用
PHP花式后缀1
2
3
4
5
6php3
php4
php5
phtml
phps
phpt
查一下WP
发现是上传.htaccess文件来解析图片🐎
知识点
.htaccess文件
百度得到的意思解析是1
.htaccess文件(或者"分布式配置文件"),全称是Hypertext Access(超文本入口)。提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。
就是apache服务器的配置文件
接着又看到了.htaccess文件上传的文章
https://www.jianshu.com/p/c674904a711e
常见姿势一
1 | # FileMatch 参数即为文件名的正则匹配 |
1 | // sniperoj |
常见姿势二
1 | AddType application/x-httpd-php .jpg |
1 | // filename.jpg |
常见姿势三
1 | # 自解析的 .htaccess |
测试过程
上传.htaccess文件,但是这里由于Content-Type只接受image/jpeg
接着上传51nd0re1.jpg的图片马就行
由于上传了.htaccess文件,这个图片马就会被正常解析,直接访问提供的地址1
upload/db3e8839bdd7ac63daec00365c554da2/51nd0re1.jpg
蚁剑连接得到flag
[MRCTF2020]Ez_bypass
打开F12看到源码
1 |
|
看第一个if就是考虑md5碰撞1
?id=QNKCDZO&gg=s878926199a
但是发现不行,所以使用数组1
?id[]=1&gg[]=2
接下来是POST请求,弱类型比较并且要求passwd不能为数字,那就加字符1234567abc,这就变成字符串了
得到flag