sql注入初步
自已用php+mysql写了一个登录页面。其中包含多个sql注入漏洞,在mysql中创建一个表,其中有username password email一个列,添加三个数据
+-------------+-------------+-----------------+ | username | password | email | +-------------+-------------+-----------------+ | admin | admin | admin@admin.com | | yangyanxing | yangyanxing | yyx@yyx.com | +-------------+-------------+-----------------+
在phpmyadmin中使用一条sql命令
SELECT * FROM admin
WHERE 1
where 1 是一个永真,这样它会把admin表中的所有数据返回
写一个testsql.php文件来尝试使用sql注入的方式登录这个系统 ``` php
'; $result = _fetch_array($query); if($result){ echo "登录成功"; }else{ echo "登录失败"; } mysql_close(); print_r($result); } ?> ``` 其中 $query = "select * from admin where username = '$username' and password='$password'"; 这里的$username与$password未经过任何过滤,而是用户输入什么就是什么 首先在用户名里输入一个单引号(') 来看看返回什么错误 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '''' and password=''' at line 1 如果有类似于这样的错误则说明程序没有将单引号过滤掉,可能有sql注入漏洞,接着再看sql查询语句 $query = "select * from admin where username = '$username' and password='$password'"; 只要构造一个where后面是一个永真的条件就可以了,由于后面用了一个and逻辑,要构造两边都为true才行 username=’’ 可以构造一个username=’’ or ‘1’ = '1’ password=’’ 也可以构造一个password=’’ or ‘1’='1’ 那么其实只要在用户名与密码处都填写'or '1'='1 就可以了 [![image](/image/2015/02/image_thumb13.png "image")](/image/2015/02/image13.png) 或者在用户名里输入admin'or '1'='1 密码不输入,这个是在猜测其有一个叫admin的用户