Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

osCommerce VTS


Guest

Recommended Posts

No, none of them are right, please see my previous message how to configure..

 

Thanx for quick reply! Hey this is the result from OcVTSa :

 

osCommerce VTSa v1.0.8

Directory depth set to 100

Directory root: /home/xvzhxrwy/public_html/shop

 

/home/xvzhxrwy/public_html/shop/images/.sys.php...SUSPECTED (eval/base64_decode found) on line: 4

/home/xvzhxrwy/public_html/shop/admin/includes/functions/general.php...SUSPECTED (shell execution) on line: 781

/home/xvzhxrwy/public_html/shop/admin/includes/functions/compatibility.php...SUSPECTED (shell execution) on line: 83

/home/xvzhxrwy/public_html/shop/admin/backup.php...SUSPECTED (shell execution) on line: 133

/home/xvzhxrwy/public_html/shop/includes/modules/payment/paypal_standard.php...SUSPECTED (shell execution) on line: 364

/home/xvzhxrwy/public_html/shop/includes/modules/payment/paypal_direct.php...SUSPECTED (shell execution) on line: 262

/home/xvzhxrwy/public_html/shop/includes/modules/payment/paypal_uk_direct.php...SUSPECTED (shell execution) on line: 294

/home/xvzhxrwy/public_html/shop/includes/modules/payment/paypal_uk_express.php...SUSPECTED (shell execution) on line: 267

/home/xvzhxrwy/public_html/shop/includes/modules/payment/paypal_express.php...SUSPECTED (shell execution) on line: 232

/home/xvzhxrwy/public_html/shop/includes/modules/payment/authorizenet_cc_aim.php...SUSPECTED (shell execution) on line: 354

/home/xvzhxrwy/public_html/shop/includes/functions/compatibility.php...SUSPECTED (shell execution) on line: 169

 

Files checked: 965

Files suspected: 11

Files infected: 0

Files cleaned: 0

Clean errors: 0

Clean warnings: 0

 

is eval/base64 dangerous?

Link to comment
Share on other sites

Thanx for quick reply! Hey this is the result from OcVTSa :

 

osCommerce VTSa v1.0.8

Directory depth set to 100

Directory root: /home/xvzhxrwy/public_html/shop

 

/home/xvzhxrwy/public_html/shop/images/.sys.php...SUSPECTED (eval/base64_decode found) on line: 4

is eval/base64 dangerous?

 

 

It could be, but it is also used in some code. You should compare the suspected file with a safe copy of the same file to see if this is right.

In your case there is a .sys.php file in your images directory. Normally there should NOT be any php files in your images directory.

 

BTW: You should NOT list your full path here in open forums as you did above. There could be hackers in here, and now they know where to go on your site. Also: Rename your admin dir, and please read this How to secure your site

Edited by sijo
Link to comment
Share on other sites

It could be, but it is also used in some code. You should compare the suspected file with a safe copy of the same file to see if this is right.

In your case there is a .sys.php file in your images directory. Normally there should NOT be any php files in your images directory.

 

BTW: You should NOT list your full path here in open forums as you did above. There could be hackers in here, and now they know where to go on your site. Also: Rename your admin dir, and please read this How to secure your site

 

Thank you for your fast help, your oscommerce VTS has helped me clean my website. I just need to remove 2 Javascript file, 2 PHP files. The rest suspects are ok, I already compared them all.

Link to comment
Share on other sites

Do you have a link to your site I could try?

You could replace all infected files with safe ones, but:

The best way is to clean your site and then upload it from a safe backup.

Read the How to secure your site to be sure you have done what's needed to have a secure site..

Hi Sijo

 

Thanks for getting back to me.

 

I used comparison software with what I thought was a good set of files and VTS and found some strange/infected files which have now all been removed. I can not find anything else wrong.

 

I did have a backup but I am not confinced it is virus free

 

The site is www.redcardfc.com.

 

Regards

Link to comment
Share on other sites

The problem has to do with whitespace checking. Try to turn this off in whitespace.php :

// check for leading & trailing whitespace:
//$chk_ws = true;  // ON
$chk_ws = false;  // OFF

