bugku web4

博客围绕Bugku web4展开,包含密文解密和typeof方法应用。先对密文进行解密,分析document.getElementById函数用法及IE下的问题;还介绍了typeof方法判断undefined类型,包括检测变量是否存在、区分对象与原始值等应用及对应问题的解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Bugku web4

有提示嘿嘿这么强。提示看代码:肯定不止那么简单。

那就看看,果然有问题,这么一串是啥东西。

var p1 = '%66%75%6e%63%74%69%6f%6e%20%63%68%65%63%6b%53%75%62%6d%69%74%28%29%7b%76%61%72%20%61%3d%64%6f%63%75%6d%65%6e%74%2e%67%65%74%45%6c%65%6d%65%6e%74%42%79%49%64%28%22%70%61%73%73%77%6f%72%64%22%29%3b%69%66%28%22%75%6e%64%65%66%69%6e%65%64%22%21%3d%74%79%70%65%6f%66%20%61%29%7b%69%66%28%22%36%37%64%37%30%39%62%32%62';

var p2 = '%61%61%36%34%38%63%66%36%65%38%37%61%37%31%31%34%66%31%22%3d%3d%61%2e%76%61%6c%75%65%29%72%65%74%75%72%6e%21%30%3b%61%6c%65%72%74%28%22%45%72%72%6f%72%22%29%3b%61%2e%66%6f%63%75%73%28%29%3b%72%65%74%75%72%6e%21%31%7d%7d%64%6f%63%75%6d%65%6e%74%2e%67%65%74%45%6c%65%6d%65%6e%74%42%79%49%64%28%22%6c%65%76%65%6c%51%75%65%73%74%22%29%2e%6f%6e%73%75%62%6d%69%74%3d%63%68%65%63%6b%53%75%62%6d%69%74%3b';

以上是密文。

eval(unescape(p1) + unescape('%35%34%61%61%32' + p2));//这是php的函数。Unescape()函数是解密函数,推测出密文是Excape加密出来的。Eval()函数功能是执行括号内的代码。

这个东西实在javascipt中发现的:

 

 

用工具揭秘:

 

解密后是:function checkSubmit()

{

var a=document.getElementById("password");//关键是这个函数document.getElemenById(),获取ID为password的值

if("undefined"!=typeof a) // typeof在两种情况下会返回"undefined":一个变量没有被声明的时候,和一个变量的值是undefined的时候

  {

  if("67d709b2baa648cf6e87a7114f1"==a.value)

      return!0;

    alert("Error");

    a.focus();return!1

  }

}

document.getElementById("levelQuest").onsubmit=checkSubmit;

document.getElementById(" ") 得到的是一个对象,用 alert 显示得到的是

“ object ”,而不是具体的值,它有 value 和 length 等属性,加上 .value 得到的才

是具体的值!

参考资料:

1. document . getElementById 的用法和 DHTML.CHM 的下载地址

http://blog.sina.com.cn/u/4933092a010003k7

今天在网络上查找 document . getElementById 的用法,如下:

 A :     语法:

    oElement = document . getElementById ( sID )

     参数:

    sID  : 必选项。字符串 (String) 。

     返回值:

    oElement  : 对象 (Element) 。

     说明:

     根据指定的 id 属性值得到对象。返回 id 属性值等于 sID 的第一个对象的引用。假如对应的为一组对象      ,则返回该组对象中的第一个。

     如果无符合条件的对象,则返回 null 。

B :有一个例子可以很好的说明:

  ****************************************************************************

  *                                                                          *

  *  这个函数中最关键的地方是 document.getElementById ,他是什么呢?       *

  *                                                                          *

  *  关于 document.getElementById ,是这样的:                             *

  *                                                                    *

  *  如: document.getElementById('hdrPageHeader_lblTitle')              *

  *                                                                    *

  *  表示的意思是:获取 ID 为 :hdrPageHeader_lblTitle 的对象                 *

  *                                                                          *

  * <a id="hdrPageHeader_lblTitle0">aa</a>                             *

  * <a id="hdrPageHeader_lblTitle">bb</a>                              *

  * <a id="hdrPageHeader_lblTitle1">cc</a>                             *

  * <script language="javascript">                                     *

  * <!--                                                               *

  * var idtext=document.getElementById('hdrPageHeader_lblTitle')       *

  * alert(idtext.innerText)                                            *

  * //-->                                                              *

  * </script>                                                          *

  *                                                                          *

  ****************************************************************************

