Second-Order LFI
Code Review - Identifying the Vulnerability
Application Overview
File Storage Mechanism (db.php)
function fetch_data($id){
global $conn;
$sql = "SELECT * FROM data WHERE id=?;";
$stmt = mysqli_stmt_init($conn);
if(!mysqli_stmt_prepare($stmt, $sql)){
echo "SQL Error";
exit();
}
// execute query
$id = intval($id);
mysqli_stmt_bind_param($stmt, "i", $id);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
$result = mysqli_fetch_assoc($result);
$owner = $result['owner'];
$name = $result['name'];
$path = '/var/www/' . $owner . '/' . $name . '.txt';
return array("name" => $name, "content" => file_get_contents($path));
}Analyzing edit_filename.php
Analyzing edit_username.php
update_username Function (db.php)
The Vulnerability
Bug Behavior
Escalation to LFI
Exploit Plan
Local Testing Setup
Create PoC File
Database Setup (db.sql)
Start MySQL Container
Start PHP Server
Create Test File
Exploitation
Step 1: Rename File to Target Name
Step 2: Change Username to Path Traversal
Step 3: Access the File
Limitations
Question Walkthrough
Step 1: Analyze Source
Step 2: Login
Step 3: Rename File
Step 4: Change Username
Step 5: Access Flag
Last updated