nasl常用函数

来源:互联网 发布:产品数据管理软件pdm 编辑:程序博客网 时间:2024/04/28 02:25


open_sock_tcp()、open_sock_udp()分别用于打开一个TCP或者UDP套接字。


close()关闭一个端口。


recv(socket:<socketname>, length:<length>[,timeout:<timeout>)
recv_line(socket:<socketname>, length:<length>[,timeout:<timeout>)
从套接字<socketname>读取<length>个字节,超时(timeout)参数是可选的,以秒为单位。
recv()只能用于TCP,但遇到换行(\n)操作终止;recv_line用于TCP、UDP。默认超时5秒,
如果超时返回FALSE。


send(socket:<socket>, data:<data>[,length:<length>])
从套接字<socket>发送数据<data>。可选参数length告诉函数发送<length>字节。如果没有
设置length,发送操作就在遇到NULL时终止。




FTP操作:


ftp_log_in(socket:<soc>,user:<login>,pass:<pass>)
尝试通过<soc>套接字登录到远程FTP主机。如果用户名<login>和密码<pass>都是正确,就返回TRUE,
否则返回FALSE。


ftp_get_pasv_port(socket:<soc>)
向远程FTP服务器发出一个PASV命令,获取连接的端口。如果发生错误,返回FALSE。


soc = open_sock_tcp(21);
if(ftp_log_in(socket:soc, user:"anonymous", pass:"joe@"))
{
port = ftp_get_pasv_port(socket:soc)
if(port)
{
soc2 = oepn_sock_tcp(port);
data = string("RETR /etc/passwd\r\n");
send(socket:soc, data:data);
password_file = recv(socket:soc2, length:10000);
display(password_file);
close(soc2);
}
close(soc);
}




WWW操作:


is_cgi_installed(<name>)
测试远程WEB服务器是否安装了名为<name>的CGI程序。这个函数向远程WEB服务器发出GET请求实现这个目的。
如果<name>不是以斜杠(/)开头,就以为它是相对于/cgi-bin/。
这个函数也可以用于确定某个文件是否存在。
if(is_cgi_installed("/robots.txt"))
{
display("The file /robots.txt is present \n");
}




构造IP报文:


forge_ip_packet()函数构造一个新的IP报文;
<return_value>=forge_ip_packet(ip_hl:<ip_hl>,
ip_v:<ip_v>, ip_tos:<ip_tos>, ip_len:<ip_len>, ip_id:<ip_id>, ip_off:<ip_off>,
ip_ttl:<ip_ttl>, ip_p:<ip_p>, ip_src:<ip_src>, ip_dst:<ip_dst>, [ip_sum:<ip_sum>]);


ip_p参数可以是一个整数值,或者是IPPROTO_TCP, IPPROTO_UDP, IPPROTO_ICMP, IPPROTO_IGMP,
IPPROTO_IP等等。


get_ip_element()函数获得报文某个域的值。
<element> = get_ip_element(ip:<ip_varible>,
element:"ip_hl"|"ip_v"|"ip_tos"|"ip_len"|"ip_id"|"ip_off"|"ip_ttl"|"ip_p"|"ip_sum"|
"ip_src"|"ip_dst");


set_ip_element()函数改变现有IP报文某个域的值。
这个函数可以改变IP报文<ip_varible>的值,如果你没有修改ip_sum域的值,它会自动重新计算
这个函数没有构造报文的能力,因此需要把它放在forge_ip_packet()函数之后。
set_ip_element(ip:<ip_variable>,[ip_hl:<ip_hl>,]
[ip_v:<ip_v>,] [ip_tos:<ip_tos>,] [ip_len:<ip_len>,] [ip_id:<ip_id>,]
[ip_off:<ip_off>,] [ip_ttl:<ip_ttl>,] [ip_p:<ip_p>,] [ip_src:<ip_src>,]
[ip_dst:<ip_dst>,] [ip_sum:<ip_sum>]);




构造TCP报文:


forge_tcp_packet()用来构造TCP报文。
tcppacket = forge_tcp_packet(
ip:<ip_packet>, th_sport:<source_port>,
th_dport:<destination_port>, th_flags:<tcp_flags>, th_seq:<sequence_number>,
[th_x2:<unused>], th_off<offset>, th_win:<window>, th_urp:<urgent_pointer>,
th_sum:<checksum>, [data:<data>]);
th_flags必须是TH_SYN TH_ACK TH_FIN TH_PUSH TH_RST,这些标志可以使用|操作符结合到
一块。ip_packet必须首先由forge_ip_packet()函数产生或者使用send_packet()、pcap_next
函数得到的返回值。


set_tcp_elements()能够修改TCP报文的内容。
set_tcp_elements(tcp:<tcp_packet>, [th_sport:<source_port>,]
[th_dport:<destination_port>,] [th_flags:<tcp_flags>,] [th_seq:<sequence_number>,]
[th_ack:<acknowledgement_number>,] [th_x2:<unused>,] [th_off:<offset>,] [th_win:<window>,]
[th_urp:<urgent_pointer>,] [th_sum:<checksum>,] [data:<data>]);
除非设置th_sum参数,否则函数会自动计算报文的校验和。


get_tcp_elements()用来设置TCP报文的内容。
element = get_tcp_elements(tcp:<tcp_packet>,
element:<element_name>);
element_name必须是"tcp_sport" "th_dport" "th_flags" "th_seq" "th_ack" "th_x2" "th_off"
"th_win" "th_urp" "th_sum"




构造UDP报文:


forge_udp_packet()构造UDP报文。
udp = forge_udp_packet(ip:<ip_packet>, uh_sport:<source_port>, uh_dport:<destination_port>,
uh_ulen:<length>, [uh_sum:<checksum>,] [data:<data>]);


set_udp_elements() get_udp_elements()与tcp的相似。


发送报文:


send_packet()函数发送报文。
reply = send_packet(packet1, packet2,...., packetN, pcap_active:<TRUE|FALSE>, pcap_filter:<pcap_filer>);
如果pcap_active参数为TRUE,这个函数就会等待目标的回应。
pcap_filter用来设置你需要得到的报文。


读取报文:


pcap_next()函数将从使用的最后一个接口读取一个报文,报文的类型取决于最后的设置的pcap类型。
replay = pcap_next();


工具函数:


this_host()获取运行脚本的主机IP地址,没有参数。
get_host_name()获取当前被测试主机的主机名,没有参数。
get_host_ip()获取当前被测试主机的IP地址,没有参数。
get_host_open_port()获取远程主机打开的第一个端口号,没有参数。
get_port_stat(<portnum>)获取端口的状态。
telnet_init(<sock>)在一个打开的套接字上初始化一个telnet会话,并且返回telnet数据的第一行。
tcp_ping()如果远程主机应答TCP ping请求(发送一个设置ACK标志的TCP报文),本函数就返回TRUE,没有参数。
getrpcport(program:<program_number>, protocol:<IPPROTO_TCP|IPROTO_UDP>, [version:<version>])
获取远程主机的RPC端口号。如果远程主机的<program_number>程序没有在RPC portmap监控进程中注册就返回0。


正则表达式函数:


ereg()模式匹配。
result = ereg(pattern:<pattern>, string:<string>);


egrep()函数返回一个多行文本,匹配<pattern>的第一行。
str = egrep(pattern:<pattern>, string:<string>);


crap()函数非常便于测试缓冲区溢出。获取一个"X"填充的长度为<length>的字符串。
crap(<length>)
crap(length:<length>, data:<data>)
获取一个长度为<length>的字符串,并使用<data>填充字符串。


strlen()函数功能都知道。
raw_string()函数能够把数字转换成对应的字符。
strtoint(number:<nasl_integer>, size<number_of_byte>)把一个NASL整数转换为一个二进制整数。
size参数为NASL整数的字节数:1,2,4。
tolower()把大写字符转换成小写
原创粉丝点击