学习周记(五)

信安星火web学习周记(二)

首先这个任务发布的时间和内容还是比较巧的,正好我前几天做了一道简单的sql注入型题目,打算在“ 学习周记(四)(下)”里好好总结一下,为接下来的sql注入型学习开个头。既然任务发布了,那就在这里写下了,就当是个sql注入型学习专栏吧,正好(四)(下)就可以写写SSTI或者其他的东西了。 ┗|`O′|┛ 嗷~~
时间:2019年1月30日至2019年2月1日
进入正题:
1.学习内容:
了解sql注入
使用phpstudy,sqllabs搭建注入环境;学会sqlmap基本用法,熟练掌握联合查询的注入方法。
2.完成情况:
(1)对于sql注入:
注入攻击是Web中一种最为常见的攻击方式,无论是sql,还是xss,或者是其他的注入攻击,对web安全造成的威胁还是很大的。而sql作为长期占据 OWASP Top 10 首位的注入,自然更为重要。
道哥在《白帽子讲web安全》里提到过,注入攻击的本质就是把用户输入的数据当作代码执行。注入的两个关键条件:第一个是用户能够控制输入;第二个是原本程序要执行的代码,拼接了用户输入的数据。而防御sql注入的最佳方式,就是使用预编译语句,绑定变量。
sql的注入手段或者说方法还是有很多的,相关的技术文章可以在CSDN、FreeBuf、i春秋里搜索到。
(2)注入环境搭建:
这部分网上都有相关的教程,在https://github.com/Audi-1/sqli-labs里下载压缩包到phpstudy的www目录下,然后打开sql-connections的db-creds设置密码。
在这里插入图片描述
然后浏览器直接打开链接:http://127.0.0.1/sqli-labs-master/,点击第一个就可以进行练习。还有一点就是php的版本一定要切换到7以下,7以上会报错的。
在这里插入图片描述
在这里插入图片描述

(3)sqlmap基本用法:
sqlmap直接在github上下载或是直接去官网下载就可以了,运行环境是pythhon2.7,但是好像python在2020年1月1日后就不再维护2.7,pip未来版本也不再支持2.7。这个先放到一边不管,对于sql,前几天在实验吧上做了一道简单的sql注入题,真的是一道简单的题,wp在(四)(上)里已经写过了。正好这一次再以这道题为例,分析一下基本用法。
首先用"and 1=1"和"and 1=2"进行一下判断,这也是一种常见的判断方式。因为"and 1 = 2"永远是一个假命题,所以说返回的页面应该是一个错误页或为空,然后对于"and 1 = 1",如果此时页面正常返回,说明语句成功执行,就可以判断本题中的id参数存在sql注入漏洞。
其他情况下,可以直接用指令检测,还是这个网址为例,假设我们并没有用’and’检测出来。在sqlmap上跑一下:
在这里插入图片描述
这就给的很明显了,存在注入,参数为"id",注入类型为盲注。那么判断出存在注入点后,就要看一下数据库类型,还是用指令’–current -db’:
在这里插入图片描述
这样就获取到了当前的数据库为’my_db’;下一步就是获取表,表字段,最后直接dump出内容,就是最后的flag:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当然也可以一步到位,但是就目前的情况来看,分步骤可能更好一点。总结一下的话,最常规的使用过程:1.判断是否存在注入点;2.如果存在注入点的话是在哪里存在注入;3.获取当前的数据库,表,表字段,最后dump出字段内容。这还是比较常规的步骤了。
但是事实上,现在的sql注入题很少有这样特别常规的,通常都会和其他的一些内容结合在一起。
就像去年的GXNNCTF里,web的最后一道题,我记得题目的名字就是sql注入,但是它结合了git泄露,最后结合mysql使用了select语句,得出的flag,这道题给我的印象还是比较深的,具体的wp也在(二)里写出来了。
(4)联合注入:
我对联合注入这个概念还是比较陌生的,上网查了一下,所谓的联合注入,就是在页面有显示位的前提下进行的注入方法。(显示位就是展示服务端执行sql查询数据库的数据的显示位置)
对于注入步骤,首先还是要进行判断,判断存在注入后,就要查询字段数量。利用order by进行猜解,我们以sql-labs的第一个题目为例。当然以这道题为例只是为了使用order by以及其他方法,具体的解题过程我还是没有太明白,这一部分在以后还要继续学习。
在这里插入图片描述
首先要判断是否存在注入,这次用 ’ 进行判断,确定存在注入后,利用一下order by。这里面还有一点需要注意的是’–+‘的注释作用,(注释符的重要作用是为了符合后面的单引号或双引号或其它符合,如果不闭合的话 sql就无法正常运行,包括流程中提到的攻击语句,一般也是需要加注释符的。)在使用order by 4后,页面返回的信息告诉我们不存在第4个字段,也就是只有3个。
在这里插入图片描述
接下来判断显示的内容在数据库的第几列,在这里输入时要将’id’值改为’-1’,这样的话前面部分报错就可以执行后面的union selecet 语句:
在这里插入图片描述
在注入过程中,我们可以使用mysql()中的函数,例如user(),database(),version()等等来查看敏感信息。
在这里插入图片描述

在这里我们知道了当前database名称为security。当然获取数据库名称还有两种方法。一种是全部显示的group_concat(),select group_concat(schema_name) from information_schema.schemata;另一种是逐一显示的limit ‘m’,‘n’。如果m为2,n为3就表示,从第三条开始取3条,也就是第3、4、5条。下面的这张图应该是我本地的mysql数据库名称。
在这里插入图片描述
在知道database是security后,就要开始爆表。(union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=‘security’)):
在这里插入图片描述
然后爆出users下的所有表字段:
在这里插入图片描述
最后爆出内容:
在这里插入图片描述
大致上的一个流程就是这样,判断注入,order by确定列数,读库,读表,读字段,读数据。
3.心得体会:
1.sql注入作为注入中的一大热门,其包含的内容还是有很多的,有基于各种情况的注入,这一次的任务也只是简单的了解一下sql注入,以及联合注入的基本知识。以后应该还会有相关的任务训练,我自己在以后的做题过程中也会多总结。
2.还是,按照惯例,感谢那些愿意将自己的学习经验交流分享的师傅们,通过看一些他们写的文章,对自己有用的还是真的挺多的,依然在这里一并感谢。
3.本次web学习任务就先告一段落,阅历还得增长,学识还得丰富,继续去把自己的(四)(下)完成。 (๑•̀ㅂ•́)و✧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值