Prerequisites
Pre 1 - View Source
保留题目,不解释
Pre 2 - Url Modification
考察:错误信息中的提示,可能存在的目录或问题
Pre 3 - Robots
考察:对robots.txt的了解
JavaScript
JavaScript 1 - Form modification
考察:web基础知识;工具使用
1、自己编写页面,编辑源码
<form action="http://www.enigmagroup.org/missions/basics/js/1/" method="post">
<option value="Jane">Jane</option>
2、通过JavaScript修改已有的下拉列表选项
javascript:void(document.forms[0].name.options[0].value='Jane');void(document.forms[0].name.options[0].text='Jane')
3、通过JavaScript增加所需的下拉列表选项
javascript:void(document.forms[0].name.options[0] = new Option("Jane", "Jane", true, true));
4、使用web开发工具修改数据
Go to Forms -> Convert Select Elements To Text Fields, Type in Jane, click submit.
5、篡改用户提交给服务器的表单
FF中使用Live Http Headers, Tamperdata, or Firebug
JavaScript 2 - Login Bypass
考察:JavaScript变量定义、赋值;prompt()
JavaScript 3 - Login Bypass
考察:HTML与JavaScript对于空格、空行均会自动忽略
<!-- HTML注释 -->
JavaScript 4 - Login Bypass
考察:"I" 与 "l" 的困惑
JavaScript 5 - Login Bypass
考察:unescape()
JavaScript 6 - Login Bypass
考察:外部js脚本
JavaScript 7 - Login Bypass
考察:js生成密码
JavaScript 8 - Login Bypass
考察:JScript.Encode
JavaScript 9 - Substrings
考察:js生成密码
获取密码脚本:
var p1 = "bewareoftheenigmagroupunderground";
var p2 = "betterofftohacktherealownersboxes";
var p3 = "wassaidbyadudepseudodpsychomarine";
var pass = "";
var base = "";
for ( a = 0; a < p1.length; ++a )
{
var chk1 = p1.substring ( a, a + 1 );
var chk2 = p2.substring ( a, a + 1 );
var chk3 = p3.substring ( a, a + 1 );
if ( chk1 == chk3 ) { pass += chk1; }
else if ( chk2 == chk1 ) { pass += chk2; }
else if ( chk3 == chk2 ) { pass += chk3; }
}
alert(pass);
JavaScript 10 - charCodeAt()
考察:charCodeAt,算法(待完成,目前答案为手工算出)
JavaScript 11 - charAt();indexOf()
考察:逆算法获得密码
<html>
<head>
<script type="text/javascript">
var resultArray = new Array();
var charlist = "abcdefghijklmnopqrstuvwxyz" ;
function getValue( sum, pwd )
{
var remainder = sum % 17;
var rest;
if( remainder>0 && remainder<10 ) //存在分支情况
{
//1~9
rest = sum - remainder;
if( 0 == rest ) //结束
{
tmp = charlist.charAt(remainder-1) + pwd;
resultArray.unshift(tmp);
return;
}
tmp = charlist.charAt(remainder-1) + pwd;
getValue( rest/17, tmp );//递归
//18~26 = 1~9 + 17
if( rest>17 ) //存在分支,递归
{
tmp = charlist.charAt(remainder+17-1) + pwd;
getValue( (rest-17)/17, tmp );
}
else if( 17 == rest ) //存在分支,且刚好结束
{
tmp = charlist.charAt(remainder+17-1) + pwd;
resultArray.unshift(tmp);
return;
}
else //不存在分支
{
}
}
else //不存在分支情况
{
rest = sum - remainder;
if( 0 == rest ) //结束
{
tmp = charlist.charAt(remainder-1) + pwd;
resultArray.unshift(tmp);
return;
}
tmp = charlist.charAt(remainder-1) + pwd;
getValue( rest/17, tmp );//递归
}
}
</script>
</head>
<body>
<script>
getValue( 248410397744610, " " );
//alert(resultArray.length);
var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.CreateTextFile("c:\\result.txt", true);
f.write(resultArray);
f.close();
</script>
</body>
</html>
考察:算法,二分法
var target = 318338237039211050000;
function half(begin,end)
{
if (begin <= end)
{
halfValue = Math.floor( (begin+end)/2 );
halfValueV = value(halfValue);
if(halfValueV == target)
{
alert(halfValue);
return;
}
else if(halfValueV < target)
{
return half( (halfValue+1), end );
}
else
{
return half( begin, halfValue );
}
}
else
return;
}
function value(suspicious)
{
pass = 1337;
for(i = 1; i <= suspicious; i++)
{
pass += suspicious * i * suspicious;
}
return pass;
}
half(1,600000);
Miscellaneous
Misc. 1 - Header Injections
考察:http头了解,工具使用(Live HTTP Headers/ Tamper Data/ Web Developer/ Firebug)
Misc. 2 - Server Side Includes
考察:服务器端包含
Misc. 3 - Regexp Skills
考察:正则表达式(是否能自动生成实例?)
Misc. 4 - Buffer Overflows
考察:溢出,hash
Misc. 5 - Buffer Overflows (cont.)
考察:IIS文件名长度的限制
Misc. 6 - Shopping Cart Exploitation
考察:输入合法性验证
Misc. 7 - MySQL and SQL Column Truncation Vulnerabilities
考察:Stefan Esser在08年发表了一篇博文,指出了MySQL在处理过长的用户输入时可能存在的问题。
http://www.suspekt.org/2008/08/18/mysql-and-sql-column-truncation-vulnerabilities/?1343267408
Stefan Esser总结了此漏洞能够成功利用的条件:
1、可以进行新用户的注册;
2、管理员的用户名已知,比如admin;
3、MySQL为默认配置(默认配置下,当插入数据的长度超过限制时,只是警告而不会报错);
4、新注册用户名没有长度限制(或过滤不严,可以绕过);
5、数据库中用户名有长度限制;
用户根据管理员用户名构造注册新用户,比如"admin x",由于没有长度限制或检查可绕过,造成不符合命名规则的用户名也能成功注册,而过长的用户名又因数据库检查而造成截断,截断为"admin "。用户使用被截断的新用户名和密码可以通过登录验证,但MySQL在默认情况下并不会对字符串进行二进制级别的比较,在比较时会忽略掉空格等字符,在查询数据库时就会查到已有的用户admin,造成非法登录。
本文总结了enigma的Basic Missions,涉及JavaScript基础与应用,包括表单修改、登录绕过、字符编码理解以及HTTP头注入、SQL截断等Web安全知识点。通过实践学习了如何利用JavaScript篡改表单、识别"I"与"l"的混淆、应用正则表达式和理解缓冲区溢出等。
359

被折叠的 条评论
为什么被折叠?