// remove leading & trailing whitespace if found (if set to true, $chk_ws also need to be true!):
//$rmv_ws = true;  // ON
$rmv_ws = false;  // OFF

 

When you run ocVTS it will list your 'Scan root:' near the top. What does it say?

 

$ftp_site, $ftp_usr and $ftp_pwd should be the same as when you FTP (upload) files to your site.

 

Just to reply back to your answer a few weeks ago. I changed the white space settings to off and all seems to be working fine now.

 

thank you Sijo

Edited by Tonysense
Link to comment
Share on other sites

Do you have a link to your site I could try?

You could replace all infected files with safe ones, but:

The best way is to clean your site and then upload it from a safe backup.

Read the How to secure your site to be sure you have done what's needed to have a secure site..

Hi Sijo

 

I wrote to Kaspersky - the warning was a 'false positive'.

 

Again, many thanks for your help.

 

Best Regards

Link to comment
Share on other sites

  • 1 month later...

Thank you for the well-designed component.

(using v1.0.8 and rc2a)

Not sure about the error messages and how to

determine what's ok.

 

Specifically:

eval(base64_decode

error_reporting(0)

eval( )

iframe

shell_exec

htaccess (User Agent <=> EmailSiphon )

passthru

 

Are there any pointers/guidelines to help

identify the good from the good-bye.

 

Thanks for any insight.

jk

Link to comment
Share on other sites

Thank you for the well-designed component.

(using v1.0.8 and rc2a)

Not sure about the error messages and how to

determine what's ok.

 

Specifically:

eval(base64_decode

error_reporting(0)

eval( )

iframe

shell_exec

htaccess (User Agent <=> EmailSiphon )

passthru

 

Are there any pointers/guidelines to help

identify the good from the good-bye.

 

Thanks for any insight.

jk

 

You have to check against the original osC (or add-ons) files if you are uncertain...

Link to comment
Share on other sites

Thanks for your swift response.

 

Could you explain why error_reporting(0

is considered a threat?

 

Also once you check a file, is there a way to mark

that particular line as safe for future scans?

 

jk

 

Q1: It's a 'nota bene ' because some unfriendly scripts could turn off error reporting for some reason..

Q2: It could be done, but I dont have the time to look into it now...

Link to comment
Share on other sites

Hi Sijo!

 

Just installed your latest version of VTS and got this... should any of these be a concern to me? I just cleaned up a bunch of suspected infected files which I compared to an original copy of my catalog store which were not there before.

 

Thanks for your help!

~Annissë

 

 

Scan Completed

 

osCommerce Virus & Threat Scan v1.0.8

 

Scan root: <path>/public_html

 

Threats Definitions: 281

 

Files Definitions: 22

 

Scanned folders: 175

 

Scanned files: 1205

 

Possible Infected files: 15

 

Possible Threat files: 0

 

Whitespace found: 0

 

Possible Infection: <path>/public_html/flashmo_118_fashion_gallery_v8.html (Known automated hack <=> eval( ) on line: 22

 

Possible Infection: <path>/public_html/corel.html (Known automated hack <=> eval( ) on line: 10

 

Possible Infection: <path>/public_html/AC_ActiveX.js (Known automated hack <=> eval( ) on line: 84

 

Possible Infection: <path>/public_html/buttontest/AC_RunActiveContent.js (Known automated hack <=> eval( ) on line: 303

 

Possible Infection: <path>/public_html/catalog/includes/functions/general.php (Known automated hack <=> eval( ) on line: 482

 

Possible Infection: <path>/public_html/catalog/includes/functions/compatibility.php (Known automated hack <=> eval( ) on line: 84

 

Possible Infection:<path>/public_html/catalog/includes/languages/english/cookie_usage.php (Known automated hack <=> eval( ) on line: 1

 

Possible Infection: <path>/public_html/catalog/admin/easypopulate.php (Known automated hack <=> eval( ) on line: 1439

 

Possible Infection: <path>/public_html/catalog/admin/modules.php (Known automated hack <=> eval( ) on line: 213

 

Possible Infection: <path>/public_html/catalog/admin/AV/grep.php (Known automated hack <=> error_reporting(0) ) on line: 56

 

Possible Infection: <path>/public_html/catalog/admin/AV/index.php (Known automated hack <=> error_reporting(0) ) on line: 34

 

Possible Infection: <path>/public_html/catalog/admin/includes/functions/general.php (Known automated hack <=> eval( ) on line: 405

 

Possible Infection: <path>/public_html/catalog/admin/includes/modules/newsletters/product_notification.php (Known automated hack <=> eval( ) on line: 61

 

Possible Infection: <path>/public_html/catalog/admin/includes/javascript/calendarcode.js (Known automated hack <=> eval( ) on line: 57

 

Possible Infection: <path>/public_html/catalog/admin/configuration.php (Known automated hack <=> eval( ) on line: 125

 

==>> You should rename your admin folder ! How to rename admin

 

 

Edited by Mark Evans
Link to comment
Share on other sites

Hi Sijo!

 

Just installed your latest version of VTS and got this... should any of these be a concern to me? I just cleaned up a bunch of suspected infected files which I compared to an original copy of my catalog store which were not there before.

 

First: You should not list your serverpath in public like you did here.

 

Since I dont now the addons you are using, you have to compare reported files with your original one to see if there is any diffs or maybe files that should not be there.

 

Files reported in ocVTS' folder AV are ok..

 

And you should rename your admin dir.

Link to comment
Share on other sites

First: You should not list your serverpath in public like you did here.

 

Since I dont now the addons you are using, you have to compare reported files with your original one to see if there is any diffs or maybe files that should not be there.

 

Files reported in ocVTS' folder AV are ok..

 

And you should rename your admin dir.

 

Great. I knew that I probably should have not done this, I am trying to find a way to delete my post but can't seem to find any information.

 

Thanks for your help regarding my question.

Link to comment
Share on other sites

Hi Sijo,

 

Hope all is excellent with you.

 

The mod works great (Thanks very much!) on hosted sites. However using a local machine with xxamp, php 5.3, VTS 1.0.8,

and windows xp,

getting this when running ocVTS:

 

Fatal error: Virus.def vulnerable to overwrite, please change permissions in C:\server\xampp\htdocs\public_html\renamed ADMIN FOLDER\AV\ocVTS.php on line 78

 

code from line 78:

// load virus defs from flat file

if (!check_defs('virus.def'))

trigger_error("Virus.def vulnerable to overwrite, please change permissions", E_USER_ERROR);

$defs = load_defs('virus.def', $CONFIG['debug']);

$filedefs = load_filedefs('files.def', $CONFIG['debug']);

----- end of code -------

 

tried setting the file to read only, no joy

tried using virus.def from hosted site with file permissions 644

but when uploaded to local site

the permissions show up as xxx with all the boxes filled in,

 

Do you have any suggestions on how to solve this and help turn a crying.gif into a smiley face?

Thanks,

jk

Edited by jfkafka
Link to comment
Share on other sites

Hi Sijo,

 

Hope all is excellent with you.

 

The mod works great (Thanks very much!) on hosted sites. However using a local machine with xxamp, php 5.3, VTS 1.0.8,

and windows xp,

getting this when running ocVTS:

 

Fatal error: Virus.def vulnerable to overwrite, please change permissions in C:\server\xampp\htdocs\public_html\renamed ADMIN FOLDER\AV\ocVTS.php on line 78

 

I have never tested it on a local machine and I dont have the possibility to do it either. I dont think I can help you with this, sorry...

You could try to comment out these two lines like this:

//if (!check_defs('virus.def'))
//trigger_error("Virus.def vulnerable to overwrite, please change permissions", E_USER_ERROR);

Link to comment
Share on other sites

I have never tested it on a local machine and I dont have the possibility to do it either. I dont think I can help you with this, sorry...

You could try to comment out these two lines like this:

//if (!check_defs('virus.def'))
//trigger_error("Virus.def vulnerable to overwrite, please change permissions", E_USER_ERROR);

 

Thanks for your swift response.

Howbout this, check the date of the 'virus.def' file and if it is different then it has been altered?

 

jk

Link to comment
Share on other sites

Howbout this, check the date of the 'virus.def' file and if it is different then it has been altered?

 

jk

 

After following your suggestion to comment:

//if (!check_defs('virus.def'))

//trigger_error("Virus.def vulnerable to overwrite, please change permissions", E_USER_ERROR);

 

I googled around and came up with a Plan B way to check the virus.def file,

in case anyone might find it useful or have any input on improving it

 

in admin/AV/ocvts.php

 

FIND

if (!check_defs('virus.def'))

trigger_error("Virus.def vulnerable to overwrite, please change permissions", E_USER_ERROR);

 

REPLACE WITH

//if (!check_defs('virus.def'))

//trigger_error("Virus.def vulnerable to overwrite, please change permissions", E_USER_ERROR);

 

// added new function to check the 'virus.def' File's Date Last Modified

filemtime_r('virus.def');

 

then add the new 'filemtime_r' function

 

FIND

# Updated to v.1.0.2 by sijo 220310

# Updated to v.1.0.3 by sijo 310310

# Updated to v.1.0.4 by sijo 230410

# Updated to v.1.0.5 by sijo 040510

# Updated to v.1.0.6 by sijo 190510

# Updated to v.1.0.7 by sijo 140910

# Updated to v.1.0.8 by sijo 260910

 

*/

 

ADD BELOW THAT

 

// 12-5-10 modified combination of code courtesy of:

// 1. avi at live dot com 02-Feb-2009 11:22 (http://php.net/manual/en/function.filemtime.php)

// 2. http://www.w3schools.com/PHP/func_filesystem_filemtime.asp

// 3. http://w3schools.com/PHP/func_filesystem_clearstatcache.asp

 

// Only take into account those files whose extensions you want to show.

// (In this case the only allowed extension is def)

 

$allowedExtensions = array(

// 'zip',

// 'rar',

// 'pdf',

// 'txt',

'def'

);

 

function filemtime_r($path) {

global $allowedExtensions;

// testing echo ' in av/ocvts.php function filemtime_r and path = ' . $path;

 

if (!file_exists($path)) {

// testing echo ' in av/ocvts.php function filemtime_r and file doesn"t exist = ' . $path . '<br />';

exit('File: - ' . $path . ' - NOT FOUND in admin/AV Folder (need to add it)');

return 0;

}

$extension = end(explode(".", $path));

// testing echo ' in av/ocvts.php function filemtime_r and extension = ' . $extension . '<br />';

 

 

if (is_file($path) && in_array($extension, $allowedExtensions)) {

 

// testing echo ' in av/ocvts.php function filemtime_r and is file(path) and in array(extension, allowedExtensions) ' . $extension . '<br />';

 

$last_authorized_modified = 1291651410;

$last_file_modified = filemtime($path);

 

if ($last_file_modified != $last_authorized_modified) {

echo '<h1> File Authenticity Error! </h1>';

echo '<br />';

// testing echo "Last Authorized modified: ". date("F d Y H:i:s.",filemtime($last_authorized_modified));

// testing echo '<br />';

// testing echo "Last modified: ". date("F d Y H:i:s.",filemtime($path));

// testing echo '<br />';

echo 'Exiting until File - virus.def - Authenticity has been Verified (' . $last_file_modified . ')<br />'

. 'If this IS an Authorized new file,' . '<br />'

. ' (in admin/AV/ocVTS.php)'. '<br />'

. 'change this line TO - $last_authorized_modified = ' . $last_file_modified

. '<br />' . 'Otherwise REPLACE current - virus.def - with the <b>LAST Authorized</b> - virus.def - File.' .

'<br />' . 'This error indicates possible Site Security breach.';

 

exit();

 

} else { // AUTHENTICITY VERIFIED - ($last_file_modified = $last_authorized_modified)

// OK TO CONTINUE WITH SCAN

 

// testing echo filemtime($path);

// testing echo '<br />';

// testing echo 'File Authenticity Verified:';

// testing echo '<br />';

// testing echo 'Last modified: ' . date('F d Y H:i:s.',filemtime($path));

 

} // X if ($last_file_modified != $last_authorized_modified) {

 

// Note (from w3schools.com): The result of this function are cached. Use clearstatcache() to clear the cache.

clearstatcache();

 

} // X if (is_file($path) && in_array($extension, $allowedExtensions)) {

 

} // X function filemtime_r($path) {

// X 12-5-10 modified combination of code courtesy of: ...

 

---------- end of code -----------

 

I left the name of the function - filemtime_r($path), so anyone can check it from the first reference

1. avi at live dot com 02-Feb-2009 11:22 (http://php.net/manual/en/function.filemtime.php)

(of course I modified it for this purpose)

 

Sijo, hope you don't mind my posting this - just wanted to share (as per your inspiring example!)

 

jk

Link to comment
Share on other sites

sorry, couldn't edit and add these things I thought of right after I hit the submit

 

so here it is with some extra info

 

Howbout this, check the date of the 'virus.def' file and if it is different then it has been altered?

 

jk

 

After following your suggestion to comment:

//if (!check_defs('virus.def'))

//trigger_error("Virus.def vulnerable to overwrite, please change permissions", E_USER_ERROR);

 

I googled around and came up with a Plan B way to check the virus.def file,

in case anyone might find it useful or have any input on improving it

 

This works on my localhost machine using xxamp, php5.3 and VTS1_0_8

I haven't tried it on the hosted site yet

 

oh yeah USE AT YOUR OWN RISK

 

in admin/AV/ocvts.php

 

FIRST - BACKUP ocvts.php - FIRST!

I just rename the file ocvts12510.php (add the date so I know when it was changed)

and save it

 

FIND

if (!check_defs('virus.def'))

trigger_error("Virus.def vulnerable to overwrite, please change permissions", E_USER_ERROR);

 

REPLACE WITH

//if (!check_defs('virus.def'))

//trigger_error("Virus.def vulnerable to overwrite, please change permissions", E_USER_ERROR);

 

// added new function to check the 'virus.def' File's Date Last Modified

filemtime_r('virus.def');

 

then add the new 'filemtime_r' function

 

FIND

# Updated to v.1.0.2 by sijo 220310

# Updated to v.1.0.3 by sijo 310310

# Updated to v.1.0.4 by sijo 230410

# Updated to v.1.0.5 by sijo 040510

# Updated to v.1.0.6 by sijo 190510

# Updated to v.1.0.7 by sijo 140910

# Updated to v.1.0.8 by sijo 260910

 

*/

 

ADD BELOW THAT

 

// 12-5-10 modified combination of code courtesy of:

// 1. avi at live dot com 02-Feb-2009 11:22 (http://php.net/manual/en/function.filemtime.php)

// 2. http://www.w3schools.com/PHP/func_filesystem_filemtime.asp

// 3. http://w3schools.com/PHP/func_filesystem_clearstatcache.asp

 

// Only take into account those files whose extensions you want to show.

// (In this case the only allowed extension is def)

 

$allowedExtensions = array(

// 'zip',

// 'rar',

// 'pdf',

// 'txt',

'def'

);

 

function filemtime_r($path) {

global $allowedExtensions;

// testing echo ' in av/ocvts.php function filemtime_r and path = ' . $path;

 

if (!file_exists($path)) {

// testing echo ' in av/ocvts.php function filemtime_r and file doesn"t exist = ' . $path . '<br />';

exit('File: - ' . $path . ' - NOT FOUND in admin/AV Folder (need to add it)');

return 0;

}

$extension = end(explode(".", $path));

// testing echo ' in av/ocvts.php function filemtime_r and extension = ' . $extension . '<br />';

 

 

if (is_file($path) && in_array($extension, $allowedExtensions)) {

 

// testing echo ' in av/ocvts.php function filemtime_r and is file(path) and in array(extension, allowedExtensions) ' . $extension . '<br />';

 

$last_authorized_modified = 1291651410;

$last_file_modified = filemtime($path);

 

if ($last_file_modified != $last_authorized_modified) {

echo '<h1> File Authenticity Error! </h1>';

echo '<br />';

// testing echo "Last Authorized modified: ". date("F d Y H:i:s.",filemtime($last_authorized_modified));

// testing echo '<br />';

// testing echo "Last modified: ". date("F d Y H:i:s.",filemtime($path));

// testing echo '<br />';

echo 'Exiting until File - virus.def - Authenticity has been Verified (' . $last_file_modified . ')<br />'

. 'If this IS an Authorized new file,' . '<br />'

. ' (in admin/AV/ocVTS.php)'. '<br />'

. 'change this line TO - $last_authorized_modified = ' . $last_file_modified

. '<br />' . 'Otherwise REPLACE current - virus.def - with the <b>LAST Authorized</b> - virus.def - File.' .

'<br />' . 'This error indicates possible Site Security breach.';

 

exit();

 

} else { // AUTHENTICITY VERIFIED - ($last_file_modified = $last_authorized_modified)

// OK TO CONTINUE WITH SCAN

 

// testing echo filemtime($path);

// testing echo '<br />';

// testing echo 'File Authenticity Verified:';

// testing echo '<br />';

// testing echo 'Last modified: ' . date('F d Y H:i:s.',filemtime($path));

 

} // X if ($last_file_modified != $last_authorized_modified) {

 

// Note (from w3schools.com): The result of this function are cached. Use clearstatcache() to clear the cache.

clearstatcache();

 

} // X if (is_file($path) && in_array($extension, $allowedExtensions)) {

 

} // X function filemtime_r($path) {

// X 12-5-10 modified combination of code courtesy of: ...

 

---------- end of code -----------

 

NOW TO TEST IT:

1. go to admin/tools and click VTS Virus & Threat Scanner

2. Click ocVTS Scan your site using 'virus.def' and 'files.def' files

3. You should get an error Page with the message:

 

File Authenticity Error!

Exiting until File - virus.def - Authenticity has been Verified (1291651410)

If this IS an Authorized new file,

(in admin/AV/ocVTS.php)

change this line TO - $last_authorized_modified = 1291651410

Otherwise REPLACE current - virus.def - with the LAST Authorized - virus.def - File.

This error indicates possible Site Security breach.

 

4. Don't Panic- this is to show it's working

5. The message tells you what to do

6. for instance

 

If this IS an Authorized new file,

(in admin/AV/ocVTS.php)

change this line TO - $last_authorized_modified = 1291651410

NOTE: this number may be different for your version of virus.def,

I'm using the virus.def from VTS 1_0_8

 

Whatever that number is

change the line

in admin/AV/ocVTS.php to match it

just copy and paste that number from

$last_authorized_modified = WHATEVER NUMBER

over the existing number in the line

$last_authorized_modified = 1291651410

 

now run the scan again and it should pass the test

(now it matches the result of the filemtime($path) php function for the virus.def File

hope this all makes sense and doesn't cause drowsiness

 

and whenever this virus.def File is updated/replaced

go thru these steps again

 

I left the name of the function - filemtime_r($path), so anyone can check it from the first reference

1. avi at live dot com 02-Feb-2009 11:22 (http://php.net/manual/en/function.filemtime.php)

(of course I modified it for this purpose)

 

Sijo, hope you don't mind my posting this - just wanted to share (as per your inspiring example!)

 

jk

Link to comment
Share on other sites

  • 4 weeks later...

I am sorry to tell that osCommerce VTS will no longer be suported. I have closed my netshop and will be doing other things in the future.

 

I wish you all a Happy New Year!

Link to comment
Share on other sites

I have added this thread to my watch list and will try to support this contribution as well as Stein has done.

 

Thanks for developing this in the first place and all your input over time.

 

Cheers

 

G

Need help installing add ons/contributions, cleaning a hacked site or a bespoke development, check my profile

 

Virus Threat Scanner

My Contributions

Basic install answers.

Click here for Contributions / Add Ons.

UK your site.

Site Move.

Basic design info.

 

For links mentioned in old answers that are no longer here follow this link Useful Threads.

 

If this post was useful, click the Like This button over there ======>>>>>.

Link to comment
Share on other sites

  • 1 month later...

Hi,

 

Installed the latest version and it works great.

 

One request from me - the results show in very small text, how can the size of the results text be increased? Maybe I just need Glasses ...

 

Thanks

Now running on a fully modded, Mobile Friendly 2.3.4 Store with the Excellent MTS installed - See my profile for the mods installed ..... So much thanks for all the help given along the way by forum members.

Link to comment
Share on other sites

Hi,

 

Please ignore my last post - found where to modify text size.

 

Thanks

Now running on a fully modded, Mobile Friendly 2.3.4 Store with the Excellent MTS installed - See my profile for the mods installed ..... So much thanks for all the help given along the way by forum members.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...