七月第一阶段,web题之batman(代码审计题)

32 篇文章 0 订阅

点开网页下载了一个文件,右键用记事本打开
发现是有<script>标签,猜测是一个HTML文件,于是放在本地服务器中运行一下(放入自己phpstudy的www目录下),得到这个界面
这里写图片描述
打开源码

<script>

_='function $(){e=getEleById("c").value;

length==16^be0f23233ace98aa$c7be9)

{tfls_aie}na_h0lnrg

{e_0iit\'_ns=[t,n,r,i];

for(o=0;o<13;++o)

{   [0]);

.splice(0,1)

}

}

}

\'<input id="c">

< onclick=$()>Ok</>\');

delete _var ","docu.)match(/"];

/)!=null=[" write(s[o%4]button

if(e.ment';

for(Y in $='   ')

with(_.split($[Y]))_=join(pop());

eval(_)

</script>

最后这里eval()中,下划线 _明显是一个变量。
这时候打开控制台的调试器,控制台的开发者模式调试代码,设置断点,监控变量“_”的值发现其值是一段函数
这里写图片描述
将这段函数复制下来
另外一种方法:
将eval替换成alert函数弹窗显示其值
这里写图片描述


function 

$(){var e=document.getElementById("c").value;

if(e.length==16)if(e.match(/^be0f23/)!=null)

 if(e.match(/233ac/)!=null)

  if(e.match(/e98aa$/)!=null)

   if(e.match(/c7be9/)!=null)

    {var t=["fl","s_a","i","e}"];

    var n=["a","_h0l","n"];

    var r=["g{","e","_0"];

    var i=["it'","_","n"];

    var s=[t,n,r,i];

    for(var o=0;o<13;++o)

    {document.write(s[o%4][0]);

    s[o%4].splice(0,1)

    }

    }

    }

    document.write('<input id="c"><button onclick=$()>Ok</button>');

delete _

这时候就需要考察我们代码审计的能力了,这里是一个正则表达式,第一个if中开头的^,我们查找一下他的用法:
这里写图片描述
他在这里是匹配它后面为开头的字符串,所以在这段代码中就是寻找开头为be0f23的字符串,冰球只有字符个数为16才可继续进行下去

if(e.match(/^be0f23/)!=null)

 if(e.match(/233ac/)!=null)

  if(e.match(/e98aa$/)!=null)

   if(e.match(/c7be9/)!=null)

第二个if开头中23明显是接着第一段’be0f23‘中末尾的23,而第四个if中的c则是姐第二段末尾的c,因此,我们将这段连起来就是:‘be0f233ac7be98aa’这个字符串,再将这串输入最开始web100的输入框中,就会运行这个函数,输出flag
这里写图片描述
总结:本题主要考察代码审计的能力,以及开头要注意到下划线_是一个变量,需要探究它所代表的意义,之后最开始的界面就是一个执行源码的脚本,所以将字符串输入到登录框内即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值