enigma学习总结-Basic Missions篇

本文总结了enigma的Basic Missions,涉及JavaScript基础与应用,包括表单修改、登录绕过、字符编码理解以及HTTP头注入、SQL截断等Web安全知识点。通过实践学习了如何利用JavaScript篡改表单、识别"I"与"l"的混淆、应用正则表达式和理解缓冲区溢出等。

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>


JavaScript 12 - Date Manipulation

考察:算法,二分法

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,造成非法登录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值