自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 收藏
  • 关注

原创 部署个人网站

部署完成,点击网站-添加站点-输入域名(没有域名的输入自己的IP地址)-底部的PHP版本选择“纯静态”-提交。LNMP网站环境是:linux+nginx+mysql+php的组合搭建网站程序环境!在MyBlog文件夹下使用上面的命令安装hexo(有几个报错不用理会),利用hexo -v检验是否安装成功。打开本地Hexo博客的文件夹MyBlog文件夹下的_config.yml,找到deploy。然后访问服务器的宝塔页面绑定刚刚在官网注册的账号!也就是说它是可视化管理服务器,方便建站,部署网站等操作用的!

2025-10-24 14:16:25 842

原创 安洵杯2019

先找到name为flag的input元素,然后如果是以f开头的就访问后面那个url,于是我们就可以开始爆破,主要控制value^="f"与url进行一个映射!有会的师傅,教教我!这里有些无语我两次base64解码之后以为得到的是md5,但是md5是32位这里显然不是!一看一个反序列化的洞,原本是没有利用空间的,但是extract($_POST);如何虽然过滤了那么多,用\就好了!写这个exp主要是为了看看我们要逃逸的字符是哪些,为了方便赋值!tp6的一个反序列化洞,不是很会,直接拿payload来打吧!

2025-10-22 23:03:52 456

原创 网鼎杯 2020 朱雀组

那么其实后端就是在执行命令前,对我们的输入进行了两个转义(escapeshellarg,escapeshellcmd)的操作,导致弄巧成拙!发现两个特别的参数,第一个似乎是函数,第二个是参数!法1(写马):127.0.0.1' <?namp的命令注入(escapeshellarg与escapeshellcmd的弄巧成拙)法二(直接读):127.0.0.1' -iL /flag.php -oN 1.txt。尝试了好一会,主要是有些麻烦,所以想写个马!whoami ls -l两个命令结合发现没权限!

2025-10-20 23:56:16 464

原创 escapeshellarg与escapeshellcmd的弄巧成拙

