[靶场笔记]第十二章

switch绕过 switch在case判断条件时会将原先是字符串的内容剔除并转换成与判断语句相同的类型 因此,在下面这段代码中 会输出 但是,如果使用弱比较对其进行过滤,例如 if($a=='2') 这个条件是不会成立的,因为'2+0’不等于'2' 短标签绕过 如果php等关键字被过滤,可以尝试使用短标签,例如 <?= ...... ?> <% ..... %> <? ..... ?> #开启配置参数asp_tags=on,并且只能在7.0以下版本使用 <script language="php"> .... </script> #不需要修改参数开关,但是只能在7.0以下可用 []绕过 如果[]不行,可以用{}代替 .user.ini 是php的一个全局配置文件,对整个web服务(nginx)起作用。可以用在文件上传漏洞 auto_prepend_file = <filename> //包含在文件头 auto_append_file = <filename> //包含在文件尾 假设上传了一个图片,如果在与这一文件同级目录下存在php文件,把上面的改成图片文件名,就会把图片包含进php文件里,例如 auto_prepend_file = 1.jpg hash_hmac函数 [羊城杯 2020]Blackcat hash_hmac() 使用 HMAC 方法生成带有密钥的哈希值 参数 必需的 描述 algo 是 要使用的哈希算法名称,例如:“md5”,“sha256”,“haval160,4” 等。 如何获取受支持的算法清单,请参见 hash_hmac_algos() 函数。 data 是 要进行哈希运算的消息。 key 是 使用 HMAC 生成信息摘要时所使用的密钥。 raw_output 否 设置为 TRUE 输出原始二进制数据, 设置为 FALSE 输出小写 16 进制字符串。 这个函数有一个特性,如果data传入的值为数组,那么就会返回NULL ...

February 6, 2024 · 1 min · Red

[靶场笔记]第十一章

@在php curl中的作用 简单来说,就是当使用上面这个Curl方法时,使用@可以读取文件。因此在一些url参数中如果使用了这个方法(可以用是否是执行ping命令来判断),就可能存在LFI preg_match()函数漏洞 在这个函数中,可以存在三个参数 preg_replace($pattern, $replacement, $subject) 作用:搜索subject中匹配pattern的部分, 以replacement的内容进行替换。 $pattern: 要搜索的模式,可以是字符串或一个字符串数组。 $replacement: 用于替换的字符串或字符串数组。 $subject: 要搜索替换的目标字符串或字符串数组。 /e 可以修正符使该函数将replacement 参数当作 PHP 代码。例如 pat=/abc/e&rep=system("ls")&sub=abc 因为e在这里是作修饰符,因此abc必须用两个斜杠括起来(正则表达式)。 flask session伪造 flask session的构造方式是明文+SECRET_KEY+时间,因此伪造的关键在于获取SECRET_KEY。可以使用flask session manager工具进行伪造 /proc/self/… 这是一个特殊的目录,算是与linux内核的一个接口。如果是/proc/{pid}这样的目录,那么这个目录下的内容则是相应进程的运行信息。 有几个比较重要的文件,可以参考下图(原文) PHP session反序化漏洞 可以看这篇博客,其实就是在生产环境中如果对php session的读取和存储方式不一致,就会导致格式上的差异,从而导致触发反序化漏洞 但仔细一想,在真实渗透环境中应该很少有程序员会在php.ini设置好的基础上再添加其他php session处理器了吧,就当学习一下 题目的名字 有时候,题目的名字就隐藏了这道题的poc,不信可以试试这题😂 不过还是记录一下深信服的EDR RCE吧深信服 EDR终端检测响应平台RCE漏洞代码分析 一个巧妙的变量覆盖 preg_match()绕过 %0a没被禁用的情况下,是可以起到绕过的作用的。不然就是用大量字符导致preg_match()崩溃输出false。这种方法适合用在判断语句如下的情况 if(!preg_match(...)) ereg的00截断 很早之前记录过这个函数,不过不能识别数组的特性会让其返回false。今天再补充一个特性,就是当这个函数读到%00就会截止返回null,可以用来应付下面这种情况 if(ereg(...)!==FALSE) 科学计数法 php的判断是支持科学计数法的,例如1e8,会被判断成三个字符,但是这个数字可比9999999大多了

December 12, 2023 · 1 min · Red

[VulnHub]第五章

本期靶场:Hackable3 and Aragog and Me an My girlfriend FTP服务的上传和下载功能 get是下载,put是上传。当你拥有ftp匿名服务时,就可以试试传一句话木马 wpscan 只要碰到wordpress,就扫一扫,反正也花不了多少时间。需要注意的是,一定要定义扫描插件还是主题漏洞。 linpeas.sh 这个工具可以枚举linux操作系统几乎所有的可提权项,甚至可以通过su暴力破解本地密码。一般用来辅助提权,列出有高权限的脚本或代码 pspy64 这个工具可以用于在不需要root权限的情况下窥探进程,获取UID sudo提权 喜闻乐见的sudo提权,具体可以参考前面几章 X-Forwarded-For 如果当前页面告诉你只能在本地访问,那就加上它 平行越权 在url发现id后手痒都会想去试试看的改值,说不定会有意外收获 (好水的一章。。。不过能记录的确实只有这些)