C :另外还得到一个细节:

http://bbs.cnitn.cn/dispbbs.asp?boardid=20&id=12957 ,内容是:

① document.getElementById 有时会抓 name 放过了 id ,据说是 IE 的一个 BUG ;

页面中有

    <input type="hidden" id="hello8" name="category_id" value="2" />

         <select id="category_id"   οnchange="al();">

一个是 name="category_id" 一个是 id="category_id"

用 document.getElementById 取第二个,可是,取到的却是第一个 name=category_id

在 IE 中 getElementById 竟然不是先抓 id 而是先找 name 相同的物件 ...

兩個 form, 每個 form 有兩個 textbox, 兩個 form 中的 textbox 是相同的 name, 但 id 都不同 ...

這樣在 Firefox 是沒問題的 ... 但在 IE 卻只抓得到第一個出現的 name 資料

D :在得到答案后,同时也得到了两本好的手册工具,

1.DHTML.CHM ----- 很全面的 DHTML 的参考手

2.javascript 的参考手册

饮水思源,我还是不要把别人的成果直接放到这里,下面这个地址提供了下载连接:

http://www.xy72.com/bbs/dispbbs.asp?boardID=11&ID=71&page=1

2. document 对象

 

http://www.phpx.com/man/dhtmlcn/objects/obj_document.html

属性: title ; bgColor ; url; ( 使用: document.title)

方法:

focus

使得元素得到焦点并执行由 onfocus 事件指定的代码。

getElementById

获取对 ID 标签属性为指定值的第一个对象的引用。

getElementsByName

根据 NAME 标签属性的值获取对象的集合。

getElementsByTagName

获取基于指定元素名称的对象集合。

① document.getElementById 有时会抓name放过了id ,据说是IE的一个BUG;

http://community.youkuaiyun.com/Expert/topic/4223/4223888.xml?temp=.1947443

页面中有

<input type="hidden" id="hello8" name="category_id" value="2" /

<select id="category_id" οnchange="al();">

一个是name="category_id" 一个是id="category_id

用document.getElementById取第二个,可是,取到的却是第一个name=category_id

在E中getElementById竟然不是先抓id而是先找name相同的物件...

兩個form,每個form有兩個textbox,兩個form中的textbox是相同的name,但id都不同...

這樣在Firefox是沒問題的...但在IE卻只抓得到第一個出現的name資料

下面这段代码可以验证这个结果

<HTML>

<HEAD>

<TITLE> getElementById </TITLE>

</HEAD>

<SCRIPT LANGUAGE="JavaScript">

<!--

function chkacc(){

alert(document.getElementById("tbxuid1").value);

alert(document.getElementById("tbxpwd1").value);

alert(document.getElementById("tbxuid").value);

alert(document.getElementById("tbxpwd").value);

}

//-->

</SCRIPT>

<BODY>

<FORM METHOD=POST ACTION="" name="frm1">

<INPUT TYPE="text" NAME="tbxuid" id="tbxuid1">

<INPUT TYPE="text" NAME="tbxpwd" id="tbxpwd1">

</FORM>

<FORM METHOD=POST ACTION="" name="frm2">

<INPUT TYPE="text" NAME="tbxuid" id="tbxuid">

<INPUT TYPE="text" NAME="tbxpwd" id="tbxpwd">

<INPUT TYPE="button" value="檢查" name="btnchk" οnclick="chkacc();">

</FORM>

</BODY>

</HTML

② javascript中的getElementbyId使用

<!-- -->

网页中的元素必须有id属性,才能通过这个方法得到,比如

<input type=text name="content" id="content">

③获取html标记主要有两种方法,一种是通过ID值,一种是通过name属性

name属性主要用于form表单内的input标记

---------------------

作者:flashdream8

来源:优快云

原文:https://blog.youkuaiyun.com/flashdream8/article/details/83324930

版权声明:本文为博主原创文章,转载请附上博文链接!

使用typeof方法判断undefined类型

 更新时间:2014年09月09日 17:05:09   投稿:whsnow   我要评论

使用typeof方法,typeof 返回的是字符串,其中就有一个是undefined,下面是示例代码,大家可以看看

有关js判断undefined类型,使用typeof方法,typeof 返回的是字符串,其中就有一个是undefined。

js判断undefined类型

if (reValue== undefined)
{
alert("undefined");
}

发现判断不出来,最后查了下资料要用typeof方法:

if (typeof(reValue) == "undefined")
{ 
alert("undefined");
}

