来源:未知 时间:2015-04-15 13:09 作者:xxadmin 阅读:次
[导读] 环境:dvwa1.7数据库:mysql前置知识:sql语句(Click me) 在进行sql注入前,我们先熟悉熟悉select语句。一、打开我们的sql终端 二、进入之后可以看到有mysql我们输入sql语句,即可返回我们想...
环境:dvwa1.7数据库:mysql前置知识:sql语句(Click me) 在进行sql注入前,我们先熟悉熟悉select语句。一、打开我们的sql终端 我们来看几个例子。 第一个是和我们上面类似的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当前用户名:root@localhost 类似的函数: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”,我们验证一下!看,这个时候我们已经成功登陆了! |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com