|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
在学习PHP这六个月里,每看到一个优秀的php脚本,就会兴奋的手舞足蹈,嘴里还不停的说:太酷了,太酷了。呵呵,很幼稚吧,但这可能就是兴趣。 PHP主动撑持基于RFC 1867的文件上载,咱们看上面的例子:
<FORM METHOD="POST" ENCTYPE="multipart/form-data">
<INPUT TYPE="FILE" NAME="hello">
<INPUT TYPE="HIDDEN" NAME="MAX_FILE_SIZE" VALUE="10240">
<INPUT TYPE="SUBMIT">
</FORM>
下面的代码让用户从当地机械选择一个文件,当点击提交后,文件就会被上载到办事器。这明显是很有效的功效,然而PHP的呼应体例使这项功效变的不平安。当PHP第一次接到这类恳求,乃至在它入手下手解析被挪用的PHP代码之前,它会先承受近程用户的文件,反省文件的长度是不是超越“$MAX_FILE_SIZE variable”界说的值,假如经由过程这些测试的话,文件就会被存在当地的一个一时目次中。
因而,进击者可以发送恣意文件给运转PHP的主机,在PHP法式还没有决意是不是承受文件上载时,文件已被存在办事器上了。
这里我就不会商使用文件上载来对办事器停止DOS进击的能够性了。
让咱们思索一下处置文件上载的PHP法式,正如咱们下面说的,文件被吸收而且存在办事器上(地位是在设置装备摆设文件中指定的,通常为/tmp),扩大名通常为随机的,相似“phpxXuoXG”的模式。PHP法式需求上载文件的信息以便处置它,这可以经由过程两种体例,一种体例是在PHP 3中已利用的,另外一种是在咱们对之前的办法提出平安通知布告后引入的。
然而,咱们可以一定的说,成绩仍是存在的,大多半PHP法式仍是利用老的体例来处置上载文件。PHP设置了四个全局变量来描写上载文件,好比说下面的例子:
$hello = Filename on local machine (e.g "/tmp/phpxXuoXG")
$hello_size = Size in bytes of file (e.g 1024)
$hello_name = The original name of the file on the remote system (e.g "c:\\temp\\hello.txt")
$hello_type = Mime type of uploaded file (e.g "text/plain")
然后PHP法式入手下手处置依据“$hello”指定的文件,成绩在于“$hello”纷歧定是一个PHP设置的变量,任何近程用户都可以指定它。假如咱们利用上面的体例:
http://vulnhost/vuln.php?hello=/etc/passwd&hello_size=10240&hello_type=text/plain&hello_name=hello.txt
就招致了上面的PHP全局变量(固然POST体例也能够(乃至是Cookie)):
$hello = "/etc/passwd"
$hello_size = 10240
$hello_type = "text/plain"
$hello_name = "hello.txt"
下面的表双数据正好知足了PHP法式所希冀的变量,然而这时候PHP法式不再处置上载的文件,而是处置“/etc/passwd”(凡是会招致内容表露)。这类进击可以用于表露任何敏感文件的内容。
算是1个熟悉的过程,所以c语言的基础有就更好,没有也不怕。 |
|