记一次入门难度的SQL注入与密码破解

这一周多屯了挺多密码学的笔记,回头会整理成文章放上来,感觉各种加密方式与优缺点的分析看着还是很有意思的

今天先放一个刚刚做完的靶机渗透测试,难度比较低,但是涉及了两个比较经典的工具包,同时体现出了网站前端与后台数据库的联系,是入门但完整的一次测试

首先是测试环境与目标

本次测试使用的是学校日常教学使用的Ubuntu-32bit虚机

已知,学校基于一个服务器搭建了网站,URL为http://10.0.2.x/index.html

文章目标

向萌新展示一个简单的网站攻击过程

如果有皇霍的学弟学妹刷到这篇文章记得收藏,回头IY2840用得上的哈哈哈哈哈哈

文章主要还是对自己的实践操作进行总结,写的可能比较简陋,错误之处欢迎大佬指正

先解决第一步

首先难住我们的就是,对于一个我们需要测试的网站而言,连完整的域名我们都还没有掌握,所以对于我们来说,最重要的首先就是把域名缺失的问题搞定

我们可以看到,域名中比较存疑的部分是10.0.2.x,很显然这整体来说是一个IP地址

这时我们开始分析问题,找到缺失部分的地址看起来是一件很无从下手的事情,但转换一下思路,我们不妨把问题看做,在可能的范围内,有哪些地址对应了可访问的服务器

想解决这个问题,我们需要用到nmap工具

NMAP(Network Mapper)是一款开放源代码的网络探测和安全审核的工具。它的设计目标是快速地扫描大型网络,当然用它扫描单个主机也没有问题

首先安装工具,在linux中,我们打开终端,使用root权限进行安装

输入命令 sudo apt install nmap

其中sudo是标明以root权限执行此命令,如果你当前使用的是普通用户账号,在这一步时还会需要输入root账户的密码

随后,我们使用nmap的sn指令,该指令可以用于探测扫描主机

我们现在不确定的是最后一位,但是根据网络的基本知识,我们可以知道它的取值在1-255,所以这一步,我们使用的指令就是

nmap -sn 10.0.2.1-255

随后,我们会发现命令行上返回了若干地址,当然在我扫描的时候也就发现了三个,其他两个打开了以后显示的都是一些主机基本信息

但是唯独10.0.2.4这个地址,输入进去发现是一个大大的登录界面

嗯,很完美

绕过登陆界面并找到注入点

SQL注入绕过登陆,是一种比较被大家熟知的安全问题,首先来给萌新普及一下原理

比如,一个普通的登陆功能的语句,大概是这个样子

select*from user_table where username = ‘’ and password = ‘’

select 这部分是数据库的语句,这个语句被用于,确认你的输入能否在user_table(即存储用户的数据库)中匹配到一个username属性与password属性能符合你的输入的元组,我们的输入会被传输到username与password后面的单引号中

但是,说到底,这种归还是一句编程语句,它不能跳开语法的限制

如果我们输入用户名admin密码123,他会变成

select*from user_table where username = ‘admin’ and password = ‘1234’

但如果我们输入一些比较反常识的东西呢?比如仅在username那一栏输入

’ or 1 = 1 –

那么这个语句是不是就变成了

select*from user_table where username = ‘’ or 1 = 1 --’ and password = ‘’

即,username等于空(null)或1=1(为true)

一旦出现这样的输入,则基于 anything OR true等效于true的原理,系统会判断你输入了正确的用户名

而后面的密码部分,则已经被你用“–”给注释掉了

那么我们就登陆进了这个系统

这就是所谓的sql注入,为判断某个链接是否存在注入,我们可以通过对其传入可控的参数对代码进行简单构造,通过服务端返回的内容来判断有无注入

在真正的注入时,我使用到的三个语句分别为

admin’ or ‘1’ = '1

’ or 1 = 1#

admin’;#

并不是所有的语句都能对固定的网站完成注入,这取决于该网站的设置,所以,我们可以在平时收集尽可能多的语句

这就是通过第二行语句登陆进去后的样子

有趣的是,当我们使用第一行与三行语句登陆时,我们看到了这样的界面

第一行第三行,与第二行很显著的一个差别在于,第二行只会让系统在username检查时,判定输入为true,而一三行则实打实的,往username处丢入了一个字符串admin,这个admin随后在传输时,则被系统认定为一个用户名

而当我们丢入admin后,系统展示出了与username仅为true时的区别,它并没有报错,而是显示了_更多的信息_

这向我们传递出了一个极有价值的信息:这个系统中有一个用户的用户名是admin,而且叫这个名字,几乎可以肯定这是这个系统的管理员账户

到这一步为止,我们已经做到了,在不被授权的情况下访问该网站的数据,但是如果有一天这个sql的逻辑漏洞被该网站的维护人员发现并修补,则除非找出别的注入方式,我们将不再能继续访问此网站

