谈谈思维·一
前言本次主要讲述两种思维,或者说思考的方式。
如何得到一个漏洞?如何得到一个漏洞,这是一个非常深邃的问题,目前的我没有实力讲得清楚,但是也想分享一下自己的感悟。
从本质上思考漏洞的本质是什么?是程序;程序的本质是什么,是变量和函数按照特定的逻辑运行。与其说我们找到了一个漏洞,不如说我们成功利用了变量、函数甚至是逻辑。
当我们把漏洞这个抽象的概念落实到客观的物体上面,我们就必须要按照客观、严谨、变化的思维去思考。下面我会以代码审计的视角去分享如何得到一个漏洞。
漏洞的产生漏洞即是程序的破绽,让程序运行破绽可以为漏洞的利用创造条件。
漏洞的基础是变量、函数和逻辑,所以程序的破绽往往是这三者共同构成的。比如SQL注入,本质上就是程序对输入流的检查不严谨导致输入流可以越过数据流直达控制流,这也恰恰是大多数注入型漏洞的成因,所以这类漏洞所在程序的破绽即是程序对输入流的检查不严谨。
程序是怎么存在这些破绽的,归根结底是开发者的懒惰和能力有限,然而这并不是黑客应该考虑的,黑客应该考虑的是怎么找到这些漏洞,并利用它们。
不要套公式!黑客在乎的是结果,而非某种固定的过程
讲了这么久,终于到正题了。
我 ...
一道include目录穿越
0x00 前言写完题目后马上就逻辑清晰,但是在写题时又总是身在局中不知何往,还得加强对逻辑推理的培养。
0x01 题目
题目来源:[HCTF 2018]WarmUp
题解推荐:HCTF 2018]WarmUp题解(较为详细的)_Web_w010w_InfoQ写作社区
题目入口如图:
查看源码:
注释提示source.php文件。
当时没有重视这里的提示,臆想入口页面就是source.php,后来用dirsearch扫后才发现source.php另是其他,可见写题目时切忌主观臆断,要保持清晰的思维。
那么现在有入口点了。
0x02 冲突source.php源码如下
简单解释两个函数:
mb_substr() :用于从多字节字符串中提取子字符串,示例如下:
123$string = "你好,世界!"; $sub = mb_substr($string, 1, 2, "UTF-8");echo $sub; // 输出 "好,
mb_strpos() 用于查找多字节字符串中子字符串首次出现的位置,示例如下:
123$s ...
CTF之信息收集
CTF信息搜集篇 与 敏感信息搜集方法_ctf 信息搜集-CSDN博客
windows设置自定义环境变量
Windows设置自定义环境变量GitHack.py的语法基于python2.7版本,不想在kali上操作,Windows本机上运行试试:
这是为什么呢?因为python3.12的语法与python.2,7的有冲突,而我设置的python环境变量是python3.12:
如果想运行python2.7,有三个方法:
方法一将python的环境变量改成python2.7,因为旧版本的局限性所以没必要这么做,我就不展示了。
方法二使用绝对路径调用python2.7,如图:
但是这样仍然麻烦,有没有一劳永逸的方法,可以使两个版本的python环境变量不冲突?有,方法三。
方法三
win+r打开cmd,输入 notepad并回车
此时会跳出一个记事本,写下:
12@echo offE:\python2.7\python.exe %*
保存为python2.7.bat,保存目录选择: C:\Windows
如果上一步选择了 C:\Windows,那么在环境变量中配置 C:\Windows即可(可能有些人已经配置了,直接用即可)。
最终结果:
本文以配置python2.7为例,但 ...
第二次代码审计
第二次代码审计本次审计的提示是文件上传。
工作结构ThinkPHP的框架结构已经熟悉,在/app下的目录结构如图:
常规服务的工作目录是哪个呢?不妨登录网页看看:
(fofa语句:"web/static/css/chunk-elementUI.f92cd1c5.css")
猜测是web目录下,对照源码证实猜想。
寻找入口ThinkPHP自带的文件上传方法,本次就使用request()->file():
我们不可能一个一个文件寻找,使用全局搜索:
只有Video.php的检测不严格,可以MIME绕过:
实现上传想要上传,需要满足几点:
知道启动方法的路径
是POST方法,并且可以上传文件
开启相关配置
对于第一点,我猜测路径是/web/video/uploadMedia,但是实际上是/web.php/video/uploadMedia,我发现这一点是在头像上传的请求包里:
原理是什么呢:
在ThinkPHP中,web.php 是应用的入口文件。访问路径中的 web.php 部分实际是对入口文件的引用,这是因为服务器配置了URL重写,将所有请求导向 ...
无字母webshell学习
0x00 前言本篇文章学习P神的两篇文章:
一些不包含数字和字母的webshell | 离别歌 (leavesongs.com)
无字母数字webshell之提高篇 | 离别歌 (leavesongs.com)
0x01 第一道题目
一些不包含数字和字母的webshell | 离别歌 (leavesongs.com)
问题 · 禁用问:如何编写一个不使用数字和字母的webshell,具现为如下代码:
1234<?phpif(!preg_match('/[a-z0-9]/is',$_GET['shell'])) { eval($_GET['shell']);}
思路 · 变换题目的if语句和eval语句不仅有先后关系,还具有功能上的差异:if语句不能把shell的内容当做PHP代码执行,但是eval可以。这点差异是本文方法的基础。
本节方法的核心在于字符变换。如果我们的payload本身不具有字母和数字,但是在eval里可以变换成危险的字母和数字,那么就可以webshell。
P神文章主要使用 ...
Nginx配置不当
0x00 前言这段时间做了好几道Nginx配置不当的题目,集中学习一下这方面的知识。
0x01 基础Nginx的主配置文件为nginx.conf,在任何情况下Nginx都会加载该文件。nginx.conf文件结构分明,由多个模块构成,如下:
用代码表示如下:
12345678910111213141516171819202122... #全局块 -->mainevents { #events块 ...}http #http块{ ... #http全局块 server #server块 { ... #server全局块 location [PATTERN] #location块 { ... } location [PATTERN] #另一个location块 { . ...
一道ctfhub题引起的思考
0x00 前言大胆假设,小心求证。本篇文章会细致分析每个环节的逻辑,但是CTF有时不太需要逻辑,反而需要些灵感。所以,没有思路时,不妨胡乱比划一下。赛后,再好好分析灵感的逻辑。
0x01 题目无源码,直接扫。存在flag.php,访问无果,0B的信息可见一斑,应该是障眼法。
看看题目:
存在GET参数num,是表单参数。
0x02 分析对题目的了解差不多了,我们只能从num入手。
我对两个方向思考:
参数注入,也就是不玩游戏。
利用游戏bug,也就是玩游戏。
参数注入注入的原理无非就是:输入流从数据流侵略到控制流。
想知道怎么注入,最好要知道流程代码。本题没有源码可以看,只能猜。但是这绝非SQL注入等,代码异常灵活,很难猜。所以先不考虑参数注入。
利用游戏bug看来只能玩游戏了。先思考游戏逻辑:如果我输入的数字对上了,是不是就可以得到flag?不妨试一试。
众所周知,CTFer不会好好玩游戏。em,我刚开始真想好好玩。
碰撞我认为这是好好玩游戏
我设想,服务器处理需要时间,如果我极快地发包,能不能竞争一下,脚本如下:
123456789import requestsfrom ti ...
ctf.show之孤注一掷
0x00 前言这道题值得一记,此后文章我会尽量精简。
0x01 文件先不看hint,进题目:
扫二维码后进入一个虚假的赌博网站,什么都干不了。
我尝试控制GET参数url,无果。现在根本没有入手点,本质上是缺乏信息,应该去寻找有用信息。
这时就应该扫目录,看看是否有留存文件。先在后台开御剑,自己试几个文件:
/robots.txt
/.DS_Store
/index.phps
/.git
/.svn
/.index.php.swp
御剑结果:
一切信息都指向www.zip,下载查看。
0x02 源码项目框架应该是ThinkPHP,我经验尚缺,但是前人有提:
审MVC框架直接看/index/controller下的方法
方法如下:
看到Upload.php,或许可以利用。文件源码如下:
如果file为空就会报错。如果存在,上传的时候会经过复杂的命名。
我们关注这里的文件是怎么命名的,但是相关的方法溯源不了。猜想是ThinkPHP的内置方法,环境覆盖即可:
1composer create-pr ...
反弹shell技法总结
0x00 前言这几天做ImaginaryCTF,正好用到了反弹shell,介于对该技法的掌握并不深刻,便写下这篇博客,冀以理解原理,拓展思维。
0x01 基础文件描述符
标准输入(stdin):文件描述符为0,通常关联着终端键盘输入
标准输出(stdout):文件描述符为1,通常关联着终端屏幕输出
标准错误(stderr):文件描述符为2,通常关联着终端屏幕输出
正向连接假设攻击者有A服务器,攻占了受害者的B服务器。那么攻击者让A服务器去连接B服务器,即A->B,称之为正向连接。远程桌面、web服务、ssh、telnet等等都是正向连接。
反向连接并不是所有情况都允许正向连接,那么什么情况下需要进行反向连接,也就是反弹sell呢?
目标机因防火墙受限,目标机器只能发送请求,不能接收请求。
目标机端口被占用。
目标机位于局域网,或IP会动态变化,攻击机无法直接连接。
对于病毒,木马,受害者什么时候能中招,对方的网络环境是什么样的,什么时候开关机,都是未知的。
……
举一个最简单的情况,如果你能在在前端执行系统命令,但是服务端却没有回显,那么我们是不是希望输出流不要通过服务 ...