pims在线订单管理系统V4.2.7重装漏洞
程序整天结构如下
安装程序在install目录下,虽然index有验证,代码如下
<?php
//检测重复安装
if (is_file("install.locked")) {
echo "<script>alert('已经安装过,建议删除install文件夹以确保安全');";
echo "location.href='../index.php?c=admin&a=index';</script>";
exit;
}
?>
但是这个index.php只是一个类似于html的页面,并没有实际意义,连接数据库并写入数据的是install这个目录下的另一个文件,step2.php。
虽然也有验证,但是只是一个很简单的验证,代码如下
<?php
//检测是否同意协议
if ($_POST[xieyi]!="1") {
echo "<script>alert('您不同意授权协议,安装程序未运行');location.href='index.php';</script>";
exit;
也就是说,我只要post一个xieyi=1即可绕过这个同意协议。
我先只是post一个xieyi=1,如图
实际上已经绕过了一个很简单的判断,只是再post一个数据库账号密码这些即可重装。
我先正常安装,账号密码设置为admin/admin,如图
然后直接对step2.php进行post,如图
直接就能前台重装成功,密码为新的密码,为123456,如图
Pims_v4.2.7 sql注入漏洞
在controller目录下的buy.php文件,
直接获取fromurl作为参数并赋值给myurl2,继续跟进,发现
myurl2又赋值给url2参数。
既然fromurl参数有漏洞,那么全局搜索fromurl,看哪里调用了它,
在controller目录下的admin.php文件,
如果直接访问index.php?c=buy&a=saveorder是无法访问的。
得生成订单页才行,
需要在后台添加产品
发现有把url2入库
但是在添加订单的post请求中,没有url2参数
就算我手动添加url2参数,数据库里也不会有任何改变,一直是手动添加,
那我就跟进代码,代码在savemyorder函数中(因为是单文件入口,都会通过index.php这个文件来接收并转发到功能代码,而controller则代表着控制器,它的值对应controller文件夹下的类文件名和类名)
果然,url2参数在添加订单这里是写死的
那么这里想的话,应该是得改fromurl的值,因为fromurl会把值传给url2,
继续往下走,
然后添加订单组,然后生成订单页
生成以后,会在根目录生成order.html文件
生成的玩意order.html是这样的
但是我跟过去的生成的订单页的代码是这样的,
代码在controller目录下的admin.php文件中的getform函数中
按照代码来说,应该生成的页面中应该要有银行卡账号、支付方式。
然后我点立即提交订单是空白的,并且fromurl参数不入库
点击立即提交订单就会出现fromurl参数
这里又回到了buy.php文件了,因为这里提交订单的调用的url是
查看saveorder函数,发现这里应该是要把post的fromurl传参入库的
但是这里我无论怎么改fromurl参数,数据库里面的url2值也不变。
后来才发现,没入库的原因在没把参数请求完整
首先这里有个判断语句,如果没有这四个参数则返回back
并且还需要个Pay参数
最后post的数据就会入库
但是这个文件并没有调用数据库查询,因为是订单的相关文件,于是搜索order,看哪个文件调用了数据库查询,发现根目录下的showresult.php文件调用了数据库(如果这里不利用搜索order来找到文件,也可以用其他办法,比如一开始发现url2入库的地方是在添加订单那里,那一般表名都是order,或者是搜索url2列在哪个表里的话,也能发现在订单order表里。
又或者是,因为一开始发现是fromurl参数有漏洞,那么他最后赋值给url2变量有漏洞,也就是说某个表里的url2列的字段值有漏洞,最后再搜索哪个文件调用查询了这个表即可)
直接把key作为参数即可从数据库开始查询。那么如果url2或者其他参数有问题,变成了sql注入语句的话,就可利用恶意语句查询敏感信息。
Pims_v4.2.8后台getshell漏洞
一般都是看下后台有哪些输入的地方,更改这些输入的地方后又有哪个文件被更改,就比如常见的如discuz后台getshell,更改配置文件config.php等。
Pims_v4.2.8后台有个快递追踪设置,如图
发现所对应的文件是include下的kuaidi.php
那直接更改授权key就能getshell了
里程密最新版V2.3 SQL注入漏洞
起因:
“1.关闭DEBUG 不会再报出错误信息 也不会在有SQL注入”不再有sql注入,不能忍啊,瞧一瞧!
url:
http://localhost/phpshenji/lichengmi/index.php?m=home&c=category&a=index&id=10
这个前面讲过了,该如何找url所对应的代码
前台(后台)都一样,都有SQL注入。
CategoryController.class.php
class CategoryController extends BaseController {
public function index(){
$id = I('get.id');
$m =M('category');
$fenleiInfo = $m ->where("id ={$id}")->find();
获取id直接传参,貌似没使用thinkphp框架的防注入措施
那不能怪我了。 加个(闭合 http://localhost/phpshenji/lichengmi/index.php?m=home&c=category&a=index&id=10) and sleep(5) --+
这里只能用时间盲注。 但是用比如 if (ascii(substring(()),1,1)>111,sleep(5),1)都不好使(大家可以试试) 但是可以用以下方法突破