October 28, 2023 · 1 min · Red

[VulnHub]第四章

本章靶场:HarryPotter: Fawkes FTP匿名登录 如果一台机器开启了FTP服务(例如vsftpd),那么第一步要尝试的就是能否进行匿名登录 FTP的匿名登录一般有三种: 1、 用户名:anonymous 密码:Email或者为空 2、 用户名:FTP 密码:FTP或者为空 3、 用户名:USER 密码:pass 二进制文件 当碰到一个二进制文件时,第一反应应该是去尝试运行它。使用ps -aux和grep对进程pid进行监控。或者使用ss -pantu获取socket信息,看到其监听的端口和ip 缓冲区溢出 缓冲区溢出(buffer overflow),是针对程序设计缺陷,向程序输入缓冲区写入使之溢出的内容(通常是超过缓冲区能保存的最大数据量的数据),从而破坏程序运行、趁著中断之际并获取程序乃至系统的控制权。 而缓存区溢出漏洞最重要的就是找出缓存区溢出的位置,这里可以使用edb-debugger调试工具来动态测试进程,并找出缓存区溢出漏洞的溢出位置。更多有关缓冲区溢出的实验可以看这里 tcpdump 看下面这个例子 tcpdump -i eth0 port 21 可以用来监听eth0网卡的21端口的数据收发状况 sudo提权漏洞 网上有一堆教程,拿到用户后记得去搜一下sudo的CVE

October 26, 2023 · 1 min · Red

[靶场笔记]第十章

return可直接执行十六进制 RT,如果放在return后面的语句是十六进制,就会先转换成可执行命令(maybe) 函数可运算 比如1-phpinfo()-1这种语法其实是允许的,返回的内容因为函数本身返回值是1,所以结果是-1。并且phpinfo()可被执行 create_function()创建匿名函数 流程如下 但是可能看起来比较不好懂,再来看下面这个 create_function()会创建一个匿名函数(lambda样式) create_function()函数会在内部执行 eval(),我们发现是执行了后面的return语句,属于create_function()中的第二个参数string $code位置。 因此create_function函数等价于 <?php function lambda1($a,$b){ return "ln($a) + ln($b) = " . log($a * $b); } ?> 下面来看一个例子([NISACTF 2022]level-up) <?php error_reporting(0); include "str.php"; $a = $_GET['a']; $b = $_GET['b']; if(preg_match('/^[a-z0-9_]*$/isD',$a)){ show_source(__FILE__); } else{ $a('',$b); } 构造payload的时候,注意正则匹配 preg_match('/^[a-z0-9_]*$/isD',$a,说明我们在构造payload的时候第一个字母不能为数字或者字母,所以我们需要绕过正则,这里要用\(转义符绕过,构造payload: ?a=\create_function&b=return 'Leaf';}phpinfo();/* 解释一下上面的payload: \的作用是绕过正则匹配preg_match,第一个;是让return 语句结束(其实也可以不用谢这句return,直接写后面的花括号),}的作用是让create_function语句闭合,然后执行phpinfo();后面要加/*是为了让最后的}被注释掉来保证phpinfo()正常执行 中文变量名 对于下面这样的过滤如果束手无策 if(preg_match("/[A-Za-z0-9_\%\\|\~\'\,\.\:\@\&\*\+\- ]+/",$code)) 就可以考虑用中文名来命名变量。(可能你会觉得这很不可思议,但在php里确实是允许的) payload如下 $哈="{{{"^"?<>/";${$哈}[哼](${$哈}[嗯]);&哼=system&嗯=tac f* 其中,"{{{"^"?<>/";的结果是_GET tee 这个命令类似echo ... >,可以把...的内容写入到对应文本中。一般是配合管道使用,例如ls / |tee 1,作用就是把ls列出来的内容存入到1这个文件里。如果在进行网站敏感信息读取,访问1就能下载这个文件 php的类函数调用 php的类使用其实类似C++,比如ctf类中有个getflag函数,配合 call_user_func()或者eval()可以直接用 shell盲注 和SQL盲注类似,[awk](https://www.runoob.com/linux/linux-comm-awk.html)命令可以截取字符串,[cut](https://www.runoob.com/linux/linux-comm-cut.html)命令可以截取单个字符输出。结合shell编程里的if和sleep等命令就能判断正误。例如下面这样 ...

October 25, 2023 · 1 min · Red