这里如何host是:127.0.0.1' <?可以看到并没有被转义,这是因为单引号的“绝对”字面量性,就是\会被单纯地作为一个字符串!'127.0.0.1' \\'' 木马 -oN shell.phtml '\\'''在escapeshellarg的作用下:'127.0.0.1'\'''1,把我们传入的东西当成一个整体,就是直接在外面加''那么最终会变成:'127.0.0.1'\'''这个样子。那么命令就是:'127.0.0.1' \\ '' \'比如我们传入的是:127.0.0.1'

2025-10-20 23:53:39 259

原创 GYCTF2020

先是一个虚假的文件包含,利用不了!然后慢慢有序地审出个反序列化!那么就是找链子,之后就是想如何触发!值得深思,代审的流程。

2025-10-19 20:53:47 1051

原创 网鼎杯 2018

做题要有一些原则!不要先入为主尽量!

2025-10-18 17:09:55 1045 2

原创 phpcve篇

XDEBUG_SESSION_START=phpstorm,目标服务器的XDebug将会连接访问者的IP(或X-Forwarded-For头指定的地址)并通过dbgp协议与其通信,我们通过dbgp中提供的eval方法即可在目标服务器上执行任意PHP代码。它运行在TCP/IP协议之上,使用的端口是143,在php中调用的是imap_open函数来实现功能。主要是那几个版本以及邮箱的连接,利用原本用来ssh连接的邮箱参数进行x+-oProxyCommand注入,然后绕过用base64和%09绕过waf即可!

2025-10-09 22:38:58 506

原创 从information被ban到无列名注入

正常来说我们的查询都是基于information_schema的数据库的三个表(schemata,tables,columns),那么好,作为防御方来说是不是把information直接给ban了是不是就特别nice!那么没了information我们又该如何sql注入呢?

2025-10-08 23:58:26 690

原创 从ctf引发对with rollup语句的思考

今日,追先人之迹,解一题焉!抽取关键部分的源码,进行分析!");?可以看到做了一些waf,select被过滤了基于我的经验此时是难以进行注入的!有关sql部分源码die("连接失败,错误:" . $this->mysqli->connect_error);} //连接数据库并处理连接失败的情况//prepare($sql) 准备一个 SQL 查询//绑定查询参数//执行查询//绑定结果集// 获取查询结果//关闭查询结果。

2025-10-05 17:27:58 905

原创 php-cve篇(CVE-2019-11043&CVE-2012-1823)

然后利用工具进行远程代码执行的利用go run . "http://351a2d6a-33c8-4a71-b150-2cd1c82b8eac.challenge.ctf.show/index.php"然后还有就是空格的问题,得用+而不是%20,这不知道为啥,好像说是querystring多用+吧!CVE-2019-11043(使用某些特定配置的 Nginx + PHP-FPM 的服务器存在漏洞,可允许攻击者远程执行代码。那么好查看源码使用-s(只要没有=就会把querystring当作cgi参数)

2025-10-04 23:51:38 270

原创 网鼎杯 2020 青龙组

我们知道在private和protected的属性被序列化的时候会出现不可见字符,但是在php7.1+的时候就不敏感了,所以我们可以直接在写exp的时候直接改成public即可!那么如果它php的版本不是php7.1+呢?那么就利用16进制进行绕过!将%00用\00代替,那么这么解析呢?又是一道反序列化的题目,代码很简单,绕过写,直接读flag.php文件即可,因为你写的内容永远是空的!强比较直接数字绕过即可!所以主要工作还是在下面这个waf的绕过。

2025-10-03 23:08:37 294

原创 HCTF2018

这个是可以绕过的,但是我们要包含ffffllllaaaagggg这个,那这个hint.php?不用注册,可以直接登录,那么应该是没有进数据库的,尝试admin登录不行,肯定是哪里做了校验,不然管理员自己怎么登入?有点bug这道题,源码并不在/app/main.py里面,而是在/app/hard_t0_guess_n9f5a95b5ku9fg/hard_t0_guess_also_df45v48ytj9_main.py。完整的就是/var/www/html/hint.php?)很遗憾失败了,不知道为啥!

2025-09-28 19:58:43 1650

原创 pyjali1

但是在输入 breakpoint() 后可以代开 Pdb 代码调试器,在其中就可以执行任意 python 代码,所以:__import__('os').system('sh')这个就好了!这回限制在7以内了,那么使用help(),调用os文档,由于不能全部展示内容,所以采用分页模式,more的交互模式!不管输入什么都是nop,猜测是字符限制,测出是7字符以内,那么用_进行拼接即可!也就简单的过滤了引号,i,b这四个东西,引号没了.很难做事,所以用chr拼接!法一:open('flag').read()

2025-09-28 00:16:12 558

原创 BJDCTF2020

e参数表示将替换部分作为php代码执行,利用${}可变变量语法,会先执行括号内的,所以payload就是:?一开始的想法是绕过if,但是你会发现绕过不了,那么就是变量覆盖了,那么覆盖哪个呢?这是真没想到在登入框注入不了,在cookie可以成功,猜测应该是只对username做了过滤,但实际的渲染还是以cookie为主!看关键部分就好了,主要是个md5的比较,byae0这个就可以!一道ssti,当前文件一直读不出来,猜测是没有权限,但是flag在根目录。.git泄露拿到源码,但是我并没有拿到!

2025-09-27 22:57:45 505

原创 [BJDCTF2020]EzPHP

这里用creat_function注入,但是arg部分引号被过滤了,用get_defined_vars ()返回一个关联数组,其中包含当前作用域内所有已定义的变量及其值!I hid the real flag in rea1fl4g.php 23333" }那么flag应该在这个文件里面了,肯定就是文件包含配伪协议打组合拳了!用require吧,但是没有引号怎么办,取反呗,正好说不定也被过滤的东西给绕过了!不错,代码长了不要唬,一步一步来就行了!挺长的,但是莫急,一层层来!第四层data://伪协议。

2025-09-27 15:45:10 428

原创 月饼杯II

那么思路就是在/tmp这个目录下写入一句话木马,再启动这个内置web服务器,当然事先得先访问check,但是这里就有个点了,那么就是在check之后再启动内置web服务器,但是check之后会关闭主web服务器。这题和月饼杯1的第二题有点像,那个是md2,这个是md5,思想都是一样的利用php弱比较的特性,突然想起QNKCDZO这个md5之后是0e开头的,但是这里不行!启动:cmd=system("sleep 10 && php -S 0.0.0.0:80 -t /tmp/");thinkphp不会拖着!

2025-09-25 22:00:04 557

原创 nssctf篇

但是是php弱比较,是先会去转换类型再去比较的!字符串和数字进行比较会先将字符串转化成数字,还有bool值与其他类型比较!payload:http://node4.anna.nssctf.cn:28697/index.php/utils.php/你?127.0.0.1/foo/1.php中用$_SERVER['PHP_SELF']就会得到/foo/1.php。a=rufeii就会得到/foo/1.php?127.0.0.1/index.php/a.php 其实访问的还是index.php页面。

2025-09-25 19:29:32 460

原创 月饼杯(web全解)

故人心还是有点烦人,rce的话就是环境变量加切片操作就好了!${PATH}

2025-09-23 14:05:43 344

原创 nodejs

所谓nodejs就是JavaScript在后端运行的环境!

2025-09-22 01:17:21 927

原创 php的简单待审02

那就爆破吧,这里的爆破有个点就是,不管你登录是否成功都是重定向,所以成功与否的区别不在于长度,而是location里面的东西(之前bugku有个类似的),这里的密码和账号都是admin!有个点就是我只想打印我想要的部分,利用666666作为一个mark!另外就是他这还有个点就是重定向,也就是说我可以直接访问某个页面然后抓它的包,就可以看到它的页面内容!对应的代码是dpt.php,我们来看看,实则没什么用,主要还是得看处理的代码。用的是insert插入数据,没过滤大概率存在insert注入。

2025-09-17 00:19:02 362

原创 jwt入门学习

没有第三部分签证,直接伪造,base64解码改数据再base64编码即可,一开始用的jwt.io不行,后面大师傅说是不标准的jwt格式,就是没有那个点,这泥煤的谁想的到啊!jwt的base64加密不是普通的base64加密而是base64url,因此+用-替代,/用_替代即可。JWT(json web token),令牌以紧凑的形式由三部分组成,这些部分由点(.)分隔。公钥泄露,算法改成对称加密,但是python好像生成的是错的!法一:爆破或者猜测密钥为123456即可,利用在线网站伪造。

2025-09-16 11:35:55 482

原创 第五届长城杯(京津冀蒙版)WEB

显然上传的文件在/tmp目录下没法直接利用了。那么如何利用exec呢?文件名是我们唯一可控制的,exec('cd /tmp && tar -xvf ' . $filename.'&&pwd');难崩,利用CVE-2024-2961将文件读取提升为RCE真nb,我还不会!尝试目录穿越,但是不知道当前目录,只好逐个去试。然后为了避免命名重复,删一下啊!上传文件之后直接给源码了,你说这扯不扯?根据提示拿到hint。然后依次上传,即可!

2025-09-15 22:12:33 214

原创 ctfshow2023愚人杯

python flask_session.py encode -s "S3cr3tK3y" -t "{'loggedin':True, 'role':'admin','username':'123'}" 如果是在cmd运行脚本记得字符串得用""包裹。(但是文件包含是执行代码,怎么可能是图片呢),应该可以任意文件读取,但是依据它的格式应该要base64编码,我试了一下index.php,然后解码得到flag,才发现它是file_gets_content。显然/hello/这个路由存在命令执行!

2025-09-15 10:08:12 300

原创 [CISCN2019 华北赛区 Day1 Web2]ikun

意图应该比较明显就是买到lv6!所以这就是第一个点,使用脚本进行寻找,那你就得知道怎么去判断lv6的存在,可以先看lv4。看一下cookie有个jwt令牌,伪造一下!使用工具爆一下密钥 ./jwtcrack Token。一看就是pickle反序列化,用__ruduce__来触发就好了!但是python2环境。价格应该做了鉴权,但是折扣没有,改折扣!访问/b1g_m4mber。替换之后有一个www.zip的源码泄露!显然太贵了,抓购买的包!

2025-09-14 22:42:05 354

原创 单身杯2 web

config是flask框架里面的一个内置类用来保存配置信息,它本身是一个字典的子类,所以可以像字典一样操作它,我们可以利用update()方法+关键字更新字典!这里的思想就是将要打的payload储存通过短的索引储存到config里面,然后再通过config访问这个索引达到减少长度限制的效果!一道ssti长度限制的题目,个人觉得这道题目比较有意思!一道链子题比较简单懒得做了!

2025-09-11 19:25:11 262

原创 单身杯1(web)

boy_name={{'&girl_name='}}这样是可以的。一道文件包含,就是多了一下字符串反转函数用data://协议即可!一道简单的rce,cmd得是三个字的命令,这里用到awk。基本公式:awk ‘条件 {动作}’ 文件名。用户通过输入控制了网页的内容,盲猜ssti!看不懂感觉没啥用,我们自己fuzz一下吧。在网页源码发现/source路由。

2025-09-09 09:36:34 253

原创 _元旦水友赛

if (!}else{echo "绕一下吧孩子";if (!现在就是要看这几个参数怎么传了!name要出现一次base,但是还得有ctfw。这里能想到的就是php://filter伪协议了!$tem要为system,cmd为env就好了!因为这里system似乎也写不了其他的命令!还有个就是垃圾字符的绕过!(原理就是将ctfshowshowshowwww转化成非base64编码字符,然后再进行一次base64解码)

2025-09-06 21:51:40 551

原创 多次base64编码过滤垃圾字符

我们可以先对ctfshowshowshowwww进行一次base64解码,发现属于base64编码的字符只有r0,我们希望r0+两个base64编码字符,然后进行一次base64解码可以解出非base64编码字符!也就是说我们可以将可控的字符转化成utf-16le那么前面的垃圾字符ctfshowshowshowwww就会在utf-16le到utf-8的时候变成乱码,这个时候再来一次base64解码,就会彻底甩掉垃圾字符,原理还是将垃圾字符转化成非base64编码字符!这里我们使用AV是可以的!

2025-09-06 20:43:51 466

原创 无字母数字命令执行

说白了数字还是好构造的,bash的算数拓展!

2025-09-05 21:23:28 624

原创 极限RCE之三字节RCE

然后呢我们要利用的还有一点就是*d*这个就是会匹配到当前文件下带d的字符,即 hd index.php从而读取index.php,所以只需将flag.php的内容覆盖到index.php。单独使用*表示将当前目录第一个文件名当作命令执行,其余文件名当作这个命令的参数!限定字符长度,先简单的ls,发现有文件(flag.php index.php)file1 file2 dir1 = 要打包的文件和目录。这里用到的命令就是7z(一个用于解压缩的命令)~会自动展开为你的家目录的完整路径。

2025-08-27 22:15:05 470

原创 GC回收机制

众所周知,destruct函数是在对象生命周期结束后触发的,也就是说这里正常的unserialize之后生命周期就应该结束了,但是这里赋值给了变量a导致生命周期变长了!而后还没结束就异常抛出了,导致对象的生命还没有结束,因此没有触发destruct函数!方法二:修改任意类属性数量或者属性值长度。方法三:构造数组对象,将其指向null。方法一:删除最后一个}

2025-08-19 16:04:34 214

原创 一次超简单代审引起的问题!

首先是个登录框,它将提交的数据交给checklogin.php处理去了!它这里就是:先根据用户提交的账号查询,然后根据返回结果比对密码!但是呢?又有所不同!而且这里都没有任何过滤。方法一:控制数据思想(利用union来控制查询返回的数据paylaod:-1’ union select 666# 从而控制返回的数据为666,那么密码再输入666即可登录!利用数据库与文件操作的语句:1,读某个文件load_file()函数,但是需要使用绝对路径。

2025-08-09 01:31:23 701

原创 文件包含篇

先上传个表单,然后里面有个<input type=“hidden” name=“PHP_SESSION_UPLOAD_PROGRESS” value=“unique_identifier”>关键就在于这的name,命令就写在value里面。要写什么自己定(当然直接写马是最好的),我这文件名是111.php,写的是phpinfo(),还有就是前面加aa是为了将前面的6的凑成4的倍数,因为base64解码时四个字节一组。flag.php的php无法用大小写绕过,所以用Php://input只读流。

2025-08-04 21:27:45 867

原创 极客大挑战2020(部分wp)

cmd用的是system(end(getallheads())),就是我手动把ua的位置弄到了最后,这样end就可获取到写在ua里面的命令了!是和(phpinfo)()一样的效果!本题:隐藏后缀名+如果能上传图片马是可以配合文件包含去打的(突然理解了之前别人说的,图片马要结合文件包含去利用的意思了)!这里有一点就是不能用(phpinfo)();本题:1,.index.php.swp泄露然后再kali里面用vim -r index.php.swp命令来恢复!这里用的是取反,其他用不了,至于为啥,自己想想!

2025-07-31 23:05:05 1071

原创 [极客大挑战 2019]FinalSQL--布尔盲注

那么你会发现id=0时是查询失败的,id=1是查询成功的,然后呢我们盲注语句也是返回1和0的,于是就想有没有一种运算使得1()1为1,1()0为0!那么这里我就想到了/,尽管不满足1/0为0,但是也是可以区分了!那么不能发现注入点就是id了!但是这里and被过滤了&&也不行。问了几个师傅说用or,但是空格被过滤了,||也被过滤了。不用空格是起不到效果的!那么后面发现异或^运算也是可以的。可以看到题目给了提示盲注!那么接下来就是寻找注入点了!而且这里mysql也是支持的!

2025-07-26 14:43:10 387

原创 sql注入171到190

那么这里我们正常的union注入即可,不去查username即可,如果非要的话也不是不行,to_base64()是可以的!这里where,单双引号都不能用了,也就是说后面不能是字符串了,那么我们将原来引号里面的内容用16进制表示,然后where用having(需与group by结合使用)。需要注意的是左连接上面的那个payload是打不了的,因为不管你flag是否正确都是回显22(是与左表匹配,但是按照右表的规则)。不就是不允许我们用flag嘛,排他法总会吧,把其它的给排除剩下的不就是flag了。

2025-07-23 19:53:13 997

原创 php的原生类

简单的水了一下,后续有机会在慢慢补吧!

2025-07-11 22:29:21 729

原创 web99--web114(php特性篇)

那么一开始我的想法就是让$_POST['flag']==$flag即可,但是你想一想,虽然前面可以让任何变量等于flag的值,但是这里不是变量,所以这个地方其实是没办法绕过的,所以这才是$error才是我们的突破口,这里我们让$error等于$flag即可!在linux里面,/proc/self/root是一个指向/的软链接,也就是说/proc/self/root/flag.php等价/flag.php,所以我们只要让递归解析的次数上去即可,也就是增加/proc/self/root的数量!

2025-07-11 01:00:03 1139 1

原创 [极客大挑战 2019]RCE ME

无字母rce配合参数逃逸,用蚁剑的插件绕过disable_functions,拿到shell!

2025-07-06 18:55:02 696 1

原创 ctfshow web89-web98(php特性篇)

这里的特性主要是正则的修饰符/m,没有这歌修饰符就是^和$就会老老实实的匹配开头和结尾,有了之后就会识别行的出现,即在每个换行符前或后开始匹配,说白了就是多行模式!这里用火狐的hackbar打不了原因是火狐的hackbar的机制会对你上传的东西进行一次编码也就导致如果我上传的是已经编码了的数据就会再次编码导致不行!4476的8进制是10574然后再在前面添0即可!md5的强比较这里可以用数组绕过,机制是因为md遇到数值返回null,但是这里我想用md5的碰撞,这里我积累过一对可以打的碰撞!

2025-07-01 23:13:43 521

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除