- 博客(38)
- 收藏
- 关注
原创 [De1CTF 2019]SSRF Me
如果我们想要读flag.txt,就需要进行scan和read操作,而这两个操作在Tack类中需要checkSign检查(对比md5值),那我们就可以用/geneSign知道该md5值(有·return)这里出flag的逻辑就是通过scan扫到flag.txt然后写入result.txt文件,再用read把result.txt的文件内容读出来。这里就是把我们的action(readscan)和param(flag.txt)传进去得到的结果和我们传进去的sign比较。和上文得到的md5值一致。
2025-05-26 21:16:25
386
原创 “轩辕杯“云盾砺剑 CTF挑战赛web方向题解
into outfile '/var/www/html/1.php' - 这是SQL的文件写入操作,将查询结果写入到服务器的 /var/www/html/1.php 文件中。看到这个,直接访问getflag.php,POS提交score =100000000000。在/var/db.sql这里找到flag的base64编码后的值。最后在/proc/1/environ找到flag。我们可以用\符号开头,它不会影响函数的运行。emmmm,我是用fenqing一把嗦的。空格的话这里%09和/**/都可以绕过。
2025-05-22 20:00:47
531
原创 ctfshow——web入门254~258
结果:O:11:"ctfShowUser":3:{s:8:"username";结果:O:11:"ctfShowUser":3:{s:8:"username";然后我们怎么调用他呢,看到ctfShowUser类中的 __destruct,但是如果照他的源代码,class=new info()简单分析就是传入的username和password的值回去当作login方法的参数,然后只要让他们和类中的值一样就好了。
2025-05-17 19:49:36
1144
原创 ctfshow——web入门351~356
这个写全了,但是这个禁止的是127.0形式的,也就是127.1.1.1就可以绕过。emmm这题怎么说呢,过滤的语句不完全,上题的payload照样可以用。对host长度进行了限制,即主机名小于等于5。使用解析到127.0.0.1的url绕过。(这两个是其他师傅提供的可以用的)(127开头的都行)
2025-05-12 20:24:46
819
原创 ctfshow——web入门361~368
最近练习ssti当 Web 应用程序使用模板引擎动态生成 HTML 页面或其他类型的输出时,如果用户输入未经过充分验证或转义就被直接嵌入到模板中,就可能发生 SSTI 攻击。攻击者可以利用这个弱点注入恶意模板代码,该代码将在服务器端执行。eg: {{}}在Jinja2中作为变量包裹标识符,Jinja2在渲染的时候会把{{}}包裹的内容当做变量解析替换。比如{{2*2}}会被解析成4。因此才有了现在的模板注入漏洞。往往变量我们使用{{恶意代码}}。
2025-05-05 20:58:26
636
原创 ctfhow——web入门214~218(时间盲注开始)
是一个时间延迟或资源消耗的操作,至于判断的时间要根据自己的电脑进行调试,显示出来的flag有可能会有误差。benchmark(count,expr),重复执行 count 次 expr 表达式,使得处理时间很长。如:where id =from_base64(0)payload。看了下大佬的payload,我们可以使用 benchmark,base64编码,但是我们可以直接用)来闭合。时间大概是3秒,然后开始写脚本。benchmark被禁了。
2025-04-24 20:25:20
206
原创 ctfhow——web入门195~200(堆叠注入)
row[0] 表示从数据库查询结果中提取的某一行的第一个字段值,我们可以使用 select 来设置 $row[0] 的值,再提交我们设置的 password 满足两者相等。我们已经知道了有个表叫ctfshow_user,故show tables里面一定有ctfshow_user,SHOW命令用于显示数据库中的元数据信息,例如数据库、表、列、索引等的信息。SHOW INDEX FROM table_name:显示指定表中的所有索引。SHOW TABLES:显示指定数据库中的所有表。
2025-04-23 09:20:29
665
原创 ctfshow——web入门191~194
用于获取单个字符的 Unicode 码点(code point)。这意味着它接受一个长度为 1 的字符串(即单个字符),并返回该字符对应的整数值。right()返回具有指定长度的字符串的右边部分,用法同上。eft()返回具有指定长度的字符串的左边部分。这里过滤了ascii,我们可以使用ord。逻辑和前几题一样,只不过过滤了ord。我们可以用mid或者lpad。改成ord的形式就可以了。但字母数字都放出来了。
2025-04-16 20:48:05
298
原创 VMware虚拟机Ubuntu磁盘扩容
会进入到类似这个界面(每个人的电脑不一样,我这个根目录再sda5中,sda5又在sha2下,所以我要先挂2再挂5)然后sudo apt-get install gparted——安装工具。可以看到我们有20G的未分配空间,要求要挂载到/dev/sda5上。我们把它拉满(即之前/之后可用空间都为0),然后点击下方调整大小。同样的操作对/dev/sda5再进行一次。选择要扩容的虚拟机,点击编辑虚拟机设置。操作为:点击需挂载的磁盘,然后点击。打开后点击磁盘——>点击扩展(点击上图的扩展——>确定。
2025-04-11 20:13:37
871
原创 ctfshow——web入门186~190
ffifdyop的MD5加密结果是276f722736c95d99e921722cf9ed621c,经过MySQL编码后会变成’or’6xxx, 只要第一位是非零数字即可被判定为True,后面的会在MySQL将其转换成整型比较时丢掉 使SQL恒成立,相当于万能密码,可以绕过md5()函数的加密。在这个查询中,因为username是个字符串,我们只要令$username=0, 因为弱比较,username就会转化为0,成立。密码错误的Unicode 编码为\u5bc6\u7801\u9519\u8bef。
2025-04-09 15:36:50
195
原创 ctfshow--web入门181~185
在某些数据库中是等价的)是一个用于模式匹配的操作符,它允许你使用正则表达式来搜索数据。这题过滤的比较多,我们就直接:'or%0cusername='flag。过滤了很多,我们依照前面的题:username=flag。给了我们查询拼接的语句和返回值,我们就可以写个脚本。这题把union,select,where给过滤了。注:从这题开始,后面题很多都要用到脚本力。大佬的脚本:(这写的是真的nb):在分组之后对聚合结果进行过滤。参考了下其他师傅的解法,通过。,则无法对数据进行分组,通过这样对数字进行替换。
2025-04-06 19:46:02
247
原创 ctfshow——web入门176~180
表:-1'union/**/select/**/1,2,group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema=database()%23。库:-1'union/**/select/**/1,2,database()%23。-1'order/**/by/**/3%23(最后面的'要使用url编码)因为--+中的+是空格的意思,所以是过滤了空格,那我们就用/**/代替。但%0c(换页)可以。
2025-04-01 20:37:48
677
原创 ctfhow——web入门171~175
列名:-1' union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='ctfshow_user'--+表:-1' union select 4,5,group_concat(table_name) from information_schema.tables where table_schema=database() --+
2025-03-27 20:58:29
1259
原创 ctfshow——web入门166~170
接着点击下载文件,复制url(如https://0f5f07f4-02dc-46b0-8a60-69556a9a1d8c.challenge.ctf.show/upload/1.jpg),蚁剑连接。这题是让我们上传一个zip压缩包,然后可以下载该压缩包,下载时zip文件会进行文件包含,也就是include。文件内容:auto_prepend_file=/var/log/nginx/access.log。upload,会显示403无php文件,所以我们上传一个php文件。访问/upload/9.php。
2025-03-23 20:11:19
435
原创 如何在虚拟机Ubuntu无法进入图形化界面的情况下扩容
虚拟机登录的时候遇到了问题、一直卡在这里,后面发现是磁盘空间用完了,此时无法显示图形化界面,要进行扩容。
2025-03-18 14:35:20
347
原创 ctfhow——web入门157~163
eg: cp {file1,file2,file3}.txt backup/:将当前目录下文件名为file1.txt、file2.txt和file3.txt的文件复制到backup/目录。cp /home/user/*.jpg /home/user/photos/:将/home/user/目录下所有扩展名为.jpg的文件复制 到/home/user/photos/目录。rm file[1-9].txt:删除当前目录下所有文件名格式为fileX.txt的文件,其中X可以是1到9之间的任意一个数字。
2025-03-15 15:13:24
976
原创 ctfshow——web入门151~156
auto_prepend_file在 PHP 中,当用户访问.user.ini所在目录主页文件时,auto_prepend_file所指向的文件内容,会自动进行包含,将文件内容当作php代码执行。如果服务器全局设置了较低的文件上传大小限制,恶意用户可以通过 .user.ini 文件增加 upload_max_filesize 和 post_max_size,来上传更大的文件。</script> //<script>风格,适合过滤<?然后1.php文件写入<?
2025-03-11 21:10:38
541
原创 ctfshow——web入门147~150plus
在 PHP 中,命名空间(namespace)提供了一种组织代码的方式,可以避免类、函数和常量名称的冲突。全局命名空间中的函数和类:在任何命名空间中调用全局函数和类时,需要使用绝对路径(以 \ 开头)。自定义命名空间中的函数和类:在同一命名空间中调用时,可以直接使用名称;如果条件为真(即$ctfshow不完全由小写字母、数字和下划线组成),则尝试以函数形式调用$ctfshow,传入两个参数:空字符串'' 和来自URL请求参数的$_GET['show']值。code=$哈="`{{{"^"?
2025-03-04 14:17:02
623
原创 ctfshow——web入门139~146
这里是使用了时间盲注,|管道符将 cat /f149_15_h3r3 的输出作为后面的输入 ,因为flag的格式已知,除了{}由44个字符组成,然后通过对str便利,如果if成立,sleep 3。这里我们用v3=*("%0c%06%0c%0b%05%0d"^"%7f%7f%7f%7f%60%60")("%0c%0c"^"%60%7f")*字符串形式的字母或数字(如 "a", "b123", 等),在 PHP 中,任何以字母开头的字符串在转换为整数时通常会被视为 0。),则认为条件为真,即找到了正确字符。
2025-02-28 20:48:15
809
原创 ctfshow——web入门133~138
而 :: 用于访问类的静态成员(静态属性和静态方法)和常量,静态成员属于类本身,而不是任何具体实例,因此不需要实例化类即可调用它们。将两者转换为变量与变量的值,再进行变量覆盖。很明显,我们需要使用getFlag函数,它是ctfshow这个类的一个方法。`$F`没有意义,所以可以执行sleep5,shell_exec无回显。这样substr截断的刚好是`$F`;$F又等于我们赋的值,因为。但是该题目是无回显的,所以我们可以使用dnslog外带。该题的当前目录可写,我们可以把flag写到其他文件读取。
2025-02-26 08:20:45
889
原创 ctfshow——web入门——128~132
x && y 当x为false时,直接跳过,不执行y;x||y 当x为true时,直接跳过,不执行y。成立,所以payload:?在不加转义字符的前提下,前面的点表示任意字符,而“+?ctfshow/is' 后面的i表示大小写匹配,s表示忽略换行符,单行匹配。(因为有call_user_func在我们就不用加括号,f1,f2会被直接调用)_()==gettext() 是gettext()的拓展函数,开启text扩展。
2025-02-21 14:26:57
245
原创 ctfshow——web入门——115~127
这里a是传入argv的一个参数,被当做一个数组传入进去,数组他是以空格进行分割的,比如ls /-a,(斜杠前面有个空格),ls就是argv[0],/-a就是argv[2],+会解析为空格。被get或者post传入的变量名,如果含有空格、+、[则会被转化为_,如果传入[,它被转化为_之后,后面的字符就会被保留下来不会被替换,所以 . 可以保留。所以本题需要找到一个num,满足:数字,不全是36,trim后不全是36,filter函数后==36,并且num==36。需要注意的是,代码中的$num!
2025-02-17 17:37:44
388
原创 ctfshow——web入门108~114
v2=abc (构造类)考虑查看目录函数的替代:scandir()、golb()、dirname()、basename()、realpath()、getcwd()file=php://filter/zlib.deflate|zlib.inflate/resource=flag.php。其中 scandir()、golb() 、dirname()、basename()、realpath() 需要给定参数。(详细链接)是 PHP 中的一个类,用于遍历文件系统目录中的文件和子目录,但是需要给他一个路径。
2025-02-12 20:40:31
836
原创 ctfshow-web入门-102~107
增加了对php的过滤,但是我们上题的实际payload为 <?就是将所需要的payload用方法转化为能被is_numeric认可的字符(e科学计数法)即先将payload用base64编码,再转化为16进制,最后加上两个数字(v2)post提交v1,get提交v2,然后让v1,v2经过sha1加密后若比较相等。首先,v2要是数字来保证v4是1,触发if条件。调用v1,并传入s,将返回值赋给str。当然,是弱比较,也可以用0e绕过。可以类似于,将$a的地址指向$b。的元素,并且该元素的值是否等于。
2025-02-09 15:49:55
147
原创 ctfshow——web入门——97~101
然后再rot13编码?u=php://filter/read=convert.base64-encode/resource=flag.php (同理)
2025-02-09 11:13:31
788
原创 ctfshow——web入门——php特性——89~95
PS:如果将num变为bool中的true,intval后也是1,但是好像没办法搞出来,如果直接num=true,是一个字符串,intval后是0。1.preg_match函数传入的参数只能是字符串,如果传入数组这种会报错,返回FALSE,可以实现绕过。num=4476.1(因为默认是0代表自动识别进制,默认是10进制)[直接舍去小数点后面的数]有strpos函数,如果没有找到0,返回false ,如果找到,返回0的第一个位置。2.intval中输入数组,返回的值只看数组是否为空,为空返回0,否则返回1。
2025-02-09 11:00:38
148
原创 关于联合体的简单实例——实现根据数据类型输出相应的数据
我将其定义为float,数据为1919.810,但是,由于浮点数表示法的二进制特性以及有限的位数(23 位尾数加上隐含的一位),某些十进制小数无法被精确地表示。这导致了存储的值实际上是这个数的最接近的可表示浮点数近似值,所以这里实际输出为1919.810059.类型可以提供大约 15-16 位有效数字的精度,但实际输出可能会因为默认的。代码不难理解,但笔者在测试时发现了一些相关知识点被我遗忘了,特此记录。我是将其定义为了double,数据为1.145141919810.格式而截断或四舍五入,默认情况下,
2024-12-26 21:16:05
126
原创 ctfshow web_入门31,32
var/log/nginx/access.log是nginx默认的access日志路径。从带有 GET 方法的表单发送的信息,对任何人都是可见的(会显示在浏览器的地址栏)$_GET 变量是一个数组,内容是由 HTTP GET 方法发送的变量名称和值。get提交一个1,在1里面写命令,命令就可以用多种写法。当然,也可以用bp抓包,写入一句话木马,然后用蚁剑连接。没有过滤passthru,但是过滤空格。>可以用%3E替代,“;base64解密即得,or。当然也可以用post提交。——使用php伪协议。
2024-12-21 15:36:17
497
原创 web入门30
对返回的结果数组进行反转,这意味着它将从目录的最底层开始(通常是隐藏文件)向前遍历。对flag,php,system过滤,过滤的东西不多,所以有较多的解法。函数,这会跳到并返回下一个元素,即目录结构中的下一层的第一个文件。通配符绕过还有许多,如?, \ , 编码,拼接, ' , " 等。函数获取当前目录"."下的所有文件和目录名,tac也可以用sort,tail替换。esec函数要借echo来输出。直接用反应号执行命令并返回。: 然后对反转后的数组使用。(有其他绕过方法欢迎补充)本质上与第2方法一样。
2024-12-15 22:35:41
143
原创 ctfshow_web5,6
1'/**/union/**/select/**/1,/**/group_concat(table_name),/**/3/**/from/**/information_schema.tables/**/where/**/table_schema=database()#(确定表名为flag,user)1'/**/union/**/select/**/1,/**/2,/**/3# (回显位是2)'/**/or/**/1/**/group/**/by/**/3#(确定列数为3)可用0e绕过:构造0=0。
2024-12-12 19:33:00
549
原创 ctfshow_web3,4
在UA处加入一句话木马<?2.查看响应头, 服务器为 nginx。Nginx 默认会将访问日志记录到。3.接着,用brupsuite抓包。1.发现data,php被禁止。解题:根据php伪协议。连接后,即可查看文件。
2024-12-07 11:05:28
203
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人