一劳永逸的解决方法是,我们直接做每一个黑客都最爱干的事:找出系统内管理员账户的密码!!!

现在就真的开始干大事了

我们刚才已经登陆进到了网站内部,在这里我们要注意的是,以第一个注入语句为例,当我们进入网站时,网站显示的URL变成了

http://10.0.2.4/unsafe_home.php?username=admin’+or+‘1’+%3D+'1&password=

在这之中,admin’+or+‘1’+%3D+'这一部分,原自我们的注入,所有的空格变成了加号,等号则变成了%3D,这是浏览器本身的转字符功能

把这一部分刨开的话,这个链接原本应该是

http://10.0.2.4/unsafe_home.php?username=&Password=

解析一下这个URL表达的含义

http://是网站使用的协议

10.0.2.4是地址

unsafe_home.php?username=&Password=则可以被看作

<入口文件名>.<文件扩展名>?<通讯端点1=内容1><通讯端点2=内容2>

URL的通讯指向执行通讯的endpoint,也就是通讯端点,通讯端点被用于定位,然后我们将对应内容送入后端对应的位置

现在开始,我们要用到第二个工具,sqlmap

sqlmap是一个开源的渗透测试工具,他可以自动检测和利用sql注入漏洞并接管数据库服务器

我们用跟nmap相同的方式下载他

输入的指令大家就从图里看吧,反复敲好麻烦

在这里列出的就是这个网址对应的数据库,指令中,-u被用于上传参数,参数就是要扫描的网站的URL,而–dbs表示枚举DBMS数据库

得出如下结果

这张图返回的结果告诉我们,这个网站使用的数据库管理系统是MySQL 5.0.12,并有如下若干数据库

我们一眼就看到,其中有一个数据库叫做user,立刻就把他盯上并作为下一个目标

-u功能不变,–tables用于遍历DBMS(database management system)中的database table

讲一下一个基本概念概念,database由数量大于等于一的table组成

-D 上传database名称

总的来说,就是遍历该URL网站下,名字为user的database中包含的所有tables,得到结果如下

数据库user中只包含credential这一张表

–columns,列,在table中,每一列就是一个属性

这个指令被用来,遍历数据库users的表credential中的列,得到结果如下

然后我们要有这样的一步操作

–dump, dump DBMS database table entires

将这个数据库的table中的实例(entires,单数为entiry)给下载下来

entiry,实体,是现实世界中可区别于所有其他对象的一个事物或者对象

比如,在一个存有姓名,学号,年龄,专业的表中,有一行数据

李小白,123456,20,information security

那么李小白在这个数据库中,就是一个实体

dump这个表的实体,就是把这里面的实体都给整出来

执行完这一行命令之后,系统陆续问了我们几个问题,前两个不重要重点是第三个

do you want to use common password suffixes?

我们选择yes之后他开始执行,执行大约7秒后,显示出了一个

cracked password ‘assignment’ for hash ‘…’

随后我们crtl + C终止了执行,返回出了这样的结果

回忆一下,刚才我们在遍历columns时,就已经获得了这张表的这些属性,当我们dump这张表的时候,就已经得到了这些实体,包括他们对应各个属性的值,刚才最后一步,其实是在问我们,要不要用常规词尝试匹配这里的password

系统中的password都被加密过,我们在做的是,加密常规词,看这些词被hash加密后,可不可以匹配到系统中的hash,如果有,则代表这个常规词就是这个实体的password

然后,工具在把assignment给hash掉时,匹配到了admin的password,则我们知道,admin的password就是,assignment

事后去尝试时,在网站上使用admin+assignment,登陆成功

总结

技术流程没什么可总结,该写的都在上面,我们来谈几点安全行业的问题

首先,不要信任用户的输入,用户的输入有时候,可能会对系统造成危害,就像我们的注入语句。很多时候,我们会通过禁止输入诸如空格,分号,引号之类的字符来实施管控,但对应的也有屏蔽这些管控机制的方法,这样来回的防御与攻击就是SQL安全领域所研究的课题

其次,用户的安全意识。无论多严肃的安全系统,都无法防止用户设置简单的用户名与密码,事实上,当今很多互联网公司的管理员,习惯使用admin/administrator作为管理员账户名称,也不会使用太过复杂的密码,甚至将密码写在便签贴在桌上,这种种行为,都造成了极大的安全隐患。比起系统的安全,人心与人性,才是更大的漏洞。

最后,有时间的时候,大家可以多去了解当下流行的强大工具,阅读他们的使用说明,当你遇到问题的时候,难的不是使用某种工具解决问题,而是你并不知道有这种简便工具可以使用。对于简单问题,使用工具会比自己写代码做脚本更加便捷,对于复杂问题,参考流行工具也会使你的脚本开发更为轻松。对于这些工具的了解,就是一个从事网络安全行业的人,工作经验与个人能力的积累与沉淀。