typeof 返回字符串,有六种可能:"number"、"string"、"boolean"、"object"、"function"、"undefined"。
在使用时一定要注意。

3、常规应用:

1).检查一个变量是否存在,是否有值.

typeof在两种情况下会返回"undefined":一个变量没有被声明的时候,和一个变量的值是undefined的时候.例如:

> typeof undeclaredVariable === "undefined" true

> var declaredVariable;

> typeof declaredVariable 'undefined'

> typeof undefined 'undefined'
还有其他办法检测某个值是否是undefined:

> var value = undefined;

> value === undefined true
但这种方法如果使用在一个未声明的变量上的时候,就会抛出异常,因为只有typeof才可以正常检测未声明的变量的同时还不报错:

> undeclaredVariable === undefined ReferenceError: undeclaredVariable is not defined
注意:未初始化的变量,没有被传入参数的形参,不存在的属性,都不会出现上面的问题,因为它们总是可访问的,值总是undefined:

> var declaredVariable;

> declaredVariable === undefined true

> (function (x) { return x === undefined }()) true

> ({}).foo === undefined true
注:因此,如果想检测一个可能没有被声明的全局变量是否存在,也可以使用 if(window.maybeUndeclaredVariable){}

问题: typeof在完成这样的任务时显得很繁杂.

解决办法: 这样的操作不是很常见,所以有人觉的没必要再找更好的解决办法了.不过也许有人会提出一个专门的操作符:

> defined undeclaredVariable false

> var declaredVariable;

> defined declaredVariable false
或者,也许有人还需要一个检测变量是否被声明的操作符:

> declared undeclaredVariable false

> var declaredVariable;

> declared declaredVariable true
译者注:在perl里,上面的defined操作符相当于defined(),上面的declared操作符相当于exists(),

2.判断一个值不等于undefined也不等于null

问题:如果你想检测一个值是否被定义过(值不是undefined也不是null),那么你就遇到了typeof最有名的一个怪异表现(被认为是一个bug):typeof null返回了"object":

> typeof null 'object'
注:这只能说是最初的JavaScript实现的bug,而现在标准就是这样规范的.V8曾经修正并实现过typeof null === "null",但最终证明不可行.http://wiki.ecmascript.org/doku.php?id=harmony:typeof_null

解决办法: 不要使用typeof来做这项任务,用下面这样的方法来代替:但是变量x必须事先声明,否则会报错。

function isDefined(x) { return x !== null && x !== undefined; }

另一个可能性是引入一个“默认值运算符”,在myValue未定义的情况下,下面的表达式会返回defaultValue:

myValue || defaultValue
上面的表达式等价于:

(myValue !== undefined && myValue !== null) ? myValue : defaultValue

其实是下面这条语句的简化:

myValue = myValue || defaultValue

3.区分对象值和原始值

下面的函数用来检测x是否是一个对象值:

function isObject(x) { return (typeof x === "function" || (typeof x === "object" && x !== null)); }
问题: 上面的检测比较复杂,是因为typeof把函数和对象看成是不同的类型,而且typeof null返回"object".

解决办法: 下面的方法也经常用于检测对象值:

function isObject2(x) { return x === Object(x); }
警告:你也许认为这里可以使用instanceof Object来检测,但是instanceof是通过使用使用一个对象的原型来判断实例关系的,那么没有原型的对象怎么办呢:

> var obj = Object.create(null);

> Object.getPrototypeOf(obj) null
obj确实是一个对象,但它不是任何值的实例:

> typeof obj 'object'

> obj instanceof Object false
在实际中,你可能很少遇到这样的对象,但它的确存在,而且有它的用途.

译者注:Object.prototype就是一个默认存在的,没有原型的对象

>Object.getPrototypeOf(Object.prototype) null

>typeof Object.prototype 'object'

>Object.prototype instanceof Object false

4.原始值的类型是什么?

typeof是最好的用来查看某个原始值的类型的方式.

> typeof "abc" 'string'

> typeof undefined 'undefined'
问题: 你必须知道typeof null的怪异表现.

> typeof null // 要小心! 'object'

解决办法: 下面的函数可以修复这个问题(只针对这个用例).

function getPrimitiveTypeName(x) {

var typeName = typeof x;

switch(typeName) {

case "undefined": case "boolean": case "number": case "string": return typeName;

case "object": if (x === null) { return "null"; }

default: // 前面的判断都没通过 throw new TypeError("参数不是一个原始值: "+x);

} }

