基于HTTP通信的安全性测试方法 ................................................................................................ 1
1、Web网页安全测试的一些方法 ........................................................................................ 2
2、常见SQL、Xss注入字符 ................................................................................................. 13
3、webscarab检测工具 ........................................................................................................ 13
4、自动化SQL、Xss检测 ..................................................................................................... 13
1、Web网页安全测试的一些方法
下文取自2011年我在《51测试天地》杂志中发表的一篇有关安全性测试的专题文章,该文详细地介绍了比较常规的一些网页安全的测试方法和实例。
2、常见SQL、Xss注入字符
见下文附件中所示 sq_xss.txt
3、webscarab检测工具
WebScarab使用说明.xls
4、自动化SQL、Xss检测
a)、利用loadrunner实现检测
由于sq_xss.txt中的字符存在转义字符,而这些转义字符是不能够直接放入loadrunner的data池文件中的,会报以下错误。另,由于loadrunner从db读取文件的方式仍然是读取后存在到file文件的方式,故仍然会报下面的错误。
Loadrunner读取DB:
1. 将libmysql.dll放入loadrunner的文件目录中
2.Add Files toScript
3.如下面的代码一样构造脚本
SQLXSSMain() {
int rc;
int db_connection; int query_result; char** result_row;
char *server=\"127.0.0.1\"; char *user=\"root\";
char *password=\"wenshanhao\"; char *database=\"test\";
int port=3308;
int unix_socket=NULL; int flags=0;
rc=lr_load_dll(\"libmysql.dll\"); if(rc!=0) { lr_error_message(\"引入libmysql.dll失败\"); lr_abort(); }
db_connection=mysql_init(NULL); if(db_connection==NULL) {
lr_error_message(\"内存引用失败\"); lr_abort(); }
rc=mysql_real_connect(db_connection,server,user,password,database,port,unix_socket,flags);
if(rc==NULL) {
lr_error_message(\"连接mysql失败\"); mysql_close(db_connection); lr_abort(); }
rc=mysql_query(db_connection,\"select * from value\"); if(rc!=0) { lr_error_message(\"%s\ mysql_close(db_connection); lr_abort(); }
query_result=mysql_use_result(db_connection); if(query_result==NULL) { lr_error_message(\"%s\ mysql_free_result(query_result); mysql_close(db_connection); lr_abort(); }
while(1) { result_row=(char **)mysql_fetch_row(query_result); if(result_row==NULL) { lr_error_message(\"%s\ mysql_free_result(query_result); mysql_close(db_connection); //lr_abort(); break; } lr_save_string(result_row[0],\"paramXss\"); //lr_output_message(\"paramXss is :%s\ web_custom_request(\"userInfoManager.ashx\
\"URL=http://192.168.102.71:6061/action/userInfoManager.ashx?opKey=LoginEx&\"
\"rand=0.44543948071077466&callBack=jQuery17208856977436225861_1372647354524&\"
\"username=qwen1&userpassword={paramXss}&rm=1&_=1372647365614\ \"Method=GET\ \"Resource=0\ \"RecContentType=text/html\ \"Referer=\ \"Snapshot=t1.inf\ \"Mode=HTTP\ LAST); /* web_custom_request(\"RemoteLogin.aspx\ \"URL=http://192.168.102.71:6061/RemoteLogin.aspx?\" \"sessionID={sessionID}&remoteCode={remoteCode}\" \"&urlPath=http://192.168.102.71:6060/AccountMgr/LogOn2\ \"Method=GET\ \"Resource=0\
\"RecContentType=text/html\ \"Referer=\ \"Snapshot=t2.inf\ \"Mode=HTTP\ LAST);*/ }
mysql_free_result(query_result); mysql_close(db_connection);
return 0; }
4. 运行时设置
5.查看日志,观察服务器返回的内容是否有异常。
b)、利用python实现检测
原理同上,优势在于编程的灵活性,效率以及处理日志的灵活性。
import httplib2
import MySQLdb as mySql import MySQLdb.cursors
import urllib import os
def write(words):
fl = open(r\"mytest.txt\",\"ab\") nwords=\"测试数据:%s\\r\\n\" %(words) fl.write(nwords) fl.close() def textData():
mysql_con=mySql.connect('127.0.0.1','root','wenshanhao','test',3308,'utf8')
mysql_cur=mysql_con.cursor(mySql.cursors.DictCursor) monitorKeyBufferSql=\"select * from xss\" mysql_cur.execute(monitorKeyBufferSql) allKey=mysql_cur.fetchall()
return allKey def sqlLogin(): allKey=textData() for x in allKey: data=x['value']
url=\"http://192.168.102.43:8082/action/userInfoManager.ashx?opKey=LoginEx&rand=0.333376003196463&callBack=jQuery17201\\
7676877160556614_1370487276097&username=qwen2%s&userpassword=123456%s&rm=1%s&_=1370487288833%s\"%('','','',data) htp=httplib2.Http() r,c=htp.request(url)
if \"\"\"\"State\": true\"\"\" in c:
write(c)
文青山 2013-7-1
因篇幅问题不能全部显示,请点此查看更多更全内容