![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
web
文章平均质量分 77
Myon⁶
CNVD-2024-15127报送者
国家级HVV行动蓝队处置员
成都大运会重保
公安非法网站打击渗透项目
县级攻防演练渗透测试
应急响应团队SNERT队长
工业互联网安全开发工程师
计算机网络安全隔离装置发明专利
CISCN西南赛区三等奖
ISCC个人挑战赛一等奖
第十五届软件类-网络安全网络安全大学组一等奖
四川省第二届高校网络安全技能大赛决赛优秀奖
全国大学生网络安全精英赛全国复赛优秀奖
信息安全铁人三项长城杯三等奖
第二届SWCTF二等奖
第三届SWCTF优秀出题人
全国大学生互联网+大赛银奖、铜奖
展开
-
ctfshow-web入门-php特性(web109-web115)
php 中查看目录的函数有:scandir()、golb()、dirname()、basename()、realpath()、getcwd() ,其中 scandir()、golb() 、dirname()、basename()、realpath() 都需要给定参数,而 getcwd() 不需要参数,getchwd() 函数会返回当前工作目录。对于 trim() 函数会去除空格( %20)、制表符(%09)、换行符(%0a)、回车符(%0d)、空字节符(%00)、垂直制表符(%0b),原创 2024-07-15 17:01:50 · 496 阅读 · 0 评论 -
ctfshow-web入门-php特性(web104-web108)
需要传入的 v1 和 v2 进行 sha1 加密后相等。解法1:这里都没有判断 v1 和 v2 是否相等,我们直接传入同样的内容加密后肯定也一样。?v2=1post:v1=1拿到 flag:ctfshow{bd4eea6b-872d-462c-b8f2-20f48d3ee652}解法2:对于 php 强比较和弱比较:md5(),sha1() 函数无法处理数组,如果传入的为数组,会返回 NULL ,两个数组经过加密后得到的都是 NULL ,也就是相等的。?原创 2024-07-14 15:36:54 · 672 阅读 · 0 评论 -
ctfshow-web入门-php特性(web100-web103)is_numeric 函数绕过
我们只需要构造输出 ctfshow 这个类即可。虽然逻辑运算符的优先级比赋值运算符要高,但是如果逻辑运算符和赋值运算符连用时,往往允许存在先进行赋值运算,后再进行逻辑运算的顺序。需要满足 if 语句才会进入后面的判断,因此要求 v0 为 1,这里用的是 and,所以只需要满足 v1是数字即可。要求 v2 中不能有分号,v3 中需要有分号。如果上述要求都满足,则会调用 eval 函数。代入 eval 函数实际就是执行:");原创 2024-07-13 17:10:44 · 892 阅读 · 0 评论 -
ctfshow-web入门-php特性(web96-web99)
如果 $_GET 不为空,也就是说我们进行了 get 传参,那么就会通过 $_GET = &$_POST 将 $_POST 的引用赋值给 $_GET,引用赋值导致两个变量指向同一个内存地址,而 $_POST 变量内容改变会影响 $_GET 变量的内容;$_GET 变量是一个数组,预定义的 $_GET 变量用于收集来自 method="get" 的表单中的值,表单域的名称会自动成为 $_GET 数组中的键。isset()函数用于检查变量是否设置,如果设置了,则 id=$_GET['id'],否则 id=1。原创 2024-07-13 11:40:41 · 921 阅读 · 0 评论 -
ctfshow-web入门-php特性(web89-web95)intval 函数绕过
如果第一次匹配成功,再次使用正则表达式匹配 $a 是否等于字符串“php”,但这次只有不区分大小写,是单行模式,不会匹配多行,如果第二次没有匹配成功就会输出 flag。也就是说,如果 num 中不包含数字 "0" 就会终止程序,但是还有一种情况,如果这个 0 出现在开头,虽然是找到了有 0 这个字符,但是返回位置为 0 ,if (!== 是相等运算符,在进行比较时,会先将字符串类型转化成相同,再比较,比如比较一个数字和字符串或者比较涉及到数字内容的字符串,字符串会被转换成数值并按照数值来进行比较。原创 2024-07-12 11:47:12 · 745 阅读 · 0 评论 -
ctfshow-web入门-文件上传(web166、web167)&(web168-web170)免杀绕过
查看源码,前端只让传 zip上传 zip 成功后可以进行下载随便搞一个压缩包,使用记事本编辑,在其内容里插入一句话木马:上传该压缩包,上传成功后点击下载文件,使用 burpsuite 抓包:我这里木马内容用的 request ,就在 get 里执行 ls 没什么问题,但是读取 flag 时识别有点问题,最好使用 post 请求,因此将请求方法改为 post ,将 file 的内容还原到上面。原创 2024-07-11 16:21:08 · 876 阅读 · 0 评论 -
ctfshow-web入门-文件上传(web164、web165)图片二次渲染绕过
web164 和 web165 的利用点都是二次渲染,一个是 png,一个是 jpg二次渲染:网站服务器会对上传的图片进行二次处理,对文件内容进行替换更新,根据原有图片生成一个新的图片,这样就会改变文件原有的一些内容,我们需要将一句话木马插入到数据不会被改变的位置,确保一句话木马不会受到二次渲染的影响。原创 2024-07-09 15:43:00 · 1168 阅读 · 0 评论 -
ctfshow-web入门-文件上传(web161、web162、web163)远程包含
后面又去 b 站看了下视频,发现它远程包含的就是一个 php 文件,而我这里包含的 shell 是一个纯文本的东西,我最开始以为是将这段内容包含进了 index.php 的代码里,所以就没有考虑它不是 php 后缀是否可以正常解析的问题。后面问了群里的师傅,说用 flask,我原本用的是 Apache 搭的服务,重置了服务器,Apache 和 php 其实都是刚下的,可能还需要配置点什么吧,不清楚,因此我们将木马放到 flask 服务上去。那么我们上传的文件名就不使用后缀即可:这里以 test 为例。原创 2024-07-09 14:59:30 · 1105 阅读 · 0 评论 -
ctfshow-web入门-文件上传(web151-web160)
试了下前端只能传 png 后缀的将一句话木马改成 png 后缀,上传后用 burpsuite 抓包绕过前端检测后,改回 php 后缀,发包拿到 flag:ctfshow{e3bd0332-4d5f-4255-941f-a2e6095c4f17}我们还可以直接改它前端验证的代码:原本只支持上传 png 后缀的文件我们加一个 php 后缀进去,即可直接上传 php 后缀的文件。原创 2024-07-07 12:27:30 · 900 阅读 · 0 评论 -
ctfshow-web入门-文件包含(web88、web116、web117)
没有过滤冒号 : ,可以使用 data 协议,但是过滤了括号和等号,因此需要编码绕过一下。这里有点问题,我 ('ls') 后加上分号发现不行,可能是编码结果有加号,题目做了过滤去掉分号得到 PD9waHAgc3lzdGVtKCdscycpPz4=,传入时要把等号去掉,因为题目过滤掉了等号,否则会触发 die 函数,即使去掉等号,base64 解码也是原创 2024-07-06 16:10:35 · 971 阅读 · 0 评论 -
ctfshow-web入门-文件包含(web87)巧用 php://filter 流绕过死亡函数的三种方法
但是我们传入的一句话木马也是 XML 标签,如何让它只去除 而不破坏我们传入的木马呢?我们可以先对一句话木马进行 base64 编码后传入,这样就不会受到strip_tags 函数的影响,当去除掉 后,由于 php://filter 允许使用多个过滤器,我们再调用 base64-decode 将一句话木马进行 base64 解码,实现还原。原创 2024-07-06 12:41:50 · 1016 阅读 · 0 评论 -
ctfshow-web入门-文件包含(web82-web86)条件竞争实现session会话文件包含
file_get_contents 函数将会读取文件的全部内容并将其作为字符串返回,strpos($content, "原创 2024-07-05 16:48:58 · 1281 阅读 · 3 评论 -
ctfshow-web入门-文件包含(web78、web79、web80、web81)
中间件的日志文件会保存网站的访问记录,比如HTTP请求行,User-Agent,Referer等客户端信息,如果在HTTP请求中插入恶意代码,那么恶意代码就会保存到日志文件中,访问日志文件的时候,日志文件中的恶意代码就会执行,从而造成任意代码执行甚至获取shell。此外我们也可以使用 data:// 协议进行代码执行,其实和 php://input 是一样的,让用户可以控制输入流,当它与文件包含函数结合时,用户输入的 data:// 流就会被当作 php 文件执行。会将我们输入的 php 替换为问号?原创 2024-07-04 14:42:56 · 1326 阅读 · 0 评论 -
ctfshow-web入门-命令执行(web119、web120、web121、web122)
被解释成了 1,因此 ${HOME::$?这里出现了 3,放到前面的题去试了下,BASH 和 SHELL 的依旧是不行,难道都不是 /bin/bash吗,很奇怪。这里当前登录的用户名应该是 www-data,我最开构造的是 a ,取变量的最后一个字母,也就是 /bin/?原创 2024-07-03 17:18:15 · 1012 阅读 · 0 评论 -
ctfshow-web入门-命令执行(web118详解)Linux 内置变量与Bash切片
示例:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin。描述:存储一系列路径,这些路径用于查找可执行文件,当你在命令行中输入命令时,系统会在这些路径中查找对应的可执行文件。提取从第二个字符开始的两个字符,即 ro,在 Bash 中,字符串切片的索引也是从 0 开始的。以此类推,最终将这些数字应用到切片中去,绕过对数字的过滤,构造出我们想要执行的命令。在Bash中,${#var} 的语法用于获取变量 var 的长度(即字符数)。原创 2024-07-03 12:03:47 · 1094 阅读 · 0 评论 -
ctfshow-web入门-命令执行(web75-web77)
利用 mysql load_file 读文件,提示中是从数据库 ctftraining 中查询的,就算我们不知道这个数据库名,也可以直接从默认的 information_schema 中查,该数据库包含了所有的数据库的内容。(readflag 这个东西在前面的题里面遇到过,它是一个可执行的二进制文件,执行它即可获取 flag,这里为什么要用这个 readflag 而不是直接读取 flag36x.txt 我们后面再说)接下来的三个字符 r-- 表示文件所有者(root)具有读取权限,但没有写入或执行权限。原创 2024-07-01 17:16:04 · 1183 阅读 · 0 评论 -
ctfshow-web入门-命令执行(web71-web74)
我们直接在执行完 include 包含语句后执行 exit 强制退出,从而实现绕过 preg_replace 的执行。拿到 flag:ctfshow{3deb8d00-68e6-4c20-a971-3fbf3382ec45}拿到 flag:ctfshow{8fccf5bc-5681-4815-b7ce-0b81772b6f7c}拿到 flag:ctfshow{35309fb4-36c5-4080-874a-6eaa85e03ff0}才发现这道题给了 index.php 的源码。原创 2024-06-30 15:08:39 · 436 阅读 · 0 评论 -
ctfshow-web入门-命令执行(web66-web70)
先使用scandir() 进行目录扫描,对于 txt 文件,我们使用 include 进行包含就可以直接看到文件内容,ini_set用来设置php.ini的值,在函数执行的时候生效,脚本结束后,设置失效。原创 2024-06-30 13:26:51 · 542 阅读 · 0 评论 -
ctfshow-web入门-命令执行(web59-web65)
都是使用 highlight_file 或者 show_source。原创 2024-06-30 12:34:44 · 229 阅读 · 0 评论 -
ctfshow-web入门-命令执行(web56、web57、web58)
由于前面说的只有 -1,因此我们对 36 进行取反,得到 -37,对 -37 再次取反即可得到 36。这里说了 flag 在 36.php,那么我们只需要构造 36,但是数字被过滤了。根据 $((~ $(()) ))=-1,我们进行拼接,构造出 -37。命令执行,需要严格的过滤,已测试,可绕。原创 2024-06-29 22:50:49 · 619 阅读 · 0 评论 -
ctfshow-web入门-命令执行(web53-web55)
这里的代码有点不一样,说一下这两种的区别:(1)直接执行 system($c);这种方式会直接执行命令 $c 并将命令的输出直接发送到标准输出(通常是浏览器);不会返回命令的输出值,因此不能对输出结果进行进一步处理。(2)使用一个参数来接受 system 的返回值后再输出它这种方式不仅会执行命令 $c,而且会将命令的最后一行输出结果赋值给变量 $d;然后通过 echo "".$d;将变量 $d 的内容输出到标准输出;原创 2024-06-10 18:21:24 · 1076 阅读 · 0 评论 -
ctfshow-web入门-命令执行(web43-web52)关于黑洞“ >/dev/null 2>&1“的处理与绕过
注意:我们传入的 c=%09 是 URL 编码,在 URL 编码中,%09 表示 ASCII 编码中的水平制表符(Tab 键),而不是数字 '0' 和 '9'。拿到 flag:ctfshow{f0f59065-df11-4cec-b502-fc9a7e2c48c8}拿到 flag:ctfshow{27fb4c37-7767-412f-9389-0d90b5a9a361}拿到 flag:ctfshow{f043c560-aaea-4e22-9072-e6a5eb08d059}cut:用于从文本文件中剪切列。原创 2024-06-10 14:41:52 · 1047 阅读 · 1 评论 -
ctfshow-web入门-命令执行(web42知识铺垫与四种常见截断方法)
2>&1 是另一个重定向操作符,它将标准错误(stderr)重定向到标准输出(stdout),>&1 表示将标准错误重定向到标准输出所指向的地方(即 /dev/null),这意味着命令的所有错误信息也会被丢弃。/dev/null 是类 Unix 操作系统中的一个特殊文件,被称为“空设备”或“黑洞”,它是一个字符设备文件,其主要作用是丢弃所有写入它的数据,同时任何从它读取的操作都会立即返回EOF(文件结束符)。对于一个与,前面的语句为假则直接执行后面的,前面可真可假,后面命令都会执行;原创 2024-06-09 11:16:14 · 918 阅读 · 0 评论 -
ctfshow-web入门-命令执行(web41_exp与分析)
preg 是题目的正则匹配规则,在 ASCII 可见字符范围内,先排除掉正则表达式匹配的字符,将其他可用的字符进行按位或运算,再将运算得到的可见字符,以及参与或运算结果为可见字符的组合转为 16 进制拼接 % 后写入 txt 文件。过滤掉了数字、字母以及一些符号,之前接触过的无字母 rce 是取反编码再取反,采用不可见字符去绕过正则,但是这里取反符号被过滤掉了,但是注意到或符号被放出来了,下面附上这种类型题目的相关脚本,并给出一定解释。(2)php 可用字符生成脚本(这个的生成方式可以选择或和异或操作)原创 2024-06-08 17:41:26 · 667 阅读 · 2 评论 -
ctfshow-web入门-命令执行(web37-web40)
中间件的日志文件会保存网站的访问记录,比如HTTP请求行,User-Agent,Referer等客户端信息,如果在HTTP请求中插入恶意代码,那么恶意代码就会保存到日志文件中,访问日志文件的时候,日志文件中的恶意代码就会执行,从而造成任意代码执行甚至获取shell。将我们想要执行的代码包含进去,其实和 php://input 是一样的,让用户可以控制输入流,当它与文件包含函数结合时,用户输入的 data:// 流就会被当作 php 文件执行。就会显示容器有问题了。我们也可以采用编码绕过,对原创 2024-06-07 17:25:56 · 1674 阅读 · 0 评论 -
ctfshow-web入门-命令执行(web30-web36)
命令执行,需要严格的过滤。原创 2024-06-06 15:57:16 · 959 阅读 · 1 评论 -
ctfshow-web入门-命令执行(web29)五种解法绕过文件名检测
它的 payload 里用到了两个连续的单引号,在一些系统中,连续的两个单引号会被解释为一个单引号,而不会被视为字符串的结尾,从而使得字符串拼接在一起。因此,"fl''ag.php" 被解释为 "flag.php",从而绕过对文件名的检测。第一题代码很简单,就是对 preg_match 绕过,只要提交的参数值不出现 flag 就行。这条命令的作用是输出指定文件的内容,并在每一行前面加上行号。可以看到 flag 就在当前目录下,叫 flag.php。写入成功,这里还是测了一会儿才弄好,注意对单引号的转义。原创 2024-06-06 11:44:03 · 455 阅读 · 0 评论 -
ctfshow-web入门-爆破(web26-web28)
提取:\u606d\u559c\u60a8\uff0c\u60a8\u5df2\u88ab\u6211\u6821\u5f55\u53d6\uff0c\u4f60\u7684\u5b66\u53f7\u4e3a02015237 \u521d\u59cb\u5bc6\u7801\u4e3a\u8eab\u4efd\u8bc1\u53f7\u7801。可以注意到,这里的爆破位置恰好是身份证号的出生年月日的地方,年的话我们就从 1990 开始到 2024,月的话就是 00 到 12,日的话就是 01 到 31。原创 2024-06-05 11:24:39 · 1086 阅读 · 0 评论 -
ctfshow-web入门-爆破(web25)及php_mt_seed工具的安装与使用
rand)){ ,需要为真才会执行后面输出 flag 的语句,因此 $rand 需要为 0 ,而 $rand = intval($r)-intval(mt_rand());特别注意,这里的 mt_rand()+mt_rand() 是第二次和第三次生成的随机数之和,因为前面已经使用过一次 mt_rand() 了。我们令 r=0,就可以得到 $rand = -intval(mt_rand()),只要设置了 r,就会 echo $rand;都是一样的种子,但是第一次和第二次生成的随机数结果是不一样的。原创 2024-06-03 11:06:44 · 636 阅读 · 1 评论 -
ctfshow-web入门-信息搜集(web11-web20)
X探针:又名刘海探针、X-Prober,是一款由 INN STUDIO 原创主导开发的开源 PHP 探针,拥有美观简洁的界面、极高的运行效率和极低的资源占用,能高精度显示服务器的相应信息。php 探针:用来探测空间、服务器运行状况和 PHP 信息,探针可以实时查看服务器硬盘资源、内存占用、网卡流量、系统负载、服务器时间等信息。雅黑 php 探针:每秒更新,不用刷网页,适用于Linux系统,可以实时查看服务器硬盘资源、内存占用、网卡流量、系统负载、服务器时间等信息。原创 2024-06-02 11:58:34 · 1255 阅读 · 0 评论 -
ctfshow-web入门-信息搜集(web1-web10)
勇师傅还是想打 CTF。原创 2024-05-31 17:13:36 · 663 阅读 · 0 评论 -
Windows 权限维持之 Shift 后门
正常情况下我们连按五次 shift 键会弹出粘滞键粘滞键是电脑使用中的一种快捷键,一般连按五次 shift 会出现粘滞键提示,粘滞键是专为同时按下两个或多个键有困难的人而设计的, 粘滞键开启后,可以先按一个键位,再按另一键位,而不是同时按下两个键位,方便某些因身体原因而无法同时按下多键的人。sethc.exe 就是 Windows 下的粘滞键,它的位置在 C:\Windows\System32\sethc.exe。原创 2024-05-31 15:16:05 · 459 阅读 · 0 评论 -
第三届 SWCTF-Web 部分 WP
我们可以在根目录下发现 flag 文件夹和 secret 文件夹,里面还包含了一层文件夹,但是这里过滤掉了连续的/,也就是说我们不能对两层目录直接操作,我们想要读取里面的文件,可以使用分号绕过,先 cd 到某个文件夹下再执行其他命令。这里的用户名就是 toor,密码是随机生成的 10 位数字,但是这里使用了弱等于,因此可以采用 php 弱类型比较绕过,true == 任何的非0随机数字:返回 true;拿到 flag{ThInk_cOnstantly_0f_There_w1ll_be_n0_echO}原创 2024-04-21 23:31:03 · 1230 阅读 · 0 评论 -
2024腾龙杯web签到题-初识jwt(签到:这是一个登录页面)
它是 JSON Web Token 的缩写,是一个开放标准,定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息,该信息可以被验证和信任,因为它是数字签名的。它就是一种认证机制,让后台知道该请求是来自于受信的客户端。jwt 由三部分组成,它们之间用圆点(.)连接,这三部分分别是:Header、Payload、Signature。回到最初请求的 login , post 传入 json 格式的 tooken。回显得到一个 token ,也是 json 的格式。原创 2024-03-18 19:26:17 · 729 阅读 · 0 评论 -
Struts2 远程代码执行漏洞复现(S2-001)
Struts2 是一个基于 MVC 设计模式的 Web 应用框架,作为控制器来建立模型与视图的数据交互。此漏洞源于 Struts 2 框架中的一个标签处理功能:altSyntax。在开启时,支持对标签中的 OGNL 表达式进行解析并执行。Struts 2 的 “altSyntax” 功能允许将 OGNL 表达式插入到文本字符串中并递归处理,这允许恶意用户提交一个字符串,通常通过 HTML 文本字段,其中包含一个 OGNL 表达式(如 %{1+1}),如果表单验证失败,服务器将执行该表达式。原创 2024-03-14 10:19:36 · 1058 阅读 · 0 评论 -
Fastjson 1.2.24 反序列化导致任意命令执行漏洞复现(CVE-2017-18349)
Fastjson 是一个 Java 库,用于在 Java 对象和 JSON 数据之间进行转换,它提供了一种简单而高效的方式来序列化 Java 对象为 JSON 格式的字符串,以及将 JSON 字符串反序列化为 Java 对象。Fastjson 支持各种类型的 Java 对象,包括预先存在但没有源代码的对象。原创 2024-03-09 19:46:13 · 2047 阅读 · 0 评论 -
log4j2 远程代码执行漏洞复现(CVE-2021-44228)
log4j 是 Apache 的一个开源日志库,是一个基于 Java 的日志记录框架,Log4j2 是 log4j 的后继者,其中引入了大量丰富的特性,可以控制日志信息输送的目的地为控制台、文件、GUI 组建等,被应用于业务系统开发,用于记录程序输入输出日志信息,log4j2 中存在JNDI注入漏洞,当程序记录用户输入的数据时,即可触发该漏洞,成功利用该漏洞可在目标服务器上执行任意代码。原创 2024-03-08 15:43:00 · 5656 阅读 · 0 评论 -
关于 CTF 中 php 考点与绕过那些事的总结
_POST //获取post数据,是一个字典$_GET //获取get数据,是一个字典$_COOKIE //获取cookie数据$_SESSION //获取session数据$_FILES //获取上传的文件$_REQUEST //获取$_GET, $_POST, $_COOKIE中的数据$_SERVER //用户和服务器的基本信息数据库$_ENV //环境数据$GLOBALS //所有全局变量。原创 2024-03-04 23:58:26 · 2359 阅读 · 1 评论 -
DVWA 靶场之 Command Injection(命令执行)middle&high
除了靶场,其实命令执行漏洞在我们的现实中也是有很多的,建议各位多去打打实战,当然是在符合法律的前提下。这个原理其实还是一样的,只是说它引入了更大范围的黑名单,移除了更多可能用于构造恶意命令的字符。设置了黑名单数组,其中包含了一些常见的用于命令注入的特殊字符,如 && 和;使用 str_replace() 函数将黑名单数组中的特殊字符替换为空字符串。以上就是关于 dvwa 靶场命令执行漏洞的讲解。还可以使用两个或,让前面为假,执行后面的。因此我们使用无空格的或即可绕过。一个或是直接执行后面的命令。原创 2024-02-27 15:13:46 · 797 阅读 · 0 评论 -
DVWA 靶场之 Command Injection(命令执行)原理介绍、分隔符测试、后门写入与源码分析、修复建议
代替 localhost :在操作系统的配置文件中,通常将 localhost(本地主机名)与 127.0.0.1 绑定在一起,这样在应用程序中使用 localhost 时,实际上是在使用本地回环地址,用于访问本机上运行的网络服务和应用程序。在操作系统中,“ &、|、&&、|| ” 都可以作为命令连接符使用,用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令。:对服务器和应用程序进行安全配置,关闭不必要的服务和功能,限制可执行命令的范围。原创 2024-02-26 11:50:13 · 2941 阅读 · 0 评论