引用本文是根据P神的两篇文章进行学习,分别是一些不包含数字和字母的webshell以及无字母数字webshell之提高篇
浅析CTF绕过字符数字构造shell
第一个问题123456<?phpif(!preg_match('/[a-z0-9]/is',$_GET['shell'])) { eval($_GET['shell']); }else{ highlight_file(__FILE__);}
题目在eval()前进行过滤,那我们就得在eval()里得到正常的webshell语句并执行。eval()允许多语句(可分号),这就为我们得到正常的webshell语句提供了很大的操作空间。
首先,核心思路便是将非字母、数字的字符经过各种变换,最后能构造出a-z中任意一个字符。然后再利用PHP允许动态函数执行的特点,拼接处一个函数名,如“assert”,然后动态执行之即可
php5中assert是一个函数,我们可以通过$f='assert';$f(...) ...
Cat首先打开题目环境,发现是如下的输入框
尝试输入127.0.0.1,回显如下
发现是get传参,输入ip后会ping一下
最开始以为是ssrf相关漏洞,尝试后发现并不是,那么应该就是跟ping相关的了
输入:127.0.0.1;ls,结果回显Invalid URL
那应该就是有字符过滤的了,掏出sqli_fuzz字典开始fuzz
结果发现当输入%a0的时候页面会直接会显出代码
一个html文件,将其代码复制后再打开
用游览器打开以后最底下可以看到一串提示:You’re seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard page generated by the handler for this status code.
也就是说,True in your Django settings file.有可能flag文件在 settings file 中 ...
前言这两天审计了一个基本组成是thinkphp的代码,里面有一个文件上传的漏洞,下面记录一下审计的整个流程
在fofa上面搜索一下:"web/static/css/chunk-elementUI.f92cd1c5.css",搜索到的链接其前后端便是这次审计的代码框架
审计在开始审计该框架的时候,我便已经知道这个框架有一个文件上传的漏洞,所以审计的过程中我便只看了跟文件上传有关的代码
该框架是一个多应用模式,app目录下面有admin,api,super,web四个目录,身为普通用户的我们是在web目录下的,也只能够操作web目录下面的控制器方法
web目录下面有一个Upload.php文件,具体代码如下:
1234567891011121314151617181920212223242526272829303132333435363738<?phpnamespace app\web\controller;use think\facade\Filesystem;class Upload extends Base{ /** *上传图片 ...
面向对象-基础类和对象的内存分配机制Java 内存的结构分析
栈: 一般存放基本数据类型(局部变量)
堆: 存放对象(Cat cat , 数组等)
方法区:常量池(常量,比如字符串), 类加载信息
举一个创建对象的流程分析例子
123Person p = new Person();p.name = “jack”;p.age = 10
先加载 Person 类信息(属性和方法信息, 只会加载一次)
在堆中分配空间, 进行默认初始化(看规则)
把地址赋给 p , p 就指向对象
进行指定初始化, 比如 p.name =”jack” p.age = 10
成员方法调用机制示意图
递归例题一
下面为该题代码
1234567891011121314151617181920212223242526272829303132333435public class Test { public static void main(String[] args) { T t1 = new T(); int n = 7; ...
Write-Up
未读journal关注重点代码
1234567891011121314151617181920212223<?phpecho "<p>Welcome to my journal app!</p>";echo "<p><a href=/?file=file1.txt>file1.txt</a></p>";echo "<p><a href=/?file=file2.txt>file2.txt</a></p>";echo "<p><a href=/?file=file3.txt>file3.txt</a></p>";echo "<p><a href=/?file=file4.txt>file4.txt</a></p>";echo "<p><a href ...
引用thinkPHP8.0安装与避坑
ThinPHP官方手册
安装thinphp8.012345678910111213<!--1、访问网址下载安装composer-->https://getcomposer.org/Composer-Setup.exe<!--2、配置镜像源防止乱七八糟的网络和GitHub仓库拉取无权限问题-->composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/<!--3、在网站根目录(www)下进入cmd创建项目-->composer create-project topthink/think tpcd tp<!--4、解决依赖项报错-->composer up --ignore-platform-reqs<!--5、运行命令查看效果-->php think run<!--6、访问查看结果,这里有坑:不能直接访问0.0.0.0:8000这个地址-->127.0.0.1:8000
在第三步 ...
产品:信呼oa
影响版本:<=2.32
开源地址:https://github.com/rainrocka/xinhu/commits/master/
首先我们先起好docker镜像,默认登录账号名为admin,密码为123456
开始代码审计最最开始的时候,我们当然要看index.php的代码(代码块中的大部分注释为我自己写入进去的理解)如下:
123456789101112131415161718192021222324252627282930<?php include_once('config/config.php');$_uurl = $rock->get('rewriteurl');$d = '';$m = 'index';$a = 'default';if($_uurl != ''){ unset($_GET['m']);unset($_GET['d']); ...
SQL注入备忘单
Lab:WHERE 子句中的 SQL 注入漏洞允许检索隐藏数据此实验室在产品类别过滤器中包含 SQL 注入漏洞。当用户选择一个类别时,应用程序将执行如下 SQL 查询:
1SELECT * FROM products WHERE category = 'Gifts' AND released = 1
要完成该实验,请执行 SQL 注入攻击,导致应用程序显示一个或多个未发布的产品。
当我们进入环境之后,选择其中一个类别后,会自动给我们进行筛选然后仅显示出我们选择的类别中我们所能看到的东西
查询的sql语句如上所示
因此我们输入的payload为:/filter?category=Gifts' or 1=1--+
Lab:允许绕过登录的 SQL 注入漏洞本实验的登录函数中存在 SQL 注入漏洞。要完成该实验,请执行 SQL 注入攻击,以 administrator 用户身份登录到应用程序。
进入环境的登陆界面,随便输入用户名和密码并抓包,如下:
从题目中我们已知管理员的账户名,但是不知道密码
因此我们可以在输入账号名的地方将剩下的sql ...
CTF
未读引用PHP反序列化入门之phar
phar反序列化原理及利用
php反序列化拓展攻击详解–phar
phar介绍简单来说phar就是php压缩文档。它可以把多个文件归档到同一个文件中,而且不经过解压就能被 php 访问并执行,与file:// php://等类似,也是一种流包装器。
phar结构由 4 部分组成
stub phar 文件标识,格式为 xxx<?php xxx; __HALT_COMPILER();?>;
manifest 压缩文件的属性等信息,以序列化存储;
contents 压缩文件的内容;
signature 签名,放在文件末尾;
这里有两个关键点,一是文件标识,必须以__HALT_COMPILER();?>结尾,但前面的内容没有限制,也就是说我们可以轻易伪造一个图片文件或者pdf文件来绕过一些上传限制;二是反序列化,phar存储的meta-data信息以序列化方式存储,当文件操作函数通过phar://伪协议解析phar文件时就会将数据反序列化,而这样的文件操作函数有很多
phar文件的生成以及利用在php.ini中配置如下时,才能生成phar ...
错误 Call to undefined function mysqli_connect() 和错误 can’t find class mysqli in :***** 错误是同一种错误,只是php中连接 MySQl的不同写法而已
那么我们要怎么做呢
首先,让我们到自己安装的php目录下面,打开它的配置文件
如果像我一样用的是phpstudy下的八点多的版本,那么它的配置文件php.ini是空的,需要我们自己去把当前目录下的php.ini-development里面的所有内容复制过去(该文件可以用记事本打开)
然后在配置文件中搜索一下extension_dir,如下:
将图中选中的部分改为 ./ext/,并把前面的分号去掉(这是因为在修改成的目录下面有php_mysqli.dll,如果没有那就是下载的时候出错了,再重新下载一遍)
注意:配置文件中的分号其实是注释符,要开启啥功能要先把它去掉
然后让我们搜索 extension=,然后会发现一大块都是extension=的部分,在其中添加上extension=mysqli,如下:
注意:配置文件里面原本也存在extension= ...