Updates from 五月, 2016 Toggle Comment Threads | 键盘快捷键

  • jinzihao pm1:21 on 2016年5月30日 链接地址 | 回复  

    今天用Python写人工智能导论的作业时又被坑了…
    这样一段代码:

    test_set_filename = [set()] * 5
    

    真的产生了一个list,里面有5个空set吗?
    并不。
    这个list确实有5个元素,但指向的都是同一个set
    一种正确的做法:

    test_set_filename = [None] * 5
    for i in range(0, 5):
        test_set_filename[i] = set()
    

    这样才能获得一个list,其5个元素分别是5个不同的set。

     
  • jinzihao pm11:32 on 2016年5月19日 链接地址 | 回复  

    今天写C++代码时遇到需要频繁判断奇偶性的问题。最合乎直觉的做法是用%运算符,但再考虑一下,似乎按位与也能判断奇偶性。用%会慢很多吗?细思恐极…以前类似情况都是用的%运算符…于是实验测量了一下:

    int main() {
      int x = 314159265;
      int y = 271828182;
      int z;
      int i;
      // 版本1,使用位运算:
      for (i = 0; i < 1000000000; ++i) {
        z = x & 1;
        z = y & 1;
      }
     // 版本2,使用%运算符:
      for (i = 0; i < 1000000000; ++i) {
        z = x % 2;
        z = y % 2;
      }
      return 0;
    }
    

    使用位运算的版本1略快于使用%运算符的版本2,但平均只有1%~2%的性能提升,似乎不必过度紧张…
    用IDA反编译了一下,两个版本得到的汇编代码并不相同,至于汇编层面上的性能分析…先学习一下汇编再说…
    (未完待续)

     
  • jinzihao am12:09 on 2016年5月18日 链接地址 | 回复  

    [writeup] web {1, 2, 3, 4} – Bluelotus-Exercise  

    web1:

    http://120.76.114.164:21080/web1/
    

    打开网址,在网页源代码中看到下列注释:

    
    

    输入的$user和$pass被单引号包围,可通过在$user中输入

    flag\

    利用MySQL的\转义机制,将后一个单引号转义为字符串的一部分;在$pass中输入

     OR 1=1%23

    (%23为#的URL转义)利用MySQL的#注释机制注释掉后面的部分,包括紧随其后的单引号
    此时SQL语句为:

    SELECT * FROM users WHERE name='flag\' AND pass=' OR 1=1#';
    

    其中只剩两个单引号,恰好配对为一个字符串,后面OR 1=1的存在即可取出表中所有的记录。
    输入?user=flag\&pass= OR 1=1%23后得到flag:CTF{Welc0me_T00_t3e_Web_W0r1d}


    web2:

    http://120.76.114.164:21080/web2/
    

    在网页注释中看到:

    
    

    尽管$str经过了addslashes处理,但addslashes只会在单引号、双引号、反斜线、空字符前添加一个反斜线,故可以在$str中输入一个

    ${echoflag()}

    PHP中双引号内的${}内的代码可被解释运行,输入?str=${echoflag()}得到flag为CTF{D0llAr_I3_Ama2inG}


    web3:

    
    

    (此题提示信息中$secretId = 12315应改为$secretId = 1)
    本题中id参数在PHP代码中被存为float类型,如果这个浮点数类型的id与secretId相等则不会进行else分支中的数据库查询。但浮点数判等就会有精度问题,利用PHP和MySQL浮点数的精度差别,使$id和$secretId在PHP中不等,而在MySQL中相等。于是构造一个id=1.00000000000001,PHP认为1.00000000000001 != 1,从而进入else分支。而MySQL认为1.00000000000001 = 1,从而取出了id为1的记录:id: 1, message: CTF{W3ll_D0wn}


    web4:

    
    

    if($_CONFIG[‘extraSecure’])内的代码对$kw进行了过滤,使得注入代码难以进入最终的SQL语句中。但前面两重foreach循环,提供了一个修改$_CONFIG的机会。对于所有$_GET[‘key’] = ‘value’、$_POST[‘key’] = ‘value’、$_REQUEST[‘key’] = ‘value’、$_COOKIE[‘key’] = ‘value’,PHP都会销毁key变量。于是以GET参数的形式传入一个?_CONFIG=xxx,便可以销毁$_CONFIG,从而使$_CONFIG[‘extraSecure’]为空,绕过了preg_replace的过滤。接下来再在kw中进行联合查询:

    ?kw=' and 0 union select name,pass from user where id=1%23&_CONFIG=0
    

    先用’结束LIKE后面的字符串,用and 0使第一条查询查不出任何记录,否则第一条记录就不一定是user表中admin的密码了。接下来union select便可以取出user表中id为1的记录。查询得到结果:id: admin, message: CTF{G00d_J0b}

     
  • jinzihao pm11:31 on 2016年5月17日 链接地址 | 回复  

    [writeup] misc {1, 2, 3, 4, 5} – Bluelotus-Exercise  

    misc1:

    本题不遵守flag格式规定,[a-z]+
    ????????墬????䘇
    

    查字典可知,这五个字读作(dà)(xiàng)(de)(yīng)(wén),于是flag输入大象的英文elephant即可。


    misc2:

    本题不遵守flag格式规定,[A-Z]+
    4eszxc 8uhb =-0okm,.
    

    在键盘上找到这些字母和数字对应的位置,恰好构成了大写字母LIC,flag即为LIC。


    misc3:

    GYZTONBWGY3WENBVGZSTMMZTGA3DIMZRGZSTMNZVMYZTCNZTGVTDMNRTGM3GKMRZG5SA====
    

    此题为一段base32编码的数据,在http://emn178.github.io/online-tools/base32_decode.html解码得到

    6374667b456e633064316e675f31735f66336e297d

    再从左到右将每两位16进制数转换为一个ASCII字符(在线转换工具:http://string-functions.com/hex-string.aspx),得到flag:ctf{Enc0d1ng_1s_f3n)}


    misc4:

    flag.zip
    本题的zip文件看似需要密码才能打开,实际为伪加密,使用unpack.txt(请将扩展名改为.py)解压flag.zip:

    python unpack.py flag.zip

    得到flag.docx,打开显示ctf{Hu33y_Up}即为flag。


    misc5:

    flag.docx
    打开flag.docx文件只看到蓝莲花图片,将扩展名改为.zip,解压,在word\media\下面看到两个png图片,打开image2.png,看到flag:ctf{My_G0g}

     
c
写新的
j
下一篇文章/下一个回复
k
前一篇文章/以前的回复
r
回复
e
编辑
o
显示/隐藏 回复
t
回到顶部
l
go to login
h
show/hide help
shift + esc
取消