Nss日刷

Posted by Welcome to my blog! on June 24, 2025

nss日刷

tag:update注入,二次注入

咋一看是文件上传

upload.php

<?php

require_once "common.inc.php";

if (isset($req['oldname']) && isset($req['newname'])) {
	$result = $db->query("select * from `file` where `filename`='{$req['oldname']}'");
	if ($result->num_rows > 0) {
		$result = $result->fetch_assoc();
	} else {
		exit("old file doesn't exists!");
	}

	if ($result) {

		$req['newname'] = basename($req['newname']);
		$re = $db->query("update `file` set `filename`='{$req['newname']}', `oldname`='{$result['filename']}' where `fid`={$result['fid']}");
		if (!$re) {
			print_r($db->error);
			exit;
		}
		$oldname = UPLOAD_DIR . $result["filename"] . $result["extension"];
		$newname = UPLOAD_DIR . $req["newname"] . $result["extension"];
		if (file_exists($oldname)) {
			rename($oldname, $newname);
		}
		$url = "/" . $newname;
		echo "Your file is rename, url:
                <a href=\"{$url}\" target='_blank'>{$url}</a><br/>
                <a href=\"/\">go back</a>";
	}
}
?>

db操作语句:$result = $db->query("select * from `file` where `filename`='{$req['oldname']}'");

查表‘file’,列‘filename’为文件名的文件数据库

$re = $db->query("update `file` set `filename`='{$req['newname']}', `oldname`='{$result['filename']}' where `fid`={$result['fid']}");

修改,更新文件``$oldname = UPLOAD_DIR . $result[“filename”] . $result[“extension”];

	$newname = UPLOAD_DIR . $req["newname"] . $result["extension"];``

有防止后缀修改只改文件名

试过了,只会:2.php.png

xdctf.sql

SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;

DROP DATABASE IF EXISTS `xdctf`;
CREATE DATABASE xdctf;
USE xdctf;

DROP TABLE IF EXISTS `file`;
CREATE TABLE `file` (
  `fid` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `filename` varchar(256) NOT NULL,
  `oldname` varchar(256) DEFAULT NULL,
  `view` int(11) DEFAULT NULL,
  `extension` varchar(32) DEFAULT NULL,
  PRIMARY KEY (`fid`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

SET FOREIGN_KEY_CHECKS = 1;

只能修改文件名,但我们可以通过sql注入,影响extension为空,然后在修改文件的时候加上.php后缀

注入使‘extension’为空

‘,extension=’.txt

输入’,extension=’ 改名为test.txt

sql:

filename extension

NULL NULL

test.txt NULL

在传个php改名.txt伪装上传

再改名为php,由于

这样就会认为文件扩展名为空,并将test.txt转为test.php+NULL