更好的解决办法: 实现一个函数getTypeName(),除了可以返回原始值的的类型,还可以返回对象值的内部[[Class]]属性.这里讲了如何实现这个函数(译者注:jQuery中的$.type就是这样的实现)

5.某个值是否是函数

typeof可以用来检测一个值是否是函数.

> typeof function () {} 'function'

> typeof Object.prototype.toString 'function'

原则上说,instanceof Function也可以进行这种需求的检测.乍一看,貌似写法还更加优雅.但是,浏览器有一个怪癖:每一个框架和窗口都有它自己的全局变量.因此,如果你将某个框架中的对象传到另一个框架中,instanceof就不能正常工作了,因为这两个框架有着不同的构造函数.这就是为什么ECMAScript5中会有Array.isArray()方法的原因.如果有一个能够跨框架的,用于检查一个对象是否是给定的构造函数的实例的方法的话,那会很好.上述的getTypeName()是一个可用的变通方法,但也许还有一个更根本的解决方案.

6.综述

下面提到的,应该是目前JavaScript中最迫切需要的,可以代替一些typeof目前职责的功能特性:

isDefined() (比如Object.isDefined()): 可以作为一个函数或者一个运算符
isObject()
getTypeName()
能够跨框架的,检测一个对象是否是指定的构造函数的实例的机制
检查某个变量是否已经被声明这样的需求,可能没那么必要有自己的运算符.

以上这篇js中判断变量类型函数typeof的用法总结就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

修改id为password,让后提交unescape(p1) + unescape('%35%34%61%61%32' + p2)的字符串值。%35%34%61%61%32也要解密一下。

 

转载于:https://www.cnblogs.com/naihaizhuoxia/p/11190909.html

### Bugku WEB项目源码及其通过Githack在线查看的方法 #### 使用Githack访问Bugku WEB项目的源码 Githack 是一种无需克隆即可浏览 GitHub 上托管的仓库内容的服务。它允许开发者直接通过浏览器加载并查看基于分支的内容,而不需要下载整个仓库到本地环境。如果 BugkuWEB 项目已经公开发布在 GitHub 平台上,则可以通过 Githack 提供的 URL 构造方法来实现在线预览。 假设 BugkuWEB 项目位于 `https://github.com/username/repo` 中,那么可以按照以下方式构建 Githack 访问链接: ```plaintext https://githack.com/username/repo/branch/file.html ``` 其中: - **username**: 表示拥有该仓库的用户名。 - **repo**: 表示具体的仓库名称。 - **branch**: 可选参数,默认为主分支(通常是 main 或 master),也可以指定其他分支名。 - **file.html**: 要打开的具体 HTML 文件路径[^1]。 例如,如果你知道 Bugku 的某个页面入口文件叫作 index.html,并且存放在名为 bugku-web 的公共仓库里,就可以尝试输入如下地址进入可视化界面: ```plaintext https://githack.com/Bugku/bugku-web/main/index.html ``` 需要注意的是,只有当目标资源确实存在于上述位置时此操作才会成功;否则会返回错误提示或者空白页。 #### 关于`.gitignore`配置对于查找源代码的影响 有时即使找到了正确的仓库URL也可能看不到完整的实际开发资料列表,这是因为部分敏感数据可能被设置进了 `.gitignore` 文件从而排除在外不上传至远程服务器上共享给公众查阅。比如 Android 应用程序中的私密 API 密钥或者其他机密信息通常都会被列入忽略清单以防泄露风险 [^2] 。因此,在探索开源项目的时候遇到某些目录缺失的情况并不罕见也不必惊讶。 另外值得注意的一点是并非所有的软件工程都采用官方推荐的标准命名惯例去管理它们各自的版本控制系统元数据区域(即 .git/) ,所以有时候即便我们能够定位到疑似的目标站点却仍然无法获取确切的技术细节文档等内容也是有可能发生的。 #### 备选方案:利用第三方平台搜索Android源码实例 除了借助像GitHub这样的主流社交编码服务平台之外还有专门针对移动操作系统领域设立起来的一些大型综合型技术档案馆可供检索查询安卓应用程序底层架构设计原理方面的知识素材。例如 http://grepcode.com 就曾经是一个非常受欢迎的选择之一用于研究Java语言扩展包以及Google官方发布的原生API接口定义说明等等材料 [^3] 。不过遗憾的是该项目现已停止维护更新服务了。但对于历史遗留下来的经典案例分析学习而言仍旧具有一定的参考价值意义所在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值