e LIKE ‘%$search%’ ORDER BY username ……. ?> 这里我们顺便说一下
mysql 中的通配符, ’%’就是通配符,其它的通配符还有’*’和’_’, 其中" * "用来匹配字段名,而" % "用来匹配字段值,注意的是%必须与 like 一起适用,还有 一个通配符,就是下划线" _ ",它代表的意思和上面不同,是用来匹配任何单个的字符的。 在上面的代码中我们用到了’*’表示返回的所有字段名,%$search%表示所有包含$search 字符的内容。 我们如何注入哩? 哈哈,和 asp 里很相似 在表单里提交 Aabb%’ or 1=1 order by id# 注:#在 mysql 中表示注释的意思,即让后面的 sql 语句不执行,后面将讲到。 或许有人会问为什么要用 or 1=1 呢,看下面, 把提交的内容带入到 sql 语句中成为 SELECT * FROM users WHERE username LIKE ‘%aabb%’ or 1=1 order by id# ORDER BY username
假如没有含有 aabb 的用户名,那么 or 1=1 使返回值仍为真,使能返回所有值 我们还可以这样 在表单里提交 %’ order by id# 或者 ’ order by id# 带入 sql 语句中成了 SELECT * FROM users WHERE username LIKE ‘% %’ order by id# ORDER BY username 和 SELECT * FROM users WHERE username LIKE ‘%%’ order by id# ORDER BY username 当然了,内容全部返回。 列出所有用户了哟,没准连密码都出来哩。 这里就举个例子先,下面会有更精妙的 select 语句出现,select 实际上几乎是无处不在的哦! 2)下面看 update 咯 My
sql 中文手册里这么解释的: UPDATE [LOW_PRIORITY] tbl_name SET col_name1=expr1,col_name2=expr2,... [WHERE where_definition] UPDATE 用新值更新现存表中行的列,SET 子句指出哪个列要修改和他们应该被给定的值, WHERE 子句,如果给出,指定哪个行应该被更新,否则所有行被更新
。 详细内容去看 mysql 中文手册 7.17 节啦,在这里详细介绍的话会很罗嗦的哦。 由上可知 update 主要用于数据的更新,例如文章的修改,用户资料的修改,我们似乎更关 心后者,因为...... 看代码先哦 我们先给出表的结构,这样大家看的明白 CREATE TABLE users ( id int(10) NOT NULL auto_increment, login varchar(25), passWord varchar(25), email varchar(30), userlevel tinyint, PRIMARY KEY (id) ) 其中 userlevel 表示等级,1 为管理员,2 为普通用户 //change.php …… $sql = "UPDATE users SET password='$pass', email='$email' WHERE id='$id'" …… ?> Ok,我们开始注入了哦,在添 email 的地方我们添入 netsh@163’,userlevel=’1 sql 语句执行的就是 UPDATE users SET password='youpass', email='netsh@163’,userlevel=’1’ WHERE id='youid’ 看看我们的 userlevel 就是 1 了,变成管理员了哟
哈哈,如此之爽,简直是居家旅行必备啊。 这里我们简单提一下单引号闭合的问题,如果只用了一个单引号而没有单引号与之组成一 对,系统会返回错误。列类型主要分为数字类型,日期和时间类型,字符串类型,然而引号 一般用在字符串类型里,而在数字类型里一般人都不会用到引号(然而却是可以用的,而且 威力很大) ,日期和时间类型就很少用于注入了(因为很少有提交时间变量的) 。在下面我们 会详细将这几种类型的注入方式哦! 3)下面轮到 insert 了,它已经等的不耐烦了,简直就像中午食堂里的学生们。 Php 中文手册是这样教我们的: INSERT [LOW_PRIORITY DELAYED] [IGNORE] [INTO] tbl_name [(col_name,...)] VALUES (expression,...),(...),... INSERT 把新行插入到一个存在的表中,INSERT ... VALUES 形式的语句基于明确指定的值 插入行, INSERT ... SELECT 形式插入从其他表选择的行, 有多个值表的 INSERT ... VALUES 的形式在 MySQL 3.22.5 或以后版本中支持,col_name=expression 语法在 MySQL 3.22.10 或 以后版本中支持。 由此可见对于见不到后台的我们来说,insert 主要就出