BUUCTF [FBCTF2019] Products Manager-解题步骤详解

admin 2025年1月11日14:27:11评论2 views字数 2337阅读7分47秒阅读模式

BUUCTF [FBCTF2019] Products Manager-解题步骤详解

考点:

基于约束的SQL攻击

数据库字符串比较

INSERT截断

启动环境:

BUUCTF [FBCTF2019] Products Manager-解题步骤详解

产品管理,其中有三个功能:

查看前5的产品

BUUCTF [FBCTF2019] Products Manager-解题步骤详解

添加产品

BUUCTF [FBCTF2019] Products Manager-解题步骤详解

查看产品细节

BUUCTF [FBCTF2019] Products Manager-解题步骤详解

知道了大致功能,尝试正常的业务逻辑,首先添加产品,其Secret值需包含10位以上的大小写字母和数字:

BUUCTF [FBCTF2019] Products Manager-解题步骤详解

添加成功,查询产品细节:

BUUCTF [FBCTF2019] Products Manager-解题步骤详解

分析题目给出的源码:

BUUCTF [FBCTF2019] Products Manager-解题步骤详解

其中footer.php页面没用,header.php页面只是首页的三个跳转链接,index.php页面也没有可利用内容。

在db.php页面中,查看到如下SQL语句:

CREATE TABLE products (  name char(64),  secret char(64),  description varchar(250));INSERT INTO products VALUES('facebook', sha256(....), 'FLAG_HERE');INSERT INTO products VALUES('messenger', sha256(....), ....);INSERT INTO products VALUES('instagram', sha256(....), ....);INSERT INTO products VALUES('whatsapp', sha256(....), ....);INSERT INTO products VALUES('oculus-rift', sha256(....), ....);

其中给出了提示,flag在facebook中,若想查询产品细节,需要产品的Secret值,一开始猜测本题是一道SQL注入题,但未找到可用的注入点,通过查阅大佬wp,得知是道基于约束的SQL攻击,参考资料:基于约束的SQL攻击

1. 数据库字符串比较

在数据库对字符串进行比较时,若两字符串长度不一样,则会在较短的字符串末尾填充空格,使两个字符串长度一致。

例:

str1和str的比较,比较时会在str的后面添加一个空格以补足长度。

也就是说,对于查询语句:

select * from users where username='test'select * from users where username='test '

查询结果是一致的。

2. INSERT截断

在数据插入时,若数据长度超过了预先设定的限制,例如:name char(64)时,数据库会对字符串进行截断,只保留限定的长度。

在本题db.php页面源码中,查看添加产品和查询产品详情函数:

// 添加产品function insert_product($name, $secret, $description) {  global $db;  $statement = $db->prepare(    "INSERT INTO products (name, secret, description) VALUES      (?, ?, ?)"  );  check_errors($statement);  $statement->bind_param("sss", $name, $secret, $description);  check_errors($statement->execute());  $statement->close();}

插入语句中"INSERT INTO products (name, secret, description) VALUES ($name, $secret, $description)",并未做任何处理,直接插入数据库。

// 查询产品详情

function get_product($name) {  global $db;  $statement = $db->prepare(    "SELECT name, description FROM products WHERE name = ?"  );  check_errors($statement);  $statement->bind_param("s", $name);  check_errors($statement->execute());  $res = $statement->get_result();  check_errors($res);  $product = $res->fetch_assoc();  $statement->close();  return $product;}

在查询语句中"SELECT name, description FROM products WHERE name = $name",只是对获取的$name变量进行了拼接,未进行任何处理。

结合两点,产生了本题的利用点:

添加一个facebook用户,即在产品名后加大于长度限制的空格,空格后需再跟若干个字符,在添加数据时,使添加的产品名与目标一致。

查询时,返回的用户名是目标信息,达到水平越权

构造添加的产品信息:

Name:facebook                                                            11Secret:qweASDzxc123Description:123

BUUCTF [FBCTF2019] Products Manager-解题步骤详解

添加成功,此时再查询刚刚添加的产品详情:

Name:facebookSecret:qweASDzxc123// 因为在存入数据库时,添加的Name属性长度超过限制被截断

查询成功,得到flag:

BUUCTF [FBCTF2019] Products Manager-解题步骤详解

原文来自CSDN博主「Senimo_」|侵删

BUUCTF [FBCTF2019] Products Manager-解题步骤详解

BUUCTF [FBCTF2019] Products Manager-解题步骤详解
中电运行是专业专注培养能源企业IT工匠和提供IT整体解决方案的服务商,也是能源互联网安全专家。
为方便大家沟通,中电运行开通“中电运行交流群”,诚挚欢迎能源企业和相关人士,以及对网络安全感兴趣的群体加入本群,真诚交流,互相学习BUUCTF [FBCTF2019] Products Manager-解题步骤详解BUUCTF [FBCTF2019] Products Manager-解题步骤详解。想加入我们就给我们留言吧BUUCTF [FBCTF2019] Products Manager-解题步骤详解

BUUCTF [FBCTF2019] Products Manager-解题步骤详解

BUUCTF [FBCTF2019] Products Manager-解题步骤详解

小白必读!寰宇卫士手把手教你栈溢出(上)

手把手教你栈溢出(中)

手把手教你栈溢出(下)

《信息安全知识》之法律关键常识汇总

CTF经验分享|带你入门带你飞!

BUUCTF [FBCTF2019] Products Manager-解题步骤详解

原文始发于微信公众号(寰宇卫士):BUUCTF [FBCTF2019] Products Manager-解题步骤详解

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月11日14:27:11
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   BUUCTF [FBCTF2019] Products Manager-解题步骤详解http://cn-sec.com/archives/1120923.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息