writeup总结 *ctf 和 ichunqiu的web simpleweb和VLD

 

* ctf

simpleweb

先贴上给的源码

var net = require('net');

flag='fake_flag';

var server = net.createServer(function(socket) {
   socket.on('data', (data) => { 
       //m = data.toString().replace(/[\n\r]*$/, '');
       ok = true;
       arr = data.toString().split(' ');
       arr = arr.map(Number);
       if (arr.length != 5) 
           ok = false;
       arr1 = arr.slice(0);
       arr1.sort();
       for (var i=0; i<4; i++)
           if (arr1[i+1] == arr1[i] || arr[i] < 0 || arr1[i+1] > 127)
               ok = false;
       arr2 = []
       for (var i=0; i<4; i++)
           arr2.push(arr1[i] + arr1[i+1]);
       val = 0;
       for (var i=0; i<4; i++)
           val = val * 0x100 + arr2[i];
       if (val != 0x23332333)
           ok = false;
       if (ok)
           socket.write(flag+'\n');
       else
           socket.write('nope\n');
   });
   //socket.write('Echo server\r\n');
   //socket.pipe(socket);
});

HOST = '0.0.0.0'
PORT = 23333

server.listen(PORT, HOST);

很简单他的意思就是让我们做一个re把data给逆出来
首先先把arr2给逆出来用取模就可以了
因为我们是倒着逆出来的所以第一个是最后一个=。=

 


接下来有了arr2就可以逆arr1了
知道他们之和就可以依次爆破=。=其实我觉得我这个太麻烦了。。。
发现根本不是顺序输出很奇怪
上网查了一下JS的sort函数才知道

居然是这样排序的!!!!!
然后就找到了那个数组=。=

连上nc 试了第一个发现就行=。=(骗人的吧那个 sort())

flag

flag

Smart? Contract

wocao 又是一道源码题目。。
一道区块链的题目……不做了我太菜了

ichunqiu

web

因为最近一直在听学长说opcode,就是php字节码
就在i春秋中相中了这道题

首先先点进题目很自然的F12

 

看到了这个进入这个地方
应该是要拿这个压缩包
上网查了一下还是不知道该怎么把字节码转换成源码

 

大概就是get flag1&flag2&flag3的三个值和下面的值相等
JMPZ =。=我也有成为bin选手的梦。

那就构造flag1=fvhjjihfcv&flag2=gfuyiyhioyf&flag3=yugoiiyhi

访问之后就有源码了,接下来是审计阶段
可以看到数据的进入和出去都被过滤了

 

 

上php.net了解一下

 

可以知道都被过滤了,然后null字符是就是%00会被转义成\0

有一个莫名其妙的地方

 

就可以输入number为0来将\0的0去掉就只剩下\了,两个\就会将后面那个\转义了而后面的’就逃逸出来
就可以实现sql注入

明显的报错注入=。=,别的我也没试过

 

惊了,报错了=。=我想了想是因为0被去掉了,所以0x7e只剩下了x7e。。。。
然后我将前后的0x7e,都去掉了。发现就一直不行。原来是因为extractvalue必须要第一个参数=。=
下次了解一下。。。就可以构造sql语句了

 

 

查看数据库

 

查看表=。=

然后发现不能查看列了。。。因为0x无法输入进去,惊了
那就

 

 

再用一下substr就可以全部读取了

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注