1.mssql的源码堆叠注入总结
2.第79篇:记一次Oracle注入漏洞提权的艰难过程
3.攻防世界[Web]-高手进阶
4.SQLMap 源码阅读
5.2023最新版超详细Sqlmap安装保姆级教程,SQL注入使用指南,解析收藏这一篇就够了
mssql的源码堆叠注入总结
0x 前言
本文总结了初次遭遇MSSQL堆叠注入的经验与理解,旨在深化对堆叠注入原理和实践的解析掌握,尽管作者对PHP代码审计不甚精通,源码本文将直接聚焦于MSSQL堆叠注入的解析springcloud部分源码实战过程与应对策略。
0x 堆叠注入
堆叠注入发生在SQL查询语句结尾的源码分号后,附加额外SQL命令,解析形成多命令执行,源码类似于联合查询但更为灵活,解析能够执行任意SQL语句。源码
0x 渗透过程
首先,解析利用FOFA批量检索目标。源码尝试前端弱密码登录,解析发现几个可以直达后台入口,源码但缺少获取shell的直接途径。
转向后台登录界面,利用抓包测试注入点,发现存在MSSQL堆叠注入情况。直接运用SQLmap工具,成功获取数据库权限。
尝试使用`--os-shell`选项,意识到堆叠注入后的命令无回显,改用其他方法。成功通过DNS日志执行命令,进而利用`xp_cmdshell`函数,检查函数是否被禁用。最终,直接注入C# PowerShell脚本实现远程控制,提权至系统级权限。
排查进程,发现大量 PowerShell 进程,直接进入溯源阶段。确认没有内网环境,结束渗透行动。诸神online源码
0x 总结
顺利渗透得益于MSSQL数据库未启用杀软,命令执行未被拦截。若`xp_cmdshell`函数被禁用,可通过执行系统命令配置,添加影子用户并加入管理员组。此外,介绍利用差异备份方法备份一句话木马,适用于存在杀软的情况。提供学习资料包的免费获取途径,包括教程、源码、学习笔记、工具、课件和面试题解析,还邀请大牛讲师在线答疑。
第篇:记一次Oracle注入漏洞提权的艰难过程
大家好,我是ABC_。我近期遇到了一个Oracle注入漏洞,是搜索型的盲注漏洞,只能通过折半法一个字符一个字符的猜解数据。经过判断,发现这是DBA权限的注入点。接下来,我将分享如何通过这个注入点获取操作系统的权限,并且分享了在技术研究过程中遇到的问题和解决方法。
在解决这个问题时,我进行了两方面的优化来加快SQL注入的速度。首先,我在search=%语句中加入了存在结果很少的搜索值,比如将search=%,只显示出一条搜索结果,这样可以减少数据库的检索量和HTTP返回的数据包大小,从而加快SQL注入的速度。其次,jvm源码教程我修改了SQLmap的默认个线程限制,这需要修改SQLmap的源码,这里就不详细解释了。
在Oracle注入提权的语句方面,我注意到很多文章给出的语句通常分为三个步骤,其中第二步就是赋予当前Oracle账号相关的JAVA权限。然而,这个语句包含了大量的单引号和左右尖括号,有时候会被转义掉导致注入失败,而且这个语句异常复杂,容易出错。因此,我使用了一个简单的语句替代,效果更佳。这个语句的格式是BEGIN开头,然后end;结尾,代表一个PL/SQL语句块,如下所示:select dbms_xmlquery.newcontext('declare PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE ''grant javasyspriv to test''; end;') from dual。
我使用了SQLmap的--sql-shell命令将上述语句执行,但是最后执行的命令没有成功。在处理这种情况时,我通常有两种可能:一是执行命令被拦截,二是Java代码没有执行成功。因此,我使用了如下SQL语句进行判断,结果返回0,说明函数没有添加成功。经过一系列测试,我发现是SQLmap的SQL-shell下功能下,上述复杂的SQL语句根本没执行成功。
为了更方便地执行Oracle的复杂SQL语句,我将SQL注入语句进行了修改,通过and (插入SQL语句) is not null的方式,可以在左右括号中插入各种Oracle的网站源码视频SQL语句。然而,这种方法也遇到了WAF拦截的问题。为了解决这个问题,我使用了Oracle特有的编码方式,将SQL语句成功执行。再次执行查询LinuxUtil是否存在的SQL语句,发现返回count()不为0,说明Java代码成功添加执行。然而,LinuxUtil命令依然无法执行,我怀疑是Java权限没有添加成功。我执行了查询当前用户权限的语句,发现当前用户具有CONNECT、RESOURCE、JAVASYSPRIV权限,说明Java相关权限确实是添加成功了。然而,为什么还是无法调用LinuxUtil命令呢?我重新搭建了测试环境,使用Navicat执行Oracle提权语句后,发现报了权限错误。
在查阅大量国外文章后,我发现判断当前用户是否有Java权限,需要查询session_roles表。该表用于显示当前会话中的角色信息,必须session_roles中有JAVASYSPRIV权限才行。我尝试断开Oracle当前账号的连接,重新连接之后,session_roles表中就有相应权限了。然而,我们是在SQL注入点,无法断开重连,那么如何使Java权限立即生效呢?国外文章给出了几种方法,但执行后仍然无法解决问题。
在等待第二天后,ssm源码商城惊奇地发现session_roles中存在JAVASYSPRIV角色了,我也不清楚原因,但此时可以通过select LinuxExecHanshu('whoami') from dual执行命令。然而,盲注过程太麻烦,我选择结合SQLmap的SQL-shell终端来盲注入,因为该SQL语句比较简短,SQLmap的SQL-shell模式猜解是完全无压力的。最终,我们成功获取了系统权限。
总结来说,这个dbms_xmlquery.newcontext函数在高版本的Oracle数据库中已经不能提权成功,甚至不能使用,需要使用其他方法进行提权。在本地搭建的Oracle环境中,大多数情况下可以直接提权成功,但极少数情况下需要断开重连,具体原因不明。如果文章中有错误,欢迎批评指正。后续,我将继续分享Oracle提权的其他方法,敬请期待。
攻防世界[Web]-高手进阶
每次进题做题页面时,题目的编号变动,导致写WriteUp时需反复调整顺序,因此已将编号去除,建议多用搜索功能。
初始页面应为index.php,但URL显示为1.php,实际操作中输入index.php后同样跳转到1.php。使用burpsuite抓取响应头,在URL中访问index.php,进一步分析。
题目页面提供了一串提示,说明robots.txt的作用与潜在风险。尝试直接访问robots.txt,发现实际暴露了flag.php文件。robots.txt主要供爬虫遵循规则,但flag.php文件即使被禁止爬取,仍可通过浏览器直接访问并获取flag。
部分题目未完成,之前有参考WriteUp,从现在开始会特别标注。这些题目给出的线索有限,如robots.txt、login.php、admin.php等文件不存在。查看WriteUp后发现存在phps[1]这种后缀的文件,可直接通过浏览器查看源代码。通过HTTP响应,需要将id参数设置为“admin”,通过GET方式传递,由于两次解码过程,需将admin编码为%%%6d%%6e,再对%%%6d%%6e进行一次url编码%%%d%%e。通过GET方式提交,成功获取flag。
题目是php_rce,搜索发现ThinkPHP5存在远程代码执行漏洞。构造payload验证漏洞,最终成功验证并修改payload查找flag。直接输出flag,确认漏洞利用。
题目页面显示ThinkPHP5的默认页面,基于题目名php_rce,搜索发现存在漏洞。构造payload验证并修改查找flag,最终直接输出flag。
题目页面仅显示PHP代码,主要过程是获取通过GET方式传递的page参数。检查page参数中是否包含php://字段,若存在则删除。代码最后会include page参数中的内容。由于对include函数不熟悉,参考文档后得知支持多种协议。构造payload使用data://协议传入一句话木马,查找flag文件。
尝试直接查找flag文件,未果。继续尝试列出当前目录文件,最终发现目标文件并直接输出结果。
题目提示存在SQL注入,尝试在输入框中验证,发现确实存在。使用sqlmap扫描数据库信息,结果为MariaDB,root用户非DBA。查找WriteUp后得知是手工注入方法。在写入payload后,发现flag文件位置在id=的HTTP响应中。
题目页面显示php代码,需要通过GET方法传递base编码的序列化demo对象。主要步骤为创建Demo实例、序列化。完成payload构造后,通过GET方法提交。
访问题目网站,源码中给出提示,访问source.php进行代码审计。发现hint.php文件,提示flag在ffffllllaaaagggg中。检查checkFile函数逻辑,尝试绕过,发现是字符串截取逻辑错误。修改payload,通过两次url编码的?前设置白名单文件,绕过后直接获取flag。但路径解析问题还需进一步研究,如何处理source.php%f与../../../../ffffllllaaaagggg的路径关系。
SQLMap 源码阅读
本文主要解析了SQLMap的源码阅读流程。首先,我们确认了SQLMap运行的流程图,这有助于我们深入理解源码。在开始SQLMap运行前,程序进行一系列初始化操作,包括环境设置、依赖加载、变量配置等。
接下来,我们处理URL。通过cmdLineParser()从命令行获取参数,进而通过initOptions(cmdLineOptions)解析这些命令行参数。初始化函数中,通过loadBoundaries()、loadPayloads()、_loadQueries()加载payload,这些函数负责从XML文件中加载边界、payload和查询。在loadBoundaries()中,程序读取data/xml/boundaries.xml文件并解析其中的XML,将结果添加到conf对象的tests属性中。conf对象存储了目标的相关信息以及配置信息。
在URL处理阶段,程序通过getCurrentThreadData()获取当前线程数据,并调用f(*args, **kwargs)进行处理。这里的逻辑位于/lib/controller/controller.py文件下,主要工作包括打印日志、赋值和添加HTTP Header等,最终到达parseTargetUrl()函数。在该函数中,程序进行URL的剖析与拆解,并将这些内容保存到conf对象的对应属性中,以便后续使用。
接着,SQLMap会生成注入检测的payload,核心代码位于controller.py文件的行。在setupTargetEnv()函数中,程序调用hashDBRetrieve()函数,根据参数KB_INJECTIONS检索payload。payload生成逻辑在第行,执行SQL语句并使用basePickle进行加密。最终,程序生成payload并进行探测,如果目标返回Connection refused,则返回False。
在WAF检测部分,当URL处理完毕后,程序进行探测,判断目标是否存在WAF。如果存在WAF,则生成用于fuzz的payload,这个payload基于/sqlmapproject/sqlmap.git
测试 sqlmap 是否正常工作,前提需要安装 Python 2:
apt install python2
cd 到 sqlmap 目录:
cd sqlmap/
运行 sqlmap 命令并查看帮助手册:
./sqlmap.py -h
检测 SQL 注入:
1. 手动判断是否存在漏洞。对动态网页进行安全审计,通过接受动态用户提供的 GET、POST、Cookie 参数值、User-Agent 请求头。构造 url1 和 url2,如果 url1 访问结果与原始网页一致,url2 不一致,表示存在 SQL 注入。
2. 使用 sqlmap 自动检测漏洞。检测语法为:sqlmap.py -u 目标 url。
3. 寻找 SQL 注入实例,通过百度搜索特定字符串并测试 URL。
进行数据库操作:
列数据库信息:--dbs
获取当前使用的数据库:--current-db
获取当前用户:--current-user
列出 SQL Server 所有用户:--users
列出数据库账户与密码:--passwords
指定数据库列出所有表:-D 数据库名 --tables
指定数据库表列出所有字段:-D 数据库名 -T 表名 --columns
导出指定字段的数据:-D 数据库名 -T 表名 -C 字段名 --dump
指定范围导出数据:-D 数据库名 -T 表名 -C 字段名 --start 行数 --stop 行数 --dump
SQLMAP 实用技巧:
绕过 WAF 注入:修改 sqlmap 源代码文件,使用特定的绕过方法。
URL 重写测试:使用特殊字符进行注入测试。
列举并破解密码哈希:sqlmap 列举用户并尝试破解密码。
获取数据个数:使用 --count 参数。
网站漏洞爬取:使用 --batch --crawl 参数。
预估时间注入:使用 --eta 参数。
使用 hex 避免编码问题:使用 --hex 参数。
模拟手机环境:使用 --mobile 参数。
智能判断测试:使用 --batch --smart 参数。
结合 burpsuite 使用:使用 -r 参数读取抓包文件。
自动填写表单注入:自动化表单填写功能。
读取文件:使用 --file 参数读取特定文件。
延时注入:使用 --technique 参数。
结合 burpsuite 进行 post 注入:通过配置 burpsuite 代理拦截请求。
cookies 注入:通过 --cookies 参数进行 cookies 注入。
MySQL 提权:连接数据库后,利用 sqlmap 上传特定插件。
执行命令:特定权限下可执行命令。
通过以上步骤和技巧,可以全面掌握 sqlmap 的使用方法,有效进行 SQL 注入测试和数据库操作。