之前一篇文章简要的写了下网页入侵,今天把sql注入特别拿出来说明下,因为这部分在网页入侵种占的比重还是比较大的。
1. 获取数据库信息
比如查询商品类型,有的会用这样的语句
select * from products where category = 1
而在url中相当于products.php?category=1;
第一步: 首先在后面添加 order by 5;
如果不出错说明 select 选项取得的数据列为5列(>5mysql会出错,因为order by 是取输出列作为排序对象)。
这个方法可以获取select 列数。
第二步:现在把1换成 (select count(*) from table);
相当于sql语句变成了
或者
可以试探出数据库的表名、列名。
第三部:使用联合union获取有用信息
假设有两个表products email,现在要获取email的信息
网页 products.php? category=1 显示出产品类型为1的产品介绍和价格。
他的sql语句可能是 select * from products where category = 1
或者select introduce, price from products where category = 1. 只要取得列数相等就可以用联合
使用数据库联合语句union all
注意列数一定要相等
这时候网页上就可以看到结果出来了。
2. 对于数据库登录注入
登录的sql语句为select * from admin where username=$username and passowrd=$password and id = 1;
注意后面的id是用来注入的。要想登录成功必须使这条sql语句返回结果又数据。
使用union (select username,password) from admin 这句sql语句
可以把username,password换成在登录时候输入的数据即可。使从数据库中取出来的数据跟你在表单填入的数据一样即可达到登录效果。
登录的时候username表单填写1,password表单填写1
最后的sql语句是:
这条语句肯定是有数据的,假设一共有四列(这个自己去order by 获取),那么结果可以看到如下。
+----+----------+----------+-----------+
| id | username | password | privilege |
+----+----------+----------+-----------+
| 1 | 1 | 1 | 1 |
+----+----------+----------+-----------+
3. 自己创建超级用户
在url中加入
可以创建超级用户了。
4. update修改管理员密码
用户自己修改密码时
但是恶意的用户会把 ' or uid like'%admin%'; -- 作为变量的值提交给 $uid 来改变 admin 的密码,或者把 $pwd 的值提交为 "hehehe', admin='yes', trusted=100 "(后面有个空格)去获得更多的权限。这样做的话,查询语句实际上就变成了:
5. 直接添加操作系统命令
xp系统
对于linux系统
后面添加