划重点:简单的php。人生苦短,我用Python。
使用conda 配置环境。
conda create -n venv python=3.10 conda-forge::php=7.3
conda activate venv
编写代码。
import os
with open("db.php", "rb") as f:
db = f.read()
assert db.count(b"@eval(") == 1
assert db.count(b");unset(") == 1
s = db.index(b"@eval(") + 0
e = db.index(b");unset(") + 2
db_eval2fwrite_1 = db.replace(b"@eval(", b'fwrite(fopen("db_1.fwrite","wb"),')
with open("db_eval2fwrite_1.php", "wb") as f:
f.write(db_eval2fwrite_1)
os.system("php db_eval2fwrite_1.php")
with open("db_1.fwrite", "rb") as f:
db_1 = f.read()
assert db_1.count(b" eval(") == 1
db_1 = b'fwrite(fopen("db_2.fwrite","wb"),' + db_1[db_1.index(b" eval(") + 6 :]
db_eval2fwrite_2 = db[:s] + db_1 + db[e:]
with open("db_eval2fwrite_2.php", "wb") as f:
f.write(db_eval2fwrite_2)
os.system("php db_eval2fwrite_2.php")
with open("db_2.fwrite", "rb") as f:
db_2 = f.read()
with open("result.php", "wb") as f:
f.write(b"<?php\n" + db_2)
运行结果。
<?php
require_once ("config.php");
$dbConn = new mysqli(DB_HOST,DB_USER,DB_PASSWORD, DB_NAME, DB_PORT);
if (mysqli_connect_errno($dbConn))
{
echo "连接 MySQL 失败: " . mysqli_connect_error();
}
if ($dbConn->connect_error) {
throw new Exception($dbConn->connect_error, $dbConn->connect_errno);
}
|