题外话

对于最近链安的事故的感想

首先,心疼链安的老师和同学

然后,有多新的技术,就有多新的犯罪方式

最后,这些年一直都觉得,首先思考如何端正自己的内心,然后才是如何学习更强的技术

早些年在高中,有同学在U盘放了病毒软件往学校的机房装,其实他并不了解病毒乃至基本的安全技术,也并没有从他的行为得到任何好处,单纯只是享受做这件事的快感与成就感

而我的学习经历,人生第一次完成对windows的工具,用的是自家的两台电脑,各种漏洞的学习,用虚拟机复现过程,甚至真正对现实中的网站展开攻击,也是针对各种众测平台给出范围内的网站,并且测试过程中不造成破坏,测试结束后上交测试流程给相关部门,帮助维护网络环境

感谢爸妈对我的教育,让我对规则有一份无上的敬畏之心,让我在任何时候,都能忍住向他人炫技而展示技术,或者为了满足所谓的成就感而进行不授权攻击的冲动。这些年下来,我能坦坦荡荡的说自己从未干过亏心事,说自己无愧网络安全从业者的身份,我觉得这才是令我最有成就感的事

科技永远是日新月异的,不变的,应该是内心的正直感,以及维护这份正直而得到的荣耀

天地之动,驰骋不息

天地之法,执行不怠学习网络安全技术的方法无非三种:

第一种是报网络安全专业,现在叫网络空间安全专业,主要专业课程:程序设计、计算机组成原理原理、数据结构、操作系统原理、数据库系统、 计算机网络、人工智能、自然语言处理、社会计算、网络安全法律法规、网络安全、内容安全、数字取证、机器学习,多媒体技术,信息检索、舆情分析等。

第二种是自学,就是在网上找资源、找教程,或者是想办法认识一-些大佬,抱紧大腿,不过这种方法很耗时间,而且学习没有规划,可能很长一段时间感觉自己没有进步,容易劝退。

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

第三种就是去找培训。

image.png

接下来,我会教你零基础入门快速入门上手网络安全。

网络安全入门到底是先学编程还是先学计算机基础?这是一个争议比较大的问题,有的人会建议先学编程,而有的人会建议先学计算机基础,其实这都是要学的。而且这些对学习网络安全来说非常重要。但是对于完全零基础的人来说又或者急于转行的人来说,学习编程或者计算机基础对他们来说都有一定的难度,并且花费时间太长。

第一阶段:基础准备 4周~6周

这个阶段是所有准备进入安全行业必学的部分,俗话说:基础不劳,地动山摇
image.png

第二阶段:web渗透

学习基础 时间:1周 ~ 2周:

① 了解基本概念:(SQL注入、XSS、上传、CSRF、一句话木马、等)为之后的WEB渗透测试打下基础。
② 查看一些论坛的一些Web渗透,学一学案例的思路,每一个站点都不一样,所以思路是主要的。
③ 学会提问的艺术,如果遇到不懂得要善于提问。
image.png

配置渗透环境 时间:3周 ~ 4周:

① 了解渗透测试常用的工具,例如(AWVS、SQLMAP、NMAP、BURP、中国菜刀等)。
② 下载这些工具无后门版本并且安装到计算机上。
③ 了解这些工具的使用场景,懂得基本的使用,推荐在Google上查找。

渗透实战操作 时间:约6周:

① 在网上搜索渗透实战案例,深入了解SQL注入、文件上传、解析漏洞等在实战中的使用。
② 自己搭建漏洞环境测试,推荐DWVA,SQLi-labs,Upload-labs,bWAPP。
③ 懂得渗透测试的阶段,每一个阶段需要做那些动作:例如PTES渗透测试执行标准。
④ 深入研究手工SQL注入,寻找绕过waf的方法,制作自己的脚本。
⑤ 研究文件上传的原理,如何进行截断、双重后缀欺骗(IIS、PHP)、解析漏洞利用(IIS、Nignix、Apache)等,参照:上传攻击框架。
⑥ 了解XSS形成原理和种类,在DWVA中进行实践,使用一个含有XSS漏洞的cms,安装安全狗等进行测试。
⑦ 了解一句话木马,并尝试编写过狗一句话。
⑧ 研究在Windows和Linux下的提升权限,Google关键词:提权
image.png
以上就是入门阶段

第三阶段:进阶

已经入门并且找到工作之后又该怎么进阶?详情看下图
image.png

给新手小白的入门建议:
新手入门学习最好还是从视频入手进行学习,视频的浅显易懂相比起晦涩的文字而言更容易吸收,这里我给大家准备了一套网络安全从入门到精通的视频学习资料包免费领取哦!

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值