Ay's Blog@CNSSUESTC

初级PHP注入笔记--by __ay


首先介绍下SQL的select的语法  这个是注入中非常非常重要的语法,起码PHP注入中的50%左右都是通过这个动作完成的

先说说语法
select [字段名] from [表名] where [限制条件]

看不明白?呵呵  拿个例子说话就知道了。

假设我们1个数据库里面有个表,表名是user  表里面有2个字段,1个是psw 一个是username
那么    select username from user  返回的结果是这个表里面的所有用户名
select psw from user  返回的结果是这个表里面的所有密码,
那么你想得到某个用户名的密码的话如下语句可以帮你实现
select psw from user where username='你想要的用户名'

OK 讲解完毕,那么我们来讲讲一个典型的例子,万能密码不知道大家听说过没有,我们来看看他是怎么实现的

$query="select * from user where username='$username' and psw='$psw' and id=1" ;

这个是一个PHP典型的用户验证语句
我们输入的  用户名会被送入到username 这个变量中,而密码会被送入到psw这个变量中。
那么我们假设现在手头没有用户名密码,但是我们又想进去,那怎么办呢?
我们现来观察下这个语句,这个是一个sql语句,也即是说它会被送到数据库里面执行,那么我们只要通过某种方法使得在不用用户名和密码的情况下,使这个语句为真就可以了。历史证明这么想是可行的,看不明白?看例子。
比如我们输入的用户名密码如下,

用户名  'or '1'='1' #
密码  随便填

注:#是sql语句里面的注释符

那么我们的sql语句会变成这样:

$query="select * from user where username=''or '1'='1' #‘ and psw='随便写' and id=1" ;


看到没有?红色标注的是我们输入的用户名 紫色标注的是被注释掉的东西
我们来分析下这个句子,’1‘=’1‘这是永远成立的  那么不管前面的username对不对这个逻辑判断永远都是真的,而后面验证密码的那些东西都被 注释掉了,也就是说这样自我们的SQL语句是有返回的数据的,而且一般管理员的信息都是在user表中的第一个,也就是说这个时候$query这个变量中 就储存了管理员的用户信息,下面的程序一看到是管理员的信息,那么就会自动跳转到管理员的用户界面过去了。

也就是说,我们达到了不用管理员帐户密码登入了管理员的后台界面~!呵呵是不是很神奇呢?

那么再来一个例子

如果PHP中有个语句是这样的

$query="select tittle,content from user where id=".$id ;


假设我们可以改$id这个变量  而且我们知道表user里面存放着管理员密码,那么这个时候我们也可以把管理员帐号和密码弄到手

不信?

我们现来看看union这个语法  这个是  连接2个select用的语法,这样的话可以返回2个select的信息

比如

select * from user union select * from topic
(不知道对不对  懒得查了  大概就这样)
那么这个语句的结果是返回2个表里面的所有字段信息

注:*是统配符  也就是说*表示所有  select * from user 就是说把user表里面的内容全部返回过来

那么我们输入的变量$id的信息可以是这样

2 and 1=2 union select psw from user where username='管理员帐号'

那么密码就可以暴出来了  但是红色标注的那个地方的psw那里必须注意,比如你前面的select是搜出3个字段的信息,那么你后面的select也必须得是3个字段的信息

比如
select tittle,content from user where id=".$id ;这个语句,我们填充后的语句必须是

select tittle,content from user where id=2 and 1=2 union select 1,psw from user where username='管理员帐号'

这样,前面的select返回的是2个字段  我们后面的select必须返回2个字段,如果字段数不够就用1填充,就向上面的例子一样

之所以要1=2是应为我们必须要让前面的信息不能显示,我们后面select语句的信息才能显示出来,如果要and后面是1=1的话前面的select语句生效,就不会显示我们后面的select语句的内容了  呵呵

posted on 2008-12-07 16:12 __ay 阅读(1227) 评论(2)  编辑 收藏 引用 所属分类: Security

Feedback

# re: 初级PHP注入笔记--by __ay 2008-12-08 10:34 zuhd

能让你这么容易注入的估计都是没做过滤的。。。。  回复  更多评论   

# re: 初级PHP注入笔记--by __ay 2008-12-09 14:24 __ay

初级注入... 我研究的也不是很深~
以前很早写的一篇学习笔记,没地方放,放这来晒晒~献丑了~~呵呵  回复  更多评论   



只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理