发表主题 回复主题
  • 7810阅读
  • 2回复

[代码审计]菜鸟学代码审计-PIMS三个漏洞+里程密最新版V2.3 SQL注入漏洞

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文件,
[font=&amp]


如果直接访问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函数,发现这里应该是要把postfromurl传参入库的


但是这里我无论怎么改fromurl参数,数据库里面的url2值也不变。
后来才发现,没入库的原因在没把参数请求完整
首先这里有个判断语句,如果没有这四个参数则返回back


并且还需要个Pay参数


最后post的数据就会入库
[font=&amp]


但是这个文件并没有调用数据库查询,因为是订单的相关文件,于是搜索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)都不好使(大家可以试试)

\但是可以用以下方法突破
http://localhost/phpshenji/lichengmi/index.php?m=home&c=category&a=index&id=10)and if(ascii(substr(user(),1,1))-113,1,benchmark(5000000,sha1(1))) --+这里没有等待时间,说明user()的第一位的ascii码不是113




http://localhost/phpshenji/lichengmi/index.php?m=home&c=category&a=index&id=10)and if(ascii(substr(user(),1,1))-114,1,benchmark(5000000,sha1(1))) --+超时了,说明user()的第一位的ascii码是114,对应的是 r





求职:地点杭州,求职甲方,web安全工程师,谢谢!




级别: Master
只看该作者 沙发  发表于: 06-22
回 楼主(rооt) 的帖子
杭州刚好有个甲方岗位   来私信我  
只看该作者 板凳  发表于: 06-22
我们公司招人,你要不要过来试一下?  已经私信你。
发表主题 回复主题
« 返回列表上一主题下一主题