命令行盲注学习
矢车菊 WEB安全 140浏览 · 2025-02-23 14:26

命令行盲注学习

前言

盲注一般是用于无回显的情况,说到盲注,很多人都会想到的是SQL的盲注,而其中最常用的就是时间盲注,原理也很简单,就是通过响应时间来判断执行的结果。在 ctf 中,经常就会遇到无回显的情况,一般的思路就是打内存马或者弹shell,但是遇到不出网且对内存马所需函数进行限制的时候,时间盲注就是个不错的选择,其实时间盲注对于无回显的情况,基本上都能打,但是缺点就是比较耗费时间

常用命令解析

sleep

基本语法

sleep NUMBER[SUFFIX]...

NUMBER 是暂停的时间长度,SUFFIX 是可选的时间单位,默认为秒(s),也可以为分钟(m),小时(h),天(d),可以写个sh脚本看一下

Plain Text
复制代码


awk

基本语法

awk 'pattern { action }' input_file

pattern:匹配模式(可选),用于筛选行。

action:对匹配的行执行的操作(可选)。

input_file:输入文件(可选,如果不指定则从标准输入读取)。

一些常用的awk命令

用的最多的还是

awk "NR==x" filename

NRawk 的内置变量,表示当前处理的行号(Number of Record),这条命令也就是打印出 x 行的内容

cut

基本语法

cut OPTION... [FILE]...

OPTION:指定提取方式(如按字段、字符或字节)。

FILE:输入文件(如果不指定,则从标准输入读取)。

常用选项

选项
说明
-d
指定字段分隔符(默认是制表符)。
-f
指定要提取的字段(列),可以是单个字段或多个字段(用逗号分隔)。
-c
按字符位置提取内容。
-b
按字节位置提取内容(通常与 -c 类似,但在多字节字符集中可能不同)。
--complement
反向选择,提取未指定的部分。

cut -c 1 会提取出每一行的第一个字符,常搭配着 awk 命令使用

总结

经过以上的一些分析,那么脚本的思路就会清晰了,我们可以用 awk 命令配合 cut 命令来获得我们想要的指定行列的字符串,再将其与测试字符集比对,如果正确就 sleep ,错误就测试下一个字符集中的字符,大概的payload

if [ `ls / -1 | awk "NR==1" | cut -c 1` == "b" ];then sleep 5;fi

ls / -1 代表结果自动换行,fi 就是 if 语句的结尾,以上 payload 的意思就是如果 ls / 第一个字符为b则延迟5秒,接下来写脚本自动跑就好了,拿两个例题试一下

例题

[ctfshow]web139

源码

可以看到最后是 exec ,没有回显,而且一般外带和弹 shell 都被限制了,刚好cut,sleep等常用的时间盲注却没有过滤,直接打时间盲注,这里就不考虑文件名有其他不常见字符的因素了,如果跑不出来改下字符集就好,因为过滤了大括号,字符集中就不加了,如果匹配不到,就用 ~来占位,poc



[AliyunCTF2025]ezoj

/source 拿到源码

addaudithook 好绕,随便搜个poc就能绕过:https://xz.aliyun.com/news/15665?time__1311=n4%2Bx07vxRD9DnD0x0vObDyl7di%3D%3DGO8RDRgbD&u_atoken=a02449fe2008fe936beca38ee20fd421&u_asig=1a0c381017402256357466980e0035

允许用 time.sleep 函数,可以打盲注,有个限制是不能超过5s,打的时候注意一下就好了

原本想的是用python代码来盲注,结果一直找不到能用的模块和函数,后面索性直接用命令行来盲注了,直接命令行盲注即可,这里换个方法,用sed来匹配行,就不用awk了

poc

image-20250223173818896.png


0 条评论
某人
表情
可输入 255